OrigonCFDI es una aplicación privada construida con Next.js, TypeScript, Drizzle (Postgres) y Firebase para generar y administrar Comprobantes Fiscales Digitales por Internet (CFDI) en México.
- Autenticación de usuarios con Firebase Auth
- CRUD de Clientes, Facturas y Cuentas Bancarias
- Generación de PDF de CFDI con datos de cliente, desglose de impuestos y código QR
- Integración con PAC (Proveedor Autorizado de Certificación) vía XML (xmlbuilder2)
- Conversión de importes a letras (
numero-a-letras) - Dashboard responsivo con el nuevo sistema de rutas
/appde Next.js - Temas claros/oscuro con
next-themes - (Opcional) Políticas de seguridad HTTP vía Content Security Policy
- Next.js (App Router)
- React + TypeScript
- Firebase (Auth, Storage)
- Drizzle ORM + Postgres (configurado en
drizzle.config.ts) - xmlbuilder2 para armado de XML CFDI
pdf-libpara generar PDF- Tailwind CSS + componentes personalizados
- Zod + React Hook Form para validación
- ESLint, Prettier
- Clona el repositorio (acceso privado)
- Copia
.env.examplea.env.localy define:- NEXT_PUBLIC_FIREBASE_API_KEY
- NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN
- NEXT_PUBLIC_FIREBASE_PROJECT_ID
- NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET
- NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID
- NEXT_PUBLIC_FIREBASE_APP_ID
- FIREBASE_SERVICE_ACCOUNT_JSON (JSON en una sola línea)
- DATABASE_URL (cadena de conexión Postgres/Neon)
- FACTURALOPLUS_USER, FACTURALOPLUS_API_KEY
- (Opcional) UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN
- Instala dependencias
npm install
- Ejecuta en modo desarrollo
npm run dev
- Para producción:
npm run build npm start
/
├─ src/
│ ├─ app/ # Rutas de Next.js (páginas y layouts)
│ ├─ components/ # Componentes UI reutilizables
│ ├─ lib/ # Integraciones (Firebase, PAC, utilidades)
│ ├─ types/ # Declaraciones y esquemas Zod
│ └─ styles/ # Estilos globales y configuración Tailwind
├─ drizzle.config.ts # Configuración de ORM
├─ next.config.js # Configuración de Next.js
├─ .env.example
└─ package.json
- El usuario crea o selecciona un cliente
- Genera la factura con detalle de productos/servicios
- Se arma el XML con xmlbuilder2 y se envía al PAC
- El PAC devuelve el XML timbrado con sello digital
- Se genera el PDF y el código QR para descarga/visualización
- Se guarda el registro en la base de datos (Postgres/Drizzle) y los archivos (PDF/XML) en Firebase Storage
- Aún no hay una suite de tests incluida en el repo.
- Recomendado: habilitar
npm run typecheckynext linten CI/CD.
- Asegúrate de mantener actualizadas las credenciales del PAC y Firebase.
- Revisa
next.config.jssi agregas nuevos dominios de imágenes. - Actualiza
drizzle.config.tsy tus migraciones cuando modifiques el esquema de la base de datos.
Nota: Los archivos timbrados (PDF/XML) se publican actualmente en Firebase Storage. Para entornos productivos, considera restringir acceso (URLs firmadas o reglas por usuario) en lugar de makePublic().
Este proyecto es propietario y no está autorizado su uso parcial o total sin el consentimiento expreso por escrito de los autores.