Workflow Design
The Temporal workflow hierarchy — one main workflow, four specialised child workflow types, and multiple concurrent product provisioning sub-processes.
The Temporal Hierarchy
Every onboarding case is a single ClientServicingWorkflow execution, uniquely identified by case number. Child workflows and activities branch and fan out from this root — all coordinated by Temporal’s durable orchestration engine.
| Page | What It Covers |
|---|---|
| Main Workflow Phases | The 8-phase main workflow, segment gating, and the full phase map diagram |
| Compliance Gate | The ComplianceGateWorkflow child — Document Review and BSA/AML attestation |
| Product Provisioning Fan-Out | How multiple product child workflows run concurrently via Promise.allOf() |
| Entitlement Management | The day-2 EntitlementManagementWorkflow — post-onboarding user entitlement changes |
| Product Catalog | The full treasury product catalog, segmented by availability (SMALL · MEDIUM · ENTERPRISE) |
| Segment Routing | How clientSegment drives every routing decision through a single WorkflowConfig record |
Design Principles
One workflow per case. A single ClientServicingWorkflow execution handles the entire onboarding lifecycle — from intake to credential delivery. Case identity maps 1:1 to Temporal Workflow ID. There is no case “state machine” in a database being driven by a scheduler — the workflow is the state machine.
Human decisions are signals. Every operator action (approve, reject, attest, error recovery) arrives as a Temporal Signal. The workflow waits indefinitely and is immune to infrastructure restarts while waiting. The React workspace reads workflow state via @QueryMethod and receives task notifications via GraphQL subscriptions backed by Aurora writes.
Segment routing at the top. The clientSegment flag — SMALL, MEDIUM, or ENTERPRISE — is evaluated once at workflow start. All subsequent branching (which phases run, which child workflows are eligible, which products are available) derives from this single value via a WorkflowConfig record.