2.3 KiB
2.3 KiB
ADR 0012: Approval Signature Strategy
Status
Accepted
Context
Quotation PDF templates already contain the signature placeholders app1, app2, app3 and their position fields, but earlier tasks only seeded safe fallback values. The production document flow now needs a deterministic rule for:
- who is shown as
Prepared By - who is shown as
Approved By - who is shown as
Authorized By - how each person’s position is resolved
- how approved documents stay immutable after approval
Decision
Prepared By
- resolve from
crm_quotations.salesman_id - fallback to
crm_quotations.created_by - always render the user display name, never a raw id
- use quotation
created_atas the available timestamp for the prepared block
Approved By
- resolve from live approval history in
crm_approval_actions - consider only
approveactions - choose the latest approved action whose workflow role is one of:
sales_managerdepartment_manager
- exclude the workflow’s final approval role from this slot
Authorized By
- resolve from the latest approved action for the workflow’s final step
- in the standard workflow this is expected to be
top_manager
Position Resolution
- primary source is
memberships.business_role - display label should come from active
ms_optionsin categorycrm_job_titlewhen available - if the master option is missing, fallback labels are:
sales->Sales Engineersales_support->Sales Supportsales_manager->Sales Managerdepartment_manager->Department Managertop_manager->General Manager
Snapshot Immutability
- preview PDF resolves signatures from live quotation and approval data
- approved snapshot stores the resolved signature block and resolved template input
- approved PDF generation prefers snapshot signature input when a snapshot already exists
- locked approved artifacts remain the immutable historical source
Consequences
- signature placeholder mapping is now explicit and organization-aware
- template output no longer depends on hardcoded placeholder text in the PDFME template
- position labels can be governed centrally through master options without changing generator code
- approved documents preserve approval identity even if user names, memberships, or master options change later