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

# Module 4 · The Classification Layer

> The classification seeds (granular product → NAIC major line; raw cause-of-loss → peril group + catastrophe flag) are already committed in the repo as CSVs (reference/terminolog… (~20 min)

The classification seeds (granular product → NAIC major line; raw cause-of-loss → peril group + catastrophe flag) are **already committed in the repo** as CSVs (`reference/terminology/naic_lob.csv`, `peril.csv`) — nothing to load into your warehouse. Ana loads the CSV into her Python sandbox and joins it to a read-only warehouse pull in memory (see `ontology/notes/terminology-join-pattern.md`), so the grouping logic works with **zero warehouse writes**. The shipped ratio surfaces filter `line_of_business` on the fact, so they run with no seed dependency at all — the seeds add the *rollups*.

## 4.1 · Prove the rollups work

```text Prompt theme={null}
Using the ontology's classification layer, roll my granular line-of-business values up to the NAIC major line, and group my top 10 most frequent cause-of-loss codes into peril groups (with the catastrophe flag). Explain how you joined the seed CSVs without writing to the warehouse.
```

<Check>
  **You'll see:** raw product and cause-of-loss codes resolved to meaningful NAIC lines and peril groups, with the federated join-in-sandbox pattern explained — and a reminder to analyze *peril groups*, never free-text cause-of-loss.
</Check>

## 4.2 · Bring in your licensed feed — optional

**You don't need this on day one** — the public NAIC and peril groupings are already committed. Come back when you want the granular **ISO peril / cause-of-loss codes**, **PCS catastrophe codes**, or **ISO rating territories**. These are **licensed** (Verisk/ISO) — the repo ships the structure and join logic, and the data comes from **your carrier's licensed feed**:

```text Prompt theme={null}
We have an ISO cause-of-loss / PCS catastrophe feed in our warehouse at [table]. Per LICENSING.md, join it to claim.cause_of_loss by code so we get the granular peril and per-claim cat tag — keep the licensed data in our warehouse, commit only the join logic, and note the license + effective date in LICENSING.md. Open it as a PR.
```

<Check>
  **You'll see:** the structural model light up with your licensed data — the modeling logic versioned in git, the licensed codes staying in your warehouse, same governance motion as everything else.
</Check>

### ✅ Checkpoint

* [ ] A NAIC-line and peril-group rollup worked against your data with no warehouse writes
* [ ] You can explain the federated join-in-sandbox pattern in one sentence
* [ ] You know which classification ships public (NAIC/peril) vs. licensed (ISO/PCS, from your feed)
