Recommended workflow has five stages, not five model calls. Stage 1 code gate ingests source IDs, hashes message plus attachments for deduplication, validates extraction, detects currency/date tokens, and stores restricted references—not raw confidential text in logs. Duplicate hash links to the existing packet. Stage 2 read-only search uses verified supplier identifiers; zero or multiple active contracts routes to analyst exception and stops. Name similarity alone never selects a contract.
Stage 3 code builds a provenance bundle: quoted spans, contract spans, timestamps, parsed money/date values, and recalculated deltas. Parse or currency conflict stops before generation. Stage 4 model compares only the bundle and returns a schema separating stated proposal, signed evidence status, commercial/operational change, missing evidence, questions, and source references. Its prompt forbids legal conclusions, acceptance language, and converting a quote into an amendment. Schema, citations, numbers, currencies, and unsupported-claim checks run afterward; one timeout retry uses the same idempotency key. Validation failure routes to exception, never a silent repair.
Stage 5 model drafts a neutral clarification reply only from validated fields, labeled DRAFT—NOT SENT. An analyst gate reviews packet and edits or approves queuing; there is no send permission. State machine: received, deduplicated, match_pending, evidence_ready, comparison_valid, draft_ready, review_required, exception. Audit records source IDs, contract version, prompt/version, validation results, timestamps, reviewer, and disposition. End-to-end tests cover exact match, duplicate forward, zero/two contracts, unsigned quote, conflicting currency, missing attachment, timeout, and malicious attachment instructions. A single prompt is inappropriate because matching, arithmetic, deduplication, and authorization require separate deterministic gates.