BuildSigned
Contract-on-Trigger

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.

End to end

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.

01Phase
02Field evidence
03Approval
04Payment request
05Bank verification
06Invoice born paid
07Next phase
Seven ways a phase opens

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.
Two engines, on purpose

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.