The phase exists when its trigger fires
A phase is not a row somebody marks as done. It is a state that opens when a specific condition is met, and the engine that decides when does not write a single line of money. That separation is what lets the invoice be born paid without anyone trusting a checkbox.
Nobody types the percentage
Across the competitors we reviewed, the percentage complete that gets billed is typed in by a person; everything downstream is what's automated. Here the evidence closes the phase, the close issues the request, and what the bank confirms unlocks the next one.
One signal won't open a phase that's waiting on another
- Scheduled dateThe job calendar enables it.
- Previous phase paidThe bank confirmed, not the promise to pay.
- Evidence approvedA named human signed off on what was documented.
- Inspection visitThe inspector closed the field record.
- Material deliveryReceipt confirmed against the order.
- Owner signatureChange order or scope approval.
- Manual openWith actor, reason and timestamp.
The one that decides when cannot issue a document
They talk to each other by event, never by direct call. It is the reason the phrase the invoice is born paid is a mechanism and not a slogan: the engine that opens a phase has no way to emit money, not even by mistake.
CoT decides when
Contract-on-Trigger owns the phase state machine. It opens, it closes, it blocks. It never writes an amount.
IoP decides what the document says
Invoice on Payment issues against a payment the bank already confirmed. The invoice is not a claim, it is a receipt.
Nobody types the percentage
The amount comes from the contract line and the jurisdiction rule, not from a field somebody fills in at month end.
Marked as paid is not paid
Until the bank confirms the money landed, the next phase stays shut. A promise to pay does not move the state machine.