Jerarquia de Configuraciones
El arbol de decision que usa la plataforma cuando una misma variable (tarifa, comision, minimo, toggle) puede definirse a nivel Empresa, Servicio o Zona+Servicio
Por que existe una jerarquia
Una operacion real necesita ajustar la misma variable en distintos niveles: el precio base lo defines a nivel Empresa, pero un servicio premium puede tener su propia tarifa, y dentro de la zona Norte puede valer distinto que en la zona Centro. La plataforma resuelve esto en cadena, leyendo de mas especifico a mas general. Conocer el orden exacto evita conflictos de calculo cuando guardas un override en una capa y otro en otra.
La regla general (de mas especifico a mas general)
Para CUALQUIER variable que admita jerarquia, la plataforma resuelve en este orden y se queda con el primer valor disponible:
Zona + Servicio (ZoneServiceConfig)
El nivel mas granular: combinacion zona x tipo de servicio. SOLO se considera cuando el flag de opt-in correspondiente esta encendido (useCustomPricing para tarifas, useCustomCommission para comisiones). Esto es a proposito: sin el flag, las columnas guardadas se tratan como artefactos sin valor para evitar arrastrar configuraciones viejas.
Servicio (ServiceType)
Override por tipo de servicio (Taxi, Moto, VIP, Paqueteria, etc.). Se aplica cuando el editor del servicio guarda un valor; sin valor, cae al nivel siguiente.
Empresa (CompanySettings)
El default global del tenant. Siempre existe y siempre es el ultimo fallback. Si ningun nivel mas especifico definio la variable, se usa este.
Tarifas de viaje (taxi)
baseFare, perKmRate, perMinuteRate, currency y multiplicadores: jerarquia completa de 3 capas. Cuando un viaje requiere calcular la tarifa, la plataforma resuelve la combinacion zona-de-origen x serviceType del viaje. El gate es el flag useCustomPricing en ZoneServiceConfig.
Empresa
Ajustes -> Tarifas: define tus tarifas globales por defecto.
Servicio
Ajustes -> Servicios -> editar un servicio: si guardas una tarifa propia para ese servicio, se prefiere sobre la empresa.
Zona + Servicio
Ajustes -> Zonas -> editar zona -> seccion 'Tarifas por servicio': solo se aplica el override cuando activas 'useCustomPricing' en esa combinacion. Permite, por ejemplo, cobrar Taxi mas caro en el Centro que en la Periferia.
Comision del conductor
commissionMode, commissionRate, commissionMinAmount, commissionFixedAmount: jerarquia completa de 3 capas. La comision que ve el conductor en su tarjeta de oferta usa esta resolucion. El gate es el flag useCustomCommission en ZoneServiceConfig.
Empresa
Ajustes -> Tarifas -> seccion 'Comisiones': el porcentaje o monto que se aplica por defecto a todo viaje.
Servicio
Por ejemplo, un servicio Premium puede pagar menos comision si decides estimular esa categoria.
Zona + Servicio
Combinacion zona x servicio cuando 'useCustomCommission' esta encendido.
Tarifa minima del viaje (taxi)
minimumFare: jerarquia completa de 3 capas. Es el piso de la tarifa de un viaje de taxi: si la formula da menos, se sube a este valor. No tiene flag de gate aparte; cuando el nivel mas especifico tiene un valor != null, gana.
Empresa
CompanySettings.minimumFare.
Servicio
ServiceType.minimumFare.
Zona + Servicio
ZoneServiceConfig.minimumFare.
Tarifa de envio (delivery)
deliveryBaseFee, deliveryPerKm y similares tienen su propia jerarquia, con un override a nivel local (Business) en lugar de zona. La razon: un restaurante puede tener su politica de envio distinta del resto.
Empresa
CompanySettings.deliveryBaseFee, deliveryPerKm: defaults del tenant.
Local (Business)
Business.deliveryBaseFee, deliveryPerKm: si los completas para un local, ese local cobra distinto. Util cuando una sucursal con cocina central cobra menos envio.
Tarifa minima de envio (deliveryMinimumFee)
Hoy es global UNICAMENTE: vive solo en CompanySettings.deliveryMinimumFee. No tiene override per-business ni per-zona todavia. Esta jerarquizacion esta en el roadmap; mientras tanto cualquier cambio aplica a todos los locales del tenant. Si lo necesitas para un local en particular, abre un ticket de soporte para que lo prioricemos.
Toggles de funciones (UI)
Los interruptores tipo 'mostrar propinas en taxi' (taxiTipsEnabled), 'tipo de propina en delivery' (deliveryTipType), 'pedir Con cuanto vas a pagar' (cashChangeFieldEnabled) y similares son GLOBALES por tenant: solo viven en CompanySettings. No tienen jerarquia. Cambias el toggle desde el panel y aplica a todo el tenant a la vez.
Como se sincronizan los cambios
El valor en la base de datos cambia inmediatamente cuando guardas en el panel, pero cada cliente (panel web, APK movil, emulador embedido) lee la configuracion de forma distinta:
Panel web (dashboard)
Cada navegacion consulta la DB en vivo. El cambio se ve al recargar la pagina o al moverte entre pestanas. Es el camino mas rapido en ver un cambio.
APK movil del cliente/conductor
Refresca la configuracion al iniciar sesion y al cargar la pantalla principal (rider/driver Home). Como cada apertura del APK es esencialmente un cold start, los toggles se reflejan al siguiente arranque o al volver al Home.
Emulador embedido del panel (iframe)
El iframe que reemplaza al telefono fisico en /simulator carga la configuracion una sola vez, al abrirlo. Si cambias un toggle desde el panel y quieres ver el efecto en el emulador, hay que recargar el iframe (boton 'Recargar' o cerrar y reabrir el simulador). Estamos trabajando en que el simulador detecte automaticamente los cambios sin requerir esta accion manual.
Web app del tenant (web.cabgo.app o dominio propio)
Refresca al recargar la pagina como cualquier app web. Si el operador se quedo con la pagina abierta despues del cambio, debe refrescar.
Como diagnosticar un conflicto
Si una tarifa o comision sale con un valor que no esperas, sigue este checklist en orden:
Revisa el nivel mas granular primero
Ajustes -> Zonas -> tu zona -> tarifas por servicio: comprueba si la combinacion zona x servicio tiene 'useCustomPricing' activado. Si esta encendido y los valores estan vacios o son cero, se aplican esos ceros, no los del nivel siguiente.
Luego el servicio
Ajustes -> Servicios -> editar el servicio: revisa si guardaste algun override por servicio. Si dejaste un valor 'recordatorio' en algun campo, se va a aplicar.
Por ultimo el global
Ajustes -> Tarifas: lo que esta aqui es lo que se aplica cuando ningun nivel mas especifico aporta valor.
Confirma desde la pantalla del cliente o conductor
El centro de viajes del conductor y la pantalla de detalle del viaje muestran la tarifa exacta calculada. Si no coincide con lo que esperas, comparte el tripCode con soporte para que veamos la cadena de resolucion del viaje en concreto.