INTERLINK — VALIDACIÓN ACTUALIZACIÓN CONCILIACIÓN POR ENTIDAD V2 BASE DEL CAMBIO Patch base: patch_wa2_conciliacion_macro_v1.zip. Aplicación de referencia: whatsapp_v2(3).zip (recibida del usuario). Cambio de esquema SQL: ninguno. Archivos existentes de aplicación modificados: 6, únicamente dentro del módulo de conciliación. Archivo nuevo de aplicación: MacroStatementParser.php. No se incluyeron archivos de configuración privada, credenciales, medios ni registros bancarios en el ZIP. PRUEBAS EFECTIVAMENTE EJECUTADAS - php -l, PHP 8.4.23: 78 archivos PHP del árbol compuesto (base del usuario + conciliación v1 + actualización v2), 0 errores de sintaxis. - node --check: JavaScript extraído de bank_reconciliation.php sin errores. - tests/bank_rules_smoke.php existente: 8 comprobaciones correctas. - tests/bank_rules_by_origin.php nuevo: 90 comprobaciones correctas, sin DB, API ni escritura. - Integración: 21 comprobaciones con un adaptador PDO en memoria, ejecutando el importador, preview y confirm reales del código nuevo. NO es una prueba contra MariaDB real. - UI: Chromium de sistema con Playwright y respuestas HTTP simuladas. Escritorio 1440 x 1050 y móvil 390 x 844. Sin errores JavaScript; selección y filtros correctos, resultados viejos no seleccionables, confirmar deshabilitado en simulación, cuenta configurada visible, sin POST de pagos y sin desbordamiento horizontal del documento (la tabla tiene scroll propio). - Verificador de archivos: acepta la base v1 y el conjunto actualizado, 13 comprobaciones compatibles y 0 diferencias en cada caso. IMPORTACIÓN DE LOS ARCHIVOS REALES APORTADOS - report (9).xls: 1.000 movimientos, 886 positivos. - Ultimos_Movimientos.xls: 630 movimientos, 557 positivos. - Identidades coincidentes entre ambos: 629. Unión: 1.001 movimientos. - El nuevo pie (descarga/empresa/operador) no se trató como movimiento. - Importar ambos en el adaptador añadió solo 1 movimiento nuevo tras los 1.000 del primero. - Volver a importar el segundo, renombrado, dejó 2 importaciones y 1.001 movimientos; no duplicó filas bancarias. - Referencias, Concepto, importe y saldo mantienen la clave de identidad v1, sin añadir Causal, formato ni fila. COMPARACIONES DE REFERENCIA - Mercado Pago: extracción de prueba construida con los datos visibles aportados, no llamada a IA. Referencia 887460 localizada en Código de identificación 41479088746065098C; también concordaron CUIT, fecha y monto en el XLS real. - Macro: extracción de prueba construida con los datos visibles aportados. Fila 231 del XLS nuevo, operación/referencia 268954127; también concordaron CUIT, fecha e importe. - Naranja X, Ualá, Personal Pay y BNA: pruebas sintéticas de aceptación/rechazo, no una validación contra nuevas operaciones bancarias de esos proveedores. CASOS DE SEGURIDAD ENSAYADOS - Mercado Pago: no se aceptan referencias cortas ni secuencias separadas por letras, espacios o guiones. No se inventan ceros. El número de operación no reemplaza al Código de identificación. - Macro/BNA: no se aceptan referencias parciales ni contradictorias. - Personal Pay: no se acepta un fragmento o un prefijo de un CoelsaID más largo. - Ualá: requiere identificador de operación/transacción; rechaza documento contradictorio. - Rechazo por destino, documento, moneda, fecha o importe diferente y datos dudosos. - Pie de extracto incompleto, empresa distinta, archivo renombrado HTML, columnas extra, precisión numérica insuficiente o más de dos decimales: rechazos sin importación parcial. - Mes por recepción en Argentina, con almacenamiento UTC: límites correctos. - Comprobante anterior fuera del mes: participa en detección de duplicados históricos. - Dos movimientos compatibles con la secuencia MP: revisión, no elección arbitraria. - Comprobante sin cliente asociado al WhatsApp: revisión. - Análisis v1: solicita nueva lectura; resultado v1: bloqueado antes de insertar pagos. - Imputación nueva por $32.000 a facturas de $10.000 + $10.000: pagos por esos importes y crédito de $12.000; suma conservada, hash único solo en pago principal. - Confirmación repetida: no registra otros pagos. - Comprobante ya imputado: vincula el movimiento y no recrea el pago. - Fallo inyectado después del primer pago y antes de terminar el reparto: el adaptador revirtió pagos, aplicaciones y comprobante. Esto comprueba la secuencia del código; no demuestra el comportamiento de bloqueos de un servidor real. LÍMITES No hubo conexión al VPS, MariaDB productivo, Meta ni OpenAI con credenciales del usuario. No se probó la calidad de extracción IA en vivo: los datos de prueba son manuales y los demás casos sintéticos. No se probaron concurrencia/aislamiento ni triggers sobre un servidor MariaDB real. Se intentó disponer de MariaDB local; no fue posible instalarlo por fallo de resolución DNS del repositorio. Por eso se informa explícitamente el uso del adaptador. La compatibilidad sintáctica ejecutada es PHP 8.4; el código se mantuvo sin sintaxis posterior a PHP 7.4, pero no se ejecutó un intérprete PHP 7.4. El lector de pruebas es el mismo lector BIFF8 del módulo. No se ejecutaron macros ni fórmulas. La herramienta genérica de hoja de cálculo no pudo importar el XLS binario; eso no implica corrupción de los archivos del banco. Antes de confirmar cobranzas reales: copia de seguridad, verificador de versión, prueba en copia del sistema, simulación nueva y revisión de un caso. DETALLE DE INTEGRACIÓN (SALIDA REAL DEL ADAPTADOR) PASS Import original 1.000 rows PASS Import overlap inserts only 1 new movement PASS Renamed import is idempotent PASS Import stores chosen account and origin format evidence PASS MP supplied receipt becomes ready by code fragment + CUIT PASS Ready result records exact proof 887460 PASS Confirmed amount distributes into 2 invoices + credit PASS Allocation amounts conserved PASS Only one primary payment carries unique operation hash PASS Existing invoice statuses updated by unchanged flow PASS Repeated confirmation never inserts another payment PASS Original format sees the same reconciled identity PASS Injected failure occurs in second application PASS Rollback preserves all balances on failure (adapter) PASS Old extraction explicitly requests reanalysis PASS Old simulation blocked before any payment PASS Historical duplicate considered outside selected month PASS Already imputed receipt offered as link-only PASS Link-only confirmation creates no new payment PASS Shared six-digit fragment in two candidates is not auto-approved PASS A bank match without a WhatsApp-linked customer stays pending OK 21 integration checks using an in-memory PDO adapter. NOT a MariaDB concurrency test. SHA-256 report (9).xls: 4bd4e84ef120c460d7307684ea0ed76c7a616cb1eaac6f6f6941bf25b006cc19 SHA-256 Ultimos_Movimientos.xls: 5f4a80b9e103ca87efd6b58aacba68eaca1baf96e6f7ee9194a0c6677e646df6 SHA-256 patch_wa2_conciliacion_macro_v1.zip: d8ec0c58cf23b67880df482b6390c5c7ee23cac8451da62c02d01f7141b9426e