Saltar al contenido principal

Flujo de cálculo de ICM

El cálculo de ICM se realiza en distintas funciones y se dispara mediante schedulers de GCP que llaman a una función (cron-jobs-executer) encargada de crear N tareas de invocación a una función por cada elemento a calcular el ICM (unidades o empresas de transporte).

Los schedulers configurados con los horarios en los que corre y el parámetro "job" con el que llaman a la función cron-jobs-executer son:

schedulerhorajob
run-daily-icm-by-unit1AMrunDailyIcmByUnit
run-daily-units-revision5AMrunDailyUnitsRevision
run-daily-icm-by-driver8AMrunDailyIcmByDriver

runDailyIcmByUnit:

vV:ICM(dt(v))\forall v\in V:ICM(dt(v)) choferV.totales:ICM(dt(chofer))\forall chofer\in V.totales:ICM(dt(chofer))

Para cada vehículo se calcula el tiempo de conducción de la unidad, el tiempo de conducción para cada chofer de la unidad en el día, el ICM diario para la unidad y para cada chofer de la misma.

Cálculo del tiempo de conducción para la unidad dt(v):

(link repo jobs-drivingtime)

Se obtienen todos los eventos de inicio y fin de detenido de la DB ordenados por fecha y se realizan las diferencias de tiempo entre cada par de inicio-fin.

TC=idfdTC = \sum id-fd

Si la cantidad de inicios y fines de detenidos no coincide, la unidad se marca en revisión (CASO 2).

En el caso que sí coincidan se guarda, para uso posterior, el TC de cada chofer que manejó la unidad.

runDailyUnitsRevision:

vV:ICM(dt(v))\forall v\in V:ICM(dt'(v)) choferV.totales:ICM(dt(chofer))\forall chofer\in V.totales:ICM(dt'(chofer))

Para cada vehículo se calcula el tiempo de conducción a partir de los reportes por tiempo, el tiempo de conducción para cada chofer de la unidad en el día usando los reportes por tiempo, el ICM diario para la unidad y para cada chofer de la misma.

Cálculo del tiempo de conducción para la unidad dt’(v):

(link repo jobs-drivingtime-rpt)

Se obtienen todos los reportes por tiempo de la DB ordenados por fecha y se detectan los cambios de estado entre eventos (si pasa de estado detenido a estado en movimiento y viceversa).

A su vez en esta función también se guarda el tiempo de conducción para el chofer para uso posterior.

runDailyIcmByDriver:

tT:ICM(dt(t))\forall t \in T: ICM(dt(t))

Para cada transportista le calculo el TC y luego el ICM.