Both agents run on the same six-stage pipeline: arrive, recognise, map, assemble, validate, decide. A new document type, a new line of business, a new carrier's layout - all of it is configuration. Nothing in the decision path is a guess.
Documents arrive however the sender prefers. A ranked list of findings comes back, and a decision is recorded against it. Everything in between is inspectable.
Documents reach the system by whichever route suits the sender: a watched folder, an email inbox, a direct API call, or a manual upload. Documents belonging to one matter do not have to arrive together - a first notice of loss on Monday and a repair invoice three weeks later find each other.
Each document is read against its template. Where the sender did not say what a document is, it is recognised from the fields on its own page - and where recognition is not confident, the system says so rather than guessing.
Every extracted field is bound to a canonical concept from a shared dictionary - 124 concepts today, scoped by line of business so a motor document is not offered hospital admission dates. Rules are written against the concept, never against a template's own labels. That is what lets one rule serve every carrier's claim form layout, and keep working when a new one is onboarded.
Documents group themselves into a case by a value read off their own faces - a claim number, a purchase order number. A case knows what it still needs, because its case type declares which documents are required.
Once the case is complete, it runs against its rule pack. Rules address values by
document role - GARAGE_INVOICE.INVOICE_TOTAL against
SURVEY_REPORT.APPROVED_TOTAL - so a rule reads sideways
across the case rather than down one document.
Findings come back ranked worst-first. A reviewer records what happens next, and that decision is kept against the evidence as it stood at the time. Where the file is short, the system composes the request back to the sender listing exactly what is outstanding - in one pass, not three.
The integration burden belongs on our side, not on a body shop's or a hospital's. Three of the four routes require nothing at all from the sender.
| Route | What the sender does | Effort on their side |
|---|---|---|
| Watched folder | Drops a folder per matter on a local path or Azure File Share | None - no login, no code |
| Mailbox | Emails the documents as attachments | None at all |
| Platform API | Their system posts a payload or a document | One HTTP call |
| Manual upload | Uses the web console | None |
Describe the set explicitly, or let filename prefixes resolve roles, or let the documents identify themselves.
Read and write results in place. We never move or delete the integrating party's files.
On mailbox sources, so an address reachable by the whole internet does not become an open door.
A source names a secret held in a vault. The secret itself is never stored in the database.
A delivery that failed is queryable with its reason - not something you find by opening a folder on a server.
Each tenant's storage and sources are separately scoped, end to end.
A purchase order does not exist as a document inside SAP - it exists as rows in a table. A policy does not exist as a PDF inside a policy administration system. Rendering that data to a page so it can be photographed and guessed at again is absurd, and it is what every OCR-first competitor does.
| Document template | Data contract template | |
|---|---|---|
| Onboarded from | A sample PDF | A sample JSON payload |
| Values come from | OCR and layout analysis | Declared paths, read directly |
| Confidence | Variable - that is what review queues are for | Exact |
| Goes to review | When below threshold | Never |
The rules cannot tell the two apart - and that is the point.
Both kinds of document get attributes, both map to canonical concepts, both bind to roles. The reports mark which is which, so a reader can tell an OCR'd value from one that arrived intact. For insurance this is the strongest available position on policy master data - in-force dates, sum insured, sub-limits, named insureds - taken from the carrier's own system rather than read off a policy schedule PDF.A case does not require its documents to turn up together, in one delivery, or in any order. Each document names its own case by a value read off its own face, and joins whatever is already open under that value.
A goods receipt is raised at the dock on the twelfth and the supplier's invoice arrives on the fourteenth. A first notice of loss and a repair bill are a month apart. A case knows what it is still waiting for, and says so.
If a case is never completed, it is assessed anyway once its window expires and reported Incomplete - deliberately a different outcome from Failed, because they need different people. Incomplete means chase the paperwork. Failed means an adjuster needs to look at this.
A model may propose a mapping. A person confirms it. Every mapping records which of the two it was.
Azure Document Intelligence for layout, tables and key-value extraction.
124 shared concepts, scoped by line of business so irrelevant concepts are never offered.
One concept, many document labels - across carriers, vendors and formats.
A model may propose a mapping; a person confirms it. Both states are recorded.
A document that arrives undeclared is identified from its own fields - and never confidently misidentified: a near-tie is refused rather than guessed.
Line-item tables extracted as rows, addressable per column. 13 semantic types - money, date, quantity, identifier, name and others - drive comparison and tolerance behaviour.
Every rule is also rendered as a plain-language sentence read out of its own definition - so what the rule says and what it does can be compared on one screen.
| Type | What it does |
|---|---|
match | Two values compared for sameness, with tolerance and fuzzy thresholds |
expression | A value compared against a literal or another document's value |
presence | A document role must be in the case |
collectionAssertion | An assertion over the rows of a table |
exists | A value must be present, or must be absent |
aggregation | A collection reduced to a total, then compared |
historical | Checked against what has been submitted before |
This is where line-level accuracy comes from.
| Assertion | What it does |
|---|---|
unique | No two rows share a value |
rowExpression | Every row satisfies an arithmetic condition (quantity × rate = amount) |
groupBySum | Totals per group stay within a bound |
dateWithin | Dates in a row fall within a period of each other |
crossCollection |
Every row of one document's table must appear in another's - matched on chosen fields and agreeing on chosen fields |
crossCollection is the
invoice-versus-approval engine.
In an audit context, determinism is not a limitation. It is the product.
A model may help draft a rule or propose a mapping. No model evaluates a rule. The same case produces the same findings every time, and every finding traces to a rule you can read.
If a field is missing from one side of a comparison, the finding says "could not be compared" - never "matched".
A case validated against zero rules reports Incomplete, not Passed.
A delivery processed with one document quietly skipped produces a clean result that is a lie.
What a reviewer decided, why, and what the engine was saying at that moment - which is the first thing an auditor asks and the last thing most systems can answer.
Blocker, Major, Minor, Advisory - ranked worst-first and grouped by rule.
Per finding wherever the concept is monetary, plus a case total.
With their reasoning, so the verified ground is visible alongside the exceptions.
Every rule rendered as a sentence read out of its own definition.
Reports mark whether a value was read off a scanned page or arrived intact from a system of record.
What was decided, why, and what the engine was saying at that moment - frozen. A case accepted over a blocking finding cannot later look as though it were always clean.
Accepting a case that still carries blocking findings requires a stated reason. Enforced, not encouraged.
Where a file is short, the system composes the request back to the sender listing exactly what is outstanding - one message rather than three round trips.
HTML report, PDF report and findings CSV written back beside the documents, plus an outbound webhook when a case finishes validating.
An operations view reports the numbers a manager is accountable for - not a dashboard of document counts.
Cases decided without ever going back to the sender.
From a case opening to somebody deciding it.
Files that needed nothing at all.
How often blocking findings are accepted anyway, by whom, and on what stated grounds.
The checks that fail most, and the documents that most often do not arrive.
Deficiencies attributed to the party that produced them.
Knowing 30% of files are deficient is interesting. Knowing 62% of the deficiencies come from one hospital is something an operations manager can act on this week.
Figures illustrative. The measures are computed from your own tenant's history.Findings belong to the run that produced them and are never rewritten to match a rule's current wording.
A finding recorded years ago still resolves to the rule that raised it, in the wording it had at the time.
A reversal is a new entry, never an edit.
Who changed which rule, mapping or template, and when.
Editing a rule keeps its identity, so historical findings never lose their origin.
Per-module permissions across console, rules, templates and sources.
Draft, extracted, approved - nothing goes live by accident.
Onboarding a new carrier, a new line of business, or a new supplier's invoice layout is a configuration exercise, not a release.
Including which documents each case requires.
Onboarded from one example, with attributes proposed automatically.
Proposed by the system, confirmed by a person, recorded either way.
Every rule readable as a sentence, so it can be reviewed by the people who own the policy.
Including role and template mappings per source and per sender.
Case types, roles and rule packs deploy as data, not releases.
Run as a service, or deployed inside your own subscription.
Web console, API and a background worker.
Document Intelligence, Blob Storage, Service Bus, Azure Files, Microsoft Graph.
Stored procedures only - no ad-hoc SQL in the data path.
Per tenant and per line of business.
Platform licensing covers the engine, the console, the intake routes and the audit store. Agent packs are licensed on top, per line of business.
One tenant, one agent, a shipped rule pack and a single intake route.
Your own rules and templates, every intake route, decisions and measurement.
Deployed in your Azure subscription, with content packs you own.
Indicative plans shown for illustration. Final pricing is confirmed after a scoping call.
How a rule is written, what happens when a field is missing, what an override looks like two years later. We would rather answer those than show a slide.