Event Storm — Rail Ticketing and Delay Repay
Retailing, fulfilment and delay repay contexts for a train operator, with a compensation policy triggered by a journey completed late, a journey search written up as a command and a refund event nobody produces.
Make it your own.
title "Rail ticketing — purchase to delay repay"
context "Retailing"
actor Passenger
aggregate Basket
command "Search journeys" by Passenger on Basket
readmodel "Fares and availability"
command "Buy ticket" by Passenger on Basket emits "Ticket purchased"
event "Ticket purchased"
external "Rail Delivery Group fares feed"
hotspot "Split ticketing — do we sell the cheaper combination?"
policy "When ticket purchased, issue barcode" then "Issue barcode"
context "Fulfilment"
aggregate Ticket
command "Issue barcode" by "Ticketing service" on Ticket
event "Barcode issued" from "Issue barcode"
command "Validate at gateline" by "Gateline system" on Ticket
event "Ticket used" from "Validate at gateline"
readmodel "Ticket wallet"
external "Smartcard back office"
hotspot "Ticket used on a train that was later cancelled"
policy "When ticket used, record journey" then "Record journey"
context "Delay repay"
actor "Claims assessor"
aggregate Claim
command "Record journey" by "Journey service" on Claim
event "Journey completed late" from "Record journey"
external "Darwin real-time feed"
policy "When journey completed late, offer compensation" then "Offer compensation"
command "Offer compensation" by "Claims service" on Claim
event "Compensation offered" from "Offer compensation"
command "Assess disputed claim" by "Claims assessor" on Claim emits "Claim upheld"
event "Claim upheld"
event "Refund settled"
readmodel "Claim status tracker"
hotspot "Who pays when the delay was caused by another operator?"