fix: facturapi onboarding, CSF scraper, SAT sync initial, doc notifications
- Auto-update fiscal data on org creation via updateOrgLegalOnCreate - Add Carta Manifiesto embedded iframe in CSD config page - Fix CSF scraper: 60s timeout + manual RFC fallback when SAT doesn't auto-populate - Fix contribuyenteId propagation in constancia frontend hooks/API - Fix needsInitialSync to check per-contribuyente, not just per-tenant - Fix documento notifications for global_admin using viewingTenantId - Extract CSF manually for Carlos Husberto Torres Romero - Trigger initial SAT sync for Carlos Husberto Torres Romero - Update org legal data in Facturapi for Carlos Husberto (tax_system 612 + address) Files changed: - apps/api/src/controllers/documentos.controller.ts - apps/api/src/jobs/sat-sync.job.ts - apps/api/src/services/constancia.service.ts - apps/api/src/services/contribuyente-facturapi.service.ts - apps/api/src/services/sat/sat-csf-login.ts - apps/web/app/(dashboard)/configuracion/csd/page.tsx - apps/web/lib/api/constancias.ts - apps/web/lib/hooks/use-constancias.ts - docs/sessions/2026-05-17-facturapi-csf-sync-notifications.md
This commit is contained in:
98
docs/sessions/2026-05-17-facturapi-csf-sync-notifications.md
Normal file
98
docs/sessions/2026-05-17-facturapi-csf-sync-notifications.md
Normal file
@@ -0,0 +1,98 @@
|
||||
# Sesión de cambios: 2026-05-17
|
||||
|
||||
## Resumen
|
||||
|
||||
Correcciones y mejoras en onboarding de Facturapi, extracción de CSF, sincronización SAT inicial y notificaciones por email.
|
||||
|
||||
---
|
||||
|
||||
## 1. Facturapi onboarding — Datos fiscales + Carta Manifiesto
|
||||
|
||||
### Problema
|
||||
Las organizaciones Facturapi creadas por API quedaban sin datos fiscales (`legal`) y sin flujo para firmar la Carta Manifiesto (requerimiento SAT/RMF).
|
||||
|
||||
### Cambios
|
||||
|
||||
**Backend: `apps/api/src/services/contribuyente-facturapi.service.ts`**
|
||||
- Extraídos helpers reutilizables:
|
||||
- `fetchContribuyenteFiscalData()` — consulta RFC, razón social, régimen, CP, domicilio
|
||||
- `buildLegalPayload()` — construye body para `PUT /legal`
|
||||
- `putOrgLegal()` — ejecuta el PUT
|
||||
- Nuevo `updateOrgLegalOnCreate()` — actualiza automáticamente los datos fiscales tras crear/recuperar una org
|
||||
- `createOrgContribuyente()` ahora llama `updateOrgLegalOnCreate()` en los 3 casos (reused, recreated, fresh create)
|
||||
- Refactorizado `ensureOrgLegalForEmit()` para usar los mismos helpers (DRY)
|
||||
|
||||
**Backend: `apps/api/src/services/sat/sat-csf-login.ts`**
|
||||
- `loginSatCsf()` ahora acepta `knownRfc` opcional
|
||||
- Timeout de espera del RFC auto-populado aumentado de 30s a 60s
|
||||
- Fallback manual: si el SAT no auto-popula el RFC, se llena manualmente con `knownRfc`
|
||||
|
||||
**Backend: `apps/api/src/services/constancia.service.ts`**
|
||||
- Ambas llamadas a `loginSatCsf` ahora pasan `fiel.rfc`
|
||||
|
||||
**Frontend: `apps/web/app/(dashboard)/configuracion/csd/page.tsx`**
|
||||
- Nueva sección "Carta Manifiesto" con iframe embebido de Facturapi
|
||||
- Aparece cuando la org está configurada (`orgStatus?.configured`)
|
||||
- URL: `https://www.facturapi.io/embedded/manifiesto?organization={orgId}`
|
||||
|
||||
**Frontend: `apps/web/lib/api/constancias.ts`**
|
||||
- `consultarConstancia()` ahora acepta `contribuyenteId` opcional
|
||||
|
||||
**Frontend: `apps/web/lib/hooks/use-constancias.ts`**
|
||||
- `useConsultarConstancia` ahora pasa `selectedContribuyenteId` a la API
|
||||
|
||||
---
|
||||
|
||||
## 2. CSF de Carlos Husberto Torres Romero
|
||||
|
||||
### Problema
|
||||
La FIEL de Carlos Husberto se subió el 16/05 pero la CSF nunca se extrajo. El scraper falló con `page.waitForFunction: Timeout 30000ms exceeded`.
|
||||
|
||||
### Acciones
|
||||
- Actualizados datos fiscales de la org `6a08b242ec01fdfa232ed5cc` en Facturapi:
|
||||
- `tax_system`: 601 → 612
|
||||
- Dirección completa sincronizada desde la CSF
|
||||
- Extraída CSF manualmente desde el servidor (113 CFDIs insertados)
|
||||
- Disparado sync inicial SAT para Carlos Husberto (job en progreso)
|
||||
|
||||
---
|
||||
|
||||
## 3. Sync inicial SAT por contribuyente
|
||||
|
||||
### Problema
|
||||
`needsInitialSync()` solo verificaba a nivel tenant. Si un tenant ya había tenido un sync inicial (legacy), los nuevos contribuyentes nunca recibían su extracción histórica.
|
||||
|
||||
### Cambios
|
||||
|
||||
**`apps/api/src/jobs/sat-sync.job.ts`**
|
||||
- `needsInitialSync()` ahora acepta `contribuyenteId` opcional
|
||||
- Si se pasa: busca jobs `initial` completados para ese contribuyente
|
||||
- Si no: mantiene comportamiento legacy a nivel tenant
|
||||
- `syncTenant()` determina `initial` vs `daily` por cada contribuyente dentro del loop
|
||||
- `incrementalSyncTenant()` verifica que cada contribuyente tenga su `initial` antes de hacer incremental
|
||||
|
||||
---
|
||||
|
||||
## 4. Notificaciones de documentos para admins
|
||||
|
||||
### Problema
|
||||
Cuando un global_admin subía una declaración/documento para otro tenant, la notificación buscaba los owners del **tenant del admin** en lugar del tenant destino.
|
||||
|
||||
### Cambios
|
||||
|
||||
**`apps/api/src/controllers/documentos.controller.ts`**
|
||||
- `notifyDocumentoSubido` ahora usa `req.viewingTenantId ?? req.user!.tenantId`
|
||||
- Corregido en ambos endpoints: crear declaración y crear documento extra
|
||||
|
||||
---
|
||||
|
||||
## Archivos modificados
|
||||
|
||||
- `apps/api/src/controllers/documentos.controller.ts`
|
||||
- `apps/api/src/jobs/sat-sync.job.ts`
|
||||
- `apps/api/src/services/constancia.service.ts`
|
||||
- `apps/api/src/services/contribuyente-facturapi.service.ts`
|
||||
- `apps/api/src/services/sat/sat-csf-login.ts`
|
||||
- `apps/web/app/(dashboard)/configuracion/csd/page.tsx`
|
||||
- `apps/web/lib/api/constancias.ts`
|
||||
- `apps/web/lib/hooks/use-constancias.ts`
|
||||
Reference in New Issue
Block a user