尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
正在載入完整 README。 以下為已儲存的摘錄。
SaaS de OCR + contabilización de facturas para asesorías españolas. Los clientes suben los PDFs de sus facturas, el sistema extrae los campos fiscales (NIF, fechas, IVA, IRPF...) y los gestores los validan antes de exportar a programas contables tipo A3 Asesor. ⚠️ Este Next.js está modificado respecto a la versión estándar. Antes de tocar APIs internas, lee la guía relevante en node_modules/next/dist/docs/ o consulta AGENTS.md.檢視完整 README ↗
SaaS de OCR + contabilización de facturas para asesorías españolas. Los clientes suben los PDFs de sus facturas, el sistema extrae los campos fiscales (NIF, fechas, IVA, IRPF...) y los gestores los validan antes de exportar a programas contables tipo A3 Asesor.
⚠️ Este Next.js está modificado respecto a la versión estándar. Antes de tocar APIs internas, lee la guía relevante en
node_modules/next/dist/docs/o consulta AGENTS.md.
| Capa | Tecnología |
|---|---|
| Frontend / Backend | Next.js 16 (App Router, Server Actions) |
| Lenguaje | TypeScript (strict) |
| Estilos | Tailwind CSS 4 |
| ORM | Prisma 7.5 + @prisma/adapter-pg |
| Base de datos | PostgreSQL (Supabase) |
| Auth | NextAuth v5 (credentials + bcryptjs) |
| OCR | Gemini API (PDF e imágenes) + parser propio para XML Facturae |
| Storage de PDFs | Supabase Storage |
| Resend | |
| Deploy | Vercel |
| Tests | Vitest (unit) + Playwright (e2e) |
AdvisoryFirm). Acceso total
(clientes, gestores, lotes, exportar, auditoría, ajustes).WorkerClientAssignment).git clone <repo>
cd invoice-saas
npm install
cp .env.example .env # rellenar las variables
npx prisma migrate deploy # aplicar migraciones a la BD
npx tsx scripts/bootstrap-admin.ts # crear primer admin
npm run dev
Abrir http://localhost:3000 y entrar con las credenciales del admin que creó el script.
Las explica en detalle .env.example. Resumen:
| Variable | Para qué |
|---|---|
DATABASE_URL | Conexión a Postgres |
AUTH_SECRET | Firma de JWTs de NextAuth |
NEXTAUTH_URL | URL pública (emails, callbacks) |
S3_ENDPOINT, S3_REGION, S3_BUCKET, S3_ACCESS_KEY, S3_SECRET_KEY, S3_FORCE_PATH_STYLE | Storage de PDFs (Garage / S3-compatible) |
GEMINI_API_KEY, GEMINI_MODEL | OCR (Gemini). Obligatoria para PDF e imágenes |
OCR_CONCURRENCY | Análisis a la vez en el proceso (4 por defecto); lo demás espera en «Subida» |
RESEND_API_KEY, EMAIL_FROM | Emails transaccionales |
CRON_SECRET | Protege endpoints /api/cron/* |
npm run dev # dev server (puerto 3000)
npm run build # prisma generate + next build
npm start # producción local
npm run lint # ESLint
npm test # Vitest (unit, tests/unit; sin BD, corren en el build de Docker)
npm run test:watch # Vitest watch
npm run test:integration # Vitest contra un Postgres de pruebas (ver abajo)
npm run test:e2e # Playwright (tests/e2e)
# Prisma
npx prisma migrate dev # crear y aplicar nueva migración
npx prisma migrate deploy # aplicar migraciones existentes
npx prisma studio # GUI de la BD
src/
├── app/ # App Router
│ ├── (login)/ # Login, forgot/reset password
│ ├── dashboard/
│ │ ├── admin/ # Vistas de ADMIN
│ │ ├── worker/ # Vistas de WORKER (gestores)
│ │ └── client/ # Vistas de CLIENT
│ ├── api/
│ │ ├── invoices/ # CRUD facturas + procesado OCR
│ │ ├── export/ # Generación de Excel A3
│ │ ├── admin/ # Verify audit, reset demo
│ │ └── cron/ # Cron jobs (Vercel)
│ └── legal/ # Aviso legal
├── components/ # UI reutilizable
├── lib/
│ ├── auth.ts # Config NextAuth
│ ├── prisma.ts # Cliente Prisma singleton
│ ├── ocr.ts # Tipos del OCR + parser XML Facturae
│ ├── ocrLlm.ts # Extracción con Gemini (PDF e imágenes)
│ ├── processInvoice.ts # Orquesta OCR → BD + pre-fill
│ ├── auditLog.ts # Cadena de hash SHA-256
│ ├── exportFormats.ts # Generador Excel A3
│ ├── reviewQueue.ts # Cola "siguiente factura"
│ ├── validators.ts # parseTaxId, retentions, etc.
│ ├── invoiceStatuses.ts # Estados canonicos del flujo
│ ├── boundingBoxes.ts # Resaltado OCR en visor PDF
│ ├── demoSeed.ts # Reset demo
│ ├── email.ts # Plantillas Resend
│ ├── rateLimit.ts # Limit en memoria (login)
│ └── supabase.ts # Cliente Storage admin
├── hooks/ # React hooks
└── types/ # Tipos compartidos
prisma/
├── schema.prisma # Modelo de datos
└── migrations/ # Migraciones SQL
scripts/ # Scripts operacionales (bootstrap admin,
# seed demo, capturar screenshots...)
tests/
├── unit/ # Vitest, sin BD (barrera del build)
├── integration/ # Vitest contra Postgres de pruebas
└── e2e/ # Playwright
Van contra un Postgres de pruebas, nunca contra el de DATABASE_URL (en
local, Supabase): la URL sale solo de TEST_DATABASE_URL. Cada test la
vacía, así que tiene que ser una base de datos vacía la primera vez y con
nombre de pruebas (facturocr_test); si no, el harness no arranca.
# Postgres local con Docker (o createdb facturocr_test en uno instalado)
docker run -d --name facturocr-test -p 55432:5432 \
-e POSTGRES_PASSWORD=test -e POSTGRES_DB=facturocr_test postgres:16
export TEST_DATABASE_URL=postgresql://postgres:[email protected]:55432/facturocr_test
npm run test:integration # aplica las migraciones y ejecuta tests/integration
以上為 README 的開頭部分。其餘內容請閱讀原文。 檢視完整 README ↗