Generar facturas con percepciones

RunLLM
RunLLM

Sí, es posible generar facturas con percepciones utilizando Afip SDK. Debes incluir el campo "ImpTrib" (importe total de tributos) y detallar las percepciones en la estructura correspondiente al tributo dentro del objeto de la factura, siguiendo los ejemplos oficiales del SDK para PHP o JS, como se indica en este ejemplo de AfipSDK y en la documentación de la API.

¿Te gustaría ver un ejemplo concreto de cómo estructurar el campo de percepciones en el código?

Sources:

San
San

@user podrias hacerme un ejemplo de como tiene que ser el data para usar percepciones

RunLLM
RunLLM

Claro. Para agregar percepciones, debes usar el campo "Tributos" en el array de datos. Por ejemplo, en PHP:

$data = array(
    'CantReg' => 1,
    'PtoVta' => 1,
    'CbteTipo' => 6,
    'Concepto' => 1,
    'DocTipo' => 80,
    'DocNro' => 20111111112,
    'CbteDesde' => 1,
    'CbteHasta' => 1,
    'CbteFch' => intval(date('Ymd')),
    'ImpTotal' => 200,
    'ImpTotConc' => 0,
    'ImpNeto' => 150,
    'ImpOpEx' => 0,
    'ImpIVA' => 21,
    'ImpTrib' => 29, // Total de tributos (percepciones)
    'MonId' => 'PES',
    'MonCotiz' => 1,
    'Iva' => array(
        array('Id' => 5, 'BaseImp' => 150, 'Importe' => 21)
    ),
    'Tributos' => array(
        array(
            'Id' => 99, // 99 = Otro (puedes usar 1, 2, 3, 4 según corresponda)
            'Desc' => 'Percepción IIBB',
            'BaseImp' => 150,
            'Alic' => 5.2,
            'Importe' => 7.8
        ),
        array(
            'Id' => 1, // 1 = Impuestos nacionales
            'Desc' => 'Percepción IVA',
            'BaseImp' => 150,
            'Alic' => 14,
            'Importe' => 21.2
        )
    )
);

Puedes ver ejemplos similares en afip.php y afip.js.

¿Te gustaría el ejemplo en otro lenguaje o necesitas más detalles?

Sources:

San
San

@user hacelo en javascript node

RunLLM
RunLLM

Por supuesto, aquí tienes un ejemplo en JavaScript (Node.js) usando Afip SDK, donde se agregan percepciones en el campo Tributos:

const Afip = require('@afipsdk/afip.js');

const date = new Date(Date.now() - ((new Date()).getTimezoneOffset() * 60000)).toISOString().split('T')[0];

const data = {
  'CantReg': 1,
  'PtoVta': 1,
  'CbteTipo': 6,
  'Concepto': 1,
  'DocTipo': 80,
  'DocNro': 20111111112,
  'CbteDesde': 1,
  'CbteHasta': 1,
  'CbteFch': parseInt(date.replace(/-/g, '')),
  'ImpTotal': 200,
  'ImpTotConc': 0,
  'ImpNeto': 150,
  'ImpOpEx': 0,
  'ImpIVA': 21,
  'ImpTrib': 29, // Suma de percepciones
  'MonId': 'PES',
  'MonCotiz': 1,
  'Iva': [
    { 'Id': 5, 'BaseImp': 150, 'Importe': 21 }
  ],
  'Tributos': [
    {
      'Id': 99, // Otro tributo
      'Desc': 'Percepción IIBB',
      'BaseImp': 150,
      'Alic': 5.2,
      'Importe': 7.8
    },
    {
      'Id': 1, // Impuestos nacionales
      'Desc': 'Percepción IVA',
      'BaseImp': 150,
      'Alic': 14,
      'Importe': 21.2
    }
  ]
};

const afip = new Afip({ CUIT: 20111111112 });

afip.ElectronicBilling.createVoucher(data).then(res => {
  console.log(res);
});

Este ejemplo está basado en el ejemplo oficial de afip.js.

¿Necesitás que te explique algún campo en particular?

Sources: