Invoice Lifecycle

An invoice has two independent state machines: a workflow status and a payment status. They're updated by two different endpoints and don't move in lock-step, except that marking an invoice fully paid also advances its workflow status to paid.

Workflow status

text
CREATE
              |
              v
           [draft]  <--------+
              |               |
       approve/reject    revert to draft
              |               |
        +-----+-----+---------+
        v           v
   [approved]   [cancelled]
        |
    (once validated/submitted/transmitted/reported to FIRS, the invoice is
     locked — Update Invoice returns 409 and further status changes stop
     making sense outside FIRS's own lifecycle)
From To Action
draftapprovedUpdate status to approved
draftcancelledUpdate status to cancelled
approveddraftRevert with draft status

Payment status

text
[pending]
           /    |    \
          v     v     v
    [rejected] [partial] [paid]  (requires status = approved first)
                   |
                   v
              [paid] (once amount_paid reaches the payable amount, send
                       status = paid to close it out)
From To Action
pendingpartialUpdate payment status to partial with an amount
partialpartialRepeat with another amount — installments accumulate against the payable amount
pending / partialpaidUpdate payment status to paid (workflow status must already be approved)
pendingrejectedUpdate payment status to rejected

See Update Invoice Status and Update Payment Status.

Continue As

Choose your account type to proceed

Don't have an account? Sign up here