Arquitectura
La herramienta se está desarrollando en Python 3, con el objetivo principal de que su estructura sea fácil de leer y modificar en el futuro. Esto se ha planificado para que personas sin formación en el área de computación puedan realizar modificaciones y mejoras sin necesidad de tener conocimientos avanzados de programación.
La herramienta consiste en un conjunto de validaciones por cada archivo de datos de entrada y un conjunto de validaciones que se realizan cruzando estos mismos archivos de entrada. Con el objetivo de simplificar la estructura del programa se optó por construir un archivo principal del programa (dtpm-validador-datos.py) el cual llama a las diferentes validaciones que están organizadas en archivos separados en la carpeta chequeos. La figura siguiente muestra la estructura del directorio raíz del programa.
Resumen de validaciones
En esta sección se muestra un resumen de todas las validaciones realizadas por la herramienta.
| Archivo | Requerimiento |
|---|---|
chequeo_global.py |
1. En base al código del PO revisar que existan todos los archivos necesarios. 2. Chequeo de uso de encoding UTF-8. |
chequeo_comunas.py |
1. Chequear que existe 2 columnas + delimitador. 2. Chequear que existen 42 registros. |
chequeo_diccionario_servicios.py |
1. Revisar que vengan todos los campos + revisión de delimitador. 2. Todas las filas con COD_SINRUT no nulo. 3. Chequear sentido consistente. 4. Que no existan códigos sin sentido |
chequeo_dicc_estaciones_metro.py |
1. Chequear que existan los campos + delimitador 2.Chequear que las comunas existan en diccionario de comunas 3.Chequear que coordenadas sigan el formato y estén dentro de región metropolitana |
chequeo_dicc_estaciones_metrotren.py |
1. Chequear que existan todos los campos + delimitador 2. Chequear que las coordenadas tengan correcto formato y estén dentro de la zona esperada 3.Chequear que el código de la comuna este dentro del diccionario de comunas |
chequeo_dicc_tipo_dia.py |
1. Revisión que vengan todos los campos 2. En base a un parámetro que hable del periodo a correr chequear que existen los días 3.Validar el formato de la fecha (aaaa-mm-dd) |
chequeo_dicc_patentes.py |
1. Chequear que existen todos los campos 2. Chequear que viene un dato valido de capacidad 3. Idealmente cruzar con patentes de transacciones para validar si falta alguna |
chequeo_consolidado_paradas.py |
|
descarga.py |
Contiene funciones para descargar datos desde la nube para validaciones bips y GPS |
chequeo_gps.py |
1. Cantidad diaria 2. Guardar patentes en un google-cloud 3. Validar que todas las patentes existan en el diccionario de patentes 4. Verificar que todos los servicios existan en el diccionario de servicios |
chequeo_trx.py |
1. Códigos de estación presentes en archivos de trx 2. Cantidad diaria 3.Validar que los nombres de estaciones estén en los diccionarios 4.Validar que todas las patentes existan en el diccionario de patentes 5.Validar que todos los validadores de zonas pagas estén en el diccionario 6.Validar nuevos tipos de contrato |
chequeo_196.py |
1. Cantidad diaria 2. Validar que todas las patentes existan en el diccionario de patentes 3.Verificar que todos los códigos de ruta existan en el diccionario de servicios 4.Verificar que los servicios-sentido-UN coincidan con los del diccionario de servicios 5.Verificar que las fecha-tipo de día coincidan con las del diccionario de tipo de día 6.Verificar que el período coincida con el del diccionario de períodos para el tipo de día correspondiente |
chequeo_zonas_pagas.py |
1. Chequear que existan todos los campos + delimitador 2. Las zonas pagas que tengan más de un paradero deben venir en formato BD, hacia abajo, no usar más segunda columna con paradero 3. Chequear las coordenadas, formato y que estén en región metropolitana 4. Chequear que los códigos de comuna estén en diccionario de comunas 5. Chequear que el paradero este en la secuencia de parada de los servicios 6. Chequear que las unidades de negocio corresponden a los servicios (usando diccionario de servicios) 7. Chequear que la zona paga es mixta en base a los diferentes un de los servicios (usando diccionario de servicios) 8. Chequear que las coordenadas de los paraderos estén correctas en la secuencia de paradas 9. Chequear el paradero en la secuencia de parada este marcado como zona paga 10. Verificar que todos los códigos de servicio existan en el diccionario de servicios 11. Verificar que el nombre de las zonas pagas coincidan con el del consolidado de paradas |
chequeo_trazados.py |
1. Revisión de campos + delimitador 2.Chequeo de las coordenadas, formato y que estén dentro de la región metropolitana 3.Revisión que la ruta exista en diccionario de servicios 4.Revisión de coherencia en el avance de la ruta, algún nodo con salto extraño 5.Verificar que todos los route name existan en el diccionario de servicios 6.Verificar que no haya códigos Sonda, en GPS, sin shape (buscándolos previamente en el diccionario de servicios) |
chequeo_matriz_metro_tren.py |
1. Revisión de campos + delimitador 2.Revisión que existan todas las combinaciones 3.Verificar que todas las estaciones se encuentren en el diccionario de estaciones de metro tren |
chequeo_tiempo_viajes_metro_indicadores.py |
1. Revisión de campos + delimitador 2. Revisión que los nombres de estación estén en el diccionario de Metro 3.Revisión de formato de número, debe tener punto para decimales 4.Revisión que existan todas las combinaciones |
chequeo_evasion.py |
1. Revisión de campos + delimitador 2. Verificar que todos los paraderos se encuentren en el consolidado de paradas 3. Verificar que todos los servicios sentidos se encuentren en el diccionario de servicios 4. Verificar que las zonas coincidan con las del diccionario de zonificaciones |
chequeo_matriz_metro.py |
1. Revisión de campos + delimitador 2.Revisión que existan todas las combinaciones 3.Verificar que todas las estaciones se encuentren en el diccionario de estaciones de metro |
chequeo_frecuencias.py |
1. Revisión de campos + delimitador y tipo de número (float) 2.Revisión que los servicios-sentidos existan en diccionario de servicios y viceversa |
chequeo_zonificaciones.py |
|
chequeo_periodos.py |
Descripción validaciones
En esta sección se hará una descripción de cada uno de los módulos de chequeos, cada módulo corresponde a un archivo python de la carpeta chequeos, que componen a la herramienta de validación.
1. chequeo_global.py
Módulo que tiene por objetivo el chequeo de la existencia de todos los archivos que deben existir en la carpeta del programa de operación. Contiene solo un método:
chequeo_existencia_todos_los_archivos(): Este método revisa la existencia de los archivos sobre la lista de nombres + el sufijo del programa de operación.
Este chequeo es considerado crítico, es decir, si existe algún error no permite avanzar en el proceso del resto de chequeos.
2. chequeo_comunas.py
Módulo que tiene por objetivo chequear el archivo de diccionario de comunas con los siguientes métodos:
chequeo_delimitador(): Método que revisa que al dividir cada registro del archivo con el delimitador definido exista el correcto número de campos.
chequeo_n_comunas(): Método que revisa que exista el número esperado de registros por cada comuna, por el momento 42.
3. chequeo_diccionario_servicios.py
Módulo que tiene por objetivo revisar la consistencia del archivo de diccionario de servicios, contiene los siguientes métodos:
chequeo_fila(): Método que se utiliza para escanear cada línea o registro del archivo, las validaciones que realiza son : existan 22 campos, que COD_SINRUT no sea nulo, exista sentido en el campo SENTIDO, que el sentido sea consistente con del del Route_Name.
4. chequeo_dicc_estaciones_metro.py
Módulo que busca chequear inconsistencias en el archivo de diccionario de estaciones de metro, cuenta con los siguientes métodos:
chequeo_fila(): Este método escanea cada línea del archivo y revisa los siguientes puntos : que existan 6 campos, que la comuna se encuentre en el diccionario de comunas, que las coordenadas vengan en un formato correcto, que las coordenadas se encuentren dentro del área metropolitana.
5. chequeo_dicc_metro_tren.py
Módulo que tiene por objeto chequear inconsistencias en el archivo con la lista de estaciones de estaciones de metro tren. Cuenta con los siguientes métodos:
chequeo_fila(): Este método escanea cada línea del archivo y revisa los siguientes puntos: que existan 6 campos, que la comuna se encuentre en el diccionario de comunas, que las coordenadas venga en un formato correcto, que las coordenadas se encuentren dentro del área metropolitana.
6. chequeo_dicc_tipo_dia.py
Módulo que tiene por objeto chequear inconsistencias en el archivo con la lista de días y tipo de día del periodo a procesar. Cuenta con los siguientes métodos:
chequeo_fila(): Este método escanea cada línea del archivo y revisa los siguientes puntos : chequeo de la correcta cantidad de campos (6) y que el formato de la fecha corresponda.
chequeo_tipo_dia(): Este método realiza el ciclo por cada línea del archivo y adiciona el chequeo que todos los días en el periodo establecido en los parámetros existan.
7. chequeo_dicc_patentes.py
Módulo que tiene por objeto chequear inconsistencias en el archivo de diccionario de patentes, archivo donde están los datos de capacidad de los buses. Cuenta con los siguientes métodos:
chequeo_fila(): Este método escanea cada línea del archivo y revisa los siguientes puntos : chequeo de la correcta cantidad de campos (18) y que la capacidad no sea nulo y tenga un valor mayor a cero.
8. chequeo_consolidado_paradas.py
Módulo que tiene por objeto chequear inconsistencias en el archivo de consolidado de paradas. Cuenta con los siguientes métodos:
chequeo_fila(): Este método escanea cada línea del archivo y revisa los siguientes puntos : chequeo cantidad correcta de campos, existencia de comunas en diccionario de comunas, chequeo de formato de coordenadas, chequeo que las coordenadas estén dentro de la zona metropolitana.
9. descarga.py
Módulo que tiene por objeto descargar un conjunto de archivos desde la nube con los datos de las patentes, estaciones, validadores, servicios que están presentes en los datos de GPS y validaciones Bip, estos datos provienen desde la tabla de sitio, la cual es actualizada diariamente en el servicio de subidas por parada, su contenido se detalla a continuación:
| Campo | Descripción | Ejemplo |
|---|---|---|
| Fecha | Día del dato | 2024-11-14 |
| Archivo | Gps: archivo de GPS, trx: archivo de validaciones bip | Gps |
| Sitio | Patente de bus/estación de metro/estación de metro tren/validador de zona paga | SXKV-96 |
| Tipo | ZP (zonas pagas) / BUS (trx) / Metro (trx) / Metro Tren (trx) / Servicio (gps) | EFE Freire |
| Registros | Cantidad de registros de la combinación | 1032 |
Esta tabla contiene todos los tipos de sitios tanto del archivo de GPS como el de validaciones Bip, de esta manera solo es necesario realizar una consulta SQL para obtener cualquier caso y la fecha permite determinar cada caso en un periodo, a continuación, tenemos una consulta que permite obtener los servicios distintos.

La herramienta de validación ejecuta un conjunto de consultas para recopilar los datos necesarios para las diversas validaciones que así lo requieren. A continuación, se describen los métodos asociados:
| Método | Descripción | Archivo de salida |
|---|---|---|
descargar_patente_gps() |
Descarga todas las patentes de los archivos GPS del periodo | patentes_gps.csv |
descargar_servicios() |
Descarga todos los códigos de servicio de los archivos GPS del periodo | servicios.csv |
descargar_validadores_zonapaga() |
Descarga todos los códigos de validadores de los archivos de transacciones del periodo | validadores_zp.csv |
descargar_estaciones_metro() |
Descarga todos los nombres de estaciones de los archivos de transacciones del periodo | estaciones_metro.csv |
descargar_estaciones_metro_tren() |
Descarga todos los nombres de las estaciones de metro tren de los archivos de transacciones del periodo | estaciones_metro_tren.csv |
descargar_patentes_trx() |
Descarga todas las patentes de los buses de los archivos de transacciones del periodo | patentes_trx.csv |
descargar_registros_por_dia_trx() |
Descarga el número de registros diarios de los archivos de transacciones | registros_trx.csv |
descargar_registros_por_dia_gps() |
Descarga el número de registros diarios de los archivos de GPS | registros_gps.csv |
10. chequeo_gps.py
Módulo que tiene por objeto chequear inconsistencias en los datos de GPS. Cuenta con los siguientes métodos:
chequeo_gps_cruce_diccionario_patentes(): Busca las patentes de los datos GPS sobre el diccionario de patentes.
chequeo_gps_cruce_diccionario_servicios(): Busca servicios que existen en los datos GPS en el diccionario de servicios.
chequeo_gps_cruce_patentes_trx(): Busca patentes de buses de los datos de transacciones sobre los datos de GPS.
11. chequeo_trx.py
Módulo que tiene por objeto chequear inconsistencias en los datos de transacciones. Cuenta con los siguientes métodos:
chequeo_estaciones_metro(): Verifica que los nombres de las estaciones de metro de las transacciones se encuentren en el diccionario de estaciones de metro.
chequeo_estaciones_metro_tren(): Verifica que los nombres de las estaciones de metro tren de las transacciones se encuentren en el diccionario de estaciones de metro tren.
chequeo_validadores_zona_paga(): Verifica que los validadores de zonas pagas de las transacciones se encuentren en el archivo de diccionario de zonas pagas.
12. chequeo_196.py
Módulo que tiene por objeto chequear inconsistencias en los datos de las expediciones del reporte 1.96. Cuenta con los siguientes métodos:
chequeo_cruce_patentes_196_patentes_gps(): Busca las patentes de los datos 1.96 sobre las patentes de los datos GPS.
chequeo_cruce_servicio_dic_servicios(): Verifica si los servicios de los datos del 1.96 se encuentran en el diccionario de servicios.
chequeo_cruce_patentes_dic_patentes(): Verifica que las patentes de los datos 1.96 se encuentren en el diccionario de patentes.
13. chequeo_zonas_pagas.py
Módulo que tiene por objeto chequear inconsistencias en los datos de las zonas pagas. Cuenta con los siguientes métodos:
chequeo_campos_zonas_pagas() : Chequeo de que existan todos los campos del archivo y correcto delimitador.
chequeo_zp_coordenadas(): Chequeo que las coordenadas de los paraderos tenga un formato correcto y se encuentren en el área metropolitana.
chequeo_zp_comunas(): Chequeo que revisa que las comunas del archivo de zonas pagas estén dentro del diccionario de comunas
chequeo_zp_consistencia_paradas_consolidado(): Chequeo que revisa que los paraderos del archivo de zonas pagas existan en las secuencias de paradas de los servicios que indica el archivo de zonas pagas.
chequeo_zp_consistencia_unidades_de_negocio(): Chequeo que revisa que las unidades de negocio del campo “Unidades” sea consistente con las unidades de negocio de la lista de servicios, usado el diccionario de servicios para determinar esa unidad de negocio.
chequeo_zp_consistencia_mixta(): Chequeo del campo “Mixta”, dos casos, en caso que sea SI verifica que existe mas de una unidad de negocio, en caso contrario “NO” verifica que solo exista una unidad de negocio. El chequeo se realiza para los dos campos “Unidades” y las unidades de negocio que se obtienen de la lista de servicios.
chequeo_zp_consolidado_es_zona_paga(): Doble chequeo, por una parte se revisa que los paraderos del consolidado de paradas que están marcadas como “Zona Paga” existan en el archivo de zonas pagas, y por otro lado los paraderos que existen en el archivo de zonas pagas estén marcados como “Zona Paga” en el archivo de consolidado de paradas.
chequeo_zp_servicios_en_diccionario(): Chequeo que verifica que los servicios del archivo de zonas pagas existan en el diccionario de servicios.
chequeo_zp_nombre_paraderos(): Chequeo que verifica que los nombres de las paradas del archivo de zonas pagas sea el mismo nombre que aparece en el archivo de consolidado de paradas.
13. chequeo_trazados.py
Módulo que tiene por objeto chequear inconsistencias en los datos de los trazados de los servicios. Cuenta con los siguientes métodos:
chequeo_campos_trazados(): Chequeo de correcto numero de campos y delimitador
chequeo_trazados_coordenadas(): Chequeo de que las coordenadas tenga un formato correcto y se encuentren dentro del área metropolitana.
chequeo_trazados_en_diccionario_de_servicios(): Verifica que todos los códigos de trazados se encuentren en el diccionario de servicios.
chequeo_trazados_geometrico_salto(): Revisa que entre 3 puntos consecutivos el punto del medio no tenga un salto de distancia respecto al segmento formado por los puntos anterior y siguiente, esto detecta saltos incoherentes en las rutas.
chequeo_trazados_diccionario_tiene_trazado(): Chequeo de que todos los servicios del diccionario de servicios tengan un trazado en el archivo de trazados.
14. chequeo_matriz_metro_tren.py
Módulo que tiene por objeto chequear inconsistencias en los datos de la matriz de tiempos de la red de metro tren, esta matriz cuenta con los datos de tiempos de viaje entre cada par origen destino. Cuenta con los siguientes métodos:
chequeo_campos_matriz_metro_tren(): Chequeo de correcto número de campos y delimitador.
chequeo_matriz_metro_tren_pares_od(): Chequeo que verifica que existan todos los pares origen-destino de la red, utilizando como base el diccionario de estaciones de metro tren.
chequeo_matriz_estacion_en_diccionario(): Chequeo para verificar que todas las estaciones de metro tren que se encuentren en la matriz existan en el diccionario de estaciones de metro tren.
15. chequeo_tiempo_viajes_metro_indicadores.py
Módulo que tiene por objeto chequear inconsistencias en los datos de tiempos de viajes y espera para la red de metro tren, estos datos son solo utilizados para el cálculo de indicadores de viajes. Cuenta con los siguientes métodos:
chequeo_campos_tviajes_metro_indicadores(): Chequeo de correcto número de campos y delimitador.
chequeo_tviajes_metro_ind_estaciones(): Chequeo para verificar que los nombres de las estaciones se encuentren en el archivo de diccionario de estaciones de metro.
chequeo_tviajes_metro_todas_las_combinaciones(): Revisión de existencia de todas las posibles combinaciones de pares origen-destino, y entrega los pares que faltan.
16. chequeo_evasion.py
Módulo que tiene por objeto chequear inconsistencias en los datos de evasión. Cuenta con los siguientes métodos:
chequeo_campos_evasion_parada_mh(): Chequeo de correcto número de campos y delimitador del archivo de evasión por paradero media hora.
chequeo_campos_evasion_zona(): Chequeo de correcto número de campos y delimitador del archivo de evasión por zona periodo transantiago.
chequeo_evasion_paraderos_en_consolidado(): Verificación que los paraderos de la evasión se encuentren en el archivo de consolidado de paradas.
chequeo_evasion_consolidado_en_paraderos(): verificación que los paraderos del consolidado estén en los datos de evasión.
chequeo_evasion_servicio_en_dic_servicios(): verificación que los servicios en evasión estén en el diccionario de servicios.
17. chequeo_matriz_metro.py
Módulo que tiene por objeto chequear inconsistencias en los datos de la matriz de tiempos de la red de metro, esta matriz cuenta con los datos de tiempos de viaje entre cada par origen destino. Cuenta con los siguientes métodos:
chequeo_campos_matriz_metro(): Chequeo de correcto número de campos y delimitador.
chequeo_matriz_metro_pares_od(): Chequeo que verifica que existan todos los pares origen-destino de la red, utilizando como base el diccionario de estaciones de metro.
chequeo_matriz_estacion_en_diccionario(): Chequeo para verificar que todas las estaciones de metro que se encuentren en la matriz existan en el diccionario de estaciones de metro.
18. chequeo_frecuencias.py
Módulo que tiene por objeto chequear inconsistencias en los datos de los archivos de frecuencias, distancias, velocidades y capacidades del programa de operación. Cuenta con los siguientes métodos:
chequeo_campos_frecuencias(): Chequeo de correcto número de campos, delimitador y que los números sean del tipo correcto (float).
chequeo_servicios_frecuencia_en_diccionario(): Chequeo para verificar que los servicios de los archivos de frecuencias, velocidades, capacidades y distancias esten en el diccionario de servicios y viceversa.