default(Unassigned::class) ->allowTransition(Unassigned::class, Allocated::class) ->allowTransition(Allocated::class, Active::class) ->allowTransition(Active::class, Used::class) ->allowTransition([Allocated::class, Active::class], Expired::class) ->allowTransition([Unassigned::class, Allocated::class, Active::class], Voided::class); } abstract public function label(): string; }