From dbdb6f3e5ca55e0188c1721153b8369fc8646993 Mon Sep 17 00:00:00 2001 From: Horux Dev Date: Tue, 30 Jun 2026 22:06:49 +0000 Subject: [PATCH] fix(cfdi): filtro de fechas usa fecha_emision en lugar de fecha_efectiva --- apps/api/src/services/cfdi.service.ts | 12 ++++---- docs/CAMBIOS-2026-05-04.md | 41 +++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/apps/api/src/services/cfdi.service.ts b/apps/api/src/services/cfdi.service.ts index abc7067..17af184 100644 --- a/apps/api/src/services/cfdi.service.ts +++ b/apps/api/src/services/cfdi.service.ts @@ -102,12 +102,12 @@ export async function getCfdis(pool: Pool, filters: CfdiFilters): Promise= $${paramIndex++}::date`; + whereClause += ` AND fecha_emision::date >= $${paramIndex++}::date`; params.push(filters.fechaInicio); } if (filters.fechaFin) { - whereClause += ` AND COALESCE(fecha_efectiva, fecha_emision - interval '1 hour') <= ($${paramIndex++}::date + interval '1 day')`; + whereClause += ` AND fecha_emision::date <= $${paramIndex++}::date`; params.push(filters.fechaFin); } @@ -214,11 +214,11 @@ export async function getConceptosList( params.push(filters.estado); } if (filters.fechaInicio) { - whereClause += ` AND COALESCE(c.fecha_efectiva, c.fecha_emision - interval '1 hour') >= $${paramIndex++}::date`; + whereClause += ` AND c.fecha_emision::date >= $${paramIndex++}::date`; params.push(filters.fechaInicio); } if (filters.fechaFin) { - whereClause += ` AND COALESCE(c.fecha_efectiva, c.fecha_emision - interval '1 hour') <= ($${paramIndex++}::date + interval '1 day')`; + whereClause += ` AND c.fecha_emision::date <= $${paramIndex++}::date`; params.push(filters.fechaFin); } if (filters.rfc) { @@ -385,11 +385,11 @@ export async function getCfdiXmlsForZip( params.push(filters.estado); } if (filters.fechaInicio) { - whereClause += ` AND COALESCE(fecha_efectiva, fecha_emision - interval '1 hour') >= $${paramIndex++}::date`; + whereClause += ` AND fecha_emision::date >= $${paramIndex++}::date`; params.push(filters.fechaInicio); } if (filters.fechaFin) { - whereClause += ` AND COALESCE(fecha_efectiva, fecha_emision - interval '1 hour') <= ($${paramIndex++}::date + interval '1 day')`; + whereClause += ` AND fecha_emision::date <= $${paramIndex++}::date`; params.push(filters.fechaFin); } if (filters.rfc) { diff --git a/docs/CAMBIOS-2026-05-04.md b/docs/CAMBIOS-2026-05-04.md index af9fcdc..7794e6b 100644 --- a/docs/CAMBIOS-2026-05-04.md +++ b/docs/CAMBIOS-2026-05-04.md @@ -834,6 +834,47 @@ pm2 reload horux-web --- +## 34. Filtro de fechas en CFDIs usa fecha de emisión + +**Fecha:** 2026-06-30 + +### Cambio +El filtro de fechas en el listado y export de **CFDIs** ahora filtra por **`fecha_emision`** en lugar de `fecha_efectiva`. + +### Antes +El where clause usaba: +```sql +COALESCE(fecha_efectiva, fecha_emision - interval '1 hour') BETWEEN fechaInicio AND fechaFin +``` +Esto provocaba que facturas emitidas en meses anteriores pero pagadas/ejercidas en el rango seleccionado aparecieran en el resultado (por ejemplo, facturas de febrero con `fecha_efectiva` en junio). + +### Ahora +El filtro usa directamente: +```sql +fecha_emision::date BETWEEN fechaInicio AND fechaFin +``` +El export Excel hereda el mismo filtro, así que tabla y Excel son consistentes. + +### Archivos modificados + +| Archivo | Cambio | +|---|---| +| `apps/api/src/services/cfdi.service.ts` | Filtros de fecha en `getCfdis`, `getConceptosList` y `downloadXmlsZip` usan `fecha_emision::date` | + +### Deploy + +```bash +cd /root/HoruxDespachosNuevo +pnpm --filter api build +pnpm --filter web build +pm2 reload horux-api +pm2 reload horux-web +``` + +**Estado:** ✅ Exitoso + +--- + ## Deploy histórico ### Preparación