self::INVOICE_PAID, 'partially paid', 'partially_paid', 'partial' => self::INVOICE_PARTIALLY_PAID, default => self::INVOICE_UNPAID, }; } public static function normalizePaymentStatus(?string $status): string { return match (self::normalize($status)) { 'completed', 'paid', 'full', 'recorded' => self::PAYMENT_RECORDED, 'void', 'voided' => self::PAYMENT_VOIDED, 'failed' => self::PAYMENT_FAILED, 'refunded' => self::PAYMENT_REFUNDED, 'chargeback' => self::PAYMENT_CHARGEBACK, 'declined' => self::PAYMENT_DECLINED, 'reversed' => self::PAYMENT_REVERSED, 'cancelled' => self::PAYMENT_CANCELLED, 'canceled' => self::PAYMENT_CANCELED, default => self::normalize($status), }; } public static function normalizeRefundStatus(?string $status): string { return match (self::normalize($status)) { 'approved' => self::REFUND_APPROVED, 'rejected' => self::REFUND_REJECTED, 'partial', 'partially paid', 'partially_paid' => self::REFUND_PARTIALLY_PAID, 'paid', 'full' => self::REFUND_PAID, 'void', 'voided' => self::REFUND_VOIDED, default => self::REFUND_PENDING, }; } public static function normalize(?string $status): string { $value = strtolower(trim((string) $status)); $value = str_replace('_', ' ', $value); $value = preg_replace('/\s+/', ' ', $value) ?? $value; return $value; } }