Resolución N° 5.616/2024. Más información

Crear Factura Electrónica de ARCA en Anything

Con prompt listo para pegar


Crear Factura Electrónica de ARCA en Anything

Si es tu primera vez conectándote con la facturación electrónica de ARCA, te recomiendo leer esta guía básica sobre su funcionamiento general.

Conectar tu sistema con la facturación electrónica de ARCA

Conectar tu sistema con la facturación electrónica de ARCA

Guía paso a paso

El primer paso para crear una factura electrónica de ARCA es obtener el Código de Autorización Electrónico (CAE).

En este tutorial vamos a usar Anything para crear una app que emita una Factura B con el web service de factura electrónica (wsfe) usando Afip SDK API. Como Anything puede generar distintas arquitecturas, el prompt le pide una app full-stack con backend privado.

Requisitos previos

Para poder seguir esta guía, primero necesitarás:

Para usar los web services de ARCA se requiere un certificado digital. Con Afip SDK podés integrarte en modo desarrollo usando el CUIT 20409378472 sin obtener un certificado propio.

Cuando quieras usar tu CUIT, podés seguir la guía para usar tu propio certificado para desarrollo.

Crear el proyecto en Anything

La instrucción principal para Anything es que no deje el token en la pantalla. Todo lo que se conecta con Afip SDK API debe quedar en backend.

Creá un nuevo proyecto.

Prompt listo para pegar en Anything

Pegá este prompt:

Quiero crear una app para emitir Factura Electrónica de ARCA usando Afip SDK API.

La app debe quedar lista para completar un formulario, presionar un botón y emitir la factura. Generá toda la lógica necesaria.

Objetivo:
- Emitir una Factura B en ambiente de desarrollo.
- Usar el web service `wsfe`.
- Obtener el CAE de ARCA.
- Mostrar número de comprobante, CAE y vencimiento del CAE.

Reglas:
- Crear una app full-stack con frontend y backend.
- El frontend no debe llamar directamente a Afip SDK API.
- El access token debe quedar como secret privado.
- La app debe limitarse a emitir el comprobante y mostrar el resultado.

Variables privadas:
- AFIP_SDK_ACCESS_TOKEN
- AFIP_TAX_ID=20409378472
- AFIP_ENVIRONMENT=dev

Frontend:
- Crear una pantalla llamada "Emitir Factura Electrónica de ARCA".
- Agregar formulario con:
  - Punto de venta: default 1.
  - Tipo de comprobante: default 6.
  - Concepto: default 1.
  - Tipo de documento: default 99.
  - Número de documento: default 0.
  - Importe neto gravado: default 100.
  - IVA: default 21.
  - Condición IVA receptor: default 5.
- Agregar botón "Emitir factura".
- Mostrar loading mientras se emite.
- Mostrar resultado con número de comprobante, CAE y vencimiento.
- Mostrar errores con texto claro.

Backend:
Crear un endpoint privado `POST /api/facturas/emitir`.

El endpoint debe hacer todo este flujo:

1. Obtener autorización:
POST https://app.afipsdk.com/api/v1/afip/auth
Headers:
Authorization: Bearer ${AFIP_SDK_ACCESS_TOKEN}
Content-Type: application/json
Body:
{
  "environment": "dev",
  "tax_id": "20409378472",
  "wsid": "wsfe"
}

Usar `token` y `sign` de la respuesta.

2. Consultar último comprobante autorizado:
POST https://app.afipsdk.com/api/v1/afip/requests
Headers:
Authorization: Bearer ${AFIP_SDK_ACCESS_TOKEN}
Content-Type: application/json
Body:
{
  "environment": "dev",
  "method": "FECompUltimoAutorizado",
  "wsid": "wsfe",
  "params": {
    "Auth": {
      "Token": token,
      "Sign": sign,
      "Cuit": "20409378472"
    },
    "PtoVta": puntoDeVenta,
    "CbteTipo": tipoDeComprobante
  }
}

Calcular:
nextVoucherNumber = FECompUltimoAutorizadoResult.CbteNro + 1.

3. Solicitar CAE:
POST https://app.afipsdk.com/api/v1/afip/requests
Headers:
Authorization: Bearer ${AFIP_SDK_ACCESS_TOKEN}
Content-Type: application/json
Body:
{
  "environment": "dev",
  "method": "FECAESolicitar",
  "wsid": "wsfe",
  "params": {
    "Auth": {
      "Token": token,
      "Sign": sign,
      "Cuit": "20409378472"
    },
    "FeCAEReq": {
      "FeCabReq": {
        "CantReg": 1,
        "PtoVta": puntoDeVenta,
        "CbteTipo": tipoDeComprobante
      },
      "FeDetReq": {
        "FECAEDetRequest": {
          "Concepto": concepto,
          "DocTipo": docTipo,
          "DocNro": docNro,
          "CbteDesde": nextVoucherNumber,
          "CbteHasta": nextVoucherNumber,
          "CbteFch": fechaActualYYYYMMDD,
          "ImpTotal": importeNeto + importeIVA,
          "ImpTotConc": 0,
          "ImpNeto": importeNeto,
          "ImpOpEx": 0,
          "ImpIVA": importeIVA,
          "ImpTrib": 0,
          "MonId": "PES",
          "MonCotiz": 1,
          "CondicionIVAReceptorId": condicionIVAReceptorId,
          "Iva": {
            "AlicIva": [
              {
                "Id": 5,
                "BaseImp": importeNeto,
                "Importe": importeIVA
              }
            ]
          }
        }
      }
    }
  }
}

4. Extraer de la respuesta:
- Número de comprobante: `CbteDesde`.
- CAE.
- Vencimiento del CAE: `CAEFchVto`.

5. Responder al frontend con esos datos.

Manejo de errores:
- Si falta el token, explicar que falta configurar `AFIP_SDK_ACCESS_TOKEN`.
- Si ARCA devuelve error, mostrar el mensaje recibido.
- Para error 10016, mostrar que debe reintentarse porque el comprobante debe usar el próximo número autorizado.
- Para error 10242, mostrar que falta la condición IVA receptor.

La app debe quedar lista para probar con los valores iniciales y emitir una factura de prueba de $121.

Configurar el token

Configurá AFIP_SDK_ACCESS_TOKEN como secret o variable privada del proyecto.

No lo pongas en la pantalla ni en código que se ejecute en el navegador. El backend debe leerlo desde el entorno.

Probar la emisión

Con los valores iniciales, Anything debería emitir una Factura B de prueba por $121 en ambiente dev.

Al finalizar, la pantalla debe mostrar:

  • Número de comprobante
  • CAE
  • Vencimiento del CAE

Ejemplos de otros tipos de comprobantes

Problemas comunes

Si estás teniendo el error (10016) El número o fecha del comprobante no se corresponde con el próximo a autorizar, te recomiendo leer este artículo.

Error (10016) El numero o fecha del comprobante no se corresponde con el proximo a autorizar

Error (10016) El numero o fecha del comprobante no se corresponde con el proximo a autorizar

Pasos para resolver este error

Si estás teniendo el error (10242) El campo Condición IVA receptor es obligatorio. Consultar método FEParamGetCondicionIvaReceptor, te recomiendo leer este artículo.

Error (10242) El campo Condicion IVA receptor no es un valor valido/es obligatorio

Error (10242) El campo Condicion IVA receptor no es un valor valido/es obligatorio

Pasos para resolver este error

Luego, lo único que queda es pasar a modo producción. Podés seguir la guía para pasar a producción con Afip SDK.


Ante cualquier duda o pregunta, podés resolverla rápidamente en la Comunidad Afip SDK.

Conéctate a ARCA hoy mismo

Evitá la complejidad de ARCA. Con Afip SDK integrás tu sistema en minutos y te enfocás en hacer crecer tu negocio.