Personal finance domain knowledge. Use when implementing financial calculations, budgeting logic, transaction categorization, or reporting features.
// ALWAYS use Decimal for money — NEVER Double
let amount: Decimal = 1_000_000 // ✅
let amount: Double = 1_000_000 // ❌ floating point errors
// Rounding for display
let rounded = NSDecimalNumber(decimal: amount)
.rounding(accordingToBehavior: NSDecimalNumberHandler(
roundingMode: .bankers,
scale: 0, // VND has 0 decimal places
raiseOnExactness: false,
raiseOnOverflow: false,
raiseOnUnderflow: false,
raiseOnDivideByZero: true
))
Budget Remaining = Budget Amount - Sum(Expenses in Period)
Budget Usage % = Sum(Expenses) / Budget Amount * 100
Daily Average Spending = Sum(Expenses in Month) / Days Elapsed
Projected Month Spend = Daily Average * Days in Month
Net Worth = Sum(Asset Accounts) - Sum(Liability Accounts)
Assets = Cash + Bank + Investment (positive balances)
Liabilities = Credit Card debt + Loans (negative balances)
Locale(identifier: "vi_VN") for formatting