Service-Charge Ledger
Per-property, per-year statements of building service charges, recorded by the PM from the management company's bill and rendered as a readable breakdown with year-on-year deltas. Built for the owner-transparency story (acutely so for foreign landlords in Gulf towers, but AU strata levies fit the same model).
Model
service_charge_statements— one row per (property, year), unique.service_charge_lines— the category breakdown (SECURITY | CLEANING | LIFT_MAINTENANCE | COMMON_UTILITIES | RESERVE_FUND | MANAGEMENT_FEE | INSURANCE | LANDSCAPING | PEST_CONTROL | OTHER), free-text label,amount_cents, note. RLS-bound like everything else (migrationV35).- Amounts are integer cents; the UI renders them in the agency's display currency (AUD | QAR).
Year-on-year comparison
Computed at read time (GetServiceChargeLedger), never stored:
- Comparison is by category, not label — "Security (main contract)" 2027 compares against "Security" 2026 even after the management company renames its line items. Multiple lines in one category are summed.
changePctper line + per total;nullwhen there's no prior year.unusualIncreaseflags any category up more than 15% year-on-year.
API
GET /api/v1/service-charges?propertyId={id} # ledger, newest year first
PUT /api/v1/service-charges # upsert one year (replaces wholesale)
{ propertyId, year, note, lines: [{category, label, amountCents, note}] }
DELETE /api/v1/service-charges?propertyId={id}&year=Y
Upsert semantics: re-submitting a year replaces that year's statement and all lines — corrections are a wholesale re-entry of the sheet.
UI
"Service charges" tab on the property detail page: per-year cards with the line table (amount, last year, change badge — red with a warning icon when flagged), plus a record/edit form (category select + label + amount rows).
Legal framing (Qatar)
Qatar's Civil Code arts. 884–900 regulate common property, cost apportionment by share, and owners associations — but standardisation is inconsistent across towers (no WEG/Dubai-style detailed strata regime; The Pearl already runs annual owner approval + reserve fund + audit, many towers don't). The ledger's positioning: not replacing the law — giving a remote owner control over their money at a distance.
Deferred
Per-line document attachments (contractor invoices), owner-share calculation for co-owned assets, and surfacing the ledger in the owner digest.