pdf task-h

This commit is contained in:
phaichayon
2026-06-19 15:09:58 +07:00
parent a85d24235c
commit fd01ebf7c7
35 changed files with 3905 additions and 133 deletions

512
plans/task-h.5.md Normal file
View File

@@ -0,0 +1,512 @@
# Task H.5: PDF Mapping Audit & Visual Parity
## Goal
ทำ Audit PDFME ทั้งระบบเพื่อให้ผลลัพธ์ PDF ของ ALLA OS มีความถูกต้องและใกล้เคียงกับระบบ CRM เดิมมากที่สุด
Focus:
* Mapping Accuracy
* Runtime Data Completeness
* Topic Rendering
* Table Rendering
* Signature Placement
* Visual Parity
Task นี้ยังไม่เพิ่ม Feature ใหม่
Task นี้เน้น:
```txt
Correctness
Consistency
Regression Detection
```
---
# Background
Task H.2 delivered:
```txt
Dynamic Topic Engine
Topic Runtime Expansion
PDFME Mapping Hotfix
```
Task H.3 delivered:
```txt
Prepared By
Approved By
Authorized By
```
However:
There is still no formal audit process proving that:
```txt
Template Schema
Mappings
Document Data
PDF Input
Rendered Output
```
remain synchronized.
---
# Scope H5.1 Template Inventory Audit
Create:
```txt
scripts/audit-pdf-template-inventory.ts
```
Purpose:
Scan every active template version.
Output:
```txt
Template Name
Version
Schema Fields
Table Fields
Dynamic Topic Fields
Unknown Fields
Duplicate Fields
```
Detect:
```txt
missing mappings
orphan mappings
duplicate mappings
```
---
# Scope H5.2 Mapping Coverage Audit
Create:
```txt
scripts/audit-pdf-mapping-coverage.ts
```
Audit:
```txt
crm_document_template_mappings
crm_document_template_table_columns
```
Verify:
Every PDFME field belongs to:
```txt
mapped field
dynamic topic field
system field
```
Flag:
```txt
unmapped field
```
Examples:
```txt
customer_att
quotation_date
quotation_price
topic
data_topic
app1
app2
app3
```
---
# Scope H5.3 Runtime Payload Audit
Create:
```txt
scripts/audit-pdf-runtime-payload.ts
```
Generate:
```txt
documentData
templateInput
pdfme.topic_inputs
```
Audit:
```txt
undefined
null
empty string
invalid arrays
```
Output:
```txt
field
value
source
status
```
---
# Scope H5.4 Dynamic Topic Audit
Audit:
```txt
crm_quotation_topics
crm_quotation_topic_items
```
Verify:
```txt
topic
data_topic
topic_1_0
item_topic_1_0
topic_1_1
item_topic_1_1
...
```
Rules:
```txt
no orphan topic
no orphan topic item
no duplicate topic section
```
Verify:
Multi-page expansion.
---
# Scope H5.5 Table Audit
Audit:
```txt
quotation items
```
Verify:
```txt
description
qty
unit
unit price
discount
amount
```
Match:
```txt
crm_quotation_items
```
Ensure:
```txt
table rows
table columns
totals
```
remain synchronized.
---
# Scope H5.6 Legacy CRM Comparison
Create:
```txt
docs/implementation/pdf-parity-checklist.md
```
Compare against:
Legacy CRM PDF.
Checklist:
```txt
Header
Customer Block
Project Block
Items
Topics
Price Summary
Signatures
Footer
```
Status:
```txt
Match
Partial
Missing
```
---
# Scope H5.7 Visual Parity Screenshots
Create:
```txt
scripts/generate-pdf-audit-report.ts
```
Generate:
```txt
PDF Audit JSON
PDF Audit Markdown
```
Include:
```txt
template version
quotation id
topic count
item count
field count
```
Purpose:
Future regression testing.
---
# Scope H5.8 Mapping Registry Freeze
Create:
```txt
docs/business/pdf-mapping-registry.md
```
Document:
```txt
PDF Field
Source Path
Transform
Example Value
```
Examples:
```txt
quotation_date
quotation.quotationDate
formatPdfDate()
quotation_price
quotation.totalAmount
formatPdfCurrency()
customer_att
quotation.attention
topic
dynamic topic engine
app1
signature.preparedBy.name
```
This becomes the source of truth.
---
# Scope H5.9 Preview / Approved Consistency
Verify:
```txt
Preview PDF
Approved Snapshot
Approved PDF
```
must produce identical business content.
Differences allowed:
```txt
watermark
generated timestamp
artifact metadata
```
Everything else:
```txt
must match
```
---
# Scope H5.10 Regression Fixture
Expand:
```txt
seed-task-h1-fixture.js
```
Create:
```txt
QT-H5-AUDIT
```
Contains:
```txt
multiple topics
multiple topic items
multiple project parties
multiple quotation items
approval history
```
Purpose:
Stable audit dataset.
---
# Scope H5.11 Verification
Create:
```txt
npm run audit:pdf
```
Runs:
```txt
audit-pdf-template-inventory
audit-pdf-mapping-coverage
audit-pdf-runtime-payload
generate-pdf-audit-report
```
Output:
```txt
PASS
WARNING
FAIL
```
---
# ADR
Create:
```txt
docs/adr/0013-pdf-visual-parity-strategy.md
```
Freeze:
```txt
PDF Mapping Registry
Audit Process
Visual Parity Rules
Preview vs Approved Consistency
```
---
# Explicit Non-Scope
Do NOT implement:
```txt
signature image
draw signature
digital signature
template designer rewrite
new PDF engine
```
Those belong to later tasks.
---
# Output
1. Files Added
2. Files Modified
3. Mapping Coverage Result
4. Runtime Payload Result
5. Topic Audit Result
6. Table Audit Result
7. Visual Parity Result
8. ADR Added
9. Remaining Risks
---
# Definition of Done
✔ Every active PDF field mapped
✔ No orphan mappings
✔ No unresolved placeholders
✔ Dynamic topics verified
✔ Quotation table verified
✔ Preview and approved PDF consistent
✔ Mapping registry documented
✔ Audit command available
✔ Visual parity checklist completed
✔ ADR created