3.0 KiB
3.0 KiB
Task H.3: Approval Signature Strategy
Files Added
src/features/crm/quotations/document/signature.types.tssrc/features/crm/quotations/document/signature-position.tssrc/features/crm/quotations/document/server/signature-resolver.tsscripts/verify-task-h3.jsdocs/adr/0012-approval-signature-strategy.mddocs/implementation/task-h3-approval-signature-strategy.md
Files Modified
src/features/crm/quotations/document/types.tssrc/features/crm/quotations/document/server/service.tssrc/features/crm/quotations/components/quotation-document-preview.tsxsrc/features/foundation/pdf-generator/server/service.tssrc/db/seeds/foundation.seed.tsdocs/implementation/technical-debt.mdpackage.json
Signature Resolution Strategy
Prepared Byresolves fromquotation.salesmanId, then falls back toquotation.createdByApproved Byresolves from the latest approved workflow action forsales_managerordepartment_manager, excluding the final authorization stepAuthorized Byresolves from the latest approved workflow action for the final workflow step, which istop_managerin the standard flow- each signature block now carries:
namepositionactedAt
Position Resolution Strategy
- primary source is
memberships.businessRole - display label first checks active
crm_job_titlemaster options - fallback labels are:
sales->Sales Engineersales_support->Sales Supportsales_manager->Sales Managerdepartment_manager->Department Managertop_manager->General Manager
PDF Mapping Changes
app1->signatures.preparedBy.nameapp1_position->signatures.preparedBy.positionapp2->signatures.approvedBy.nameapp2_position->signatures.approvedBy.positionapp3->signatures.authorizedBy.nameapp3_position->signatures.authorizedBy.position
Snapshot Changes
prepareApprovedQuotationSnapshot()now stores the resolved signature block throughdocumentData- persisted
templateInputnow preserves the text values used forapp1/app2/app3 - approved PDF generation prefers snapshot input when a snapshot already exists
UI Changes
- quotation document preview now shows an
Approval Signaturessection - each block displays:
- name
- position
- timestamp when available
Verification Result
scripts/verify-task-h3.jsvalidates:- DB mappings for
app1/app2/app3 crm_job_titlemaster options- approved snapshot signature payload
- approved snapshot template input alignment
- DB mappings for
Remaining Risks
- organizations with custom approval roles outside the current sales-manager / department-manager / final-step model may need an extended resolver rule later
Prepared Bycurrently uses quotationcreatedAtas the available timestamp because the system does not yet store a separate “prepared at” event- end-to-end PDF binary text extraction is still not automated; verification currently proves snapshot and template-input integrity