Product rationalization sounds like a back-office project. In policy checking it is the foundation: unless every carrier’s label lands on one canonical field, a comparison reports noise — a field “dropped” here and “added” there where nothing changed — and people learn to ignore it.

The coverage taxonomy

InsightProofing’s policy_checking pack ships a taxonomy with three parts:

  • Common fields on every line — named insured, mailing address, insurer, policy number, dates, premium, taxes, fees, total cost, commission.
  • Line fields for property, general liability, auto, umbrella, D&O, cyber and workers’ compensation — limits, sublimits, deductibles and retentions, and the line’s own terms.
  • Lists — forms, forms added and deleted by endorsement, exclusions, subjectivities, additional insureds, the schedule of underlying and the tower.

Each field carries its kind (money, percentage, date, text, list), a severity, the synonyms carriers use, and a direction: whether higher is broader (a limit), lower is broader (a deductible), earlier is broader (a prior-and-pending date), or it is a cost.

Coverage taxonomy
The coverage taxonomy for general liability
The coverage taxonomy: each canonical field, the carrier labels read as it, and which direction is broader.

The cascade

flowchart LR L["Label on the page"] --> A{"Learned:
a person confirmed it"} A -- no --> B{"Exact synonym"} B -- no --> C{"Normalized synonym
(filler words removed)"} C -- no --> D{"Close match
≥ threshold"} D -- no --> U["Unmapped:
listed on the check"] A -- yes --> F["Canonical field"] B -- yes --> F C -- yes --> F D -- yes --> FL["Used, flagged;
a mapping prepared to confirm"] --> F

The threshold is set in the taxonomy (86% in the starter pack). Filler words such as “limit”, “of”, “insurance”, “the” and “per” are removed before the normalized comparison. A mapping a person confirms is stored and tried first next time; the taxonomy page lists the labels people taught, with who and when, and a lead can retire one.

The field inventory

Once every document is read onto canonical fields, the Fields zone shows one row per field across expiring, quote, binder and policy, with each carrier’s label under its value. Filters show the rows where documents differ, and limits, retentions and premium on their own.

Fields
The Fields zone: the canonical coverage model for general liability
Fields: one row per canonical field, each document’s value with the carrier’s own label and page under it. The named insured and the deductible differ.
Fields · cyber
The Fields zone on an illustrative cyber policy
Fields on a cyber placement: the ransomware sublimit differs, read on the quote through a label a person taught; two labels the taxonomy doesn’t know yet are listed below.

For the account team

Teach a label once; it reads cleanly forever after.

For broker IT

The taxonomy is versioned JSON in the pack; learned mappings are rows; the cascade is deterministic.

For practice leadership

One coverage model across carriers is also the basis for comparing carriers’ quotes like for like.

Questions we get asked

Can we add our own fields?

The taxonomy is part of the pack and versioned; fields and synonyms are data, not code.

Keep reading