Fixed Assets, Reserve Components & Depreciation

Fixed asset lifecycle management with straight-line depreciation, reserve component tracking with replacement timelines, reserve study records, reconciliation warnings, and 30-year cash flow projections feeding the RSR.

9 min read Security & Infrastructure Published Mar 3, 2026 Updated Mar 15, 2026

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.

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:

  1. Financial Information: Acquisition date, cost, salvage value, accumulated depreciation, net book value, plus a depreciation meter bar showing percentage depreciated and months remaining.

  2. Depreciation Schedule: Useful life, monthly depreciation, annual depreciation, expected end date, last posted date.

  3. GL Accounts: Asset account, accumulated depreciation account, depreciation expense account, fund.

  4. 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:

  1. Fetches all active reserve components for the HOA
  2. Calculates total annual contribution needed from all components
  3. For each year (1 through 30), identifies components reaching end of useful life
  4. Projects beginning balance + contributions - replacement expenditures = ending balance
  5. 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
Login