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:
| scheduler | hora | job |
|---|---|---|
| run-daily-icm-by-unit | 1AM | runDailyIcmByUnit |
| run-daily-units-revision | 5AM | runDailyUnitsRevision |
| run-daily-icm-by-driver | 8AM | runDailyIcmByDriver |
runDailyIcmByUnit:
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.
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:
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:
Para cada transportista le calculo el TC y luego el ICM.