229 lines
6.0 KiB
Markdown
229 lines
6.0 KiB
Markdown
# Plan de Implementación: Sincronización SAT
|
|
|
|
## Fase 1: Base de Datos y Modelos
|
|
|
|
### 1.1 Migraciones Prisma
|
|
- [ ] Agregar modelo `FielCredential` en schema.prisma
|
|
- [ ] Agregar modelo `SatSyncJob` en 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.ts` con 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
|
|
|
|
```bash
|
|
# 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 |
|
|
|