Compensation End Event
Ends the path while triggering compensation of previously completed activities. Thick circle with rewind arrows.
The Compensation End Event is the closing counterpart of the compensation throw: as its final act, the path demands the undo of earlier completed work. Typical in failure-wrap-up branches: *we're done here — and roll back what was built*.
When to use and avoid
When to use
To end rejection/abort paths that must also undo prior steps.
In saga-style flows without a formal transaction construct.
When 'finish' and 'compensate' coincide — no extra steps after the undo request.
When NOT to use
Mid-flow, with work still to do after compensating — that is the intermediate Compensation Throw.
When nothing completed needs undoing.
Inside a transaction that will be cancelled anyway — the Cancel End already compensates.
Business example
Ending a rejected request and undoing its bookings

Open this example in the HEFLO process editor and explore the diagram from the inside.
Open in the HEFLO editor →Step by step
- Book hotel completed earlier and registered its undo handler.
- Payment is declined; the flow takes the rejection branch.
- The compensation trigger (highlighted) invokes the handlers — the booking is cancelled — and the path ends as rejected. In a pure ending form, the same trigger is drawn as a thick-bordered Compensation End Event.
Differences
Compensation End vs Compensation Throw (intermediate)
Same trigger, different position: the intermediate throw compensates and continues; the end compensates and finishes the path. Choose by whether anything follows the undo.
FAQ
Can it target one specific activity?
Yes — a compensation event may reference a single activity to compensate, instead of the default 'everything completed in scope'.
Does it wait for the handlers to finish?
Conceptually the compensation is performed as part of the event's semantics — handlers run before the scope truly closes.