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

Crear Factura Electrónica de ARCA en Bolt.new

Con prompt listo para pegar


Crear Factura Electrónica de ARCA en Bolt.new

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 pedirle a Bolt.new que genere una app web con frontend y backend para emitir una Factura B usando el web service de factura electrónica (wsfe) con Afip SDK API.

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 Bolt.new

Bolt.new puede generar una app completa a partir de una descripción. Para este caso, conviene pedirle una app full-stack: pantalla para cargar la factura y endpoint backend para llamar a Afip SDK.

Creá un nuevo proyecto en Bolt.new.

Prompt listo para pegar en Bolt.new

Pegá este prompt:

Quiero crear una app full-stack en Bolt.new para emitir Factura Electrónica de ARCA usando Afip SDK API.

Necesito que generes todo: interfaz, endpoint backend, conexión con Afip SDK API, manejo de errores y resultado en pantalla.

Objetivo:
- Emitir una Factura B en ambiente de desarrollo.
- Usar el web service `wsfe`.
- Obtener CAE y vencimiento del CAE.
- Mostrar el resultado al usuario.

Reglas obligatorias:
- El access token de Afip SDK debe estar solo en backend.
- No hacer llamadas a Afip SDK API desde el navegador.
- La app debe limitarse a emitir la factura y mostrar el CAE.

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

Crear:
- Una pantalla principal con formulario.
- Un endpoint backend `POST /api/facturas/emitir`.
- Manejo de loading, success y error.

Formulario:
- Punto de venta, default 1.
- Tipo de comprobante, default 6 para Factura B.
- 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.

Flujo del backend:

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

Guardar de la respuesta:
- token
- sign

2. Consultar último comprobante:
POST https://app.afipsdk.com/api/v1/afip/requests
Header:
Authorization: Bearer ${AFIP_SDK_ACCESS_TOKEN}
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
Header:
Authorization: Bearer ${AFIP_SDK_ACCESS_TOKEN}
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. Leer la respuesta y mostrar:
- Número de comprobante (`CbteDesde`).
- CAE.
- Vencimiento del CAE (`CAEFchVto`).

Manejo de errores:
- Si falta `AFIP_SDK_ACCESS_TOKEN`, mostrar "Falta configurar el access_token de Afip SDK".
- Si ARCA devuelve un error, mostrar el mensaje recibido.
- Para error 10016, sugerir reintentar porque el próximo número debe recalcularse.
- Para error 10242, indicar que la condición IVA receptor debe estar completa.

Diseño:
- Interfaz clara, simple y lista para usar.
- Valores iniciales cargados para emitir una factura de prueba por $121.
- Mensajes visibles para saber si la factura se emitió correctamente.

Configurar el token

Cuando Bolt.new genere el proyecto, configurá AFIP_SDK_ACCESS_TOKEN como variable privada.

No lo guardes en el frontend ni en archivos públicos. El endpoint backend debe leerlo desde el entorno.

Probar la emisión

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

El resultado esperado es:

  • 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.