I don't work in payments, but the roundMoney() point travels. A generic helper hides which boundary required the rounding, and once the operation is named the rule it implements has somewhere to live. Same with the Money type over a bare decimal, the scale and the rounding rule end up in the type where the compiler can check them instead of in a convention someone has to remember.