PRE #1 — ins:Claim as delivered: one class doing five jobs
Structural diagram of the current ins:Claim and its neighbourhood, extracted from the delivered model. Red = defect; numbered badges are explained in the legend.
The 8 defects
1Demand modelled as the occurrence.ins:Claim ⊑ gist:Event — the claim (a demand for indemnification) and the loss (the thing that happened) are one node. One warehouse fire with two claims = duplicated, contradictable loss facts. Fix: CLM-1.
2Loss facts on the paperwork.claimLocation, claimPeril hang off the demand, not the occurrence. Fix: CLM-2.
3Status snapshot, no lifecycle. Three date literals + one overwritable status: reopen history, cycle times, audit trail all unrepresentable (CQ-C10/C11 fail). Fix: CLM-4.
4Money as bare decimals. Five amounts with no currency and no valuation date; incurredAmount stores a derivable sum. Fix: CLM-7, CLM-8.
5Orphan claims allowed.claimOnPolicy is optional — a claim under no policy validates. Fix: CLM-15 (SHACL exactly 1).
6Roles bypassed. Claimant and adjuster point straight at ins:Party while 10 distribution roles use ins:PartyRole; adjuster reassignment destroys history. Fix: CLM-10.
7Code lists baked into schema. Status/type are gist:Category string enums (vs the SKOS standard); “Subrogation” is simultaneously a type value, a status value and an empty class. Fix: CLM-5, CLM-6, CLM-12.
8Broken self-reference.hasClaimOnCoverage : Claim → Claim — a copy-paste domain error; inverse pairs (hasClaim/claimOnPolicy) drift with no owl:inverseOf. Fix: CLM-9.