Saltar a contenido

Autor: Iker Acevedo

Fecha creación: 2026-09-16

Estado: preprod

Infraestructura — Mapeo y persistencia

El motor Dinámico tiene una sola pieza de infraestructura propia: LiquidacionDinamica/Infraestructura/Mapeo/MapeadorLiquidacionDinamica.cs. No tiene un repositorio propio — reutiliza IDocumentRepository/DocumentRepository, el mismo que ya usa el motor Legacy.


MapeadorLiquidacionDinamica

Convierte los JArray/JToken crudos que vienen de Mongo a los modelos de dominio del motor Dinámico:

Método De A
MapearConfiguraciones ConfiguracionLiquidacionTransportadora List<ConfiguracionTransportadora>
MapearTarifas TarifasTransportadoraTienda List<TarifaTransportadoraTienda>
MapearTrayectos TrayectosTransportadora List<TrayectoTransportadora>
MapearPedido PedidosInter (nombres de campo legacy, con espacios: "Fecha Entrega", etc.) PedidoLiquidable, o null si no hay Numeropreenvio válido
MapearCostosOperativos AdministracionCostos CostosOperativosTienda, con fallback a todo-cero si la tienda no tiene costos configurados

Las tres primeras colecciones (ConfiguracionLiquidacionTransportadora, TarifasTransportadoraTienda, TrayectosTransportadora) son nuevas — sus campos ya están en PascalCase idéntico al modelo de dominio, así que la deserialización con Newtonsoft es directa. MapearPedido y MapearCostosOperativos sí necesitan traducir nombres, porque leen colecciones legacy (PedidosInter, AdministracionCostos) que no se tocaron.


Por qué escribe en LiquidacionesLogigho (no colección aparte)

Decisión explícita, no descuido: - V1 del diseño contempló colección "sandbox" separada (protegía pero añadía complejidad). - Se descartó: pre-prod ya es entorno aislado (Mongo ≠ producción). - Aislar además dentro pre-prod = diferencia comportamiento que desaparece en producción. - Replicar comportamiento desde ya (misma colección, mismo formato) = permite comparar liquidaciones reales Motor Dinámico vs Legacy sin traducción.

Ambos motores usan idéntico repositorio: - LiquidarPedidosDinamicoUseCase.LiquidarAsync → _documentRepository.InsertarLiquidacionesLogighoAsync(bson). - DocumentRepository.cs:392-401 → GetCollection<BsonDocument>("LiquidacionesLogigho") + InsertManyAsync. - Mismo método, misma colección que Legacy en #if DEBUG (línea ~462 DepurarLiquidacionUseCase.cs). - Comentario original Legacy lo deja claro: intencionado, pruebas = producción.


Historial de cambios

Fecha Autor Cambio
2026-09-16 Iker Acevedo Documentación inicial del mapeador y confirmación de que ambos motores escriben en la misma colección.
2026-09-16 Iker Acevedo Se agregaron 3 tests de regresión (MapeadorLiquidacionDinamicaTests.cs) que deserializan JSON con forma real de Mongo — el bug de ReadOnlyCollection (ver Modelos) era invisible para la suite anterior porque ningún test pasaba por JsonConvert.DeserializeObject de verdad.