Budget Variance Analysis Controls

Professional budget-vs-actual variance analysis with favorable/unfavorable classification, transaction-level drill-down, monthly trend tracking, and the canonical Statement of Revenues and Expenses.

3 min read Accounting Controls As of Feb 9, 2026

Overview

The BudgetVarianceService provides institutional-grade budget-vs-actual analysis for HOA financial governance. It computes variances from posted journal entry data, classifies them as favorable or unfavorable using standard accounting conventions, and produces the canonical Statement of Revenues and Expenses that boards use for financial oversight.

All actual amounts are derived exclusively from POSTED journal entries in the general ledger -- never from payment records or invoice data. This ensures consistency with the GL and the enforcement audit trail.


Variance Classification

Variance signs follow professional accounting convention:

Account Type Favorable Unfavorable
Revenue (OI, NI) Actual > Budget (more income) Actual < Budget (less income)
Expense (OE, NE) Actual < Budget (less spending) Actual > Budget (overspending)

The calc_variance method enforces this convention deterministically: positive variance is always favorable regardless of account type.


Variance Summary

The get_budget_variance_summary method produces a comprehensive variance report:

  • Income items: All revenue accounts with budgeted YTD, actual YTD, variance (dollar and percentage), and annual budget. Sorted by absolute variance descending.
  • Expense items: Same structure with inverted variance convention.
  • Totals: Aggregate budgeted income, actual income, income variance, budgeted expenses, actual expenses, expense variance, net budgeted, net actual, and net variance.
  • Top variances: Five largest favorable and five largest unfavorable variances for quick identification.

Transaction-Level Drill-Down

The get_line_item_transactions method provides full transparency from any budget line to its underlying transactions:

For a given account and date range, it returns: - Every posted journal entry line with date, entry number, description, source type, debit/credit amounts, and vendor name - Total debits and credits - Net amount (based on account normal balance) - Budgeted amount for the period - Computed variance

This ensures any board member or auditor can trace a variance from the summary level down to individual journal entries.


Monthly Variance Trend

The get_monthly_variance_trend method produces a 12-month view for any account:

  • Month-by-month budgeted vs. actual amounts
  • Monthly variance with favorable/unfavorable classification
  • Cumulative budgeted, actual, and variance totals
  • Enables identification of seasonal patterns and trend shifts

Variance Alerts

The get_variance_alerts method identifies accounts with significant variances:

Severity Threshold
Medium >= 10% variance (configurable)
High >= 25% variance

Alerts include the account, variance amount and percentage, favorable/unfavorable classification, and budgeted vs. actual amounts. They are sorted by absolute variance for prioritization.


Statement of Revenues and Expenses

The get_statement_of_revenues_and_expenses method generates the canonical board-facing financial report. This is the primary governance document for HOA financial oversight.

Structure

The statement separates into Operating Fund and Reserve Fund sections, each with:

Eight columns per line item: 1. Current Month Actual 2. Current Month Budget 3. Current Month Variance 4. Year-to-Date Actual 5. Year-to-Date Budget 6. Year-to-Date Variance 7. Annual Budget

Account Discovery

The report includes any account that has either: - A budget line item in the active budget, OR - Actual posted transactions in the YTD period

This prevents missing unbudgeted spending -- if money was spent against an account with no budget, it still appears in the report with a full unfavorable variance.

Fund Separation

Accounts are grouped by fund type (Operating vs. Reserve). Within Operating, a dedicated Mandatory Allocations section captures reserve contribution transfers (accounts with RESERVE_CONTRIBUTION role). These outbound transfers to the Reserve fund are budgeted and show variance.

Operating Fund Summary

Total Income
- Total Expenses
- Mandatory Allocations (Reserve Contributions)
= Net Operating Position

Reserve Fund Summary

Total Reserve Income
- Total Reserve Expenses
= Net Reserve Change

Grand Totals

The combined net position across both funds provides the overall financial picture.


Period Handling

The get_period_info method computes deterministic date boundaries: - Handles fiscal year != calendar year - Supports mid-year budget starts - YTD always starts from the budget start date or fiscal year start

How CommunityPay Enforces This
  • Variance classification follows professional accounting convention (favorable/unfavorable)
  • All actuals derived from posted journal entries via the general ledger
  • Statement of Revenues and Expenses separates Operating and Reserve funds
  • Variance alerts trigger at configurable thresholds (default: 10%, elevated: 25%)
Login