<!-- https://staircase.co/data/property -->
# Property model

# Property model

The property class dictionary: the physical asset, the parcel it sits on, and the public record behind both.

One parcel, decomposed into the classes a valuation needs: the structure, its layout and utilities, the lot, the deed and sales history, the tax position, and the surrounding jurisdiction records.

The published classes are the subgraph the declared data groups reach. The full graph carries more, and a class no data group reaches has no way to be requested.

## How it is governed

Group membership is derived from the relationships the data groups declare rather than from a hand-maintained list, so a class enters or leaves the published set when the groups change and not when someone remembers.

Enumerations are the failure surface, and the rule is that an unmapped source value is an error rather than a default. An extraction script that meets a value it cannot map throws, naming the class and property; it does not assign a plausible substitute. That is the single rule that keeps a wrong value out of the dataset at jurisdiction scale.

## How it works

The decomposition is partitioned so a source can update part of a record without rewriting it. A permit filing changes the improvement history and nothing else; a deed recording changes ownership and sales history and nothing else. Grouping by what changes together is what makes partial update safe.

Every value can name where it came from. A source class carries the contributor and the specific attribute it supplied, alongside the vendor's own identifier and the time of the call, so the graph answers which source produced a given fact rather than only what the fact is.

Records are accepted on agreement rather than on arrival. Independent re-derivation of the same parcel must agree before a value is taken, and change is detected by content hash against the source rather than by re-reading on a schedule.

## Classes

Grouped by the question each answers about a property.

### What is this house, physically?

- `property`
- `parcel`
- `structure`
- `lot`
- `layout`
- `appliance`
- `utility`
- `geometry`
- `property_ranking_overall`
- `environment_characteristics`
- `flood_storm_information`
- `safety_security`
- `school`
- `transportation_access`

### What changed since it was built?

- `property_improvement`
- `inspection`
- `file`

### What are the comparables, really?

- `sales_history`
- `deed`

### Who owns it, and what does that imply?

- `person`
- `address`
- `unnormalized_address`
- `property_seed`

### Will this close cleanly?

- `loan`
- `tax`
- `tax_authority`
- `tax_exemption`
- `tax_jurisdiction`
- `homeowners_association`
- `hoa_policy`

## The classes carrying the most

| Class | Properties | Referenced by |
| --- | --- | --- |
| `structure` | 59 | 0 |
| `layout` | 49 | 0 |
| `utility` | 46 | 0 |
| `tax` | 26 | 0 |
| `address` | 24 | 0 |
| `lot` | 21 | 0 |
| `environment_characteristics` | 21 | 0 |
| `property` | 19 | 0 |

Derived from: property graph, restricted to the classes its data groups reach (repository source)
