Skip to main content
Petanque Life

Federation Budgeting

F08.04 6 features Planned

At a glance

Federation Budgeting gives every OrgNode a structured annual budget with income and expense categories tied directly to the chart of accounts, a draft -> proposed -> approved -> closed lifecycle gated by board approval, optional inflation-adjusted copy from the previous year, automatic actualisation against posted bookkeeping entries and a variance report that compares plan against ledger reality, feeding consolidated income-statement and balance-sheet output.

How it works

A budget is a tenant- and OrgNode-scoped document containing an array of BudgetCategory rows, each typed as income or expense and bound to an account_number in the chart of accounts. The CRUD surface lives at /budgets/, and /budgets/copy clones a previous year with optional inflation adjustment so a federation board can roll forward a known structure without manual re-entry. The lifecycle moves through four states: draft (free editing), proposed (locked for board review), approved (actualisation enabled, actuals can be refreshed) and closed (fiscal year sealed).

Approval transitions are written to a governance audit log including the approver and the timestamp. Actualisation is a reconciliation routine: PATCH /budgets/{id}/actualize scans posted AccountingEntry rows for the budget period, sums credits against income categories and debits against expense categories using each category's account_number binding, and refreshes actual_amount on every BudgetCategory. The variance report at GET /budgets/{id}/variance returns a side-by-side income and expense breakdown with planned vs actual vs variance for each category, separated by sign so negative variance on expenses (overspend) and negative variance on income (undershoot) are both visible.

Budgets feed the higher-level reporting subsystem: /accounting-reports/budget-tracking aggregates approved budgets against posted entries, /accounting-reports/income-statement renders annual or quarterly P-and-L, and /accounting-reports/balance-sheet returns the balance snapshot. Bookkeeping entries that drive actuals are written through /accounting-entries/ and exportable to SIE, FEC and JSON via /accounting-export/.

Key capabilities

  • Per-OrgNode annual budget with income and expense categories bound to chart-of-accounts numbers
  • Budget copy with optional inflation adjustment via /budgets/copy
  • draft -> proposed -> approved -> closed lifecycle with approval audit log
  • Actualisation that reads posted AccountingEntry rows and refreshes actual_amount per category
  • Variance report separating income shortfall and expense overrun
  • Aggregated budget tracking, income statement and balance sheet through /accounting-reports/
  • Exports to SIE, FEC and JSON via /accounting-export/ for external auditors

In practice

In November the national federation's CFO opens last year's approved budget and runs Copy with inflation adjustment 2 percent. The new draft appears with every category amount bumped accordingly. She refines competition-travel and youth-development budgets, sets the new licence-revenue forecast, and submits for proposed status.

The board approves, locking it. Throughout the year the controller schedules /budgets/{id}/actualize nightly; the Travel category sits at 78 percent of plan in October. In December GET /budgets/{id}/variance shows licence revenue 3 percent above plan and tournament expenses 11 percent over, prompting a board discussion before the budget is closed and rolled into the consolidated income statement.

Features in this subsystem

6
ID Status Features
F08.04.01 Shipped Annual budget creation per federation ✅ PL-F0804
F08.04.02 Shipped Budget categories (competitions, administration, development, travel, etc.) ✅ PL-F0804
F08.04.03 Shipped Budget vs. actual tracking ✅ PL-F0804
F08.04.04 Shipped Budget approval workflow ✅ PL-F0804
F08.04.05 Shipped Financial report generation (annual, quarterly) ✅ PL-F0804
F08.04.06 Shipped Bookkeeping / ledger entries ✅ PL-F0804