feat(cfdi): agrega C.P. receptor, regimen receptor, no_identificacion, tipo_relacion y CFDIs relacionados al visualizador

Backend:
- Migracion 044: codigo_postal_receptor VARCHAR(5) + indice
- sat-parser: extrae DomicilioFiscalReceptor
- sat.service: persiste codigo_postal_receptor en INSERT/UPDATE
- cfdi.service: incluye codigo_postal_receptor en CFDI_SELECT
- shared/types: codigoPostalReceptor en interfaz Cfdi

Frontend:
- cfdi-invoice: tarjeta receptor con C.P. y regimen (con descripciones)
- cfdi-invoice: seccion CFDI Relacionado (tipo + UUIDs)
- cfdi-invoice: columna No. Identificacion en tabla de conceptos
- cfdi-viewer-modal: mapea noIdentificacion desde DB y XML
This commit is contained in:
Horux Dev
2026-05-16 14:45:00 +00:00
parent 0bde43a309
commit bda0a4e212
8 changed files with 142 additions and 6 deletions

View File

@@ -390,3 +390,42 @@ Se reemplazó por un estado de resultados vertical contable con 7 líneas, anál
**Causa:** PostgreSQL devolvía `numeric` como string en el driver `pg`. Al sumar strings en el `reduce` del frontend, JavaScript concatenaba en lugar de sumar, generando `NaN` al formatear.
**Fix:** Se agregó `::float` en las 5 queries SQL de CFDIs individuales del drill-down, forzando que el backend devuelva números reales.
---
## 8. Visualizador de CFDI — campos faltantes
**Fecha:** 2026-05-04
Se agregaron 5 campos adicionales al visualizador de CFDI (`CfdiInvoice`) para mostrar información completa del comprobante:
| Campo | Origen | Backend | Frontend |
|---|---|---|---|
| **C.P. del receptor** | CFDI 4.0 `Receptor@DomicilioFiscalReceptor` | ✅ Migración + parser + sync + query | ✅ Tarjeta de receptor |
| **Régimen del receptor** | Ya existía en BD | — | ✅ Tarjeta de receptor con descripción |
| **No. identificación** (conceptos) | Ya existía en BD | — | ✅ Nueva columna en tabla de conceptos |
| **Tipo de relación** | Ya existía en BD | — | ✅ Sección "CFDI Relacionado" con descripción SAT |
| **CFDIs relacionados** (UUIDs) | Ya existía en BD | — | ✅ Badges con UUIDs separados por pipe |
### Backend (`apps/api/`)
| Archivo | Cambio |
|---|---|
| `src/migrations/tenant/044_cfdis_codigo_postal_receptor.sql` | Nueva migración: columna `codigo_postal_receptor VARCHAR(5)` + índice parcial |
| `src/services/sat/sat-parser.service.ts` | Extrae `codigoPostalReceptor` de `@_DomicilioFiscalReceptor` |
| `src/services/sat/sat.service.ts` | INSERT/UPDATE incluyen `codigo_postal_receptor` |
| `src/services/cfdi.service.ts` | `CFDI_SELECT` mapea `codigo_postal_receptor``"codigoPostalReceptor"` |
| `packages/shared/src/types/cfdi.ts` | Agregado `codigoPostalReceptor: string \| null` a interfaz `Cfdi` |
### Frontend (`apps/web/`)
| Archivo | Cambio |
|---|---|
| `components/cfdi/cfdi-invoice.tsx` | Renderizado de C.P., régimen, tipo relación, UUIDs relacionados, y columna "No. Id." en conceptos |
| `components/cfdi/cfdi-viewer-modal.tsx` | Mapea `noIdentificacion` desde DB y desde parseo XML |
### Diccionarios agregados
- **`regimenFiscalLabels`**: 20 regímenes fiscales (601626)
- **`tipoRelacionLabels`**: 7 tipos de relación SAT (`01` Nota de crédito … `07` Aplicación de anticipo)
- **`usoCfdiLabels`**: ya existía, se reutiliza para el receptor