Saltar a contenido

Autor: Iker Acevedo

Fecha creación: 2026-09-16 Estado: preprod Tipo: modelo

Modelos — liquidacion-transportadora.models.ts

Interfaces y enums que describen el dominio de configuración de liquidación. Están alineados 1:1 con el dominio real del backend (Dominio/Modelos/Configuracion/*.cs, Dominio/Constantes/Enums.cs) — no son una interpretación propia del front, son la misma fuente de verdad copiada literal, para que un cambio de un lado nunca deje al otro leyendo algo distinto.


Por qué los enums son idénticos en texto al backend

export enum MotorLiquidacion {
  Dinamica = 'Dinamica',
  Legacy = 'Legacy',
  Sombra = 'Sombra',
  Deshabilitado = 'Deshabilitado'
}

El valor string de cada miembro usa PascalCase, igual al nombre del enum en C#. Cuando la Lambda serializa con JsonStringEnumConverter (el enfoque estándar de .NET), el texto que llega al front ya calza sin necesitar una tabla de traducción intermedia — evita el tipo de bug donde el front espera "dinamica" en minúscula y el backend manda "Dinamica".

Los 4 enums del dominio (MotorLiquidacion, PoliticaPeso, TipoLiquidacion, AlcanceTarifa) y el catálogo de 9 MotivoNoLiquidacion siguen el mismo criterio — ver la tabla completa en Validación (backend).

Cada enum tiene su propio _TEXTO: Record<Enum, string> — el único punto de traducción a texto legible, para que ninguna pantalla invente su propia etiqueta.


Interfaces principales

Interfaz Colección Mongo Espejo de (backend)
ConfiguracionTransportadora ConfiguracionLiquidacionTransportadora ConfiguracionTransportadora.cs
TrayectoTransportadora TrayectosTransportadora TrayectoTransportadora.cs
TarifaTransportadoraTienda TarifasTransportadoraTienda TarifaTransportadoraTienda.cs
AuditoriaExcepcion AuditoriaLiquidaciones (colección que todavía no existe — ver Simulador de Liquidación) PedidoLiquidable.cs + MotivoNoLiquidacion
TiendaCatalogo Tienda (colección compartida con el resto de la app) —

Un detalle que vale la pena señalar porque no es obvio mirando solo el backend: porcentajeKiloAdicional no vive en ConfiguracionTransportadora — en el dominio real ese dato es por tienda y por trayecto (vive en TarifaTransportadoraTienda, y encima es una tabla de incrementos, no un solo porcentaje). Se configura en la pestaña Tarifas por Tienda, no en Configuración General, aunque a primera vista parecería un dato "general".


MOTIVO_NO_LIQUIDACION_TAB

Mapa que conecta cada motivo de no-liquidación con la pestaña donde se corrige (trayectos, tarifas, configuracion), o null cuando el motivo no es un problema de configuración (es un error operativo puntual — no hay pestaña que lo "arregle"). Lo usa el botón "Ir a configurar" de Auditoría de Excepciones.


Por qué no hay una interfaz ResultadoSimulacion

A propósito. El motor Dinámico calcula dentro del dominio de la Lambda y ese dominio todavía no expone un endpoint HTTP — solo se invoca desde dentro del proceso real de liquidación. Reproducir esa aritmética en TypeScript, aunque fuera "aproximada", significaría tener dos lugares calculando plata con la posibilidad real de que se desincronicen — el riesgo que se decidió evitar en todo este módulo. Ver ADR-001.


Historial de cambios

Fecha Autor Cambio
2026-09-16 Iker Acevedo Documentación inicial de los modelos.
2026-09-16 Iker Acevedo Corrección del catálogo de MotivoNoLiquidacion: la versión anterior tenía motivos inventados (sobrepeso_sin_regla, error_api) en snake_case que el backend nunca produce — un documento real de auditoría nunca hubiera matcheado ningún caso del mapeo. Ahora son los 9 valores reales, en el mismo PascalCase que el backend.