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

  1. 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.
  2. 2Loss facts on the paperwork. claimLocation, claimPeril hang off the demand, not the occurrence. Fix: CLM-2.
  3. 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.
  4. 4Money as bare decimals. Five amounts with no currency and no valuation date; incurredAmount stores a derivable sum. Fix: CLM-7, CLM-8.
  5. 5Orphan claims allowed. claimOnPolicy is optional — a claim under no policy validates. Fix: CLM-15 (SHACL exactly 1).
  6. 6Roles bypassed. Claimant and adjuster point straight at ins:Party while 10 distribution roles use ins:PartyRole; adjuster reassignment destroys history. Fix: CLM-10.
  7. 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.
  8. 8Broken self-reference. hasClaimOnCoverage : Claim → Claim — a copy-paste domain error; inverse pairs (hasClaim/claimOnPolicy) drift with no owl:inverseOf. Fix: CLM-9.