50 lines
1.5 KiB
Markdown
50 lines
1.5 KiB
Markdown
# ADR 0013: PDF Visual Parity Strategy
|
|
|
|
## Status
|
|
|
|
Accepted
|
|
|
|
## Context
|
|
|
|
The quotation PDF flow now includes:
|
|
|
|
- production PDFME templates per organization
|
|
- DB-backed mapping registry
|
|
- dynamic topic expansion
|
|
- approval signature resolution
|
|
- approved snapshot persistence
|
|
|
|
What was missing was a repeatable audit strategy proving that template schema, mappings, runtime payload, and approved snapshot content remain synchronized over time.
|
|
|
|
## Decision
|
|
|
|
- freeze a documented PDF mapping registry in `docs/business/pdf-mapping-registry.md`
|
|
- keep a human-readable parity checklist in `docs/implementation/pdf-parity-checklist.md`
|
|
- add an audit suite:
|
|
- `audit-pdf-template-inventory`
|
|
- `audit-pdf-mapping-coverage`
|
|
- `audit-pdf-runtime-payload`
|
|
- `generate-pdf-audit-report`
|
|
- expose the suite through `npm run audit:pdf`
|
|
- prefer the stable fixture quotation code `QT-H5-AUDIT` for repeatable audits when available
|
|
- compare preview runtime content against approved snapshot content for business-field consistency
|
|
|
|
## Visual Parity Rules
|
|
|
|
- allowed differences:
|
|
- watermark state
|
|
- generated timestamp
|
|
- artifact metadata
|
|
- disallowed differences:
|
|
- customer identity
|
|
- quotation commercial values
|
|
- topic content
|
|
- signature identity
|
|
- mapped table content
|
|
|
|
## Consequences
|
|
|
|
- regressions in template coverage become detectable without opening every PDF manually
|
|
- mapping ownership is explicit and reviewable
|
|
- future PDF changes must update both runtime logic and the registry/checklist when business content changes
|