How these were drawn

States come from the status enums; transitions are reconstructed from the controller actions and abilities that move records between them. The API may enforce additional rules not visible in the frontend.

Proposal

Source: enums/proposal-status.js + publish/request/reject/unpublish/expire actions · see Proposal list & publication workflow

stateDiagram-v2
    direction LR
    [*] --> draft
    draft --> pending: request publication
    pending --> draft: reject publication
    pending --> scheduled: publish (future start)
    pending --> active: publish (start reached)
    draft --> scheduled: publish (manager)
    draft --> active: publish (manager)
    scheduled --> active: start date
    active --> draft: unpublish
    scheduled --> draft: unpublish
    active --> expired: expire (end date = today)
    active --> expired: end date
    expired --> [*]

Activity (campaign)

Source: enums/campaign-status.js + campaign abilities · see Activity list & duplication

stateDiagram-v2
    direction LR
    [*] --> planned
    planned --> active: start date
    active --> finished: end date
    finished --> closed: close with rating
    note right of finished : report available (canShow)
    note right of closed : only root/admin may edit or delete

Receipt

Source: enums/receipt-status.js + validate/reject/unreject · see Receipt verification queue

stateDiagram-v2
    direction LR
    [*] --> draft
    draft --> pending: automatic checks inconclusive
    draft --> redeemable: automatic validation
    pending --> redeemable: moderator validates
    pending --> not_yet_redeemable: validated, entitlement later
    pending --> not_redeemable: validated, cannot redeem
    pending --> rejected: moderator rejects (reason)
    redeemable --> redeemed: entitlement issued
    not_yet_redeemable --> redeemable
    rejected --> redeemable: unreject (re-validate)
    redeemed --> [*]

Store sales month

Source: enums/shop-month-states.js + close/confirm/reject/reopen · see Store sales declaration & month closing

stateDiagram-v2
    direction LR
    [*] --> without_sales
    without_sales --> unclosed: first sale entered
    unclosed --> closed: store closes month
    closed --> validated: management confirms
    closed --> unclosed: management rejects (communication sent)
    validated --> unclosed: admin/manager reopens
    note right of validated : store users can only request reopening

Annual sales statement

Source: enums/intranet-sales-years-states.js · see Annual sales statement

stateDiagram-v2
    direction LR
    [*] --> unrequested
    unrequested --> pending: statement enabled
    pending --> validated: every month validated + manager validates
    pending --> rejected: manager rejects (communication sent)
    rejected --> pending: store resubmits

Email campaign

Source: enums/emailing-campaign-status.js · see Email campaign list, duplication & stop

stateDiagram-v2
    direction LR
    [*] --> draft
    draft --> scheduled: publish
    scheduled --> active: start datetime
    active --> archived: end / single send done
    scheduled --> archived: stop
    active --> archived: stop

Push notification

Source: enums/push-notification-status.js · see Push notification list & publishing

stateDiagram-v2
    direction LR
    [*] --> draft
    draft --> scheduled: publish (start in future)
    scheduled --> active: start datetime
    active --> archived: end datetime / single send