← All Diagrams

Policy Lifecycle State Machine

state diagram

Policy workflow from draft creation through approval, publishing, template update acceptance, expiry, and renewal — including all API endpoints and self-approval guard.

Source: policy-state-machine.mmd

stateDiagram-v2
    [*] --> draft : Manager/Admin creates policy\n(blank or from template)

    draft --> pending_approval : Manager submits for review\nPOST /api/policies/{id}/submit\n[or POST /api/policies/{id}/approval-request]

    pending_approval --> draft : Admin rejects\nPOST /api/policies/{id}/approve {action:"reject"}\n→ notifies creator with rejection reason

    pending_approval --> approved : Admin approves\nPOST /api/policies/{id}/approve {action:"approve"}\n[self-approval blocked if adminCount > 1]

    approved --> published : Admin publishes\nPOST /api/policies/{id}/publish\n→ notifies all scoped employees

    published --> expiring : Cron job detects\nexpirationDate ≤ 30 days away

    expiring --> expired : Cron job detects\nexpirationDate passed

    expired --> draft : Admin renews (content changed)\nPOST /api/policies/{id}/renew {contentChanged:true}

    expiring --> published : Admin renews (dates only)\nPOST /api/policies/{id}/renew {contentChanged:false}

    draft --> [*] : Admin hard-deletes draft\nDELETE /api/policies/{id}

    note right of draft
        Template linkage fields:
        • sourceTemplateId
        • sourceVersion
        • sections[]
        Template update flow:
        templateUpdateAvailable → banner shown
        ↓ accept: merge template sections
        ↓ dismiss: clear flag
    end note

    note right of pending_approval
        Approval thread:
        GET /api/policies/{id}/approval-request
        POST /api/policies/{id}/approval-request/comment
        Comments visible to creator + reviewers
    end note

    note right of published
        Acknowledgment:
        POST /api/policies/{id}/acknowledge
        Tracks per-user annual sign-off
        needsAcknowledgment flag on GET /api/policies/{id}
    end note