Files
alla-allaos-fullstack/docs/implementation/task-h2-pdfme-mapping-transform-hotfix.md
2026-06-18 08:58:01 +07:00

4.3 KiB

Task H.2: PDFME Dynamic Topic Engine + Mapping Hotfix

Files Added

  • src/features/crm/quotations/document/server/pdfme-transforms.ts
  • src/features/crm/quotations/document/server/pdf-topic.type.ts
  • src/features/crm/quotations/document/server/pdf-topic-engine.ts
  • src/features/crm/quotations/document/server/topic-mapping.ts
  • docs/implementation/task-h2-pdfme-mapping-transform-hotfix.md

Files Modified

  • src/features/crm/quotations/document/server/service.ts
  • src/features/crm/quotations/document/types.ts
  • src/features/crm/quotations/components/quotation-document-preview.tsx
  • src/features/foundation/document-template/server/service.ts
  • src/db/seeds/foundation.seed.ts
  • scripts/verify-task-h1.js
  • scripts/audit-pdfme-runtime.ts
  • docs/implementation/technical-debt.md

Transform Utilities Added

  • formatPdfDate()
  • formatPdfCurrency()
  • formatTopicItems()
  • normalizePdfmeTable()

Dynamic Topic Engine Added

  • page-2 topic and data_topic schemas are now treated as dynamic templates instead of static mappings
  • topic blocks are cloned into runtime keys like topic_1_0 and item_topic_1_0
  • topic rows are normalized into string[][]
  • the closing/signature block is kept together and pushed to the next page when remaining space is too small
  • long topic lists can expand page 2 into multiple generated pages

Product Topic Mapping Added

  • product-type-aware topic mapping with crane, dockdoor, solarcell, and default fallbacks
  • alias matching allows current simplified option codes and legacy-style topic codes to resolve into PDFME-ready sections

Template Mappings Fixed

  • customer_att -> quotation.attention
  • quotation_date -> pdfme.quotation_date
  • quotation_price -> pdfme.quotation_price
  • exclusion_data -> pdfme.exclusion_data
  • legacy item_topic mapping is now explicitly retired from foundation seed data because dynamic topics are schema-driven

Seed Mapping Strategy After Dynamic Topic Engine

  • default PDFME seed mappings now keep only static runtime fields plus safe signature placeholders
  • quotation_date and quotation_price are seeded against the preformatted pdfme.* fields with no extra format mask
  • topic, data_topic, item_topic, and wildcard runtime keys such as topic_* / item_topic_* are retired from DB mappings
  • signature placeholders app1/app2/app3 and position fields are seeded with safe defaultValue: "-" until Task H.3 defines the real approval-signature strategy

PDF Generator Integration

  • quotation preview data now returns a render-ready PDFME schema with injected topic pages
  • templateInput now merges dynamic topic inputs with normal mapped fields
  • approved snapshot generation now captures the same merged topic input set used by PDF generation
  • the existing PDF generator flow now consumes the render-ready schema returned by the preview service

Verification Result

  • npx tsc --noEmit passed
  • scripts/verify-task-h1.js now asserts:
    • formatted quotation_price
    • formatted quotation_date
    • non-empty exclusion_data
    • generated dynamic topic keys in preview payload
    • documentData.pdfme.topic_inputs
    • no unresolved {exclusion_data}, {quotation_price}, and {item_topic} in approved PDF text
  • inline tsx smoke testing for the new engine was inconclusive because the local script loader exposed the module as a default-only object even though project typecheck succeeded
  • full verify:task-h1 end-to-end execution was not run in this turn because it depends on a live app server and fixture database state

Remaining PDFME Gaps

  • approval signature placeholders are still not mapped to real approver names/positions
  • pixel-perfect parity with the legacy layout has not been regression-tested automatically
  • scripts/audit-pdfme-runtime.ts still needs a stable standalone runtime strategy if we want to use it outside the Next.js execution context

Task K Readiness

  • dynamic server-side topic rendering now exists, so follow-on PDF tasks can build on runtime schema generation instead of adding more fixed placeholders
  • seed data and template mapping are aligned with the current ALLA / ONVALLA templates
  • the next safe step is end-to-end fixture verification against a running app plus any remaining signature-field strategy