# `site/data/water/` — the water damage vertical data layer

Versioned JSON data files the water calculator will read. Structure mirrors `site/data/roof/`: every entry carries `sourceType`, `sourceCitation`, `sourceUrl`, `verifiedOn`, `reviewOn`, and per-state/per-carrier entries are stored as **reverse-chronological arrays** so that a rule change preserves the earlier version (index 0 is current; older entries stay in place so historical verdicts remain auditable).

## Files

| File | What it holds | Feeds |
|---|---|---|
| [`peril-coverage-matrix.json`](./peril-coverage-matrix.json) | The seven peril categories (sudden interior, storm-driven, sewer backup, flood, gradual, mold, unknown) with typical coverage answers, exceptions, and per-state override slots. | The water calculator's peril classifier and the covered-payout calculation. |
| [`denial-risk.json`](./denial-risk.json) | Denial-risk model. Aggregate + by-peril-pattern rows for the flag; per-state placeholders pending DOI complaint-data extraction. | The denial-risk flag on every water verdict card — the water analog of roof's non-renewal flag. |
| [`state-mold-rules.json`](./state-mold-rules.json) | Per-state mold coverage rules. TX statutory-cap framework and CA Toxic Mold Protection Act seeded (both `unverified` pending fresh statute reads). | The mold portion of water verdicts, the state-law hub. |
| [`state-aob-rules.json`](./state-aob-rules.json) | Per-state assignment-of-benefits restrictions on property insurance. **Florida flagship verified**: Fla. Stat. §§627.7152 and 627.7153. | The AOB warning surfaced on the peril check, the tips page, and the state-law hub. |
| [`sewer-backup-endorsement-rules.json`](./sewer-backup-endorsement-rules.json) | Sewer backup endorsement availability, typical limits, and pricing. Industry-pattern rows; per-carrier extraction pending. | Water calculator's sewer-backup branch of the peril classifier. |

## Shared with roof

Non-renewal risk was **promoted from `data/roof/` to `data/homeowners/`** on 2026-09-07 because the same NAIC + Treasury FIO data applies identically to roof and water verdicts. See [`../homeowners/non-renewal-risk.json`](../homeowners/non-renewal-risk.json). The roof engine (`site/assets/roof-app.js`) was updated to fetch from the new path in the same PR.

## The verification discipline

Same as `site/data/roof/`. Every entry is either **verified** (has a `verifiedOn` date and a `sourceCitation` that points at a primary source we've actually read) or explicitly **unverified** (`"unverified": true` with a `null` sourceCitation and an `unverifiedNote` describing what would sharpen it). We do not invent numbers to fill fields, and we do not surface unverified entries to users as authoritative rule copy.

The biggest unverified areas at launch:

1. **Denial rate data.** State DOI complaint filings publish narrative counts but not denial-as-share-of-total. NAIC market conduct data on water-claim denial rates is not published at the needed resolution. The `denial-risk.json` aggregate observation is a placeholder for a cited figure.
2. **Texas mold cap statute chapter and section numbers.** Framework is real (Texas Insurance Code Chapter 2001 is the correct chapter); the specific sections need re-verification against `statutes.capitol.texas.gov`.
3. **California SB 655 implementing regulations.** The Act is real; the current status of each implementing regulation (some were phased in) needs re-verification.
4. **Per-carrier sewer backup endorsement pricing.** No filed-rate extraction yet.
5. **Full 50-state AOB and mold tables.** Only Florida (AOB) is verified today.

## Primary sources the water files rely on

- **ISO HO-3 homeowners policy form** — the industry-standard form most US insurers write from. Sudden-and-accidental language, gradual exclusion, flood exclusion, water damage exclusion, and mold exclusion patterns are all standard here (carrier endorsements can modify).
- **National Flood Insurance Act of 1968**, 42 U.S.C. §§4001 et seq. — the federal statute establishing NFIP; text at `uscode.house.gov`.
- **FEMA / NFIP** — program docs and current Flood Insurance Manual at `fema.gov/flood-insurance`.
- **Fla. Stat. §§627.7152 and 627.7153** — Florida AOB restrictions on property insurance claims (`leg.state.fl.us/statutes/`).
- **State DOIs** — consumer bulletins, form filings, complaint statistics; access via NAIC directory at `naic.org`.

## Refresh cadence

- Verified state statute entries: **re-verify every 6 months** (roughly February and August). Legislatures move.
- Carrier endorsement entries: **re-verify every 12 months**, sooner if a state DOI publishes an amendment bulletin.
- ISO form-level entries: **re-verify annually** or whenever a major ISO homeowners form update publishes.
- Every unverified entry: **should not remain unverified past its `reviewOn` date without an owner note explaining why.**

## Adding a new entry

1. Read the primary source in full. If you can't cite a statute section, a bulletin number, or a filed form number, do not add the entry.
2. Push the new entry to the **front** of the reverse-chron array (for a state or carrier), preserving earlier entries.
3. Set `verifiedOn` to today, `reviewOn` to a date matching the refresh cadence above.
4. If it's an update to an existing engine behavior (peril classification, denial-risk band, coverage answer), note the shift in `WATER-VERTICAL-SPEC.md` alongside the code change.

## How the engine loads these

The water engine (built in prompt 5) will `fetch` each file over the wire, matching how `site/assets/roof-app.js` loads `data/roof/*.json` and now `data/homeowners/non-renewal-risk.json`. Each file has a top-level `schemaVersion`; the engine verifies the version before merging and falls back to an inline safe-default table if the file 404s or times out.

The `engineHint` block inside each file names the order and rule the engine should apply. Two are load-bearing:

- **`peril-coverage-matrix.json`**: state overrides beat industry defaults, and carrier overrides beat both. Apply the answer to the covered-payout multiplier before the deductible subtracts.
- **`denial-risk.json`**: the denial flag lives on the verdict card as copy, **NOT** in the arithmetic. It never softens the green don't-file verdict.

## What is intentionally missing from the seed

Prompt 4 seeds structure and a small verified core. What still needs to be added, in rough order of value:

1. **Real per-state denial-rate data** from state DOI complaint filings (TX, CA, FL publish some).
2. **Full 50-state AOB and mold tables** with primary citations.
3. **Per-carrier sewer backup endorsement terms and pricing** extracted from filed SERFF forms.
4. **State overrides on the peril coverage matrix** where a statute or DOI rule changes the ISO default.
5. **Per-region NAIC non-renewal breakdowns** in the shared `data/homeowners/non-renewal-risk.json` (already flagged as pending on the roof side).

Each of these is data assembly, not engine work.
