Puedes probar FactuLocal de dos formas:
Accede directamente a la aplicación:
https://factulocal.vercel.app/
Clona el repositorio e instala las dependencias necesarias para ejecutar el frontend y backend por separado.
git clone https://github.com/Eloxbdeveloper/Factulocal-API-Wars-Project.git
cd Factulocal-API-Wars-Projectcd backend
npm install
npm run devEn otra terminal:
cd frontend
npm install
npm run devPara ejecutar correctamente la integración con Factus, Factus Pay y MongoDB, debes configurar las variables de entorno necesarias en un archivo .env.
FactuLocal es una aplicación web creada para pequeños negocios que necesitan cobrar a sus clientes y generar facturas electrónicas.
La aplicación conecta Factus Pay y Factus para que el proceso sea automático.
En lugar de cobrar primero y después hacer la factura manualmente, FactuLocal conecta ambos pasos:
Cliente paga
↓
FactuLocal confirma el pago
↓
Factus genera la factura electrónica
El proceso completo es:
1. El negocio crea una factura
↓
2. FactuLocal genera un cobro
↓
3. Factus Pay crea el cobro
↓
4. El cliente realiza el pago
↓
5. FactuLocal detecta que el pago fue realizado
↓
6. FactuLocal envía la factura a Factus
↓
7. Factus valida y genera la factura electrónica
↓
8. El negocio puede ver la factura
La idea principal es conectar el cobro con la facturación.
Factus Pay se utiliza para realizar el cobro.
Cuando el negocio quiere cobrar una venta, FactuLocal le pide al backend que cree un cobro en Factus Pay.
Factus Pay genera una referencia del cobro y un QR para que el cliente pueda realizar el pago.
FactuLocal
↓
Backend
↓
Factus Pay
↓
Cobro
↓
QR / referencia
↓
Cliente paga
Factus Pay también informa el estado del cobro.
Por ejemplo:
started
↓
ready
↓
paid
Cuando el estado llega a paid, significa que el pago fue confirmado.
Factus se utiliza para generar la factura electrónica.
FactuLocal espera primero a que Factus Pay confirme el pago.
Cuando el pago está confirmado, el backend envía la información de la venta a Factus.
Pago confirmado
↓
Factus
↓
Factura electrónica
Factus procesa y valida la factura.
Después devuelve información como:
- Número de factura.
- CUFE.
- QR de la factura.
- Documento público.
- Estado de la factura.
Cada API tiene una función diferente.
FACTUS PAY
↓
Se utiliza para COBRAR
FACTUS
↓
Se utiliza para FACTURAR
FactuLocal conecta ambas.
FACTULOCAL
┌─────────────────┐
│ │
▼ ▼
Factus Pay Factus
│ │
▼ ▼
Cobro Factura
Por eso la aplicación no solamente integra las APIs de forma independiente.
La integración importante es:
Factus Pay
↓
Pago confirmado
↓
Factus
↓
Factura electrónica
La aplicación tiene tres partes principales:
Usuario
↓
Frontend
↓
Backend
↓
┌───────────────┐
│ │
▼ ▼
Factus Pay Factus
El usuario interactúa únicamente con FactuLocal.
El frontend se comunica con nuestro backend.
El backend se comunica con Factus Pay y Factus.
Esto es importante porque las credenciales de las APIs permanecen en el backend y no se exponen al usuario.
Supongamos que un pequeño negocio vende un producto.
El negocio selecciona:
- Cliente.
- Producto.
- Cantidad.
- Precio.
FactuLocal prepara la información de la factura.
El negocio selecciona la opción para generar el cobro.
El backend crea el cobro en Factus Pay.
FactuLocal
↓
Factus Pay
↓
Cobro creado
Factus Pay proporciona el medio de pago correspondiente.
En el entorno de prueba se puede utilizar el simulador de Factus Pay.
Cobro
↓
Cliente
↓
Pago
FactuLocal consulta el estado del cobro.
Cuando Factus Pay responde:
paid
FactuLocal sabe que el cliente ya pagó.
El backend toma la información de la venta y la envía a Factus.
paid
↓
Factus
↓
Factura validada
Factus devuelve los datos de la factura.
FactuLocal muestra:
- Número de factura
- CUFE
- QR
- Documento
En el proceso aparecen dos QR diferentes.
El primero pertenece a Factus Pay.
Su función es permitir el pago:
QR Factus Pay
↓
Pagar
El segundo pertenece a Factus.
Aparece después de generar la factura y está relacionado con el documento electrónico:
QR Factus
↓
Factura electrónica
No son el mismo QR ni tienen la misma función.
FactuLocal utiliza MongoDB para guardar la información necesaria para el funcionamiento de la aplicación.
Entre los datos manejados se encuentran:
- Clientes
- Productos
- Facturas
- Pagos
Los pagos se relacionan con las facturas para poder saber qué pago corresponde a cada venta.
FactuLocal también incluye un dashboard para consultar la información del negocio.
Permite visualizar:
- Total facturado.
- Facturas emitidas.
- Facturas pendientes.
- Pagos confirmados.
- Evolución de las ventas.
- Últimas facturas.
La información puede consultarse por diferentes períodos.
- HTML
- CSS
- JavaScript
- Vite
- Node.js
- Express
- JavaScript
- MongoDB
- Mongoose
- Factus
- Factus Pay
- Vercel para el frontend.
- Render para el backend.
- MongoDB Atlas para la base de datos.
El frontend nunca se conecta directamente con Factus ni con Factus Pay.
La comunicación funciona así:
Usuario
↓
Frontend
↓
Backend FactuLocal
↓
Factus / Factus Pay
Las credenciales de Factus, Factus Pay y MongoDB se almacenan como variables de entorno.
Los archivos con credenciales reales no se encuentran en el repositorio.
El proyecto utiliza los entornos Sandbox de Factus y Factus Pay.
Esto significa que las operaciones utilizadas durante la demostración son de prueba y no representan pagos reales.
El flujo de demostración es:
Crear venta
↓
Generar cobro
↓
Factus Pay
↓
Simular pago
↓
Pago confirmado
↓
Factus
↓
Factura electrónica
API-Wars-Project/
│
├── frontend/
│ └── Aplicación web
│
├── backend/
│ └── API y lógica del sistema
│
├── .gitignore
│
└── README.md
Dentro del backend se encuentran principalmente:
- controllers/ — Manejan las peticiones
- models/ — Representan los datos
- routes/ — Definen las rutas de la API
- services/ — Contienen la lógica del negocio
- integrations/ — Conectan FactuLocal con Factus y Factus Pay
La parte más importante del proyecto es esta:
FACTULOCAL
│
▼
Backend
│
┌───────┴───────┐
│ │
▼ ▼
FACTUS PAY FACTUS
│ │
▼ ▼
COBRO FACTURA
│
▼
CLIENTE
│
▼
PAGA
│
▼
Pago confirmado
│
└──────────────► FACTUS
│
▼
Factura electrónica
En resumen:
- Factus Pay cobra.
- Factus factura.
- FactuLocal conecta ambos procesos.
El objetivo de FactuLocal es simplificar el proceso de venta para pequeños negocios.
En una sola aplicación, el negocio puede:
Crear venta
↓
Cobrar
↓
Confirmar pago
↓
Facturar
↓
Consultar factura
Así, una venta puede pasar desde el cobro hasta la factura electrónica sin que el negocio tenga que realizar manualmente cada paso.
FactuLocal fue desarrollado para el reto de integración de APIs de API WARS 2026.
El proyecto responde al concepto:
Cobra. Factura. Crece.
La solución utiliza las dos APIs principales del reto:
- Factus Pay → Cobros
- Factus → Facturación electrónica
y crea un flujo integrado entre ambas.
Proyecto desarrollado por el equipo de API WARS 2026.
- Emanuel Orjuela Barbosa - eloxbdevcollabs@hotmail.com
- Juan David Useche Perez
- Adrián Rueda Garzon