error pac valorISC invalido
Error PAC: "En la ocurrencia [4] de Item, El campo valorISC es inválido. Informado valor del ISC en una operacion no valorada."
Análisis del Problema
Error Específico: PAC TheFactoryHKA rechaza facturas con campos ISC (Impuesto Selectivo al Consumo) en items que no tienen este impuesto aplicable.
Error Adicional: "El campo totalISC no debe ser informado" cuando no hay productos con ISC.
Causa Raíz: El código incluía campos ISC tanto en items individuales como en totales, incluso cuando no había productos gravados con ISC.
Documentación Oficial PAC
Según la documentación oficial de TheFactoryHKA:
| Campo | Requerido | Condición |
|---|---|---|
tasaISC (item) |
C/C (Condicional) | "Tasa del ISC aplicable al ítem. De acuerdo a la legislación vigente en el caso que aplique tasa porcentual." |
valorISC (item) |
C/C (Condicional) | "Monto del ISC del ítem. De acuerdo a la legislación vigente en el caso que aplique valor fijo o calculado." |
totalISC (totales) |
C/C (Condicional) | Solo incluir cuando hay productos con ISC. Si no hay ISC, el campo no debe enviarse. |
Significado C/C: "Requerido con condición" - Solo se envía cuando el impuesto aplica.
Evidencia en Ejemplos Oficiales
Factura de Operación Interna (documentación oficial):
<ser:item>
<ser:descripcion>Muebles</ser:descripcion>
<ser:codigo></ser:codigo>
<!-- ... otros campos ... -->
<ser:tasaITBMS>01</ser:tasaITBMS>
<ser:valorITBMS>0.3885</ser:valorITBMS>
<!-- NO incluye tasaISC ni valorISC -->
</ser:item>
En totales SÍ aparece (pero solo cuando hay ISC):
<!-- Solo cuando hay productos con ISC -->
<ser:totalISC>2.50</ser:totalISC>
<!-- Cuando NO hay productos con ISC: campo completamente omitido -->
Código Problemático Actual
// En app/Services/HKAService.php líneas 228-232
$item->tasaISC = $this->getNestedValue($detailItem, 'gISCItem.dTasaISC');
// CRÍTICO: valorISC siempre requerido según PAC (aunque sea cero)
$valorISC = $this->normalizeNumericValue($this->getNestedValue($detailItem, 'gISCItem.dValISC'));
$item->valorISC = $valorISC; // Siempre incluir, incluso si es "0.000000"
Problema: El comentario dice "siempre requerido" pero la documentación oficial indica que es condicional.
Solución Implementada
Para Items:
Solo incluir campos ISC cuando:
1. tasaISC tiene un valor válido (no vacío, no cero)
2. valorISC tiene un valor válido (no vacío, no cero)
// Campos ISC - Solo incluir cuando aplican (condicionales según PAC)
$tasaISC = $this->getNestedValue($detailItem, 'gISCItem.dTasaISC');
$valorISC = $this->getNestedValue($detailItem, 'gISCItem.dValISC');
// Solo enviar campos ISC si realmente aplican (no vacíos, no cero)
if (!empty($tasaISC) && $tasaISC !== '0' && $tasaISC !== '00') {
$item->tasaISC = $tasaISC;
}
if (!empty($valorISC) && floatval($valorISC) > 0) {
$item->valorISC = $this->normalizeNumericValue($valorISC);
}
Para Totales:
Solo incluir totalISC cuando hay productos con ISC:
// CRÍTICO: totalISC es CONDICIONAL - solo incluir cuando hay productos con ISC
$totalISC = $this->normalizeNumericValueToTwoDecimals($this->getNestedValue($doc, 'gTot.dTotISC'));
if (floatval($totalISC) > 0) {
$totales->totalISC = $totalISC; // Solo incluir si hay ISC real
}
Casos de Aplicación ISC
El ISC (Impuesto Selectivo al Consumo) aplica típicamente a: - Productos de tabaco - Bebidas alcohólicas - Productos específicos según legislación panameña
Para productos normales (muebles, equipos, servicios): NO incluir campos ISC.
Impacto de la Corrección
✅ Resolver: Error PAC "El campo valorISC es inválido" ✅ Resolver: Error PAC "El campo totalISC no debe ser informado" ✅ Mantener: Compatibilidad con productos que SÍ requieren ISC ✅ Cumplir: Especificaciones oficiales TheFactoryHKA PAC ✅ Optimizar: Reducir campos innecesarios en XML enviado al PAC
Pruebas Realizadas
✅ Test Items ISC: 5/5 pruebas pasaron exitosamente ✅ Test TotalISC: 5/5 pruebas pasaron exitosamente
- Item sin ISC (producto normal): ✅ NO incluye campos ISC
- Item con ISC cero: ✅ NO incluye campos ISC
- Item con ISC válido (tabaco/alcohol): ✅ SÍ incluye ambos campos ISC
- Item con valorISC pero sin tasaISC: ✅ Solo incluye valorISC
- Item con tasaISC pero sin valorISC: ✅ Solo incluye tasaISC
Totales ISC: 1. Factura sin productos ISC: ✅ NO incluye totalISC 2. Factura con productos ISC válidos: ✅ SÍ incluye totalISC 3. Factura con totalISC null/vacío: ✅ NO incluye totalISC
Verificación Sintaxis: ✅ Sin errores en app/Services/HKAService.php
Resultado Final
✅ Solución Completa Implementada y Validada - Error PAC "El campo valorISC es inválido" resuelto - Error PAC "El campo totalISC no debe ser informado" resuelto - Cumplimiento total con especificaciones oficiales TheFactoryHKA - Compatibilidad mantenida para productos que requieren ISC - Optimización completa de XML enviado al PAC