packages feed

keiro-dsl-0.17.0.0: test/fixtures/hospital-surge-reactions.keiro

language keiro-dsl 6
context hospital-capacity

id HospitalId prefix=hosp
id CommandId prefix=cmd

process HospitalSurge
  name "hospital-surge"
  reactions version 1
  input SurgeInput { hospitalId:HospitalId availableIcuBeds:Int redDemand:Int observedAt:Time }
  correlate input.hospitalId via idText
  saga Surge category "hospitalSurge"
  target Hospital
  projections [ ]

  on SurgeInput
    advance NoteSurgeThreshold { hospitalId availableIcuBeds redDemand timerId=input.hospitalId }
    dispatch Hospital@input.hospitalId ActivateSurge { hospitalId }
      on-appended AckOk ; on-duplicate AckOk ; on-failed Retry

  dispatch-id strategy=uuidv5 from=(name, correlationId, sourceEventId, targetStreamName, occurrence)
  rejected => halt
  poison => halt

aggregate Surge
  regs
  states Idle

  command NoteSurgeThreshold { hospitalId availableIcuBeds:Int redDemand:Int timerId:HospitalId }
  command MarkSurgeTimerFired { hospitalId timerId:HospitalId }
  event SurgeThresholdNoted = fields(NoteSurgeThreshold)
  event SurgeTimerMarked = fields(MarkSurgeTimerFired)

  Idle -- NoteSurgeThreshold --> emit SurgeThresholdNoted ; goto Idle
  Idle -- MarkSurgeTimerFired --> emit SurgeTimerMarked ; goto Idle

aggregate Hospital
  regs
  states Operational

  command ActivateSurge { hospitalId }
  event SurgeActivated = fields(ActivateSurge)

  Operational -- ActivateSurge --> emit SurgeActivated ; goto Operational