Parent: Expensify/Expensify#589894
Design doc: https://docs.google.com/document/d/1qQXU4EIij-OyCpk6z8idi0ch0rP4XtIQ0770STZeF5E/edit
Scope
Branch CertiniaImportPage to render PSA content when hasPSA === true, and create the new CertiniaTagsMappingPage reached from the new Tags push row.
Implementation notes (from design doc)
CertiniaImportPage.tsx — Add PSA conditional rendering
Read const hasPSA = policy?.connections?.financialForce?.config?.hasPSA. When hasPSA === true, render PSA content instead of FFA content:
- Expense Type GLA Mappings (locked):
ToggleSettingOptionRow with isActive={true}, disabled={true}. Subtitle: "FinancialForce Expense Type GLA Mappings are imported into Expensify as categories."
- Tags:
MenuItemWithTopDescription → POLICY_ACCOUNTING_CERTINIA_TAGS_MAPPING.getRoute(policyID). title = translated label for config?.coding?.parentTagMapping.
- Milestones:
ToggleSettingOptionRow. isActive={!!config?.coding?.syncMilestones}. onToggle={(enabled) => updateFinancialForceSyncMilestones(policyID, enabled)}.
No Tax toggle for PSA.
src/pages/workspace/accounting/certinia/import/CertiniaTagsMappingPage.tsx — Create
SelectionScreen with RadioListItem. Three options:
'PARENT_TAG_PROJECTS_AND_ASSIGNMENTS' → "Projects and Assignments"
'PARENT_TAG_PROJECTS' → "Projects"
'PARENT_TAG_ASSIGNMENTS' → "Assignments"
Active value: config?.coding?.parentTagMapping. Calls updateFinancialForceParentTagMapping(policyID, value).
Tests
- PSA workspace (
hasPSA === true): import page shows locked Expense Type GLA Mappings toggle, Tags push row, Milestones toggle — no Dimension rows, no Tax toggle.
- FFA workspace: import page renders the original Release 1 content unchanged.
- Tags Mapping page shows 3 radio options; selecting one updates the source page subtitle optimistically and reverts on simulated failure.
- Milestones toggle fires the action with pending indicator and reverts on failure.
Issue Owner
Current Issue Owner: @thelullabyy
Parent: Expensify/Expensify#589894
Design doc: https://docs.google.com/document/d/1qQXU4EIij-OyCpk6z8idi0ch0rP4XtIQ0770STZeF5E/edit
Scope
Branch
CertiniaImportPageto render PSA content whenhasPSA === true, and create the newCertiniaTagsMappingPagereached from the new Tags push row.Implementation notes (from design doc)
CertiniaImportPage.tsx— Add PSA conditional renderingRead
const hasPSA = policy?.connections?.financialForce?.config?.hasPSA. WhenhasPSA === true, render PSA content instead of FFA content:ToggleSettingOptionRowwithisActive={true},disabled={true}. Subtitle: "FinancialForce Expense Type GLA Mappings are imported into Expensify as categories."MenuItemWithTopDescription→POLICY_ACCOUNTING_CERTINIA_TAGS_MAPPING.getRoute(policyID).title= translated label forconfig?.coding?.parentTagMapping.ToggleSettingOptionRow.isActive={!!config?.coding?.syncMilestones}.onToggle={(enabled) => updateFinancialForceSyncMilestones(policyID, enabled)}.No Tax toggle for PSA.
src/pages/workspace/accounting/certinia/import/CertiniaTagsMappingPage.tsx— CreateSelectionScreenwithRadioListItem. Three options:'PARENT_TAG_PROJECTS_AND_ASSIGNMENTS'→ "Projects and Assignments"'PARENT_TAG_PROJECTS'→ "Projects"'PARENT_TAG_ASSIGNMENTS'→ "Assignments"Active value:
config?.coding?.parentTagMapping. CallsupdateFinancialForceParentTagMapping(policyID, value).Tests
hasPSA === true): import page shows locked Expense Type GLA Mappings toggle, Tags push row, Milestones toggle — no Dimension rows, no Tax toggle.Issue Owner
Current Issue Owner: @thelullabyy