AfipSDK / afip.php

Libreria para usar los Web Services de AFIP
https://afipsdk.com/
MIT License
269 stars 119 forks source link

Exception: (10051) Los importes informados en AlicIVA no se corresponden con los porcentajes #155

Closed leantroncoso closed 8 months ago

leantroncoso commented 8 months ago

Hola, como están? Estoy con un desarrollo que me solicitaron para facturar de manera electrónica, vengo con un tema de importes informados en AlicIVA, estoy teniendo un problema de porcentajes para crear una factura B en donde tengo que facturar un producto que contiene IVA y otro que estaría Exento de IVA, la cuestión es que armo este array en el cual entiendo que los importes son correctos que dejo a continuación:

(
            [CantReg] => 1
            [PtoVta] => 1
            [CbteTipo] => 6
            [Concepto] => 1
            [DocTipo] => 80
            [DocNro] => XXXXXXXXXXX
            [CbteDesde] => 272
            [CbteHasta] => 272
            [CbteFch] => 20240125
            [FchServDesde] => 
            [FchServHasta] => 
            [FchVtoPago] => 
            [ImpTotal] => 115930.13
            [ImpTotConc] => 0
            [ImpNeto] => 5.94
            [ImpOpEx] => 115922.94
            [ImpIVA] => 1.25
            [ImpTrib] => 0
            [MonId] => PES
            [MonCotiz] => 1
            [Iva] => Array
                (
                    [Id] => 5
                    [BaseImp] => 5.94
                    [importe] => 1.2474
                )

        )

En el cual veo en los logs me genera este mensaje:

Exception: (10051) Los importes informados en AlicIVA no se corresponden con los porcentajes. in /Applications/MAMP/htdocs/AmbTest/vendor/afip/Class/ElectronicBilling.php:469 Stack trace:

0 /Applications/MAMP/htdocs/AmbTest/vendor/afip/Class/ElectronicBilling.php(409): ElectronicBilling->_CheckErrors('FECAESolicitar', Object(stdClass))

1 /Applications/MAMP/htdocs/AmbTest/vendor/afip/Class/ElectronicBilling.php(139): ElectronicBilling->ExecuteRequest('FECAESolicitar', Array)

2 /Applications/MAMP/htdocs/AmbTest/controller/afip.php(415): ElectronicBilling->CreateVoucher(Array)

3 /Applications/MAMP/htdocs/AmbTest/process.php(21): AfipController->FacturacionIGMSeleccionados()

4 {main}

Estuve buscando el histórico de este error, aplique la solución pero me sigue fallando, me podrian dar una mano con este tema, puede ser que este haciendo algo mal?

Desde ya muchas gracias

Saludos!

AfipSDK commented 8 months ago

Veo que el numero de impiva esta redondeado y el del array de iva no lo esta, probaste dejando ambos iguales?

leantroncoso commented 8 months ago

Hola,

probé redondeando el valor y sigue mostrando el mismo mensaje:

Ejecucion Proceso en el dia 2024-01-25 02:31:39 pm sumamos los logs del proceso. Factura con Errores:232100;Exception: (10051) Los importes informados en AlicIVA no se corresponden con los porcentajes. in /Applications/MAMP/htdocs/AmbTest/vendor/afip/Class/ElectronicBilling.php:469 Stack trace:

0 /Applications/MAMP/htdocs/AmbTest/vendor/afip/Class/ElectronicBilling.php(409): ElectronicBilling->_CheckErrors('FECAESolicitar', Object(stdClass))

1 /Applications/MAMP/htdocs/AmbTest/vendor/afip/Class/ElectronicBilling.php(139): ElectronicBilling->ExecuteRequest('FECAESolicitar', Array)

2 /Applications/MAMP/htdocs/AmbTest/controller/afip.php(415): ElectronicBilling->CreateVoucher(Array)

3 /Applications/MAMP/htdocs/AmbTest/process.php(21): AfipController->FacturacionIGMSeleccionados()

4 {main}

Remitos con errores:

Dejo el nuevo array que se estaría enviando al ambiente de Testeo de SDK

(
            [CantReg] => 1
            [PtoVta] => 1
            [CbteTipo] => 6
            [Concepto] => 1
            [DocTipo] => 80
            [DocNro] =>XXXXXXXXX
            [CbteDesde] => 273
            [CbteHasta] => 273
            [CbteFch] => 20240125
            [FchServDesde] => 
            [FchServHasta] => 
            [FchVtoPago] => 
            [ImpTotal] => 115930.13
            [ImpTotConc] => 0
            [ImpNeto] => 5.94
            [ImpOpEx] => 115922.94
            [ImpIVA] => 1.25
            [ImpTrib] => 0
            [MonId] => PES
            [MonCotiz] => 1
            [Iva] => Array
                (
                    [Id] => 5
                    [BaseImp] => 5.94
                    [importe] => 1.25
                )

        )
ivanalemunioz commented 8 months ago

Lo probe con esos valores usando el ejemplo de factura B y funciono a la perfeccion:


/**
 * Numero del punto de venta
 **/
$punto_de_venta = 1;

/**
 * Tipo de factura
 **/
$tipo_de_factura = 6; // 6 = Factura B

/**
 * Número de la ultima Factura B
 **/
$last_voucher = $afip->ElectronicBilling->GetLastVoucher($punto_de_venta, $tipo_de_factura);

/**
 * Concepto de la factura
 *
 * Opciones:
 *
 * 1 = Productos 
 * 2 = Servicios 
 * 3 = Productos y Servicios
 **/
$concepto = 1;

/**
 * Tipo de documento del comprador
 *
 * Opciones:
 *
 * 80 = CUIT 
 * 86 = CUIL 
 * 96 = DNI
 * 99 = Consumidor Final 
 **/
$tipo_de_documento = 99;

/**
 * Numero de documento del comprador (0 para consumidor final)
 **/
$numero_de_documento = 0;

/**
 * Numero de factura
 **/
$numero_de_factura = $last_voucher+1;

/**
 * Fecha de la factura en formato aaaa-mm-dd (hasta 10 dias antes y 10 dias despues)
 **/
$fecha = date('Y-m-d');

/**
 * Importe sujeto al IVA (sin icluir IVA)
 **/
$importe_gravado = 5.94;

/**
 * Importe exento al IVA
 **/
$importe_exento_iva = 115922.94;

/**
 * Importe de IVA
 **/
$importe_iva = 1.25;

/**
 * Los siguientes campos solo son obligatorios para los conceptos 2 y 3
 **/
if ($concepto === 2 || $concepto === 3) {
    /**
     * Fecha de inicio de servicio en formato aaaammdd
     **/
    $fecha_servicio_desde = intval(date('Ymd'));

    /**
     * Fecha de fin de servicio en formato aaaammdd
     **/
    $fecha_servicio_hasta = intval(date('Ymd'));

    /**
     * Fecha de vencimiento del pago en formato aaaammdd
     **/
    $fecha_vencimiento_pago = intval(date('Ymd'));
}
else {
    $fecha_servicio_desde = null;
    $fecha_servicio_hasta = null;
    $fecha_vencimiento_pago = null;
}

$data = array(
    'CantReg'   => 1, // Cantidad de facturas a registrar
    'PtoVta'    => $punto_de_venta,
    'CbteTipo'  => $tipo_de_factura, 
    'Concepto'  => $concepto,
    'DocTipo'   => $tipo_de_documento,
    'DocNro'    => $numero_de_documento,
    'CbteDesde' => $numero_de_factura,
    'CbteHasta' => $numero_de_factura,
    'CbteFch'   => intval(str_replace('-', '', $fecha)),
    'FchServDesde'  => $fecha_servicio_desde,
    'FchServHasta'  => $fecha_servicio_hasta,
    'FchVtoPago'    => $fecha_vencimiento_pago,
    'ImpTotal'  => $importe_gravado + $importe_iva + $importe_exento_iva,
    'ImpTotConc'=> 0, // Importe neto no gravado
    'ImpNeto'   => $importe_gravado,
    'ImpOpEx'   => $importe_exento_iva,
    'ImpIVA'    => $importe_iva,
    'ImpTrib'   => 0, //Importe total de tributos
    'MonId'     => 'PES', //Tipo de moneda usada en la factura ('PES' = pesos argentinos) 
    'MonCotiz'  => 1, // Cotización de la moneda usada (1 para pesos argentinos)  
    'Iva'       => array(// Alícuotas asociadas al factura
        array(
            'Id'        => 5, // Id del tipo de IVA (5 = 21%)
            'BaseImp'   => $importe_gravado,
            'Importe'   => $importe_iva 
        )
    ), 
);

print_r($data);

/** 
 * Creamos la Factura 
 **/
$res = $afip->ElectronicBilling->CreateVoucher($data);

/**
 * Mostramos por pantalla los datos de la nueva Factura 
 **/
var_dump(array(
    'cae' => $res['CAE'], //CAE asignado a la Factura
    'vencimiento' => $res['CAEFchVto'] //Fecha de vencimiento del CAE
));

Me imprimio


Array
(
    [CantReg] => 1
    [PtoVta] => 1
    [CbteTipo] => 6
    [Concepto] => 1
    [DocTipo] => 99
    [DocNro] => 0
    [CbteDesde] => 312
    [CbteHasta] => 312
    [CbteFch] => 20240127
    [FchServDesde] => 
    [FchServHasta] => 
    [FchVtoPago] => 
    [ImpTotal] => 115930.13
    [ImpTotConc] => 0
    [ImpNeto] => 5.94
    [ImpOpEx] => 115922.94
    [ImpIVA] => 1.25
    [ImpTrib] => 0
    [MonId] => PES
    [MonCotiz] => 1
    [Iva] => Array
        (
            [0] => Array
                (
                    [Id] => 5
                    [BaseImp] => 5.94
                    [Importe] => 1.25
                )

        )

)
array(2) {
  ["cae"]=>
  string(14) "74042145389990"
  ["vencimiento"]=>
  string(10) "2024-02-06"
}
leantroncoso commented 8 months ago

Hola, como estas? Disculpa estuve de vacaciones, ahora vuelvo a probar y aviso de novedades Gracias!

leantroncoso commented 8 months ago

Hola, como están? dejo un update al final el problema fue que en la variable que paso para armar el IVA, lo habia colocado de esta manera: array( 'Id' => 5 'BaseImp' => $importe_gravado, 'Importe' => $importe_iva )

y no como especifica que debe ser así: array( array( 'Id' => 5 'BaseImp' => $importe_gravado, 'Importe' => $importe_iva ) )

dejo esto para que quede trackeado y le pueda servir alguno.

Muchas gracias y disculpen la molestia

Saludos!