FS-09 · Archive engagement
SOP:
SOP_Financial_Statements.md§6 / Step 9.0 (NOTES_COMPLETE → ARCHIVED)Actors: FS Reviewer, Senior Accountant, or Platform Admin —MANAGE_FS_ENGAGEMENT. Pre-state: Engagement atNOTES_COMPLETEwith the client decision captured (if portal review was used). Post-state: Engagement atARCHIVED— terminal state, read-only. Retention policy applies.
0. Prerequisites
- Engagement at
NOTES_COMPLETE(see FS-06). - All exports are recorded.
- Where used, the client portal sign-off (see FS-08) is complete.
1. Steps
1.1 Trigger archive
http
POST /ops/financial-statements/engagements/<engagementId>/archive
Authorization: Bearer <fs-reviewer-jwt>(Or click Archive on the engagement detail page.)
The handler:
- Asserts
MANAGE_FS_ENGAGEMENT. - Asserts engagement is at
NOTES_COMPLETE(and not alreadyARCHIVED). - Transitions engagement
NOTES_COMPLETE → ARCHIVED. - Emits
AuditEventfs.engagement.archived.
2. Verification
Database
sql
SELECT status FROM fs_engagements WHERE id = '<engagementId>';
-- expect 'ARCHIVED'UI
The engagement detail page now shows the ARCHIVED badge and no edit / regenerate / export controls.
Audit log
| Event type | Notes |
|---|---|
fs.engagement.archived | actor + timestamp |
3. Negative & edge cases
- Archive from
NOTES_ERROR— refused; resolve the notes failure first. - Archive from
STATEMENTS_GENERATED— refused; complete notes first (this prevents shipping an engagement without notes). - Re-open an archived engagement — not supported in code. The FSM has no transition out of
ARCHIVED. If the client genuinely needs to amend, create a new engagement for the same period with a-v2suffix on the financial-year label and document the change reason in the activity log. - Retention purge — out of scope for this flow. The retention job reads
ARCHIVEDengagements withupdatedAt > retention_windowand purges the bytes (audit metadata is kept).
Next
End of the FS engagement lifecycle. For the related downstream flow, see the XBRL filing userflows.