CommunityPay manages fixed assets from acquisition through depreciation to disposal, with integrated reserve component tracking that feeds the Reserve Funding Status Report (RSR). This page describes the full system: asset creation, depreciation posting, reserve component lifecycle, reserve study records, and reconciliation safety rails.
Navigation
All asset and reserve management lives under the Assets tab in the accounting navigation. Four sub-tabs organize the views:
| Tab | Purpose |
|---|---|
| All Assets | Full asset register with filters and KPI cards |
| Reserve Components | Components grouped by funding status (replacement due, critical, behind, on track) |
| Reserve Studies | Professional reserve study history with appraiser records |
| Insurance | Insurance policy records |
Fixed Assets
Creating an Asset
Navigation: Assets tab > All Assets > New Asset
The form has five sections:
Basic Information
| Field | Required | Notes |
|---|---|---|
| Name | Yes | Descriptive name for the asset |
| Asset Number | No | Optional internal identifier (displayed as #XXXXX in lists) |
| Category | Yes | One of 12 categories: Building, Roof, HVAC, Pool, Elevator, Parking, Landscaping, Security, Furniture, Equipment, Vehicle, Other |
| Location | No | Building, unit, or area |
| Description | No | Detailed description (textarea) |
Financial Information (locked after creation to maintain audit integrity)
| Field | Required | Notes |
|---|---|---|
| Acquisition Date | Yes | Date the asset was acquired |
| Acquisition Cost | Yes | Original cost |
| Salvage Value | No | Estimated value at end of useful life (default: $0) |
| Useful Life (Years) | Yes | Default: 10. Range: 1 to 100. |
| Vendor | No | Dropdown of existing vendors |
| Invoice Number | No | Original invoice reference |
GL Accounts (locked after creation)
| Field | Required | Notes |
|---|---|---|
| Asset Account | Yes | Fixed asset account (typically 1500) |
| Accumulated Depreciation Account | Yes | Contra-asset account (typically 1550) |
| Depreciation Expense Account | Yes | Expense account (typically 6500) |
| Fund | Yes | Which fund owns this asset |
Reserve Component
A checkbox labeled "Track this asset as a reserve study component" toggles additional fields:
| Field | Notes |
|---|---|
| Replacement Cost | Current estimated replacement cost at today's prices |
| Last Replacement Date | Leave blank if original/never replaced |
| Condition Rating (1-10) | Physical condition rating (10 = Excellent) |
| Reserve GL Account | Account for reserve fund expenses on this component |
Cost threshold overrides (high and low) appear only in edit mode, not during creation.
Notes
A textarea for additional information about the asset.
Button: Create Asset (or Save Changes when editing)
Core financial values (acquisition cost, salvage value, useful life, GL accounts) cannot be changed after creation. The edit form shows these as read-only with the message: "Core financial values cannot be changed after creation to maintain audit integrity."
Asset List
Navigation: Assets tab > All Assets
KPI cards: Total Assets, Acquisition Cost, Net Book Value, Reserve Components (count), Replacement Cost
Filters (auto-submit on change): - Status: Active, Fully Depreciated, Disposed, Inactive - Category: All 12 categories - Type: All Types or Reserve Only
Table columns: Name (with asset number), Category, Acquired, Cost, Book Value, Life (years remaining), Status badge, Reserve (years to failure — bold if 0-2yr, normal if 3-5yr, muted if 5+yr, dash if not a reserve component)
Paginated at 50 assets per page.
Asset Detail
Navigation: Click any asset name from the list
Four detail cards in a 2-column grid:
-
Financial Information: Acquisition date, cost, salvage value, accumulated depreciation, net book value, plus a depreciation meter bar showing percentage depreciated and months remaining.
-
Depreciation Schedule: Useful life, monthly depreciation, annual depreciation, expected end date, last posted date.
-
GL Accounts: Asset account, accumulated depreciation account, depreciation expense account, fund.
-
Reserve Component (if enabled): Years to failure, replacement cost, annual contribution, last replaced, funding status, reserve GL account, condition rating. If not enabled, shows "This asset is not tracked as a reserve component" with a link to enable it.
Depreciation History table (below cards): Period (month/year), Posting Date, Amount, Journal Entry link.
Open Warnings section (if any): Reconciliation warnings with type, message preview, and View link.
Depreciation
CommunityPay uses straight-line depreciation:
Monthly depreciation = (Acquisition Cost - Salvage Value) / (Useful Life Years x 12)
Depreciation posts monthly as a balanced journal entry: - DR: Depreciation Expense account - CR: Accumulated Depreciation account
Each posting creates:
1. A JournalEntry via JournalEngine (flows through the enforcement dispatcher with full guard chain)
2. An AssetDepreciationEntry audit record (unique per asset per period — cannot double-post)
3. An update to the asset's accumulated_depreciation balance
When accumulated depreciation equals the depreciable basis (cost minus salvage), the asset status automatically transitions to Fully Depreciated and no further depreciation posts.
Disposal
When an asset is disposed of, the system creates a 4-line journal entry: - DR: Cash (disposal proceeds) - DR: Accumulated Depreciation (removes contra-asset) - DR/CR: Gain/Loss on Disposal (balancing entry) - CR: Fixed Asset (removes from books)
The asset status transitions to Disposed with the disposal date and amount recorded.
Reserve Components
Reserve Components Page
Navigation: Assets tab > Reserve Components
KPI cards: Total Components, Replacement Cost (total), Annual Contribution (total), Reserve Balance, Percent Funded
Summary line: "$X of $Y total replacement cost" showing the funding position.
Components are displayed in four grouped tables by funding status:
| Section | Criteria | Visual Treatment |
|---|---|---|
| Replacement Due | 0 years remaining | Red "Overdue" badge |
| Critical — 1-2 Years | 1-2 years remaining | Bold, dark text |
| Behind Schedule — 3-5 Years | 3-5 years remaining | Normal weight, grey text |
| On Track — 5+ Years | 5+ years remaining | Muted text |
Table columns: Component (name + category), Years/Status, Replacement Cost, Annual Contribution, Condition (X/10 or dash).
Button: Add Component (links to asset create form with reserve checkbox pre-checked).
Key Calculations
Years to failure: Computed from remaining useful life. After a replacement, updating last_replacement_date resets the useful life clock.
Annual reserve contribution: The amount that should be set aside annually for this component's eventual replacement, calculated from replacement cost and remaining useful life.
Funding status: Derived from years to failure — on_track (5+yr), behind (3-5yr), critical (1-2yr), replacement_due (0yr).
Lifecycle After Replacement
When a component is replaced:
1. Edit the asset to update Last Replacement Date (resets years-to-failure calculation)
2. Update Useful Life if the replacement has a different expected lifespan
3. Update Replacement Cost if current replacement pricing has changed
4. Update Condition Rating to reflect new condition
Reserve Studies
Reserve Study List
Navigation: Assets tab > Reserve Studies
KPI cards (from latest study): Latest Study (date), Percent Funded, Funding Plan, Next Due
If the latest study has an appraiser on file, an info aside shows: "[Study Type] by [Appraiser Company], [Credential]"
Study history table columns: Date, Type, % Funded, Funding Plan, Appraiser (with credential in muted text), Next Due
Adding a Study Record
Navigation: Assets tab > Reserve Studies > Add Study Record
Page title: New Reserve Study Record
The form has four sections:
Study Details
| Field | Required | Notes |
|---|---|---|
| Study Date | Yes | When the study was conducted |
| Study Type | Yes | Full Reserve Study, Update Without Site Visit, or Update With Site Visit |
| Percent Funded | Yes | Funding level reported in the study (0-200%) |
| Funding Plan | Yes | Baseline, Threshold, Full, or Statutory |
Appraiser Information
| Field | Required | Notes |
|---|---|---|
| Appraiser Company | No | e.g., Reserve Advisors |
| Credential | No | e.g., RS, PRA |
Projections
| Field | Required | Notes |
|---|---|---|
| Projected Shortfall ($) | No | Dollar shortfall identified by the study |
| Recommended Increase (%) | No | Recommended assessment increase percentage |
| Next Study Due | No | When the next study should be conducted |
Document Upload
| Field | Required | Notes |
|---|---|---|
| Reserve Study Document | No | PDF upload of the full reserve study |
Button: Save Study Record
Reconciliation Safety Rails
The ReserveReconciliationService runs non-blocking checks after reserve fund postings and creates warning records when anomalies are detected:
| Warning Type | Trigger |
|---|---|
| No Match | Reserve expense posted with no matching component |
| Past Life | Component is past its expected replacement date |
| Cost High | Expense exceeds the component's high threshold (default: 110% of estimate) |
| Cost Low | Expense below the component's low threshold (default: 50% of estimate) |
| Multi Match | Multiple components match the GL account used |
| Lifecycle | Large expense posted but component lifecycle not updated |
| Estimate Missing | Component has no replacement cost recorded |
Thresholds are configurable per component via Cost High Threshold and Cost Low Threshold fields on the asset edit form. These are multipliers (e.g., 1.30 means 130% of estimated replacement cost triggers a warning).
Open warnings appear on the asset detail page. They are non-blocking — they surface anomalies for review but do not prevent journal entries from posting.
30-Year Projection
The ReserveComponentService generates a 30-year cash flow projection from the component register:
- Fetches all active reserve components for the HOA
- Calculates total annual contribution needed from all components
- For each year (1 through 30), identifies components reaching end of useful life
- Projects beginning balance + contributions - replacement expenditures = ending balance
- Flags years where the projected balance goes negative
This projection is the data source for the 30-Year Projection section of the Reserve Funding Status Report (RSR). The RSR is a separate institutional packet — it reads component and projection data but does not modify it.
Connection to RSR
Reserve component data feeds the RSR generator at multiple points:
| RSR Section | Data Source |
|---|---|
| Component Summary | ReserveComponentService.get_component_summary() |
| Component Register | FixedAsset model (all reserve components) |
| Funding Status Breakdown | Counts by status: on_track, behind, critical, replacement_due |
| 30-Year Projection | ReserveComponentService.get_reserve_projection() |
| Funding Adequacy | Budget contributions vs. needed annual contribution |
The RSR also generates risk flags from reserve data:
| Flag | Severity | Trigger |
|---|---|---|
| RESERVE_DEPLETED | Critical | Less than 5% funded |
| NO_RESERVE_STUDY | Critical | No professional reserve study on file |
| SEVERELY_UNDERFUNDED | High | 5-25% funded |
| STUDY_OVERDUE | High | Study more than 3 years old |
| UNDERFUNDED | Medium | 25-50% funded |
| COMPONENTS_AT_RISK | Medium | Components in critical or replacement-due status |
| CONTRIBUTION_SHORTFALL | Medium | Annual contribution below recommended level |
| STUDY_DUE_SOON | Low | Study due within 6 months |
| NEGATIVE_PROJECTION | Low | Projected negative balance within 10 years |
See the Reserve Funding Status Reports guide for full RSR documentation.
How CommunityPay Enforces This
- Core financial values (cost, salvage, useful life, GL accounts) locked after creation to maintain audit integrity
- Monthly depreciation posts via JournalEngine with full enforcement dispatcher guard chain evaluation
- AssetDepreciationEntry enforces per-period uniqueness — same asset cannot be depreciated twice for the same month
- Reserve reconciliation warnings detect cost deviations, lifecycle gaps, and missing estimates without blocking postings
- 30-year cash flow projection feeds the RSR institutional packet with deterministic content hashing
- Reserve study records maintain appraiser credentials and funding levels as historical audit trail