OpSpring.ai
All case studiesInsurance

Noriega Risk Partners

A construction-heavy brokerage, and the contract compliance engine built to read an insurance schedule the way a risk advisor would.

4
compliance statuses, not pass/fail
2-pass
policy check, then certificate
Verbatim
citations, or the field is null
Ongoing
Timeline

The challenge

Brenda Noriega runs Noriega Risk Partners with a heavy construction book, so contract review is not an occasional task. It is the job. Construction contracts arrive with insurance schedules attached, and somebody has to read each schedule against the insured's actual program before anything gets signed.

The work resists shortcuts because the requirements do not sit in one place. They hide in the insurance section, in exhibits, in indemnification clauses, and in references to protocols like OCIP and CCIP. A clause reading "subcontractor shall maintain the coverages described in Exhibit C" makes Exhibit C a requirements document too. The coverage evidence is just as scattered: a monoline insured might carry general liability, auto, and umbrella on three different carriers, with real coverage spread across declarations pages, endorsement schedules, and wrap endorsements that bundle twenty or thirty forms under a single number.

Then there are the traps that make this genuinely hard rather than merely tedious. CG 20 10 and CG 20 37 look nearly identical and cover different triggers, one for ongoing operations and one for completed operations. An additional insured endorsement does not imply primary and non-contributory coverage; that language has to be explicit. A waiver of subrogation on general liability says nothing about workers compensation. The same form number with a different edition date can mean materially different language.

In Brenda's words: "I often have to sift through multiple contracts and review against the insurance program to make sure the insured is compliant."

The solution

Contract Compliance was built to do that reading, and to be checkable at every step. A compliance tool an agent cannot audit is one they cannot defend.

It runs as two passes. The pre-check reads the contract against the insured's policies and answers whether the coverage contains what the contract demands. The post-check reads the drafted certificate against the same contract and answers a different question: whether the certificate's own text reflects what was required. Those fail in different ways. A certificate can show a limit the policy does not carry, leave the additional insured box unchecked, or fall back on generic ACORD cancellation language with no teeth. Catching certificate defects is a separate problem from verifying the policy behind them, so the system treats them separately.

The output is deliberately not pass or fail. Every requirement gets one of four statuses. MET and NOT_MET mean what they say. AMBIGUOUS means the coverage might satisfy the requirement but needs a carrier confirmation, and it comes with the specific question to ask. POSSIBLE_SCOPE_MISMATCH is advisory, for a requirement that does not fit the work being performed, like pollution liability on interior cabinetry, so an agent has grounds to push back on a third-party reviewer.

AMBIGUOUS is the design decision that matters most. Forcing every finding into a binary either invents gaps that turn out to be accepted coverage or quietly marks things met that were never verified. Both destroy trust, and the second does it silently. An agency's E&O position is strongest when ambiguous findings get resolved by a documented carrier call, so the engine surfaces the question with a next step rather than prejudging an answer only the carrier can give.

The overall verdict is mechanical. Any NOT_MET makes the report non-compliant. Any AMBIGUOUS with no gaps makes it partial: verify, then you are clear. Advisories never change the verdict. Same inputs, same rule, every time.

AI architecture

The analysis runs on a frontier large language model. Requirement decomposition is canonical and the overall verdict is a mechanical rule over the findings, so those parts reproduce exactly, every run. The platform does not claim the model layer itself is deterministic. Temperature zero is widely assumed to buy that, and in our own testing it did not: we recorded opposite readings on byte-identical input. So reproducibility is earned in the mechanical layers, and model output is validated against a schema and verified against the source document rather than trusted to repeat itself. If the primary path fails, the job falls through a chain on Amazon Bedrock instead of failing in front of the customer, and every fallback is logged.

Documents reach the model as native PDF blocks, read visually rather than flattened to text. That matters here because ACORD 25 certificates and endorsement schedules carry meaning in their layout: which box is checked, which section a line sits in, what the Description of Operations actually says.

Citation discipline makes the output auditable. Every finding carries the contract language and the coverage language verbatim, with the form number, section, or endorsement identifier where visible. If the supporting language does not exist in the document, the field is set to null. The model is never allowed to reconstruct a citation from memory, because agents take these quotes into calls with carriers, insureds, and auditors, and one invented quote ends the tool's usefulness permanently.

The form logic is where the domain knowledge concentrates. Form numbers get normalized across notations, so CG 2010 and CG 20 10 04 13 are understood as the same form. A real difference between the required form and the one in evidence is classified rather than guessed at. Forms with disjoint scope, like an ongoing-operations additional insured against a completed-operations one, resolve to NOT_MET, because no reading bridges them without a new endorsement. Forms with overlapping scope, like a blanket additional insured against a named one, resolve to AMBIGUOUS with the carrier question attached. The system is also barred from extracting requirements the contract never made, the failure mode that turns a compliance report into noise.

Accuracy is treated as an engineering problem with a harness behind it. Hand-labeled document fixtures run through the real production prompt against the same model, scored with regex and numeric checks only, no model grading another model. A score change always traces to a specific prompt, model, or fixture change. Every run is archived before scoring, and a free validation pass over every case runs as a hard gate in CI. That harness today covers the comparison engine rather than this module; extending it to contract compliance is the obvious next step.

The results

Brenda checks the platform's work against her own reading of the same contracts every day, so her account is the one that matters.

On policy comparison: "I love how it does policy comparisons as an actual risk advisor. It can find the coverage gaps and explain why it's a coverage gap based on the operations of the business." The second clause is the harder half. Naming a gap is pattern matching. Explaining why it is a gap for this insured, given what this business does, is what makes a finding usable in a client conversation.

On the module this study is about: "I greatly appreciate the contract comparison tool. I often have to sift through multiple contracts and review against the insurance program to make sure the insured is compliant. Producer HQ saves me so much time."

Her verdict, from a principal owner for whom contract review is a daily obligation: "Producer HQ has been a game changer."

What it looks like

ProducerHQ contract compliance result showing four requirement statuses, met, ambiguous, not met and scope mismatch, with contract language cited verbatim beside the policy language
The four statuses in practice. A requirement resolves to met, ambiguous, not met or scope mismatch, with the contract language and the policy language side by side. Where the policy has no matching language, the field says so instead of guessing, which is what makes the output safe to carry into a carrier call.
Engineering notes

The hard part of contract compliance is not reading a contract. It is being wrong in a way nobody catches. These decisions shape what the system is allowed to say.

01
Determinism is earned in code, not bought with a setting
Requirement decomposition is canonical, one row per distinct limit with additional insured and primary/non-contributory always split apart, and the overall verdict is a mechanical rule. Those layers reproduce exactly because they are code. The model layer is different: temperature zero is assumed to deliver reproducibility, and testing showed it does not, with opposite readings on byte-identical input. So model output is validated against a schema and verified against the source, and the parts that must repeat were moved out of the model entirely.
02
Citations are verbatim, or the field is null
Contract and coverage language is copied from the source with the form number and section where visible. If the supporting language does not exist in the document, the field is null and stays null. Agents carry these quotes into calls with carriers and auditors, so the model is never allowed to reconstruct one from memory.
03
Four statuses instead of a binary
Met and not-met mean what they say. Ambiguous means the coverage might satisfy the requirement, and carries the specific question to ask the carrier. A forced binary either invents gaps that turn out to be accepted coverage, or quietly marks unverified coverage as met. The second failure is worse, because nothing surfaces it.
04
Form differences are classified, not guessed
Notation is normalized first, so CG 2010 and CG 20 10 04 13 are understood as one form. Then a real difference is sorted: disjoint scope, like ongoing-operations against completed-operations additional insured, resolves to not-met because no reading bridges them. Overlapping scope, like a blanket form against a named one, resolves to ambiguous with a verification question.
05
The verdict is mechanical, not judgment
Any not-met makes a report non-compliant. Ambiguity with no confirmed gaps makes it partial: verify, then clear. Advisories never move the verdict. A summary that is itself a judgment call can drift from the findings underneath it, and then the two disagree in front of a client.
06
Documents are read, not scraped
PDFs reach the model as native document blocks rather than pre-extracted text, so layout survives. On an ACORD 25 the meaning is carried by which box is checked and which section a line sits in, and that does not survive flattening to a string.
07
Accuracy is measured, not asserted
Hand-labeled document fixtures run through the real production prompt against the same model, scored with regex and numeric checks only. No model grades another model, so a score change always traces to a specific prompt, model, or fixture change. Raw output is archived before scoring, and a free validation pass over every case runs as a hard gate in CI.
08
Degradation is planned
When the primary inference path fails, the job falls through a fallback chain on Bedrock, and every fallback emits a structured warning we can search. A customer sees a failed job only when every tier has failed, not on the first transient error.
Known limits

Worth being precise about what this does not do. The eval harness currently scores the comparison engine, not this module; until compliance cases exist, the accuracy claim here is about method rather than a measured number. The certificate pass judges the certificate against the contract, not against the policy behind it, a deliberate split. And no finding is a coverage determination: the analysis arms a licensed agent, the carrier makes the call, and the report says so on every read.

For how the platform gets built with the agencies using it, read the Jensen-Sundquist study
I love how it does policy comparisons as an actual risk advisor. It can find the coverage gaps and explain why it's a coverage gap based on the operations of the business.
Brenda Noriega·Principal Owner, Noriega Risk Partners

Tech stack

  • Frontier LLM
  • Amazon Bedrock
  • AWS Lambda
  • Amazon SQS
  • Native PDF document blocks
  • Deterministic eval harness
  • Next.js
  • PostgreSQL + Prisma

Ready to streamline your operations?

Schedule a 15-minute diagnosis call to see if AI can solve your biggest bottlenecks.