← All work  ·  Case 01 of 08 · Shipped · Phase 1 delivered

Quote Parser: nine supplier formats in, clean line items out, with an analyst checking every row.

A healthcare purchasing analytics team prices supplier quotes for hospitals. Before any of that judgment could happen, analysts retyped every line by hand. I led the AI + business-rules engine that replaced the retyping. The judgment stays with the analyst.

Architecture & role
Claude on AWS BedrockFastAPI · ReactProduct Owner, sole builderOct–Dec 2025 buildIn production since Jan 2026
Impact · AI quote automation
+11.7%
Quotes / analyst
vs 131.6 in 2025
+30.3%
Line items
Time held flat
99.9%
Accuracy
~1 / 1,000 quotes
Jan '26
Live since
Built Oct–Dec '25
$0.03–.06
Cost / quote
5–45 sec latency
3.45d
Guardrail
Delivery ↑ 8.5%
Chapter 01Problem space

The expensive part of the job was becoming data entry.

Healthcare organizations buy equipment from suppliers like GE Healthcare, Philips, and Siemens, each pricing quotes differently. Before an analyst could apply any judgment, they had to retype every line into a structured format: PDFs, scans, spreadsheets and emails, in at least nine distinct layouts. Line items per quote were climbing every year, and the team preparing them was getting smaller.

Pricing analysts, about 10.5 FTE in 2026, own the final number the customer sees, so any tool had to leave them in control rather than replace their call.

Supplier Quotes

9+ Layouts

LLM + Parsers

Extraction

Business Rules

Logic & Derivation

Computed or N/A
Analyst Review

Verification

CSV Export

Clean Line Items

Nine layouts

No two suppliers price the same way. A fixed template breaks on the next vendor.

Climbing complexity

Line items per quote rose 30.6% from 2024 to 2025, before the AI even shipped.

Shrinking team

Analyst capacity fell from 17.0 to 10.5 FTE across the same period.

Chapter 02Architecture

AI reads the document. Rules compute what can be derived. Everything else says so.

The analyst uploads a quote. The model reads document context, not fixed coordinates, and returns every line item: product, description, quantity, list price, quoted price. Where a price can be derived from what the supplier gave (List = Net ÷ (1 − Discount)), a deterministic rule computes it. Where a field genuinely can't be derived, it comes back as "N/A" instead of a guess. That's the rule I care about most: a blank cell gets checked; a wrong number that looks right gets shipped to a hospital.

The architecture stayed boring on purpose: one prompt, no agents, no retrieval, SQLite and lightweight auth. Claude runs on AWS Bedrock because quote data stays inside the company's own cloud account, which is what got this past security review.

This extraction engine is one slice of a larger legacy-modernization effort, Phoenix. It shipped first, standalone, because it proved the AI worked on real quotes before the platform rebuild absorbed it. More on Phoenix →

Legacy manual auditvsGrounded extraction (production)

Before

✕ Read every line of every quote by hand
✕ Manually calculated List / Discount / Net Price
✕ Errors surfaced downstream, not upstream

After

✓ Upload the PDF, nothing else
✓ AI extracts, rules compute what's derivable, N/A flags the rest
✓ Every extraction reviewed before it goes anywhere
Chapter 03Measured outcomes

The honest read: quotes are moving, delivery time got worse.

How to read this honestly
North Star

Quotes per FTE per month

↑ 11.7%
120.62024
131.62025
147.02026 YTD Aug
9.02
Line items / quote
35.5m
Handling time, flat

Read honestly: complexity and productivity were already rising before the AI. The 2026 gain is associated with it, not proven to be caused by it.

Capacity

Analyst FTE

↓ 20.8%
17.02024
13.252025 weighted
10.52026
3.45d
Delivery ↑ 8.5%

Rose in the same period the tool went live. Whether it returns to 2025 levels is the next thing to measure.

Chapter 04Decisions & tradeoffs

Five calls that shaped the build.

01

Why AI, not templates

The hard part is judgment: is this row a bundle or a sub-line? Encoded as a 7-step fallback chain for list price, an 8-step chain for quoted price.

02

Why rules compute what they can, nothing else guesses

Derivable prices get a formula. Truly unknown fields get N/A, never a plausible-looking number a hospital would pay against.

Guardrail
03

Why CSV first, not platform write-back

Write-back meant months of dependency on another team's roadmap. A CSV analysts import themselves shipped in one quarter.

04

Why humans stayed in the loop

The analyst reviews every extraction before it goes anywhere. Latency 5–45 sec/quote, est. cost $0.03–$0.06/quote.

HITL
05

Why a phased rollout

WSJF-prioritized against 5 competing initiatives: ship normalization first, let usage tell us what Phase 2 needed.

Chapter 05My role

What I owned as Product Owner.

Discovery & Validation

I personally shadowed analysts during quote prep and mapped the exact preprocessing gaps. When engineering pushed for a full UI integration, I made the call to ship a standalone CSV pipeline first to de-risk adoption.

Strategy & roadmap

I defined the phased roadmap and presented the WSJF framework that got this funded over 5 competing initiatives. I authored every pricing and quantity business rule that governed the fallback logic.

Execution & delivery

I wrote the user stories, managed the backlog, and built the tool myself on Claude via AWS Bedrock, working directly with the pricing desk. I personally ran the final UAT validation that proved our 99.9% accuracy metric.

Chapter 06Lessons

What this taught me about shipping AI products.

Solve the right problem. The bottleneck wasn't document extraction. It was everything analysts did before benchmarking could even start.

Build the labeled test set on day one. I know the tool works because analysts say so and the scorecard moved, but I can't prove extraction accuracy with a number. Phoenix fixed this with an evaluation harness.

The best metric was analyst-reported. "I can breathe now," from one of the leads, mattered more than the throughput number.

✦ Next
Benchmarking automation, then report generation, then an integrated workflow with human review at each step.
Next case

Regulatory Content Engine

Automating legal tracking with hashed HTML snapshots and Claude.

→
Interactive walkthrough

Quote extraction, step by step.

Illustrative recreation with a synthetic sample quote, not real employer data, since the production system runs on employer infrastructure. The pattern (extract, compute what's derivable, flag what isn't, human review) is the real architecture.

sample_supplier_quote_synthetic.pdf
Illustrative sample · not a real quote
01 · Ingestion
Guardrail telemetry
N/A over guess, held100%
Human review before ship100%

Let's build what actually ships.