A claim shows up as a pile, not a form: a broker email, an ACORD loss notice, a police report, a repair estimate — four documents in three formats, each holding a different slice of the same event. Someone has to read all of it, key it into the claims system, code the line and the cause, add up the numbers, and set a reserve. InsightXtract does that read in one pass. Below is an actual first-notice-of-loss packet — a commercial fleet collision for Ridgeline Logistics LLC — run end to end into one governed claim record.

The packet

Four files, four shapes — the everyday reality of an FNOL.

  • broker_claim_email.pdf — the producer’s notice: insured, policy number, what happened, the other party and carrier.
  • acord2_auto_loss_notice.pdf — the ACORD 2 automobile loss notice: claim header plus a schedule of the vehicles involved.
  • police_report.pdf — the Austin PD crash report: narrative, at-fault determination, citation status.
  • repair_estimate.pdf — the body shop estimate for the insured tractor, line by line.

Step 1 — Classification

Each file is routed to a claims document type. No filename guessing — the classifier reads the content and assigns a role in the claim record.

Document
Classified type · role
Conf.
broker_claim_email.pdf producer notice
broker_claim_email
0.98
acord2_auto_loss_notice.pdf ACORD 2
acord_auto
0.99
police_report.pdf APD crash report
police_report
0.97
repair_estimate.pdf body shop
repair_estimate
0.98

Those four roles are exactly what the unified claim record knows how to merge — the header from the notices, the narrative and fault from the police report, the numbers from the estimate.

Step 2 — Extraction, with citations

Every field carries the document and page it came from, so a file reviewer can verify without re-opening the packet.

Unified claim headerrole: acord_auto + broker_claim_email
claim_numberCLM-2026-004417ACORD 2 p.1
policy_numberBA-7788321ACORD 2 p.1
insured_nameRidgeline Logistics LLCemail
date_of_loss2026-07-02 · 08:15ACORD 2 p.1
loss_locationI-35 SB near Exit 238, Austin, TXpolice report
claimant_nameMaria Alvarezemail
other_party_insurerProgressiveemail
police_report_numberAPD-2026-55231police report

Step 3 — Coding the loss

Free-text narrative is normalized against claims glossaries so the record joins to the policy, routes to the right desk, and rolls up in loss analytics. The raw text stays; the coded value is added alongside.

FieldAs writtenCoded
cause_of_loss“rear-ended a car that stopped abruptly”Collision
line_of_business“auto liability claim”Auto Liability
loss_state“Austin, TX”TX

Step 4 — The schedules

The ACORD 2 vehicle schedule and the shop estimate come through as typed tables — every row, not a summary.

Vehicles involved ACORD 2 p.1

OwnerVehicleDriverDrivableEst. damage
Insured2023 Freightliner CascadiaJames WhitfieldNo$18,400
Third party2021 Honda AccordMaria AlvarezNo$9,250

Repair estimate — insured tractor repair estimate p.1

Line itemAmount
Front bumper assembly R&R$6,200
Hood replacement$3,100
Radiator + condenser$2,400
Body labor (32 hrs)$5,900
Refinish / paint$800
Total estimate$18,400

Step 5 — Deterministic roll-ups

The reserve inputs are computed by rules over the extracted rows — never by asking a model to add. Zero tokens, exact, and reproducible.

2
Vehicles involved
count(vehicles)
$27,650
Total vehicle damage
∑ vehicles.estimated_damage
$18,400
Insured repair estimate
∑ estimates.estimate_amount

The claim record

Everything lands in one structured record — a claim header, coded line and cause, the triage flags, the schedules, and the derived reserve inputs — ready to post to the claims system and set an initial reserve.

# unified claim record (excerpt)
{ "claim_number": "CLM-2026-004417", "line_of_business": "Auto Liability",
  "cause_of_loss": "Collision", "loss_state": "TX", "date_of_loss": "2026-07-02",
  "injuries_reported": "No", "fatality": "No", "litigation_flag": "No",
  "vehicle_count": 2, "total_vehicle_damage": 27650, "total_repair_estimate": 18400 }

Why it sets a reserve — and holds up

  • Straight-through triage — a coded line, cause and location plus a clean estimate is enough to auto-set an initial reserve and route to the auto desk; the flags (no injuries, no litigation) keep it out of the escalation queue.
  • Present-role consolidation — the record merges only the documents actually in the packet, so a missing police report never leaves a blank masquerading as a fact, and a stray field from an unrelated form never clobbers a real one.
  • No fabricated zeros — if a schedule or figure isn’t present, the derived field is skipped, not set to 0. A reserve is never understated by a silent default.
  • Versioned & cited — the document types, glossaries and roll-up rules are pinned to a published version, so a record produced today reproduces tomorrow, and every value traces to a document and page.