Corrección Error PAC 2152 - "Monto del ITBMS del ítem inválido"
Estado: 🔧 EN PROCESO
Fecha: 2024-12-19
Error: 2152-Item 1: Monto del ITBMS del ítem inválido
Organización: 155757563-2-2024
PAC: TheFactoryHKA (ID: 8)
Análisis del Problema
Causa Raíz Identificada
El error no estaba en el cálculo del ITBMS del ítem individual, sino en inconsistencias en los campos totales enviados al PAC:
<!-- XML PROBLEMÁTICO -->
<dValTotItem>5.990000</dValTotItem> <!-- ✓ Correcto -->
<dValITBMS>0.390000</dValITBMS> <!-- ✓ Correcto -->
<dTotRec>5.60</dTotRec> <!-- ❌ INCORRECTO -->
<iPzPag>5.60</iPzPag> <!-- ❌ INCORRECTO -->
<dVTotItems>5.60</dVTotItems> <!-- ❌ INCORRECTO -->
Log de Diagnóstico
{
"base_price_dPrItem": 5.6,
"original_itbms_from_db": 0.39,
"calculated_itbms": 0.39,
"dValTotItem_calculated": 5.989999999999999,
"manual_sum_verification": 5.99,
"coherence_check": true
}
Los cálculos individuales eran correctos, pero los totales enviados al PAC estaban inconsistentes.
Correcciones Implementadas
1. Campo dVTotItems (Línea 2456)
Problema: Se asignaba $dVTot (total general) en lugar de $dVTotItems (suma de ítems).
// ANTES (INCORRECTO)
'dVTotItems' => $this->numberFormat($dVTot),
// DESPUÉS (CORREGIDO)
'dVTotItems' => $this->numberFormat($dVTotItems),
2. Cálculo ITBMS con Precisión DGI
Métodos añadidos:
- calculateCorrectITBMS(): Recalculo preciso usando tasas estándar (7%, 10%, 15%)
- validateITBMSCoherence(): Validación matemática pre-envío
Integración en issueDocument() (líneas 2235-2275):
// Recalcular ITBMS con precisión DGI
if ($taxable && $dPrItem > 0) {
$originalITBMS = $this->filterVar(array_get($item, 'Itbms', 0), FILTER_VALIDATE_FLOAT);
$valITBMS = $this->calculateCorrectITBMS($dPrItem, $item);
// Logging detallado para debugging
Log::info('DEBUG ITBMS - Ítem ' . ($index + 1), [
'base_price_dPrItem' => $dPrItem,
'original_itbms_from_db' => $originalITBMS,
'calculated_itbms' => $valITBMS,
'tax_rate_original' => round(($originalITBMS / $dPrItem) * 100, 2),
'tax_rate_calculated' => round(($valITBMS / $dPrItem) * 100, 2),
]);
}
3. Logging Mejorado
Nuevos logs para diagnosticar: - Debug detallado por ítem individual - Logging de totales finales antes del envío PAC - Validación de coherencia matemática
Estado de Testing
Comando de Prueba Creado
docker exec -it docucenter_laravel.test php artisan test:itbms-calculation 155757563-2-2024
Resultado: ✅ Cálculos matemáticos correctos confirmados
Próximas Validaciones Requeridas
- Validar corrección
dVTotItems: Verificar que ahora envía 5.60 en lugar de 5.99 - Testing con PAC real: Probar con organización 155757563-2-2024
- Verificar otros campos totales: Confirmar coherencia de
dTotReceiPzPag
Archivos Modificados
app/Http/Livewire/Admin/Einvoice/Create.php
- ✅ Línea 2456: Corrección
dVTotItems - ✅ Líneas 1865-1895: Método
calculateCorrectITBMS() - ✅ Líneas 1904-1910: Método
validateITBMSCoherence() - ✅ Líneas 2235-2275: Integración en
issueDocument() - ✅ Logging mejorado para debugging
app/Console/Commands/TestITBMSCalculation.php
- ✅ Comando de testing independiente para validación
Validaciones Pendientes
Campos que Requieren Verificación
En el XML problemático detectamos inconsistencias en:
dTotRec: Debe ser 5.99, pero aparece como 5.60iPzPag: Debe ser el código de tiempo de pago (1), pero aparece como 5.60dVTotItems: Debe ser 5.60 (suma sin impuestos), ahora corregido
Plan de Testing
- Ejecutar nueva factura: Con los cambios implementados
- Revisar logs nuevos: Verificar valores finales en gTotData
- Comparar XML generado: Confirmar campos corregidos
- Validación PAC: Probar envío real a TheFactoryHKA
Próximos Pasos
- ✅ Logging mejorado: Implementado para capturar valores exactos
- 🔧 Testing con datos reales: Pendiente validación con organización específica
- ⏳ Validación PAC: Confirmar eliminación del error 2152
- 📋 Documentación final: Actualizar cuando se confirme la solución
Impacto Esperado: Eliminación completa del error PAC 2152 mediante corrección de inconsistencias en totales enviados al servicio TheFactoryHKA.