self::PASSED, str_contains($compact, 'repeat') || str_contains($compact, 'keepkg') => self::REPEAT_CLASS, str_contains($compact, 'makeupexam') || str_contains($compact, 'makeupexamfall') || str_contains($compact, 'makeup') => self::MAKE_UP_EXAM, str_contains($compact, 'deferred') || str_contains($compact, 'pendingdecision') => self::DEFERRED_DECISION, str_contains($compact, 'withdraw') || str_contains($compact, 'widthrwan') => self::WITHDRAWN, str_contains($compact, 'expel') => self::EXPELLED, default => null, }; } public static function display(?string $decision): string { return match (self::normalize($decision) ?? $decision) { self::PASSED => 'Passed', self::REPEAT_CLASS => 'Repeat Class', self::MAKE_UP_EXAM => 'Make-up Exam', self::EXPELLED => 'Expelled', self::WITHDRAWN => 'Withdrawn', self::DEFERRED_DECISION => 'Deferred Decision', default => trim((string) $decision), }; } public static function blocksEnrollment(?string $decision): bool { return in_array(self::normalize($decision), [ self::EXPELLED, self::WITHDRAWN, self::DEFERRED_DECISION, ], true); } }