Files
alla-allaos-fullstack/docs/business/pdf-mapping-registry.md
phaichayon 51d67ef7c2 task-h.5.3
2026-06-19 17:15:28 +07:00

3.6 KiB

PDF Mapping Registry

This document is the source of truth for active quotation PDF field ownership.

PDF Field Source Path Transform Example Value
customer_name customer.name direct ALLA Demo Customer
customer_addr customer.address direct multiline 99/9 Rama IX Road, Bangkok 10310
customer_tel customer.phone direct 02-000-1000
customer_email customer.email direct demo-customer@local.test
customer_att quotation.attention direct Task H.1 Contact
project_name quotation.projectName direct Task H.5 Audit Fixture
site_location quotation.projectLocation direct multiline Bangkok HQ
tel_label pdfme.labels.tel static label Tel
email_label pdfme.labels.email static label Email
att_label pdfme.labels.att static label Att
project_label pdfme.labels.project static label Project
site_label pdfme.labels.location static label Location
quotation_date pdfme.quotation_date formatPdfDate() canonical alias 16 Jun 2026
quotation_date_data pdfme.quotation_date active-template field-name mapping 16 Jun 2026
quotation_code quotation.code direct canonical alias QT-H5-AUDIT
quotation_code_data quotation.code active-template field-name mapping QT-H5-AUDIT
quotation_price_data pdfme.quotation_price_data buildPdfPriceTableData() [["Price (Exclude VAT)", "฿125,000.00", " ", "THB"]]
quotation_price pdfme.quotation_price compatibility scalar THB 125,000.00
currency quotation.currency compatibility scalar THB
app1 signatures.preparedBy.name direct Task H.1 Admin
app1_position signatures.preparedBy.position position resolver Sales Manager
app2 signatures.approvedBy.name direct Task H.1 Admin
app2_position signatures.approvedBy.position position resolver Sales Manager
app3 signatures.authorizedBy.name direct Task H.1 Admin
app3_position signatures.authorizedBy.position position resolver Sales Manager
topic dynamic topic engine runtime schema clone topic label table
data_topic dynamic topic engine runtime schema clone topic item table
topic_* documentData.topics.all[*].topicType runtime generated Scope
item_topic_* documentData.topics.all[*].items formatTopicItems() topic rows

Version Remap Rules

  • template JSON changes must create a new crm_document_template_versions row instead of patching the old version in place
  • active mappings are rebuilt only for fields or placeholder tokens that still exist in the new version
  • previous approved snapshots may keep referencing retained inactive versions
  • deleted fields from the previous version, such as exclusion_data and exclusion_label, must not remain active mappings on the new version

Alias Notes

  • current PDFME schema uses field containers named quotation_date_data and quotation_code_data
  • runtime normalization publishes both canonical aliases (quotation_date, quotation_code) and the active field-name mappings so preview, audit, and render stay aligned
  • quotation_price_data is the canonical price table contract
  • quotation_price and currency remain compatibility scalars because the active table content still embeds those placeholder tokens
  • static labels are runtime-driven through documentData.pdfme.labels.*, not designer-only hardcoded text