packages feed

keiro-dsl-0.15.0.0: test/fixtures/reservation-guard-tightened-twin.keiro

language keiro-dsl 4
context hospital-capacity

id  TransferReservationId  prefix=rsv
id  HospitalId             prefix=hosp
id  CommandId              prefix=cmd

enum PatientAcuity { RedTag=red YellowTag=yellow GreenTag=green }
enum BedType       { Icu=icu MedicalSurgical=medical-surgical }
enum DivertStatus  { Open=open PartialDivert=partial-divert TotalDivert=total-divert }

rule lifeCriticalOverride : PatientAcuity -> Bool
  ex RedTag => true ; YellowTag => false ; GreenTag => false

aggregate Reservation
  regs
    reservationId    TransferReservationId = placeholder
    hospitalId       HospitalId            = placeholder
    patientAcuity    PatientAcuity         = GreenTag
  states Unrequested Held Confirmed Expired! Admitted! Released!

  command RequestTransferReservation { reservationId hospitalId commandId patientAcuity divertStatus lifeCriticalOverride:Bool }
  command ConfirmReservation         { reservationId hospitalId commandId }

  event TransferReservationCreated   = fields(RequestTransferReservation)
  event TransferReservationConfirmed { reservationId hospitalId commandId }

  Unrequested -- RequestTransferReservation -->
    guard (cmd.divertStatus != DivertStatus.TotalDivert || cmd.lifeCriticalOverride) && cmd.patientAcuity != PatientAcuity.RedTag
    emit  TransferReservationCreated
    goto  Held
  replay-only Unrequested -- RequestTransferReservation -->
    guard (cmd.divertStatus != DivertStatus.TotalDivert || cmd.lifeCriticalOverride) && cmd.patientAcuity == PatientAcuity.RedTag
    emit  TransferReservationCreated
    goto  Held
  Held -- ConfirmReservation --> emit TransferReservationConfirmed ; goto Confirmed

  wire kind=ctorName fields=camelCase schemaVersion=1
  projection transfer_decisions key=reservationId
    status-map { TransferReservationCreated=>held TransferReservationConfirmed=>confirmed }