feat(finanzas/saldos): filtros homologados + switch de Público en General
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). Elingested_atcrudo es constante dentro de un corte y daría una sola opción de Año/Mes para siempre. -
tipo = -1es 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.
hasActiveFiltercompara 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