Saltar a contenido

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

  1. Item sin ISC (producto normal): ✅ NO incluye campos ISC
  2. Item con ISC cero: ✅ NO incluye campos ISC
  3. Item con ISC válido (tabaco/alcohol): ✅ SÍ incluye ambos campos ISC
  4. Item con valorISC pero sin tasaISC: ✅ Solo incluye valorISC
  5. 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