OrigonCFDI es una aplicación privada built con Next.js, TypeScript 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
/app
de Next.js - Temas claros/oscuro con
next-themes
- Políticas de seguridad HTTP vía Content Security Policy en
next.config.ts
- Next.js 13 (App Router)
- React + TypeScript
- Firebase (Auth, Firestore, Storage)
- Drizzle ORM (configurado en
drizzle.config.ts
) - xmlbuilder2 para armado de XML CFDI
@react-pdf/renderer
o librería similar para PDF- Tailwind CSS + componentes personalizados
- Zod + React Hook Form para validación
- Vite (solo en librerías internas si aplica)
- ESLint, Prettier, husky
- Clona el repositorio (acceso privado)
- Copia
.env.example
a.env.local
y define:- NEXT_PUBLIC_FIREBASE_API_KEY
- NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN
- NEXT_PUBLIC_FIREBASE_PROJECT_ID
- NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET
- FIREBASE_CLIENT_EMAIL, FIREBASE_PRIVATE_KEY (si usas Admin SDK)
- DB_URL o configuración de tu base de datos Postgres/MySQL
- PAC_USER, PAC_PASSWORD, PAC_ENDPOINT
- 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.ts # Configuración de Next.js y CSP
├─ .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
- La factura queda almacenada en Firestore con referencia al timbre
- Unit y componentes con Jest + React Testing Library
- Ejecución:
npm run test
- Asegúrate de mantener actualizadas las credenciales del PAC y Firebase.
- Revisar
next.config.ts
si agregas nuevos dominios de imágenes o cambias CSP. - Actualiza
drizzle.config.ts
y tus migraciones cuando modifiques el esquema de la base de datos.
Este proyecto es propietario y no está autorizado su uso parcial o total sin el consentimiento expreso por escrito de los autores.