docs: document policy OCR capture, the feature no spec proposed
Policy OCR shipped 2026-08-01 (5e9cb12) and was documented nowhere. It is
not in INSURANCE_FEATURES_SPEC.md because it did not come from that
meeting — it came out of building the utility statement OCR pipeline in
RECEIPT_CAPTURE_SPEC.md §2 and noticing the same shape fits carrier
policy PDFs. A reader had no way to find that lineage.
New docs/POLICY_OCR.md covers it end to end, with weight on the three
things that are not obvious from the statement side:
- **One PDF = one policy.** Statements arrive bundled one customer per
page, so there a page is a document. A GMX certificate is one policy
across two pages, so the pages are concatenated and the parser runs
once per file — which is why `pageNumber` is a file ordinal and
`storageKey` is the source PDF, not a page image.
- **The GMX certificate carries no premium at all** — it lives on a
separate recibo PDF. Hence the null-preserving confirm and the
double-gated ledger write.
- **OcrModule was extracted out of StatementsModule to make this
possible**, and that was blocking rather than cosmetic.
Cross-referenced from RECEIPT_CAPTURE_SPEC.md §2 (where it came from),
INSURANCE_FEATURES_SPEC.md (which never proposed it, and whose §4 carrier
API it partly overlaps), PLAN.md step 11, README and RESUME.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,15 @@ Companion doc: [`RECEIPT_CAPTURE_SPEC.md`](RECEIPT_CAPTURE_SPEC.md) covers the
|
||||
Utility Management half of the same meeting (PLAN.md step 11). This doc is the
|
||||
insurance half (PLAN.md step 12).
|
||||
|
||||
> **A fifth insurance feature exists that this spec never proposed.**
|
||||
> [`POLICY_OCR.md`](POLICY_OCR.md) — OCR capture of carrier policy PDFs into
|
||||
> `Policy` rows, built 2026-08-01. It came out of the *utility* statement OCR
|
||||
> work in [`RECEIPT_CAPTURE_SPEC.md`](RECEIPT_CAPTURE_SPEC.md) §2, not from
|
||||
> this meeting, which is why it is documented on its own rather than folded in
|
||||
> here. It is relevant to §4: an OCR path that turns a carrier PDF into a
|
||||
> `Policy` row already covers part of what a carrier API was wanted for, and
|
||||
> unlike the API it is not blocked on Grupo Valore returning a phone call.
|
||||
|
||||
## Why these four features are one spec
|
||||
|
||||
The meeting produced four insurance asks. They are specified together because
|
||||
|
||||
Reference in New Issue
Block a user