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

# The Insurance Ontology

> The canonical, version-controlled object model. 28 objects across seven groups: Parties, Master data, Underwriting, Claims, Workflow, Evidence, and Governance.

# 05 — The insurance ontology.

The Ontology is the canonical, version-controlled object model that every plane projects onto.
It defines 28 objects across seven groups: Parties, Master data, Underwriting, Claims,
Workflow, Evidence, and Governance. Every Property, Decision, Action and AuditEvent the
platform produces is typed against the Ontology.

## 5.1  Object index

| #  | Group        | Object               | Anchor        | Purpose                                        |
| -- | ------------ | -------------------- | ------------- | ---------------------------------------------- |
| 1  | Parties      | **Insured**          | o-insured     | Named insured / policyholder party             |
| 2  | Parties      | **Broker**           | o-broker      | Distribution intermediary party                |
| 3  | Parties      | **Claimant**         | o-claimant    | Party making a claim against a policy          |
| 4  | Parties      | **Underwriter**      | o-underwriter | Carrier-side decision principal                |
| 5  | Parties      | **Adjuster**         | o-adjuster    | Carrier-side claims handler                    |
| 6  | Master data  | **Policy**           | o-policy      | Insurance contract                             |
| 7  | Master data  | **Coverage**         | o-coverage    | Typed risk-transfer scope on a Policy          |
| 8  | Master data  | **Endorsement**      | o-endorsement | Mid-term contract amendment                    |
| 9  | Underwriting | **Submission**       | o-submission  | Inbound risk for consideration                 |
| 10 | Underwriting | **Quote**            | o-quote       | Carrier-side priced response                   |
| 11 | Underwriting | **RiskAssessment**   | o-risk        | Structured risk evaluation against an exposure |
| 12 | Underwriting | **Pricing**          | o-pricing     | Premium calculation result                     |
| 13 | Underwriting | **BindingAuthority** | o-binding     | Delegated authority record                     |
| 14 | Claims       | **Claim**            | o-claim       | Reported loss case                             |
| 15 | Claims       | **LossEvent**        | o-loss        | Real-world loss occurrence                     |
| 16 | Claims       | **Exposure**         | o-exposure    | Per-coverage manifestation of a loss           |
| 17 | Claims       | **Reserve**          | o-reserve     | Held estimate against a loss                   |
| 18 | Claims       | **Payment**          | o-payment     | Outflow against a claim                        |
| 19 | Workflow     | **Task**             | o-task        | Unit of operator work                          |
| 20 | Workflow     | **Exception**        | o-exception   | Typed deviation requiring resolution           |
| 21 | Evidence     | **Document**         | o-document    | Content-addressed file                         |
| 22 | Evidence     | **EmailThread**      | o-email       | Inbound / outbound conversation                |
| 23 | Evidence     | **Attachment**       | o-attachment  | Document bound to a thread                     |
| 24 | Evidence     | **EvidenceSpan**     | o-evspan      | Typed citation back to source bytes            |
| 25 | Governance   | **Decision**         | o-decision    | Typed verdict, agent or human                  |
| 26 | Governance   | **Action**           | o-action      | Typed effect intent on a SoR                   |
| 27 | Governance   | **AgentRun**         | o-agentrun    | Bounded execution of an agent                  |
| 28 | Governance   | **AuditEvent**       | o-audit       | Hash-chained audit record                      |

## 5.2  Object cards

Each object card defines: a one-line description, the field set (a subset; full schema in
the Accordion), key links, default permissions, and the JSON Schema. Every
field is implicitly accompanied by a provenance record.

### Group A · Parties

<Card title="Insured" icon="user">
  **ontology · party** | marking: `pii.medium` | scope: `tenant`

  The named insured / policyholder party on a Policy. May be an individual or organisation. Always content-addressed against an external party-master identifier where one exists.

  | Field           | Type                    | Req | Notes                    |
  | --------------- | ----------------------- | --- | ------------------------ |
  | `insuredId`     | id                      | req | Internal canonical id    |
  | `kind`          | enum: `person` \| `org` | req |                          |
  | `legalName`     | string                  | req |                          |
  | `externalIds`   | map\<source, value>     | opt | e.g. tax id, registry id |
  | `jurisdictions` | iso3166\[]              | opt | One or more countries    |
  | `contact`       | ContactRef              | opt | Email, phone             |

  **Links**: `policiesOf → Policy[]`, `claimantOf → Claimant[]`.

  **Permissions**: read — `insured.read`; mutate — `insured.write`; PII fields require purpose `underwriting.review` or `claims.adjustment`.
</Card>

<Accordion title="JSON Schema · Insured">
  ```json theme={null}
  {
    "$id": "layerup://ontology/v1/Insured",
    "type": "object",
    "required": ["insuredId", "kind", "legalName"],
    "properties": {
      "insuredId":   { "type": "string", "pattern": "^ins_[A-Z0-9]{10,}$" },
      "kind":        { "enum": ["person", "org"] },
      "legalName":   { "type": "string", "minLength": 1 },
      "externalIds": { "type": "object", "additionalProperties": { "type": "string" } },
      "jurisdictions": { "type": "array", "items": { "type": "string", "pattern": "^[A-Z]{3}$" } },
      "contact":     { "$ref": "layerup://ontology/v1/ContactRef" }
    }
  }
  ```
</Accordion>

<Card title="Broker" icon="handshake">
  **ontology · party** | marking: `tenant`

  The distribution intermediary that placed a Submission or that is bound to a Policy. Typically also has BindingAuthority records on certain LOBs.

  | Field            | Type                        | Req | Notes |
  | ---------------- | --------------------------- | --- | ----- |
  | `brokerId`       | id                          | req |       |
  | `name`           | string                      | req |       |
  | `licenseIds`     | map\<jurisdiction, license> | opt |       |
  | `commissionTier` | string                      | opt |       |
  | `contact`        | ContactRef                  | opt |       |

  **Links**: `submissionsOf → Submission[]`, `policiesOf → Policy[]`, `bindingAuthorityOf → BindingAuthority[]`.
</Card>

<Accordion title="JSON Schema · Broker">
  ```json theme={null}
  {
    "$id": "layerup://ontology/v1/Broker",
    "type": "object",
    "required": ["brokerId", "name"],
    "properties": {
      "brokerId":       { "type": "string", "pattern": "^brk_[A-Z0-9]{10,}$" },
      "name":           { "type": "string" },
      "licenseIds":     { "type": "object", "additionalProperties": { "type": "string" } },
      "commissionTier": { "type": "string" },
      "contact":        { "$ref": "layerup://ontology/v1/ContactRef" }
    }
  }
  ```
</Accordion>

<Card title="Claimant" icon="user-injured">
  **ontology · party** | marking: `pii.medium`

  A party making a claim against a Policy. Distinct from the Insured: a third-party claimant on a liability coverage is not the policyholder.

  | Field               | Type                                           | Req |
  | ------------------- | ---------------------------------------------- | --- |
  | `claimantId`        | id                                             | req |
  | `kind`              | enum                                           | req |
  | `legalName`         | string                                         | req |
  | `relationToInsured` | enum: `self` \| `third_party` \| `beneficiary` | req |
  | `contact`           | ContactRef                                     | opt |

  **Links**: `claimsOf → Claim[]`.
</Card>

<Card title="Underwriter" icon="user-tie">
  **ontology · party · internal**

  A carrier-side decision principal authorised to bind, decline or refer Submissions within their scope. Has typed authority limits (line, jurisdiction, premium ceiling).

  | Field            | Type             | Req |
  | ---------------- | ---------------- | --- |
  | `underwriterId`  | id               | req |
  | `principalRef`   | PrincipalRef     | req |
  | `authority`      | UWAuthorityScope | req |
  | `lineOfBusiness` | string\[]        | req |

  **Links**: `quotesAuthored → Quote[]`, `decisionsAuthored → Decision[]`.
</Card>

<Card title="Adjuster" icon="user-check">
  **ontology · party · internal**

  A carrier-side claims handler authorised to assess, reserve, settle or refer Claims within their scope. Authority is typed by line, severity band, and jurisdiction.

  | Field          | Type                 | Req |
  | -------------- | -------------------- | --- |
  | `adjusterId`   | id                   | req |
  | `principalRef` | PrincipalRef         | req |
  | `authority`    | ClaimsAuthorityScope | req |
  | `specialism`   | string\[]            | opt |

  **Links**: `claimsAssigned → Claim[]`, `decisionsAuthored → Decision[]`.
</Card>

### Group B · Master data

<Card title="Policy" icon="file-contract">
  **ontology · master** | soR: `policy admin`

  An insurance contract. The canonical record lives in the carrier's policy administration system; Layerup's Policy is a projection augmented with derived properties.

  | Field            | Type              | Req |
  | ---------------- | ----------------- | --- |
  | `policyId`       | id                | req |
  | `policyNumber`   | string            | req |
  | `insuredRef`     | Ref\<Insured>     | req |
  | `brokerRef`      | Ref\<Broker>      | opt |
  | `productCode`    | string            | req |
  | `lineOfBusiness` | string            | req |
  | `currency`       | iso4217           | req |
  | `effective`      | date              | req |
  | `expiry`         | date              | req |
  | `status`         | enum              | req |
  | `coverageRefs`   | Ref\<Coverage>\[] | req |

  **Links**: `coverages → Coverage[]`, `endorsements → Endorsement[]`, `claims → Claim[]`.
</Card>

<Accordion title="JSON Schema · Policy">
  ```json theme={null}
  {
    "$id": "layerup://ontology/v1/Policy",
    "type": "object",
    "required": ["policyId","policyNumber","insuredRef","productCode","lineOfBusiness","currency","effective","expiry","status","coverageRefs"],
    "properties": {
      "policyId":       { "type": "string" },
      "policyNumber":   { "type": "string" },
      "insuredRef":     { "$ref": "layerup://ontology/v1/Ref<Insured>" },
      "brokerRef":      { "$ref": "layerup://ontology/v1/Ref<Broker>" },
      "productCode":    { "type": "string" },
      "lineOfBusiness": { "type": "string" },
      "currency":       { "type": "string", "pattern": "^[A-Z]{3}$" },
      "effective":      { "type": "string", "format": "date" },
      "expiry":         { "type": "string", "format": "date" },
      "status":         { "enum": ["quoted","bound","in_force","cancelled","expired"] },
      "coverageRefs":   { "type": "array", "items": { "$ref": "layerup://ontology/v1/Ref<Coverage>" } }
    }
  }
  ```
</Accordion>

<Card title="Coverage" icon="shield">
  **ontology · master**

  A typed risk-transfer scope on a Policy. Each Coverage has its own limits, deductibles, perils, and exclusions.

  | Field        | Type         | Req |
  | ------------ | ------------ | --- |
  | `coverageId` | id           | req |
  | `policyRef`  | Ref\<Policy> | req |
  | `code`       | string       | req |
  | `limit`      | Money        | req |
  | `deductible` | Money        | opt |
  | `perils`     | string\[]    | opt |
  | `exclusions` | string\[]    | opt |

  **Links**: `policy → Policy`, `exposures → Exposure[]`.
</Card>

<Card title="Endorsement" icon="pen-to-square">
  **ontology · master**

  A mid-term contract amendment to a Policy or Coverage. Has its own effective date, change set, and approval lineage.

  | Field           | Type           | Req |
  | --------------- | -------------- | --- |
  | `endorsementId` | id             | req |
  | `policyRef`     | Ref\<Policy>   | req |
  | `changeSet`     | JSONPatch      | req |
  | `effective`     | date           | req |
  | `approvalRef`   | Ref\<Decision> | opt |

  **Links**: `policy → Policy`, `approvedBy → Decision`.
</Card>

### Group C · Underwriting

<Card title="Submission" icon="inbox">
  **ontology · uw**

  Inbound risk presented by a Broker (or directly by a prospective Insured) for the carrier's consideration. Drives the underwriting workflow until quoted, declined, or referred.

  | Field                | Type                                                             | Req |
  | -------------------- | ---------------------------------------------------------------- | --- |
  | `submissionId`       | id                                                               | req |
  | `brokerRef`          | Ref\<Broker>                                                     | opt |
  | `insuredRef`         | Ref\<Insured>                                                    | opt |
  | `productCode`        | string                                                           | req |
  | `lineOfBusiness`     | string                                                           | req |
  | `requestedEffective` | date                                                             | req |
  | `exposureSummary`    | ExposureSummary                                                  | opt |
  | `status`             | enum: `open` \| `quoted` \| `declined` \| `referred` \| `closed` | req |

  **Links**: `quotes → Quote[]`, `riskAssessment → RiskAssessment`, `documents → Document[]`.
</Card>

<Card title="Quote" icon="file-invoice-dollar">
  **ontology · uw**

  A carrier-side priced response to a Submission. Bound by the issuing underwriter's authority. Either binds (becoming a Policy) or expires.

  | Field            | Type                                                             | Req |
  | ---------------- | ---------------------------------------------------------------- | --- |
  | `quoteId`        | id                                                               | req |
  | `submissionRef`  | Ref\<Submission>                                                 | req |
  | `underwriterRef` | Ref\<Underwriter>                                                | req |
  | `premium`        | Money                                                            | req |
  | `terms`          | QuoteTerms                                                       | req |
  | `validUntil`     | datetime                                                         | req |
  | `status`         | enum: `draft` \| `issued` \| `bound` \| `expired` \| `withdrawn` | req |

  **Links**: `submission → Submission`, `boundPolicy → Policy?`, `pricing → Pricing`.
</Card>

<Card title="RiskAssessment" icon="magnifying-glass-chart">
  **ontology · uw**

  A structured evaluation of an exposure: hazards, prior loss history, geography, regulatory class, model-derived scores, agent-derived recommendations, and underwriter sign-off where required.

  | Field           | Type                                   | Req |
  | --------------- | -------------------------------------- | --- |
  | `assessmentId`  | id                                     | req |
  | `subjectRef`    | Ref\<Submission\|Endorsement>          | req |
  | `hazardScores`  | map\<peril, score>                     | opt |
  | `verdict`       | enum: `accept` \| `refer` \| `decline` | req |
  | `rationale`     | string                                 | req |
  | `evidenceSpans` | Ref\<EvidenceSpan>\[]                  | req |

  **Links**: `subject → Submission|Endorsement`, `decision → Decision`, `evidence → EvidenceSpan[]`.
</Card>

<Card title="Pricing" icon="calculator">
  **ontology · uw**

  The premium calculation result for a Quote. Captures rating factors, base rates, modifiers, surcharges, taxes, and the model lineage of any non-deterministic rating step.

  | Field          | Type                       | Req |
  | -------------- | -------------------------- | --- |
  | `pricingId`    | id                         | req |
  | `quoteRef`     | Ref\<Quote>                | req |
  | `baseRate`     | Money                      | req |
  | `factors`      | map\<factor, multiplier>   | opt |
  | `surcharges`   | map\<label, amount>        | opt |
  | `taxes`        | map\<jurisdiction, amount> | opt |
  | `finalPremium` | Money                      | req |
  | `modelLineage` | ModelLineage\[]            | opt |
</Card>

<Card title="BindingAuthority" icon="certificate">
  **ontology · uw**

  A delegated authority record granting a Broker (or carrier office) the right to bind risks within a defined scope on the carrier's behalf. Has limits by line, jurisdiction, premium, and aggregate.

  | Field              | Type         | Req |
  | ------------------ | ------------ | --- |
  | `bindingId`        | id           | req |
  | `holderRef`        | Ref\<Broker> | req |
  | `scope`            | BindingScope | req |
  | `premiumCeiling`   | Money        | req |
  | `aggregateCeiling` | Money        | opt |
  | `effective`        | date         | req |
  | `expiry`           | date         | req |
</Card>

### Group D · Claims

<Card title="Claim" icon="file-exclamation">
  **ontology · claims** | soR: `claims`

  A reported loss case against a Policy. Aggregates one or more LossEvents and one or more Exposures (per coverage). Long-horizon entity with its own state machine.

  | Field         | Type                                                                            | Req |
  | ------------- | ------------------------------------------------------------------------------- | --- |
  | `claimId`     | id                                                                              | req |
  | `claimNumber` | string                                                                          | req |
  | `policyRef`   | Ref\<Policy>                                                                    | req |
  | `claimantRef` | Ref\<Claimant>                                                                  | opt |
  | `reportedAt`  | datetime                                                                        | req |
  | `incurredAt`  | datetime                                                                        | req |
  | `severity`    | enum                                                                            | opt |
  | `status`      | enum: `draft` \| `open` \| `investigating` \| `settled` \| `closed` \| `denied` | req |
  | `currency`    | iso4217                                                                         | req |

  **Links**: `policy → Policy`, `lossEvent → LossEvent`, `exposures → Exposure[]`, `reserves → Reserve[]`, `payments → Payment[]`.
</Card>

<Card title="LossEvent" icon="triangle-exclamation">
  **ontology · claims**

  The real-world loss occurrence — the underlying fact a Claim is reporting. Distinct from the Claim because one event may produce multiple Claims (third-party, multi-policy, multi-jurisdiction).

  | Field         | Type        | Req |
  | ------------- | ----------- | --- |
  | `lossEventId` | id          | req |
  | `occurredAt`  | datetime    | req |
  | `locationRef` | LocationRef | opt |
  | `cause`       | string      | opt |
  | `description` | string      | opt |

  **Links**: `claims → Claim[]`.
</Card>

<Card title="Exposure" icon="chart-bar">
  **ontology · claims**

  The per-Coverage manifestation of a Claim. A single Claim against a Policy with three Coverages produces up to three Exposures, each reserved and settled independently.

  | Field         | Type             | Req |
  | ------------- | ---------------- | --- |
  | `exposureId`  | id               | req |
  | `claimRef`    | Ref\<Claim>      | req |
  | `coverageRef` | Ref\<Coverage>   | req |
  | `status`      | enum             | req |
  | `reserveRefs` | Ref\<Reserve>\[] | opt |
  | `paymentRefs` | Ref\<Payment>\[] | opt |
</Card>

<Card title="Reserve" icon="piggy-bank">
  **ontology · claims** | soR: `claims · ledger`

  A held estimate of expected payout against an Exposure. Reserves are typed (indemnity, expense, recovery), have an estimator (model, adjuster, agent), and are versioned over the life of the Claim.

  | Field         | Type                                         | Req |
  | ------------- | -------------------------------------------- | --- |
  | `reserveId`   | id                                           | req |
  | `exposureRef` | Ref\<Exposure>                               | req |
  | `kind`        | enum: `indemnity` \| `expense` \| `recovery` | req |
  | `amount`      | Money                                        | req |
  | `estimator`   | EstimatorRef                                 | req |
  | `asOf`        | datetime                                     | req |
</Card>

<Card title="Payment" icon="money-bill-transfer">
  **ontology · claims** | soR: `billing · gl`

  A typed outflow against a Claim Exposure. Always settled through the carrier's billing/GL system; Layerup records the intent, the approval, and the SoR confirmation.

  | Field         | Type           | Req |
  | ------------- | -------------- | --- |
  | `paymentId`   | id             | req |
  | `exposureRef` | Ref\<Exposure> | req |
  | `amount`      | Money          | req |
  | `payeeRef`    | PayeeRef       | req |
  | `method`      | enum           | req |
  | `committedAt` | datetime       | opt |
  | `sorReceipt`  | string         | opt |
</Card>

### Group E · Workflow

<Card title="Task" icon="list-check">
  **ontology · workflow**

  A unit of operator work. Tasks are routed to roles or named principals via queues and have SLAs. Tasks may be created by agents, by humans, or by policy.

  | Field         | Type                                                                | Req |
  | ------------- | ------------------------------------------------------------------- | --- |
  | `taskId`      | id                                                                  | req |
  | `kind`        | string                                                              | req |
  | `subjectRef`  | Ref\<any>                                                           | req |
  | `assigneeRef` | PrincipalRef                                                        | opt |
  | `queue`       | string                                                              | req |
  | `dueAt`       | datetime                                                            | opt |
  | `status`      | enum: `open` \| `in_progress` \| `blocked` \| `done` \| `cancelled` | req |
</Card>

<Card title="Exception" icon="circle-exclamation">
  **ontology · workflow**

  A typed deviation from the expected path that requires human or policy resolution. Examples: low-confidence extraction, integration unavailable, conflicting evidence, authority breach, schema mismatch.

  | Field         | Type             | Req |
  | ------------- | ---------------- | --- |
  | `exceptionId` | id               | req |
  | `code`        | string           | req |
  | `severity`    | enum             | req |
  | `subjectRef`  | Ref\<any>        | req |
  | `detail`      | string           | req |
  | `raisedAt`    | datetime         | req |
  | `resolution`  | ResolutionRecord | opt |
</Card>

### Group F · Evidence

<Card title="Document" icon="file">
  **ontology · evidence**

  A content-addressed file (PDF, image, spreadsheet, structured form). Always hashed; original bytes retained per retention policy. Ingest produces a Document; OCR / VLM / extraction produce derived properties that link back via EvidenceSpan.

  | Field         | Type       | Req |
  | ------------- | ---------- | --- |
  | `documentId`  | id         | req |
  | `contentHash` | sha256     | req |
  | `mediaType`   | mime       | req |
  | `byteSize`    | int        | req |
  | `pageCount`   | int        | opt |
  | `language`    | bcp47      | opt |
  | `ingestedAt`  | datetime   | req |
  | `storageRef`  | StorageRef | req |
</Card>

<Card title="EmailThread" icon="envelope">
  **ontology · evidence**

  An inbound or outbound conversation thread. Holds participants, message order, and a set of bound Attachments. Drives many ingest paths (submissions, loss notices, endorsement requests).

  | Field            | Type                          | Req |
  | ---------------- | ----------------------------- | --- |
  | `threadId`       | id                            | req |
  | `subject`        | string                        | req |
  | `participants`   | EmailParty\[]                 | req |
  | `messages`       | EmailMessage\[]               | req |
  | `attachmentRefs` | Ref\<Attachment>\[]           | opt |
  | `direction`      | enum: `inbound` \| `outbound` | req |
</Card>

<Card title="Attachment" icon="paperclip">
  **ontology · evidence**

  A Document bound to an EmailThread (or a portal upload). Carries the parent thread reference, the part name, and content disposition.

  | Field          | Type              | Req |
  | -------------- | ----------------- | --- |
  | `attachmentId` | id                | req |
  | `threadRef`    | Ref\<EmailThread> | req |
  | `documentRef`  | Ref\<Document>    | req |
  | `partName`     | string            | opt |
  | `disposition`  | string            | opt |
</Card>

<Card title="EvidenceSpan" icon="link">
  **ontology · evidence**

  A typed citation linking a derived property (or a Decision) back to the exact bytes that justify it. The substrate's primary mechanism for evidentiary trace.

  | Field                 | Type                                                 | Req |
  | --------------------- | ---------------------------------------------------- | --- |
  | `spanId`              | id                                                   | req |
  | `documentRef`         | Ref\<Document>                                       | req |
  | `locator`             | oneOf: byteRange \| bbox \| timestampRange \| rowCol | req |
  | `retrievalSnapshotId` | string                                               | opt |
  | `extractor`           | ToolRef                                              | opt |
  | `confidence`          | number \[0,1]                                        | opt |
</Card>

<Accordion title="JSON Schema · EvidenceSpan">
  ```json theme={null}
  {
    "$id": "layerup://ontology/v1/EvidenceSpan",
    "type": "object",
    "required": ["spanId", "documentRef", "locator"],
    "properties": {
      "spanId":      { "type": "string" },
      "documentRef": { "$ref": "layerup://ontology/v1/Ref<Document>" },
      "locator": {
        "oneOf": [
          { "type": "object", "required": ["kind","start","end"], "properties": { "kind": { "const": "byteRange" }, "start": { "type": "integer" }, "end": { "type": "integer" } } },
          { "type": "object", "required": ["kind","page","x","y","w","h"], "properties": { "kind": { "const": "bbox" }, "page": { "type": "integer" }, "x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"} } },
          { "type": "object", "required": ["kind","start","end"], "properties": { "kind": { "const": "timestampRange" }, "start": { "type": "string", "format": "date-time" }, "end": { "type": "string", "format": "date-time" } } },
          { "type": "object", "required": ["kind","sheet","row","col"], "properties": { "kind": { "const": "rowCol" }, "sheet": { "type": "string" }, "row": { "type": "integer" }, "col": { "type": "integer" } } }
        ]
      },
      "retrievalSnapshotId": { "type": "string" },
      "extractor":           { "type": "string" },
      "confidence":          { "type": "number", "minimum": 0, "maximum": 1 }
    }
  }
  ```
</Accordion>

### Group G · Governance

<Card title="Decision" icon="gavel">
  **ontology · governance** | first-class: `core`

  A typed verdict produced by either an agent or a human reviewer against a typed input. Holds linked evidence, model lineage, rationale, and any consequent Actions. Decisions are immutable; corrections are new Decisions with a `supersedes` link.

  | Field           | Type                  | Req |
  | --------------- | --------------------- | --- |
  | `decisionId`    | id                    | req |
  | `kind`          | string                | req |
  | `subjectRef`    | Ref\<any>             | req |
  | `verdict`       | VerdictValue          | req |
  | `rationale`     | string                | req |
  | `authoredBy`    | PrincipalRef          | req |
  | `runRef`        | Ref\<AgentRun>        | opt |
  | `evidenceSpans` | Ref\<EvidenceSpan>\[] | req |
  | `modelLineage`  | ModelLineage\[]       | opt |
  | `supersedes`    | Ref\<Decision>        | opt |
  | `committedAt`   | datetime              | req |
</Card>

<Accordion title="JSON Schema · Decision">
  ```json theme={null}
  {
    "$id": "layerup://ontology/v1/Decision",
    "type": "object",
    "required": ["decisionId","kind","subjectRef","verdict","rationale","authoredBy","evidenceSpans","committedAt"],
    "properties": {
      "decisionId":    { "type": "string" },
      "kind":          { "type": "string" },
      "subjectRef":    { "type": "string" },
      "verdict":       { "type": "object" },
      "rationale":     { "type": "string" },
      "authoredBy":    { "type": "string" },
      "runRef":        { "type": "string" },
      "evidenceSpans": { "type": "array", "items": { "$ref": "layerup://ontology/v1/Ref<EvidenceSpan>" } },
      "modelLineage":  { "type": "array", "items": { "$ref": "layerup://ontology/v1/ModelLineage" } },
      "supersedes":    { "type": "string" },
      "committedAt":   { "type": "string", "format": "date-time" }
    }
  }
  ```
</Accordion>

<Card title="Action" icon="bolt">
  **ontology · governance** | first-class: `core`

  A typed intent to mutate a system of record. Lives on the Action Plane (§14) with state machine *proposed → staged → approved → committed → reverted/rejected/failed*. Always carries an idempotency key.

  | Field            | Type         | Req |
  | ---------------- | ------------ | --- |
  | `actionId`       | id           | req |
  | `kind`           | string       | req |
  | `targetSor`      | string       | req |
  | `targetRef`      | Ref\<any>    | opt |
  | `payload`        | Json         | req |
  | `idempotencyKey` | string       | req |
  | `state`          | enum         | req |
  | `proposedBy`     | PrincipalRef | req |
  | `approvedBy`     | PrincipalRef | opt |
  | `committedAt`    | datetime     | opt |
  | `compensatedBy`  | Ref\<Action> | opt |
</Card>

<Card title="AgentRun" icon="robot">
  **ontology · governance**

  One bounded execution of an agent against an input object. Has a unique runId, a scoped permission set, a token / wall-clock / cost budget, and a deterministic seed for replay.

  | Field          | Type                                                                                 | Req |
  | -------------- | ------------------------------------------------------------------------------------ | --- |
  | `runId`        | id                                                                                   | req |
  | `agentRef`     | AgentRef                                                                             | req |
  | `agentVersion` | semver                                                                               | req |
  | `subjectRef`   | Ref\<any>                                                                            | req |
  | `scopes`       | string\[]                                                                            | req |
  | `seed`         | string                                                                               | req |
  | `budget`       | Budget                                                                               | req |
  | `state`        | enum: `queued` \| `running` \| `verified` \| `handed_off` \| `completed` \| `failed` | req |
  | `decisions`    | Ref\<Decision>\[]                                                                    | opt |
  | `actions`      | Ref\<Action>\[]                                                                      | opt |
  | `startedAt`    | datetime                                                                             | req |
  | `finishedAt`   | datetime                                                                             | opt |
</Card>

<Card title="AuditEvent" icon="lock">
  **ontology · governance** | hash-chain: `tamper-evident`

  The hash-chained record of every governance-relevant action in the platform: tool dispatches, decision commits, action commits, policy rulings, identity changes, configuration changes. The chain is anchored periodically (§17).

  | Field         | Type         | Req |
  | ------------- | ------------ | --- |
  | `eventId`     | id           | req |
  | `seq`         | int          | req |
  | `kind`        | string       | req |
  | `actor`       | PrincipalRef | req |
  | `subjectRef`  | Ref\<any>    | opt |
  | `payloadHash` | sha256       | req |
  | `prevHash`    | sha256       | req |
  | `thisHash`    | sha256       | req |
  | `at`          | datetime     | req |
</Card>

<Accordion title="JSON Schema · AuditEvent">
  ```json theme={null}
  {
    "$id": "layerup://ontology/v1/AuditEvent",
    "type": "object",
    "required": ["eventId","seq","kind","actor","payloadHash","prevHash","thisHash","at"],
    "properties": {
      "eventId":     { "type": "string" },
      "seq":         { "type": "integer", "minimum": 0 },
      "kind":        { "type": "string" },
      "actor":       { "type": "string" },
      "subjectRef":  { "type": "string" },
      "payloadHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
      "prevHash":    { "type": "string", "pattern": "^[a-f0-9]{64}$" },
      "thisHash":    { "type": "string", "pattern": "^[a-f0-9]{64}$" },
      "at":          { "type": "string", "format": "date-time" }
    }
  }
  ```
</Accordion>

## 5.3  Marking inheritance & derivation

Markings (§4.2) propagate along derivations: any property derived from
a source carries the union of the source's markings unless the derivation explicitly
de-classifies (and the de-classification is itself audited). EvidenceSpans inherit the
marking of the underlying Document. Decisions inherit the union of all evidence markings.

## 5.4  Default permission set

| Object                                                           | Read scope        | Write scope      | Default markings                |
| ---------------------------------------------------------------- | ----------------- | ---------------- | ------------------------------- |
| Insured / Claimant                                               | `party.read`      | `party.write`    | `pii.medium`                    |
| Policy / Coverage / Endorsement                                  | `policy.read`     | `policy.write`   | `tenant`                        |
| Submission / Quote / RiskAssessment / Pricing / BindingAuthority | `uw.read`         | `uw.write`       | `tenant`                        |
| Claim / LossEvent / Exposure / Reserve / Payment                 | `claim.read`      | `claim.write`    | `pii.medium` (where applicable) |
| Task / Exception                                                 | `workflow.read`   | `workflow.write` | `tenant`                        |
| Document / EmailThread / Attachment / EvidenceSpan               | `evidence.read`   | `evidence.write` | inherits from source            |
| Decision / Action / AgentRun / AuditEvent                        | `governance.read` | append-only      | `tenant`                        |

## 5.5  Per-LOB ontology specialization

The 28 canonical objects defined above are *line-of-business agnostic*. Specific LOBs
need additional fields, additional relationships, and LOB-specific Decision and Action types.
Layerup models this as **ontology branches** (§6.3): the canonical trunk holds
the cross-LOB shape; each LOB branch adds typed extensions that inherit from the trunk.
This means a carrier deploying P\&C, Specialty, and Life on the same Layerup instance
does *not* negotiate a single super-schema; each branch is governed independently and
replay still works against any branch version.

**Anatomy of a branch**

* **Extends**: which trunk objects the branch extends (e.g. `Claim`, `Coverage`).
* **New properties**: LOB-specific typed fields (e.g. `vehicle.vin` on Personal Auto Claims).
* **New relations**: LOB-specific links (e.g. `Claim → Vessel` on Marine).
* **New Decision / Action types**: LOB-specific reasoning outputs and effect intents.
* **LOB markings**: e.g. `phi.high` on Health, `treaty.ceded` on Reinsurance.
* **Pinned tools**: per-LOB tool versions in the registry (§9).

<CardGroup cols={3}>
  <Card title="Personal Auto" icon="car">
    **P\&C / Personal** — Extends `Claim`, `Coverage`, `Exposure`. Adds
    `Vehicle` (VIN, year/make/model, garaging), `DriverInvolvement`,
    `PoliceReport`, `RepairFacility`. Decision types: *FastTrackEligibility*,
    *TotalLossDecision*, *SubrogationCandidate*. Markings: `pii.medium`.
  </Card>

  <Card title="Homeowners" icon="house">
    **P\&C / Personal** — Extends `Claim`, `Coverage`, `Exposure`. Adds
    `Property`, `Peril`, `Inspection`, `ContractorEstimate`.
    Decision types: *CoverageApplicability*, *CATAccumulation*. Markings: `pii.medium`.
  </Card>

  <Card title="Commercial Property / Liability" icon="building">
    **Commercial** — Extends `Submission`, `Policy`, `Claim`. Adds `InsuredEntity`,
    `Location`, `OccupancyClass`, `SchedulesOfValues`,
    `BusinessInterruption`. Decision types: *UnderwritingDecision*,
    *ReservingTier*. Branch governance is heavier (broker-mediated submissions).
  </Card>

  <Card title="Workers' Compensation" icon="hard-hat">
    **Casualty** — Adds `Employer`, `JurisdictionalRules`, `InjuryCode` (ICD-10),
    `WageStatement`, `MedicalProvider`, `RTWPlan` (return-to-work).
    Decision types: *CompensabilityDecision*, *IndemnityRate*, *IMETriggers*.
    Markings: `phi.medium`, `pii.medium`.
  </Card>

  <Card title="Marine / Cargo / Hull" icon="ship">
    **Specialty** — Adds `Vessel`, `Voyage`, `BillOfLading`, `SurveyorReport`,
    `HullParticulars`, `CargoManifest`. Decision types: *GeneralAverageDeclaration*,
    *SalvageCoverage*, *JettisonAdjudication*. Often multi-jurisdictional.
  </Card>

  <Card title="Specialty / E&S" icon="briefcase">
    **Specialty** — Extends `Submission`, `Quote`, `BindingAuthority`. Adds
    `BrokerOfRecord`, `RiskAppetiteRule`, `FacultativeReinsurance`,
    `SLAInsurer`. Decision types: *AppetiteFit*, *FacRequired*,
    *BindingAuthorityCheck*.
  </Card>

  <Card title="Life" icon="heart-pulse">
    **Life & Annuities** — Adds `InsuredLife`, `Beneficiary`, `RiderSchedule`,
    `UnderwritingClass`, `MedicalEvidence`. Decision types: *RiskClassification*,
    *BeneficiaryDispute*, *ContestabilityCheck*. Markings: `phi.high`,
    `pii.high`.
  </Card>

  <Card title="Health" icon="stethoscope">
    **Health** — Adds `Member`, `ProviderNetwork`, `Authorization`,
    `EOB`, `ClaimLine` (CPT / HCPCS). Decision types: *MedicalNecessity*,
    *NetworkAdjudication*, *AppealDisposition*. Heavy `phi.high`;
    HIPAA / HITECH governance applied at the marking level.
  </Card>

  <Card title="Reinsurance" icon="rotate">
    **Treaty** — Adds `Treaty`, `CededLayer`, `CessionStatement`,
    `BordereauLine`, `FacRiskFile`. Decision types: *CessionDetermination*,
    *ReportingTrigger*, *TreatyExceptionFlag*. Often dual-tenant (cedant / reinsurer).
  </Card>
</CardGroup>

<Note>
  An LOB branch is a typed *extension* of the trunk, not a fork. Branches inherit trunk
  versioning, lineage, audit, and governance. Cross-branch operations (e.g. a Commercial
  Property claim that triggers Reinsurance cession) traverse the trunk via the canonical
  objects both branches share. There is no "Marine instance" of Layerup separate from the
  "Auto instance" — there is one substrate, with branches.
</Note>

From a global CTO standpoint, this is the property that matters: **the cost of
adding a new LOB is the cost of authoring that LOB's branch and its tools, not the cost
of standing up a new platform.** Identity, ingestion, runtime, control, action,
telemetry, audit, deployment topology, and SRE all carry over unchanged.
