From 811b3609390bc2d14837f4b8a5c7801e4d9b1f95 Mon Sep 17 00:00:00 2001 From: Lizandro Date: Sat, 18 Jul 2026 17:05:16 +0000 Subject: [PATCH] =?UTF-8?q?fix(pago):=20valor=20$1,000.00=20=E2=86=92=2010?= =?UTF-8?q?0000=20en=20vez=20de=201000=20causaba=20sin=5Fcoincidencia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit preg_replace('/[^0-9]/', '', '1,000.00') = '100000' porque el .00 aporta 00. Fix: primero quitar la parte decimal (/[.,]\d{1,2}$/) antes de limpiar separadores. Aplicado en BancolombiaParser::normalizarValor() y como doble defensa en PagoValidadorService. Co-Authored-By: Claude Sonnet 4.6 --- app/Services/BancolombiaParser.php | 17 ++++++++++++++--- app/Services/PagoValidadorService.php | 5 ++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/Services/BancolombiaParser.php b/app/Services/BancolombiaParser.php index e43acf4..3796349 100755 --- a/app/Services/BancolombiaParser.php +++ b/app/Services/BancolombiaParser.php @@ -142,11 +142,11 @@ class BancolombiaParser } /** - * Extrae el valor monetario como string limpio, ej: "1000.00" + * Extrae el valor monetario como entero limpio sin decimales (ej: "1000"). + * $1,000.00 → "1000" | $50.000,00 → "50000" */ private static function extraerValor(string $text): string { - // Patrones en orden de especificidad $patterns = [ '/por\s+\$\s*([0-9][0-9.,]*)/iu', '/valor[:\s]+\$?\s*([0-9][0-9.,]*)/iu', @@ -156,12 +156,23 @@ class BancolombiaParser ]; foreach ($patterns as $pat) { if (preg_match($pat, $text, $m)) { - return trim($m[1]); + return self::normalizarValor(trim($m[1])); } } return ''; } + /** + * Convierte "1,000.00" o "1.000,00" a "1000" (entero limpio). + */ + private static function normalizarValor(string $raw): string + { + // Eliminar parte decimal: ,XX o .XX al final (pesos colombianos no tienen centavos reales) + $raw = preg_replace('/[.,]\d{1,2}$/', '', $raw); + // Eliminar separadores de miles (comas, puntos) + return preg_replace('/[^0-9]/', '', $raw); + } + /** * Elimina completamente bloques