Estado del Proyecto

La arquitectura central ya está hecha. Lo que queda es refinamiento, no construcción base.

Este mapa está pensado para navegar la forma real del backend: estructura del agregado, flujo de promociones, flujo de pagos, reconciliación, persistencia y lecturas operativas. Prioriza estructura, secuencia y anclajes de implementación por encima de la prosa exhaustiva.

89-92% cumplimiento útil global contra el modelo original
111 tests locales actualmente en verde
7 tests de integración SQL Server actualmente en verde
Híbrido+ la persistencia normalizada domina la lectura normal; la instantánea queda como respaldo y auditoría

Agregado

`Ticket` sigue siendo la raíz económica de verdad.

Implementado Núcleo

Forma del Agregado

El backend conserva la separación del modelo entre captura, maestros aplicados y ledger explicado.

  • `articulos[]` = catálogo de artículos dentro del ticket
  • `items[]` = captura operativa
  • `promociones[]` = maestros aplicados
  • `pagos[]` = maestros de pago
  • `movimientos[]` = explicación económica y fiscal distribuida
Ticket raíz del agregado articulos[] slice de catálogo items[] captura promociones[] maestros pagos[] maestros movimientos[] explicación económica y fiscal ledger generado server-side

Motor ITEM

Vista transitoria compartida de precios con orquestación ordenada por familia.

Recorrido de Ejecución
MAYORISTA Familia temprana de precio, con competencia interna, sin apilarse con las otras dos familias tempranas.
VENTAXBULTO Lógica conservadora de bulto, con separación entre acumulativa y no acumulativa.
GRUPOMAYORISTA Pool grupal entre EANs configurados, también tratado como alternativa exclusiva temprana.
COMBO Heurística determinística, con `LISTA3` como monto directo o indireccionamiento de precio por EAN.
CANTIDAD Etapa final por cantidad, respetando orden y reglas de `acumulativa / no acumulativa`.
Implementado ITEM

Vista Compartida de Precios

El motor usa una `ItemPricingView` transitoria en vez de recomputar cada método por separado.

  • seguimiento de precio vigente vs precio de lista
  • semántica de alcanzado / no alcanzado
  • evaluación sensible a cantidad, incluyendo slices fraccionarios
  • comparación acotada de recorridos, no una pasada lineal ciega
Conservador Heurístico

Resolución de Combo

`COMBO` es estable y determinístico, pero sigue siendo heurístico y no un optimizador global exhaustivo.

  • ranking de candidatos por beneficio al cliente y cobertura
  • corte acotado de prefijos antes de entrar a `CANTIDAD`
  • soporta descuento y recargo
Refinamiento Futuro

Qué Podría Mejorar Aún

Lo que queda ya no son familias faltantes, sino heurísticas más profundas en estados ambiguos del ticket.

  • empates más ricos en `COMBO`
  • pools de candidatos más grandes
  • variantes de `VENTAXBULTO` específicas del negocio si aparecen

Pagos y Postpago

Consulta, aplicar, redistribución posterior y seguimiento explícito alrededor del vuelto.

Implementado Pago

Instantánea de Consulta

Las promociones de pago se resuelven a través de la tupla real del catálogo de pagos `idmdep + ididmdep + cuota`.

  • `CONSULTA` guarda ids, montos cotizados, montos cotizados por movimiento y `saldoNeto` cotizado
  • `APLICAR` debe mantenerse consistente con la última instantánea válida de consulta
  • los chequeos de secuencia son temporales, no solo estructurales
Implementado Postpago

Postpago

`POSTPAGO` es explícito, itemizado y reconciliado contra saldo pre-pago por movimiento.

  • el pago origen queda excluido del cálculo de saldo pre-pago
  • la distribución es proporcional e itemizada
  • si la nueva economía sobrepaga el ticket, el vuelto absorbe el exceso
Pago pago origen CONSULTA instantánea cotizada APLICAR promo PAGO POSTPAGO flujo explícito post-pago Reconstrucción redistribución + vuelto Todas las reglas de secuencia, cuota y uso cotizado quedan auditadas.

Reconciliación

Validadores estructurales más una capa de cierre final más fuerte.

Implementado Estructural

Validadores

Los validadores cubren forma, referencias, vínculo pago/promoción y restricciones de no-ledger.

  • `TicketStructureValidator`
  • `TicketReferenceValidator`
  • `TicketLedgerValidator`
Implementado Cierre

Chequeos Fuertes de Cierre

La finalización usa el resumen de reconciliación para imponer invariantes económicos que los validadores por sí solos no cubren completos.

  • `total = ventas + promociones`
  • `saldo = total - pagos`
  • `ledgerBalance = 0`
  • coherencia de la cadena auditada de consulta/aplicar/postpago
Implementado Casos Límite

Casos Extremos Finales Cubiertos

La suite ya incluye escenarios extremos válidos e inválidos de consulta/aplicar.

  • instantánea compartida sobreconsumida → inválida
  • instantánea compartida dentro de límites cotizados → válida
  • pago sintético negativo de vuelto después de la consulta → sigue siendo válido

Persistencia y Lecturas

Las lecturas normales ahora se apoyan primero en persistencia normalizada, con instantánea como capa de respaldo y auditoría.

Implementado Lecturas

Ruta Normalizada de Lectura

El resumen operativo, el detalle operativo, la reconciliación y la hidratación normal ya se apoyan en filas relacionales persistidas.

  • `cliente` y `datosreferenciales` ya están fuera del fallback a instantánea en rutas normales
  • cabecera y colecciones hijas del agregado se reconstruyen desde entidad + tablas hijas
  • el desglose económico se calcula desde `ticket_movimientos` normalizados
Conservador Compatibilidad

Capa de Instantánea

`snapshotJson` sigue almacenado, pero hoy su rol es compatibilidad, respaldo y auditoría, no fuente primaria de lectura operativa.

  • es razonable mantenerla mientras el modelo siga siendo híbrido intencionalmente
  • ya no es central en las rutas de lectura más importantes

Higiene de Build

Los plugins de test de Maven ahora ejecutan Mockito como `-javaagent` explícito, evitando la vieja advertencia de self-attach dinámico en JDK 25. Es un cambio pequeño, pero importa en un proyecto que ya está claramente en etapa de endurecimiento final.

Trazabilidad Corta

No es exhaustiva; solo lo suficiente para saltar de concepto a la implementación.

Área del Modelo Estado Anclajes Principales Evidencia Principal
Agregado / lifecycle Implementado TicketService `TicketServiceTest`, `TicketControllerTest`
Motor ITEM Implementado Bordes heurísticos ItemPromotionEngine, ComboPromotionEngine, CantidadPromotionEngine suite de tests del motor de promociones
Consulta / aplicar / postpago Implementado PaymentPromotionEngine, TicketService escenarios de reconciliación en `TicketServiceTest`
Lecturas operativas Implementado TicketOperationalSummary, TicketOperationalDetail tests de servicio/controller + SQL Server IT
Persistencia / mapper Implementado Híbrido TicketPersistenceMapper mapper test + repository tests + SQL Server IT

Tasa de Avance por Tema

Lectura ejecutiva del estado real del código contra el modelo y la alineación actual.

Tema Completion Rate Nota Corta
Agregado `Ticket` 94% Estructura central estabilizada y coherente con el modelo.
`articulos[]` / `items[]` / `promociones[]` / `pagos[]` / `movimientos[]` 95% Separación conceptual ya consolidada en runtime, API y persistencia.
Motor `MAYORISTA` 90% Resuelto con tramos, beneficio al cliente y reglas tempranas.
Motor `VENTAXBULTO` 82% Implementación conservadora sólida; pueden quedar variantes reales de negocio.
Motor `GRUPOMAYORISTA` 90% Pool grupal y selección de tramo ya cerrados.
Motor `COMBO` 86% Determinístico y fuerte, pero todavía heurístico en casos complejos.
Motor `CANTIDAD` 89% Soporta descuentos, recargos y acumulatividad/no acumulatividad.
Promociones por convenio 92% La elegibilidad por `cliente.convenio.id` ya está en la cadena de motores.
`CUPON` no financiero 93% Semántica cerrada como promo textual sin impacto económico.
Promociones de pago 90% `CONSULTA`, `APLICAR`, snapshot y consumo agregado ya endurecidos.
`POSTPAGO` 88% Flujo explícito, itemizado y reconciliado con vuelto absorbente.
Distribución de pagos 94% Proporcional sobre saldo neto por movimiento, no FIFO.
Tratamiento fiscal de movimientos derivados 91% Escalado proporcional sobre `nucleoimpositivo[]` ya consistente.
Reconciliación y finalize 92% Invariantes fuertes, validaciones estructurales y resumen de cierre robusto.
Persistencia normalizada 89% Dominante en lectura normal; el snapshot ya quedó como respaldo.
Read models operativos 87% Summary y detail ya exponen breakdown económico útil para operación.
Tests end-to-end de caja real 84% Buena base ya cubierta; aún se puede ampliar con más escenarios pesados.
SQL Server IT de dominio 83% Más fuerte que al inicio, pero todavía ampliable en flows complejos.