Placement Document Generation Flow¶
This flow describes how documents are generated in Salesforce for the placement workflow.
sequenceDiagram
participant HM as Hiring Manager
participant Worker
participant Cruits
participant SF as Salesforce
Note over HM,Worker: Offer Phase
HM->>Worker: Send offer
Worker->>Cruits: Accept offer
Note over Cruits,SF: Entity Creation & Sync
Cruits->>Cruits: Create Placement
Cruits->>Cruits: Create Employment Contract
Cruits->>SF: Sync Placement to SF
SF->>Cruits: Return Placement.salesforce_ref
Cruits->>SF: Sync Employment Contract to SF
SF->>Cruits: Return EmploymentContract.salesforce_ref
Note over Cruits,SF: Document Generation (async, sequential per entity)
par Placement + Worker Documents
Note over Cruits,SF: After Placement gets salesforce_ref
Cruits->>SF: Generate Uitzendbevestiging (Apex)
SF->>SF: Create document from template
Cruits->>Cruits: Create GeneratedPlacementDocument (empty file)
Cruits->>SF: Generate Uitzendbevestiging DRAFT (Apex)
SF->>SF: Create document from template
Cruits->>Cruits: Create GeneratedPlacementDocument (empty file)
Cruits->>SF: Generate Codeofconduct (Apex)
SF->>SF: Create document from template
Cruits->>Cruits: Create GeneratedContactDocument (empty file)
Cruits->>SF: Generate ABU_Fair_Employment_Code (Apex)
SF->>SF: Create document from template
Cruits->>Cruits: Create GeneratedContactDocument (empty file)
and Employment Contract Documents
Note over Cruits,SF: After Employment Contract gets salesforce_ref
Cruits->>SF: Generate Arbeidscontract fase A ZUB (Apex)
SF->>SF: Create document from template
Cruits->>Cruits: Create GeneratedEmploymentContractDocument (empty file)
end
Note over Cruits,SF: Manual Document Upload (later)
HM->>SF: Download generated PDFs
HM->>Cruits: Upload files via Django Admin
Cruits->>Cruits: Set is_present_locally = True
Key Points¶
- Placement created → EmploymentContract created (via hook)
- Placement syncs to SF → gets
salesforce_ref→ Triggers document generation - EmploymentContract syncs to SF → gets
salesforce_ref→ Triggers document generation - Document generation happens in 2 parallel flows:
- Placement flow (after Placement gets
salesforce_ref):generate_placement_and_worker_documents()task starts- Calls
generate_placement_documents()- generates 2 placement documents sequentially - Calls
generate_worker_documents()- generates 2 worker documents sequentially
- Employment Contract flow (after EmploymentContract gets
salesforce_ref):generate_employment_contract_documents()task starts- Generates 1 employment contract document
- Sequential API calls: Each document type generates via separate Apex REST API call
- Each API call creates one document in Salesforce
- DB records created with empty file fields and
is_present_locally=False - Admin manually downloads from SF and uploads to Django later
- File upload sets
is_present_locally=True
Document Types¶
Placement Documents¶
- Uitzendbevestiging - Placement confirmation
- Uitzendbevestiging DRAFT - Draft placement confirmation
Employment Contract Documents¶
- Arbeidscontract fase A ZUB - Employment contract phase A
Worker Documents¶
- Codeofconduct - Code of conduct
- ABU_Fair_Employment_Code - ABU Fair Employment Code