Skip to content

feat(finanzas/saldos): filtros homologados + switch de Público en General

Rafael Bautista requested to merge ti into qa

Homologa la barra de filtros de Antigüedad de cartera con el resto de Finanzas (CxC/CxP/Tesorería/RSV) y corrige dos lecturas equivocadas de la data que venían de cuando el dataset traía sólo Mipymex.

Backend (/finanzas/saldos/antiguedad/detalle, nuevo):

  • Devuelve un CUBO por las 7 dimensiones filtrables en vez del grano documento: 5.68 MB -> 0.76 MB y 2.0 s -> 0.42 s. Es sin pérdida porque cada documento aporta su saldo a un solo bucket de antigüedad.
  • Portafolio y Empresa son de la EMPRESA EMISORA (25/29 cruzan el catálogo -> 16 portafolios); antes se cruzaba el cliente y sólo cruzaban 74/2190.
  • fecha_importacion = first-seen (min(ingested_at) por documento sobre los cortes acumulados). El ingested_at crudo es constante dentro de un corte y daría una sola opción de Año/Mes para siempre.
  • tipo = -1 es NOTA DE VENTA, no "Saldo inicial": el ERP la emite antes de facturar y la API trae ambas, por eso no traen serie, uuid_cfdi ni moneda. La etiqueta anterior era una inferencia mala.
  • Unifica las 4 grafías de "público en general" que manda el ERP (acentos, mayúsculas y un punto final) en un solo cliente: 4365 docs / $3,499.7M. Igualdad exacta tras normalizar, nunca LIKE '%PUBLICO%', que se llevaría a DESPACHO AMADOR UGALDE CONTADORES PUBLICOS. Va en _cliente_label, compartido con /summary, para que ambas vistas cuenten igual.

Frontend (/finanzas/saldos):

  • Barra: Todos|Grupo|Externo · Portafolio · Empresa · Año · Mes · Antigüedad · Cliente · Tipo doc. · Solo vencido · Sin Púb. General.
  • Filtrado facetado: cada desplegable calcula sus opciones excluyendo su propio filtro, si no elegir una empresa dejaría Empresa con una opción.
  • Año y Mes arrancan preseleccionados con los periodos que hay hasta hoy, para que el filtro se vea activo en vez de en blanco. hasActiveFilter compara contra ese default o "Limpiar" quedaría visible para siempre.
  • Switch "Sin Púb. General": esa cartera no identificada es el 81% del saldo e invierte el aging (18.5% vencido con ella, 95.6% sin ella). Arranca incluida; la marca la calcula el backend, el front no compara textos.
  • Meses con nombre completo y en orden cronológico; antigüedad por severidad. Leyenda de que Año/Mes son la fecha de importación.

/summary se conserva porque lo consume portal_finanzas. Verificado que los 6 KPIs cuadran exacto entre ambos endpoints: $4,306,553,056.23 / 11,310 docs / 2,196 clientes.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

Merge request reports

Loading