Property COA Wizard
Overview
The Properties module posts to a specific set of accounts — building/land assets, WIP, tenant deposits held, and a starter set of property income/expense accounts. Rather than hand-wiring these, the Property COA Wizard creates them in one click (using sensible Canadian-residential defaults) and writes the resulting account IDs into a workspace.propertyAccountDefaults map that the auto-posting flows read from.
The wizard is a “Welcome to Properties” modal that opens automatically the first time you visit the Properties list on a client whose workspace.propertyAccountDefaults map is still empty. It is not a Settings page — the modal is the only entry point. If you Skip without seeding anything, it reappears on your next visit; once any default has been saved, it no longer auto-opens and there is currently no way to re-open it from the UI.
The seeded accounts
The wizard offers 12 accounts. Accounts already present on the client’s chart with a matching name (case-insensitive) are reused rather than duplicated. Not every account is wired into an automatic posting flow — several are seeded as ready-to-use accounts you post to manually.
| Key | Suggested name | Suggested # | Type | Auto-used by |
|---|---|---|---|---|
land | Land | 1510 | Asset (fixed) | Convert-to-operating JE (Land Dr); FixedAsset. |
buildings | Buildings | 1520 | Asset (fixed) | Convert-to-operating JE (Building Dr); FixedAsset asset account. |
accumulatedDepreciationBuildings | Accumulated Depreciation - Buildings | 1525 | Asset (contra) | FixedAsset accumulated-depreciation account. |
wipConstruction | WIP - Construction | 1400 | Asset (other current) | Convert-to-operating JE (WIP Cr). |
tenantDepositsHeld | Tenant Deposits Held | 2200 | Liability (other current) | Deposit intake / disposition. |
depreciationExpenseRealEstate | Depreciation Expense - Real Estate | 6500 | Expense (depreciation) | FixedAsset depreciation-expense account (set at convert-to-operating). |
mortgagePrincipal | Mortgage Principal | 2500 | Liability (long-term) | Seeded convenience account — not auto-referenced. |
rentalIncome | Rental Income | 4200 | Income (other income) | Seeded convenience account — not auto-referenced. |
mortgageInterestExpense | Mortgage Interest Expense | 6100 | Expense (interest) | Seeded convenience account — not auto-referenced. |
propertyTaxExpense | Property Tax Expense | 6200 | Expense (taxes & licenses) | Seeded convenience account — not auto-referenced. |
propertyInsuranceExpense | Property Insurance Expense | 6300 | Expense (insurance) | Seeded convenience account — not auto-referenced. |
repairsMaintenanceProperty | Repairs & Maintenance - Property | 6400 | Expense (repairs & maintenance) | Seeded convenience account — not auto-referenced. |
Account numbers are suggestions. If the suggested number is already taken on the client, the wizard walks up to the next free number in the same range.
Screen layout
The modal lists the seeds grouped by account type (Asset, Liability, Income, Expense). Each row is a checkbox with the account name, a badge showing either Already exists · #NNNN (an existing account of that name will be reused) or New · #NNNN (a new account will be created at the suggested number), and a one-line description.
Every row is pre-checked. Uncheck any you don’t want.
Creates any checked-but-missing accounts at their suggested numbers and writes every checked account’s ID into workspace.propertyAccountDefaults. Idempotent — a checked account whose name already exists is re-used, not duplicated.
Closes the modal without seeding. Because no defaults are saved, the modal will reappear on your next visit to the Properties list.
There is no top completion banner, no per-slot account picker, and no separate “Save defaults” step — one click creates and persists.
How the defaults are consumed
Only a subset of the map is read by automatic posting flows:
- Convert to operating — reads
buildings,land, andwipConstructionfor the capitalisation JE, and stampsaccumulatedDepreciationBuildings+depreciationExpenseRealEstateonto the new FixedAsset. Each can be overridden per conversion with an explicit account ID. - Deposit intake / disposition — reads
tenantDepositsHeld(unless the lease already has a held-in account or the caller overrides it). - Monthly depreciation — posts to the FixedAsset’s own asset / accumulated-depreciation / depreciation-expense accounts (set from the defaults at convert-to-operating time), not the defaults map directly.
The remaining seeds — rentalIncome, mortgagePrincipal, mortgageInterestExpense, propertyTaxExpense, propertyInsuranceExpense, repairsMaintenanceProperty — are not auto-referenced. In particular:
- The rent-invoice generator does not post to
rentalIncome; rent lines use the client’s default Books income account. It does, however, auto-exempt HST on rent lines for residential and mixed-use properties (commercial properties keep the standard HST). - Mortgage payments post to the accounts stored on the mortgage record, not to
mortgagePrincipal/mortgageInterestExpense.
Post to those convenience accounts yourself (e.g. on manual bills) or map your own accounts as needed.
Actions
First-time setup
- Enable Properties for the client (see the Enable Properties guide).
- Open the Properties list. The “Welcome to Properties” wizard opens automatically because no defaults exist yet.
- Uncheck any accounts you don’t want, then click Create N selected. The accounts are created (or reused by name) and written into the defaults map.
Aligning with an existing chart of accounts
If the client already tracks rental income or property expenses under accounts with the same names, those rows show Already exists and, when checked, simply link the existing account into the defaults map — no duplicate is created. Leave a row checked to reuse it; uncheck it to leave that slot unmapped.