> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ntropii.com/llms.txt
> Use this file to discover all available pages before exploring further.

# assets

> ntro.subledger.types.assets.AssetRow — the per-title asset register: one facts row per income-bearing title/unit (income streams, secured facility, provenance). The facts the valuation engine models.

`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` / `periods` — **not** in the `analysis` lane (that holds the forward valuation model). Migration: [`017_valuation_model.sql`](https://github.com/ntropii-com).

```python theme={null}
from ntro.subledger.types.assets import AssetRow
```

The class is auto-registered as the `"assets"` subledger type on import.

<Note>
  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).
</Note>

## Type-specific fields

| Field            | Type                   | Purpose                                                                                                                                                                                                       |
| ---------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`           | `str`                  | The title / unit name (e.g. `"Flat 1"`).                                                                                                                                                                      |
| `asset_type`     | `str`                  | Asset class — defaults to `"residential_unit"`. Drives engine treatment (let-up, capex).                                                                                                                      |
| `income_streams` | `list[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. |
| `facility`       | `dict \| None` (JSONB) | Serialised `ntro.valuations.models.Facility` (loan / rate / term) — the title's allocated debt, when secured. `None` for unencumbered assets.                                                                 |
| `layout`         | `str \| None`          | Free-form unit layout (e.g. `"2-bed"`).                                                                                                                                                                       |
| `epc`            | `str \| None`          | EPC rating.                                                                                                                                                                                                   |
| `provenance`     | `str \| None`          | Where the fact came from (document ref, runbook step).                                                                                                                                                        |
| `model_version`  | `int`                  | Version 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](/sdk/subledgers).

## 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.

## Related

<CardGroup cols={2}>
  <Card title="Subledgers overview" icon="table" href="/sdk/subledgers">
    `Row` base + `SubledgerStatus` lifecycle, and the standard column block.
  </Card>

  <Card title="expenses" icon="receipt" href="/sdk/subledgers/types/expenses">
    Another shipped platform type — single expense receipt.
  </Card>

  <Card title="journal_proposals" icon="file-spreadsheet" href="/sdk/subledgers/types/journal-proposals">
    The journal-staging platform type.
  </Card>

  <Card title="Typing" icon="types" href="/sdk/typing">
    `Period` and the shared field types used across rows.
  </Card>
</CardGroup>
