Skip to main content
AssetRow is the per-title asset register — one row per income-bearing asset (a title / unit): its income streams, the facility secured against it, and provenance. These are reconcilable, COA-tied facts, so the row lives in the ledgers schema alongside coa / periodsnot in the analysis lane (that holds the forward valuation model). Migration: 017_valuation_model.sql.
from ntro.subledger.types.assets import AssetRow
The class is auto-registered as the "assets" subledger type on import.
You rarely build an AssetRow by hand. ntro.valuations.store.save_model bridges the domain objects (ntro.valuations.models.Asset) to these rows and versions them; load_model reads them back into the engine. Use this type directly only when reading the raw register (e.g. a custom analysis query).

Type-specific fields

FieldTypePurpose
namestrThe title / unit name (e.g. "Flat 1").
asset_typestrAsset class — defaults to "residential_unit". Drives engine treatment (let-up, capex).
income_streamslist[dict] (JSONB)Serialised ntro.valuations.models.IncomeStream[] — rent / parking / EV / ancillary, each rolling up to a COA income line. JSONB so the polymorphic per-stream shape round-trips without a column explosion.
facilitydict | None (JSONB)Serialised ntro.valuations.models.Facility (loan / rate / term) — the title’s allocated debt, when secured. None for unencumbered assets.
layoutstr | NoneFree-form unit layout (e.g. "2-bed").
epcstr | NoneEPC rating.
provenancestr | NoneWhere the fact came from (document ref, runbook step).
model_versionintVersion stamp. A re-synthesis or a new fact writes a fresh row; old versions are retained so you can diff.
The standard Row column block (id, entity_id, period, task_id, status, …) is inherited — see the Subledgers overview.

Why facts and forward model are split

AssetRow (facts) lives in ledgers.assets; the forward valuation model lives in analysis.valuations. The split keeps the law value = f(facts, assumptions, engine_version) honest: facts are reconciliation-grade and stable, the model is derived and re-runnable. The two schemas never blur — analysis is the forward lane, never an accounting ledger.

Subledgers overview

Row base + SubledgerStatus lifecycle, and the standard column block.

expenses

Another shipped platform type — single expense receipt.

journal_proposals

The journal-staging platform type.

Typing

Period and the shared field types used across rows.