*/ public function allowedTransitions(): array { return match ($this) { self::Draft => [self::PendingApproval, self::Cancelled], self::PendingApproval => [self::AwaitingInformation, self::Approved, self::Rejected, self::Cancelled, self::Expired], self::AwaitingInformation => [self::PendingApproval, self::Rejected, self::Cancelled, self::Expired], self::Approved => [self::Ready, self::Cancelled], self::Ready => [self::Delivered, self::Incident, self::NoShow, self::Cancelled], self::Delivered => [self::InUse, self::Returned, self::Overdue, self::Incident], self::InUse => [self::Returned, self::Overdue, self::Incident], self::Overdue => [self::Returned, self::Incident], self::Incident => [self::Delivered, self::Returned, self::Completed], self::Returned => [self::Completed, self::Incident], self::Completed, self::Rejected, self::Cancelled, self::Expired, self::NoShow => [], }; } public function canTransitionTo(self $next): bool { return in_array($next, $this->allowedTransitions(), true); } }