6.0 KiB
6.0 KiB
Plan de Implementación: Sincronización SAT
Fase 1: Base de Datos y Modelos
1.1 Migraciones Prisma
- Agregar modelo
FielCredentialen schema.prisma - Agregar modelo
SatSyncJoben schema.prisma - Agregar campos a modelo
Cfdi: source, sat_sync_job_id, xml_original, last_sat_sync - Ejecutar migración
1.2 Tipos TypeScript
- Crear
packages/shared/src/types/sat.tscon interfaces - Exportar tipos en index.ts
Fase 2: Servicios de Criptografía y FIEL
2.1 Servicio de Criptografía
- Crear
apps/api/src/services/sat/sat-crypto.service.ts - Implementar encrypt() con AES-256-GCM
- Implementar decrypt()
- Tests unitarios
2.2 Servicio de FIEL
- Crear
apps/api/src/services/fiel.service.ts - uploadFiel() - validar y guardar credenciales encriptadas
- getFielStatus() - obtener estado sin exponer datos sensibles
- deleteFiel() - eliminar credenciales
- validateFiel() - verificar que .cer y .key coincidan
- isExpired() - verificar vigencia
2.3 Dependencias
- Instalar @nodecfdi/credentials
- Instalar node-forge
Fase 3: Servicios de Comunicación SAT
3.1 Servicio de Autenticación SAT
- Crear
apps/api/src/services/sat/sat-auth.service.ts - buildAuthSoapEnvelope() - construir XML de autenticación
- signWithFiel() - firmar con llave privada
- getToken() - obtener token SAML del SAT
- Manejo de errores y reintentos
3.2 Servicio de Descarga SAT
- Crear
apps/api/src/services/sat/sat-download.service.ts - requestDownload() - solicitar descarga de CFDIs
- verifyRequest() - verificar estado de solicitud
- downloadPackage() - descargar paquete ZIP
- Polling con backoff exponencial
3.3 Dependencias
- Instalar fast-xml-parser
- Instalar adm-zip
Fase 4: Procesamiento de CFDIs
4.1 Servicio de Parser
- Crear
apps/api/src/services/sat/sat-parser.service.ts - extractZip() - extraer XMLs del ZIP
- parseXml() - parsear XML a objeto
- mapToDbModel() - mapear a modelo de BD
4.2 Dependencias
- Instalar @nodecfdi/cfdi-core
Fase 5: Orquestador Principal
5.1 Servicio Principal SAT
- Crear
apps/api/src/services/sat/sat.service.ts - startSync() - iniciar sincronización
- processInitialSync() - extracción de 10 años
- processDailySync() - extracción mensual
- saveProgress() - guardar progreso en sat_sync_jobs
- handleError() - manejo de errores y reintentos
Fase 6: Job Programado
6.1 Cron Job
- Crear
apps/api/src/jobs/sat-sync.job.ts - Configurar ejecución a las 3:00 AM
- Obtener tenants con FIEL activa
- Ejecutar sync para cada tenant
- Logging y monitoreo
6.2 Dependencias
- Instalar node-cron
Fase 7: API Endpoints
7.1 Controlador FIEL
- Crear
apps/api/src/controllers/fiel.controller.ts - POST /upload - subir credenciales
- GET /status - obtener estado
- DELETE / - eliminar credenciales
7.2 Controlador SAT
- Crear
apps/api/src/controllers/sat.controller.ts - POST /sync - iniciar sincronización manual
- GET /sync/status - estado actual
- GET /sync/history - historial
- GET /sync/:id - detalle de job
- POST /sync/:id/retry - reintentar
7.3 Rutas
- Crear
apps/api/src/routes/fiel.routes.ts - Crear
apps/api/src/routes/sat.routes.ts - Registrar en app.ts
Fase 8: Frontend
8.1 Componentes
- Crear
apps/web/components/sat/FielUploadModal.tsx - Crear
apps/web/components/sat/SyncStatus.tsx - Crear
apps/web/components/sat/SyncHistory.tsx
8.2 Página de Configuración
- Crear
apps/web/app/(dashboard)/configuracion/sat/page.tsx - Integrar componentes
- Conectar con API
8.3 API Client
- Agregar métodos en
apps/web/lib/api.ts - uploadFiel()
- getFielStatus()
- deleteFiel()
- startSync()
- getSyncStatus()
- getSyncHistory()
Fase 9: Testing y Validación
9.1 Tests
- Tests unitarios para servicios de criptografía
- Tests unitarios para parser de XML
- Tests de integración para flujo completo
- Test con FIEL de prueba del SAT
9.2 Validación
- Probar carga de FIEL
- Probar sincronización manual
- Probar job programado
- Verificar CFDIs descargados
Orden de Implementación
Fase 1 (BD)
│
▼
Fase 2 (Crypto + FIEL)
│
▼
Fase 3 (Auth + Download SAT)
│
▼
Fase 4 (Parser)
│
▼
Fase 5 (Orquestador)
│
▼
Fase 6 (Cron Job)
│
▼
Fase 7 (API)
│
▼
Fase 8 (Frontend)
│
▼
Fase 9 (Testing)
Archivos a Crear/Modificar
Nuevos Archivos (16)
apps/api/src/services/sat/sat-crypto.service.ts
apps/api/src/services/sat/sat-auth.service.ts
apps/api/src/services/sat/sat-download.service.ts
apps/api/src/services/sat/sat-parser.service.ts
apps/api/src/services/sat/sat.service.ts
apps/api/src/services/fiel.service.ts
apps/api/src/controllers/fiel.controller.ts
apps/api/src/controllers/sat.controller.ts
apps/api/src/routes/fiel.routes.ts
apps/api/src/routes/sat.routes.ts
apps/api/src/jobs/sat-sync.job.ts
packages/shared/src/types/sat.ts
apps/web/components/sat/FielUploadModal.tsx
apps/web/components/sat/SyncStatus.tsx
apps/web/components/sat/SyncHistory.tsx
apps/web/app/(dashboard)/configuracion/sat/page.tsx
Archivos a Modificar (5)
apps/api/prisma/schema.prisma
apps/api/src/app.ts
apps/api/src/index.ts
packages/shared/src/index.ts
apps/web/lib/api.ts
Dependencias a Instalar
# En apps/api
pnpm add @nodecfdi/credentials @nodecfdi/cfdi-core node-forge fast-xml-parser adm-zip node-cron
# Tipos
pnpm add -D @types/node-forge @types/node-cron
Estimación por Fase
| Fase | Descripción | Complejidad |
|---|---|---|
| 1 | Base de datos | Baja |
| 2 | Crypto + FIEL | Media |
| 3 | Comunicación SAT | Alta |
| 4 | Parser | Media |
| 5 | Orquestador | Alta |
| 6 | Cron Job | Baja |
| 7 | API | Media |
| 8 | Frontend | Media |
| 9 | Testing | Media |