self::INVOICE_PAID, 'partially paid', 'partially_paid', 'partial' => self::INVOICE_PARTIALLY_PAID, 'draft' => self::INVOICE_DRAFT, 'issued' => self::INVOICE_ISSUED, 'credited' => self::INVOICE_CREDITED, 'void', 'voided' => self::INVOICE_VOIDED, 'overpaid' => self::INVOICE_OVERPAID, 'cancelled', 'canceled', 'cancelled invoice', 'canceled invoice' => self::INVOICE_CANCELLED, 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, 'requested', 'pending' => self::REFUND_REQUESTED, 'cancelled', 'canceled' => self::REFUND_CANCELLED, 'reversed' => self::REFUND_REVERSED, 'exception' => self::REFUND_EXCEPTION, 'void', 'voided' => self::REFUND_VOIDED, default => self::REFUND_REQUESTED, }; } public static function normalizeReimbursementStatus(?string $status): string { return match (self::normalize($status)) { 'approved' => self::REIMBURSEMENT_APPROVED, 'paid' => self::REIMBURSEMENT_PAID, 'rejected', 'denied' => self::REIMBURSEMENT_REJECTED, 'reversed' => self::REIMBURSEMENT_REVERSED, default => self::REIMBURSEMENT_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; } }