Crear Factura Electrónica de ARCA en Lovable
Con prompt listo para pegar
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
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 Lovable que cree una app para emitir una Factura B usando el web service de factura electrónica (wsfe) a través del API de Afip SDK. La idea es que puedas copiar un prompt, pegarlo en Lovable y dejar que la plataforma genere la pantalla, el endpoint privado y la conexión con ARCA.
Requisitos previos
Para poder seguir esta guía, primero necesitarás:
- Obtener un access_token de Afip SDK
- Tener un proyecto en Lovable
- Guardar el token como variable privada o secret, nunca en el frontend
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, para avanzar más rápido.
Cuando quieras usar tu CUIT, podés seguir la guía para usar tu propio certificado para desarrollo.
Crear el proyecto en Lovable
Lovable puede generar la interfaz visual y la lógica de backend a partir de un prompt. Para factura electrónica, lo importante es pedirle explícitamente que el access_token quede en una función server-side o endpoint privado.
En Lovable, creá un nuevo proyecto.
Prompt listo para pegar en Lovable
Pegá este prompt:
Quiero crear una app web en Lovable para emitir Factura Electrónica de ARCA usando Afip SDK API.
Necesito que generes toda la implementación lista para usar.
Objetivo:
- Crear una pantalla simple para cargar los datos de una Factura B.
- Emitir la factura contra el web service de factura electrónica de ARCA (`wsfe`) usando Afip SDK API.
- Mostrar el CAE, vencimiento del CAE y número de comprobante autorizado.
Reglas importantes:
- No llames a Afip SDK API desde componentes frontend.
- No expongas el access token en el navegador.
- Usá una función server-side, Edge Function o endpoint backend privado.
- La app debe limitarse a emitir el comprobante y mostrar el CAE.
- Usá ambiente de desarrollo: `dev`.
- Usá CUIT de desarrollo: `20409378472`.
- Usá web service: `wsfe`.
Variables privadas que debo configurar:
- AFIP_SDK_ACCESS_TOKEN: mi access_token de Afip SDK.
- AFIP_TAX_ID: 20409378472.
- AFIP_ENVIRONMENT: dev.
Pantalla:
- Título: "Emitir Factura Electrónica de ARCA".
- Formulario con estos campos:
- Punto de venta, valor inicial 1.
- Tipo de comprobante, valor inicial 6 para Factura B.
- Concepto, valor inicial 1 para Productos.
- Tipo de documento, valor inicial 99 para Consumidor Final.
- Número de documento, valor inicial 0.
- Importe neto gravado, valor inicial 100.
- IVA, valor inicial 21.
- Condición IVA receptor, valor inicial 5.
- Botón: "Emitir factura".
- Resultado visible:
- Número de comprobante.
- CAE.
- Vencimiento del CAE.
- Mensaje de error claro si ARCA rechaza la solicitud.
Backend:
Crear un endpoint privado, por ejemplo `/api/emitir-factura-arca`, que reciba los datos del formulario y haga estos pasos:
1. Obtener autorización de ARCA:
POST https://app.afipsdk.com/api/v1/afip/auth
Header:
Authorization: Bearer ${AFIP_SDK_ACCESS_TOKEN}
Body JSON:
{
"environment": "dev",
"tax_id": "20409378472",
"wsid": "wsfe"
}
La respuesta trae `token` y `sign`.
2. Obtener el último comprobante autorizado:
POST https://app.afipsdk.com/api/v1/afip/requests
Header:
Authorization: Bearer ${AFIP_SDK_ACCESS_TOKEN}
Body JSON:
{
"environment": "dev",
"method": "FECompUltimoAutorizado",
"wsid": "wsfe",
"params": {
"Auth": {
"Token": token,
"Sign": sign,
"Cuit": "20409378472"
},
"PtoVta": puntoDeVenta,
"CbteTipo": tipoDeComprobante
}
}
Tomar `FECompUltimoAutorizadoResult.CbteNro` y calcular:
nextVoucherNumber = CbteNro + 1.
3. Crear la factura con `FECAESolicitar`:
POST https://app.afipsdk.com/api/v1/afip/requests
Header:
Authorization: Bearer ${AFIP_SDK_ACCESS_TOKEN}
Body JSON:
{
"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": fechaActualEnFormatoYYYYMMDD,
"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 de `FECAESolicitar`.
Extraer:
- `CAE`
- `CAEFchVto`
- `CbteDesde`
5. Devolver esos datos al frontend.
Manejo de errores:
- Si Afip SDK API devuelve un error, mostrarlo en pantalla con lenguaje claro.
- Si aparece el error 10016, indicar que el sistema debe volver a consultar el último comprobante y reintentar con el próximo número.
- Si aparece el error 10242, indicar que falta o es incorrecta la condición IVA receptor.
Agregá estados de carga, éxito y error. Dejá la app lista para probar con los valores iniciales en ambiente `dev`.
Configurar el token
Después de generar la app, configurá AFIP_SDK_ACCESS_TOKEN en los secrets o variables privadas del proyecto de Lovable.
No pegues el token en un campo visible de la pantalla ni dentro de un componente React. El token solo debe vivir en el backend.
Probar la emisión
Con los valores iniciales del formulario, Lovable debería emitir una Factura B de prueba por $121 en ambiente de desarrollo.
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
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
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.