Skip to content

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 at NOTES_COMPLETE with the client decision captured (if portal review was used). Post-state: Engagement at ARCHIVED — 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:

  1. Asserts MANAGE_FS_ENGAGEMENT.
  2. Asserts engagement is at NOTES_COMPLETE (and not already ARCHIVED).
  3. Transitions engagement NOTES_COMPLETE → ARCHIVED.
  4. Emits AuditEvent fs.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 typeNotes
fs.engagement.archivedactor + 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 -v2 suffix 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 ARCHIVED engagements with updatedAt > retention_window and purges the bytes (audit metadata is kept).

Next

End of the FS engagement lifecycle. For the related downstream flow, see the XBRL filing userflows.

Internal use only — BreezyCorp