Files
alla-allaos-fullstack/docs/implementation/task-h5-pdf-mapping-audit-visual-parity.md
phaichayon 51d67ef7c2 task-h.5.3
2026-06-19 17:15:28 +07:00

1.9 KiB

Task H.5: PDF Mapping Audit & Visual Parity

Files Added

  • scripts/pdf-audit-utils.ts
  • scripts/audit-pdf-template-inventory.ts
  • scripts/audit-pdf-mapping-coverage.ts
  • scripts/audit-pdf-runtime-payload.ts
  • scripts/generate-pdf-audit-report.ts
  • docs/implementation/pdf-parity-checklist.md
  • docs/business/pdf-mapping-registry.md
  • docs/adr/0013-pdf-visual-parity-strategy.md
  • docs/implementation/task-h5-pdf-mapping-audit-visual-parity.md

Files Modified

  • package.json
  • scripts/seed-task-h1-fixture.js

Audit Coverage

  • template inventory audit scans active template versions, schema field names, table fields, dynamic topic fields, duplicates, missing mappings, and orphan mappings
  • mapping coverage audit compares placeholder tokens with DB mappings and table-column metadata
  • runtime payload audit inspects resolved documentData, templateInput, and pdfme.topic_inputs
  • report generator writes JSON and Markdown summary artifacts for regression review

Fixture Strategy

  • seed-task-h1-fixture.js now also provisions QT-H5-AUDIT
  • the audit fixture is intended to carry richer topic/item/party coverage than the original H.1 smoke dataset

Remaining Risks

  • approved snapshot parity remains a warning when the target quotation has never generated an approved PDF artifact
  • the audit suite validates business payload parity, not pixel-perfect PDF screenshots
  • manual review is still needed when template designers move static labels or brand blocks

H.5.3 Follow-up

  • template JSON revisions now flow through a dedicated version-remap step instead of patching 1.0 in place
  • static labels such as tel_label, email_label, att_label, project_label, and site_label are now runtime-mapped rather than tolerated as blank designer placeholders
  • deleted fields from the previous version, notably exclusion_data and exclusion_label, are explicitly classified and removed from the active mapping set