Autor: Iker Acevedo¶
Fecha creación: 2026-09-16 Estado: preprod Tipo: vista
Costos Transportadora¶
Selector: app-costos-transportadora
Ubicación: src/app/views/director-de-operaciones/costos-transportadora
Acceso: Autenticado — roles Director de Operaciones, CEO, Administrador, COO, Desarrollador
¿Qué hace?¶
Es la pantalla donde se configura el motor Dinámico de liquidaciones: qué transportadoras liquidan con el motor nuevo, qué política de peso usan, qué trayectos aceptan y cuánto cobra cada tienda por cada uno. Antes de este módulo, migrar una transportadora al motor Dinámico significaba editar documentos de Mongo a mano; ahora es un formulario con validación, igual que cualquier otra pantalla de la plataforma.
No reemplaza nada del sistema legacy de tarifas (Costos Transporte Tienda) — las transportadoras que siguen en el motor Legacy (Interrapidísimo, Envía, Servientrega) siguen configurándose ahí. Este módulo es exclusivamente para transportadoras migradas o en proceso de migrar al motor Dinámico.
Dos vistas, sin cambio de URL¶
El componente maneja internamente dos pantallas usando history.pushState (para que el botón atrás del navegador funcione sin salir del componente — mismo patrón que GestionDevolucionesComponent):
- Hub — selector de transportadoras con cards. Muestra las 4 transportadoras conocidas (TCC, Interrapidísimo, Servientrega, Envía); solo TCC tiene
motor: 'dinamica'y abre el panel. Las demás muestran su badge "Motor Legacy" y, si se hace click, redirigen al sistema antiguo (costostransportetienda). - Panel de configuración — header fijo con el nombre de la transportadora y su motor real (leído de
ConfiguracionLiquidacionTransportadora, no del dato fijo de la card), más 5 pestañas.
Las 5 pestañas¶
| Pestaña | Qué configura |
|---|---|
| Configuración General | Motor de liquidación, política de peso, tope de kilos, trayecto por defecto |
| Trayectos | Catálogo de códigos de ruta válidos |
| Tarifas por Tienda | Comisiones, seguro, flete por trayecto y tabla de incrementos, por tienda o genérica |
| Simulador de Liquidación | Formulario preparado para probar "¿cuánto liquidaría esta guía?" — todavía sin cálculo real |
| Auditoría de Excepciones | Guías que el motor Dinámico no pudo liquidar, con su motivo |
Los badges numéricos de Trayectos y Tarifas se calculan en vivo desde el store (antes eran números fijos que quedaban desactualizados apenas se agregaba o borraba algo).
Servicios y endpoints¶
| Servicio | Método | Endpoint | Cuándo |
|---|---|---|---|
TransportadoraActivaService |
seleccionar(card) |
GET metodoGenerico?coleccion=ConfiguracionLiquidacionTransportadora\|TrayectosTransportadora\|TarifasTransportadoraTienda\|AuditoriaLiquidaciones\|Tienda |
Al elegir una transportadora en el Hub — las 5 consultas corren en paralelo |
Todo pasa por el mismo CRUD genérico (metodoGenerico?coleccion=...) que usa el resto de la plataforma — no hay un endpoint HTTP propio de este módulo.
Roles y permisos¶
ROLES_TRANSPORTADORAS es un mapa simple: hoy un único grupo de roles (Director de Operaciones, CEO, Administrador, COO, Desarrollador) tiene acceso a todas las transportadoras (comodín '*'). Está preparado para restringir un rol a transportadoras puntuales el día que haga falta (agregar una entrada con un array de keys en vez de '*'), pero hoy nadie lo necesita.
Historial de cambios¶
| Fecha | Autor | Cambio |
|---|---|---|
| 2026-09-16 | Iker Acevedo | Documentación inicial del módulo completo: Hub, panel, 5 pestañas, servicio compartido. |
Observaciones¶
- El header del panel muestra cuántas tiendas del catálogo ya tienen tarifa propia configurada (vs. dependen de la Genérica) — de un vistazo, sin entrar a la pestaña de Tarifas.
- Ver ADR-001 para por qué el Simulador no calcula nada todavía, y por qué esa fue una decisión deliberada, no una funcionalidad a medias.