Saltar a contenido

Análisis de Error de Validación de Moneda QuickBooks - SOLUCIONADO

Problema Identificado

Fecha: 2025-10-20 22:33:27 Error: Contacto de QuickBooks con moneda USD rechazado para facturación electrónica en Panamá Estado: ✅ SOLUCIONADO - Implementada validación para país dolarizado

Solución Implementada

Cambio en Validación de Moneda

Archivo: app/Services/QuickBooks/QuickBooksContactValidator.php

Antes:

// Solo PAB permitido
if (($contact['CurrencyRef']['value'] ?? null) !== 'PAB') {
    $feValidation['fe_errors'][] = 'Moneda debe ser PAB para facturación electrónica en Panamá';
    $feValidation['fe_ready'] = false;
}

Después:

// USD y PAB permitidos (país dolarizado)
$currency = $contact['CurrencyRef']['value'] ?? null;
$allowedCurrencies = ['PAB', 'USD']; // Ambas monedas aceptadas por dolarización

if (!in_array($currency, $allowedCurrencies)) {
    $feValidation['fe_errors'][] = "Moneda debe ser PAB o USD (país dolarizado), recibido: {$currency}";
    $feValidation['fe_ready'] = false;
}

Justificación Económica

  • Panamá es país dolarizado: USD y PAB circulan legalmente
  • Paridad 1:1: USD = PAB en todas las transacciones
  • Realidad comercial: Muchas empresas operan en USD
  • Cumplimiento DGI: Ambas monedas son aceptadas oficialmente

Detalles del Error

Cliente Afectado

  • ID: 139
  • Nombre: Coors Light Honduras
  • Moneda: USD (Dólar estadounidense)
  • Tipo Receptor: 04
  • Pasaporte: 05019001049046
  • País: Honduras

Validación que Falla

// En QuickBooksContactValidator::validateForElectronicInvoicing()
if (($contact['CurrencyRef']['value'] ?? null) !== 'PAB') {
    $feValidation['fe_errors'][] = 'Moneda debe ser PAB para facturación electrónica en Panamá';
    $feValidation['fe_ready'] = false;
}

Análisis del Problema

1. Problema de Normativa vs Realidad Comercial

  • Normativa DGI: Facturación electrónica en Panamá requiere moneda PAB
  • Realidad: Cliente internacional (Honduras) opera en USD
  • Conflicto: Sistema rechaza facturas legítimas

2. Tipo de Receptor

  • TIPO_RECEPTOR: "04" - Indica cliente extranjero
  • Expectativa: Clientes extranjeros podrían operar en USD
  • Validación actual: No considera tipo de receptor

3. Factura Específica

{
  "DocNumber": "FE0000000925",
  "TxnDate": "2025-09-24",
  "TotalAmt": 2982,
  "Currency": "USD"
}

Soluciones Propuestas

Opción 1: Validación Flexible por Tipo de Receptor

// Permitir USD para clientes extranjeros (TIPO_RECEPTOR: 04)
$tipoReceptor = $contact['TIPO_RECEPTOR'] ?? null;
$currency = $contact['CurrencyRef']['value'] ?? null;

if ($currency !== 'PAB') {
    if ($tipoReceptor === '04' && $currency === 'USD') {
        $feValidation['fe_warnings'][] = 'Cliente extranjero usando USD - verificar cumplimiento DGI';
    } else {
        $feValidation['fe_errors'][] = 'Moneda debe ser PAB para facturación electrónica en Panamá';
        $feValidation['fe_ready'] = false;
    }
}

Opción 2: Configuración por Organización

// Permitir configuración de monedas aceptadas por organización
$allowedCurrencies = $this->getAllowedCurrencies($organizationId);
if (!in_array($currency, $allowedCurrencies)) {
    $feValidation['fe_errors'][] = "Moneda {$currency} no permitida para esta organización";
    $feValidation['fe_ready'] = false;
}

Opción 3: Validación DGI Real-Time

// Consultar DGI para verificar si moneda USD es permitida
$dgiValidation = $this->validateCurrencyWithDGI($currency, $tipoReceptor);
if (!$dgiValidation['allowed']) {
    $feValidation['fe_errors'][] = $dgiValidation['message'];
    $feValidation['fe_ready'] = false;
}

Impacto en Producción

Facturas Bloqueadas

  • Cliente: Coors Light Honduras
  • Monto: $2,982 USD
  • Estado: Rechazada por validación

Otros Logs en el Mismo Período

[2025-10-20 22:33:27] production.INFO: No se encontraron documentos en la página 1.
  • Múltiples organizaciones afectadas
  • Posible problema sistémico más amplio

Recomendaciones Inmediatas

1. Revisión de Normativa DGI

  • Verificar si USD es permitido para clientes extranjeros
  • Consultar documentación oficial DGI actualizada
  • Revisar casos de uso para TIPO_RECEPTOR "04"

2. Configuración Temporal

  • Permitir USD para TIPO_RECEPTOR "04" temporalmente
  • Agregar logging específico para seguimiento
  • Revisar manualmente facturas USD antes de envío

3. Comunicación con Cliente

  • Informar a cliente sobre limitación técnica
  • Explicar opciones disponibles (cambio de moneda/tipo)
  • Proporcionar timeline para solución definitiva

Archivo de Configuración Sugerido

// config/quickbooks-currency-validation.php
return [
    'strict_mode' => env('QB_CURRENCY_STRICT', true),
    'allowed_currencies' => [
        'default' => ['PAB'],
        'foreign_customers' => ['PAB', 'USD'],
    ],
    'tipo_receptor_rules' => [
        '04' => 'foreign_customers', // Extranjeros
        '01' => 'default',          // Nacionales
        '02' => 'default',          // Residentes
    ]
];

Seguimiento Requerido

  1. Implementar solución elegida
  2. Probar con cliente real
  3. Documentar cambios normativos
  4. Actualizar validaciones futuras
  5. Monitorear logs post-implementación