From 76a9e78183fb16ff2864670f49522feaa2bf2e4b Mon Sep 17 00:00:00 2001 From: Victor Miguel Rocha Date: Mon, 6 Jan 2025 18:43:17 -0300 Subject: [PATCH] =?UTF-8?q?cria=20modelo=20viagem=20transa=C3=A7=C3=A3o=20?= =?UTF-8?q?no=20dataset=20monitoramento=20(#372)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * cria modelo monitoramento_viagem_transacao * atualiza modelo monitoramento_viagem_transacao * adiciona materialização das tabelas do dataset monitoramento ao flow do subsidio * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * atualiza changelog * corrige intervalo de processamento considerado em viagem_transacao e corrige changelog * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * corrige intervalo de processamento considerado em viagem_transacao e referencias do modelo * corrige cte gps_validador --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../projeto_subsidio_sppo/CHANGELOG.md | 6 + .../migration/projeto_subsidio_sppo/flows.py | 18 + queries/dbt_project.yml | 1 + queries/models/monitoramento/CHANGELOG.md | 5 + .../monitoramento_viagem_transacao.sql | 26 ++ queries/models/subsidio/CHANGELOG.md | 10 + queries/models/subsidio/viagem_transacao.sql | 316 +----------------- .../models/subsidio/viagem_transacao_aux.sql | 307 +++++++++++++++++ queries/selectors.yml | 8 + 9 files changed, 397 insertions(+), 300 deletions(-) create mode 100644 queries/models/monitoramento/monitoramento_viagem_transacao.sql create mode 100644 queries/models/subsidio/viagem_transacao_aux.sql diff --git a/pipelines/migration/projeto_subsidio_sppo/CHANGELOG.md b/pipelines/migration/projeto_subsidio_sppo/CHANGELOG.md index b44ffb47..df460614 100644 --- a/pipelines/migration/projeto_subsidio_sppo/CHANGELOG.md +++ b/pipelines/migration/projeto_subsidio_sppo/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog - projeto_subsidio_sppo +## [1.0.7] - 2025-01-03 + +### Adicionado + +- Adiciona a materialização dos modelos do dataset `monitoramento` ao flow do subsídio (https://github.com/prefeitura-rio/pipelines_rj_smtr/pull/372) + ## [1.0.6] - 2024-12-17 ### Adicionado diff --git a/pipelines/migration/projeto_subsidio_sppo/flows.py b/pipelines/migration/projeto_subsidio_sppo/flows.py index af2e4fc5..7fbb820e 100644 --- a/pipelines/migration/projeto_subsidio_sppo/flows.py +++ b/pipelines/migration/projeto_subsidio_sppo/flows.py @@ -275,6 +275,18 @@ _vars=dbt_vars_2, upstream_tasks=[dbt_vars_2], ) + dbt_vars_3 = get_join_dict( + dict_list=[dbt_vars_1], + new_dict=date_intervals["second_range"] + | {"tipo_materializacao": "monitoramento"}, + upstream_tasks=[SUBSIDIO_SPPO_APURACAO_RUN_2], + )[0] + + SUBSIDIO_SPPO_APURACAO_RUN_3 = run_dbt_selector( + selector_name="monitoramento_subsidio", + _vars=dbt_vars_3, + upstream_tasks=[dbt_vars_3], + ) # POST-DATA QUALITY CHECK # SUBSIDIO_SPPO_DATA_QUALITY_POS_2 = run_dbt_tests( @@ -323,6 +335,11 @@ _vars=_vars, ) + SUBSIDIO_SPPO_APURACAO_RUN_2 = run_dbt_selector( + selector_name="monitoramento_subsidio", + _vars=_vars | {"tipo_materializacao": "monitoramento"}, + upstream_tasks=[SUBSIDIO_SPPO_APURACAO_RUN], + ) # POST-DATA QUALITY CHECK # SUBSIDIO_SPPO_DATA_QUALITY_POS = run_dbt_tests( dataset_id="viagens_remuneradas sumario_servico_dia_pagamento", @@ -373,6 +390,7 @@ dataset_id="sppo_registros sppo_realocacao check_gps_treatment__gps_sppo sppo_veiculo_dia", # noqa _vars=dbt_vars, ) + DATA_QUALITY_PRE = dbt_data_quality_checks( dbt_logs=SUBSIDIO_SPPO_DATA_QUALITY_PRE, checks_list={}, diff --git a/queries/dbt_project.yml b/queries/dbt_project.yml index 6d03be30..ed8796ff 100644 --- a/queries/dbt_project.yml +++ b/queries/dbt_project.yml @@ -107,6 +107,7 @@ vars: subsidio_parametros: "`rj-smtr-staging.dashboard_subsidio_sppo_staging.subsidio_parametros`" shapes_version: "YYYY-MM-DD" frequencies_version: "YYYY-MM-DD" + tipo_materializacao: "subsidio" # Feature penalidade de autuação por inoperância do ar condicionado (DECRETO RIO 51940/2023) DATA_SUBSIDIO_V2_INICIO: "2023-01-16" # Feature penalidade de autuação por segurança e limpeza/equipamento (DECRETO RIO 52820/2023) diff --git a/queries/models/monitoramento/CHANGELOG.md b/queries/models/monitoramento/CHANGELOG.md index 8df2f9f0..259f4f63 100644 --- a/queries/models/monitoramento/CHANGELOG.md +++ b/queries/models/monitoramento/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog - monitoramento +## [1.2.1] - 2025-01-03 + +### Adicionado +- Cria modelo `monitoramento_viagem_transacao.sql` (https://github.com/prefeitura-rio/pipelines_rj_smtr/pull/372) + ## [1.2.0] - 2024-11-28 ### Adicionado diff --git a/queries/models/monitoramento/monitoramento_viagem_transacao.sql b/queries/models/monitoramento/monitoramento_viagem_transacao.sql new file mode 100644 index 00000000..61a41003 --- /dev/null +++ b/queries/models/monitoramento/monitoramento_viagem_transacao.sql @@ -0,0 +1,26 @@ +{{ + config( + materialized="incremental", + partition_by={"field": "data", "data_type": "date", "granularity": "day"}, + incremental_strategy="insert_overwrite", + ) +}} + +select + data, + id_viagem, + id_veiculo, + id_validador, + servico, + tipo_viagem, + sentido, + distancia_planejada, + quantidade_transacao, + quantidade_transacao_riocard, + percentual_estado_equipamento_aberto, + indicador_estado_equipamento_aberto, + datetime_partida_bilhetagem, + datetime_partida, + datetime_chegada, + datetime_ultima_atualizacao +from {{ ref('viagem_transacao_aux') }} diff --git a/queries/models/subsidio/CHANGELOG.md b/queries/models/subsidio/CHANGELOG.md index 6a60dff1..b53946e5 100644 --- a/queries/models/subsidio/CHANGELOG.md +++ b/queries/models/subsidio/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog - subsidio +## [2.0.1] - 2025-01-06 + +# Corrigido + +- Corrigido e refatorado o modelo `viagem_transacao.sql` (https://github.com/prefeitura-rio/pipelines_rj_smtr/pull/372) + +# Adicionado + +- Adicionado o modelo `viagem_transacao_aux.sql`(https://github.com/prefeitura-rio/pipelines_rj_smtr/pull/372) + ## [2.0.0] - 2024-12-06 # Corrigido diff --git a/queries/models/subsidio/viagem_transacao.sql b/queries/models/subsidio/viagem_transacao.sql index eba9bd43..609a8b8b 100644 --- a/queries/models/subsidio/viagem_transacao.sql +++ b/queries/models/subsidio/viagem_transacao.sql @@ -6,304 +6,20 @@ ) }} -with - -- 1. Transações Jaé - transacao as ( - select id_veiculo, datetime_transacao - from {{ ref("transacao") }} - -- rj-smtr.br_rj_riodejaneiro_bilhetagem.transacao - where - data between date("{{ var('start_date') }}") and date_add( - date("{{ var('end_date') }}"), interval 1 day - ) - and date(datetime_processamento) - <= date_add(date("{{ var('end_date') }}"), interval 6 day) - ), - -- 2. Transações RioCard - transacao_riocard as ( - select id_veiculo, datetime_transacao - from {{ ref("transacao_riocard") }} - -- rj-smtr.br_rj_riodejaneiro_bilhetagem.transacao_riocard - where - data between date("{{ var('start_date') }}") and date_add( - date("{{ var('end_date') }}"), interval 1 day - ) - and date(datetime_processamento) - <= date_add(date("{{ var('end_date') }}"), interval 6 day) - ), - -- 3. GPS Validador - gps_validador as ( - select - data, - datetime_gps, - id_veiculo, - id_validador, - estado_equipamento, - latitude, - longitude - from {{ ref("gps_validador") }} - -- rj-smtr.br_rj_riodejaneiro_bilhetagem.gps_validador - where - data between date("{{ var('start_date') }}") and date_add( - date("{{ var('end_date') }}"), interval 1 day - ) - and ( - ( - data < date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") - and (latitude != 0 or longitude != 0) - ) - or data >= date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") - ) - and date(datetime_captura) - <= date_add(date("{{ var('end_date') }}"), interval 6 day) - ), - -- 4. Viagens realizadas - viagem as ( - select - data, - servico_realizado as servico, - datetime_partida, - datetime_chegada, - id_veiculo, - id_viagem, - distancia_planejada - from {{ ref("viagem_completa") }} - -- rj-smtr.projeto_subsidio_sppo.viagem_completa - where - data - between date_sub(date("{{ var('start_date') }}"), interval 1 day) and date( - "{{ var('end_date') }}" - ) - ), - -- 5. Status dos veículos - veiculos as ( - select data, id_veiculo, status - from {{ ref("sppo_veiculo_dia") }} - -- rj-smtr.veiculo.sppo_veiculo_dia - where - data - between date("{{ var('start_date') }}") and date("{{ var('end_date') }}") - ), - -- 6. Viagem, para fins de contagem de passageiros, com tolerância de 30 minutos, - -- limitada pela viagem anterior - viagem_com_tolerancia_previa as ( - select - v.*, - lag(v.datetime_chegada) over ( - partition by v.id_veiculo order by v.datetime_partida - ) as viagem_anterior_chegada, - case - when - lag(v.datetime_chegada) over ( - partition by v.id_veiculo order by v.datetime_partida - ) - is null - then datetime(timestamp_sub(datetime_partida, interval 30 minute)) - else - datetime( - timestamp_add( - greatest( - timestamp_sub(datetime_partida, interval 30 minute), - lag(v.datetime_chegada) over ( - partition by v.id_veiculo - order by v.datetime_partida - ) - ), - interval 1 second - ) - ) - end as datetime_partida_com_tolerancia - from viagem as v - ), - -- 7. Considera apenas as viagens realizadas no período de apuração - viagem_com_tolerancia as ( - select * - from viagem_com_tolerancia_previa - where - data - between date("{{ var('start_date') }}") and date("{{ var('end_date') }}") - ), - -- 8. Contagem de transações Jaé - transacao_contagem as ( - select v.data, v.id_viagem, count(t.datetime_transacao) as quantidade_transacao - from transacao as t - join - viagem_com_tolerancia as v - on t.id_veiculo = substr(v.id_veiculo, 2) - and t.datetime_transacao - between v.datetime_partida_com_tolerancia and v.datetime_chegada - group by v.data, v.id_viagem - ), - -- 9. Contagem de transações RioCard - transacao_riocard_contagem as ( - select - v.data, - v.id_viagem, - count(tr.datetime_transacao) as quantidade_transacao_riocard - from transacao_riocard as tr - join - viagem_com_tolerancia as v - on tr.id_veiculo = substr(v.id_veiculo, 2) - and tr.datetime_transacao - between v.datetime_partida_com_tolerancia and v.datetime_chegada - group by v.data, v.id_viagem - ), - -- 10. Ajusta estado do equipamento - -- Agrupa mesma posição para mesmo validador e veículo, mantendo preferencialmente - -- o estado do equipamento "ABERTO" quanto latitude e longitude for diferente de - -- (0,0) - estado_equipamento_aux as ( - select * - from - ( - ( - select - data, - id_validador, - id_veiculo, - latitude, - longitude, - if( - count(case when estado_equipamento = "ABERTO" then 1 end) - >= 1, - "ABERTO", - "FECHADO" - ) as estado_equipamento, - min(datetime_gps) as datetime_gps, - from gps_validador - where - ( - data >= date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") - and latitude != 0 - and longitude != 0 - ) - or data < date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") - group by 1, 2, 3, 4, 5 - ) - union all - ( - select - data, - id_validador, - id_veiculo, - latitude, - longitude, - estado_equipamento, - datetime_gps, - from gps_validador - where - data >= date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") - and latitude = 0 - and longitude = 0 - ) - ) - ), - -- 11. Relacionamento entre estado do equipamento e viagem - gps_validador_viagem as ( - select - v.data, - e.datetime_gps, - v.id_viagem, - e.id_validador, - e.estado_equipamento, - e.latitude, - e.longitude - from estado_equipamento_aux as e - join - viagem as v - on e.id_veiculo = substr(v.id_veiculo, 2) - and e.datetime_gps between v.datetime_partida and v.datetime_chegada - ), - -- 12. Calcula a porcentagem de estado do equipamento "ABERTO" por validador e - -- viagem - estado_equipamento_perc as ( - select - data, - id_viagem, - id_validador, - countif(estado_equipamento = "ABERTO") - / count(*) as percentual_estado_equipamento_aberto - from gps_validador_viagem - group by 1, 2, 3 - ), - -- 13. Considera o validador com maior porcentagem de estado do equipamento - -- "ABERTO" por viagem - estado_equipamento_max_perc as ( - select - data, - id_viagem, - max_by(id_validador, percentual_estado_equipamento_aberto) as id_validador, - max( - percentual_estado_equipamento_aberto - ) as percentual_estado_equipamento_aberto - from estado_equipamento_perc - group by 1, 2 - ), - -- 14. Verifica se a viagem possui estado do equipamento "ABERTO" em pelo menos - -- 80% dos registros - estado_equipamento_verificacao as ( - select - data, - id_viagem, - id_validador, - percentual_estado_equipamento_aberto, - if( - percentual_estado_equipamento_aberto >= 0.8 - or percentual_estado_equipamento_aberto is null, - true, - false - ) as indicador_estado_equipamento_aberto - from viagem - left join estado_equipamento_max_perc using (data, id_viagem) - ) select - v.data, - v.id_viagem, - v.id_veiculo, - v.servico, - eev.id_validador, - case - when - v.data >= date("{{ var('DATA_SUBSIDIO_V8_INICIO') }}") - and ( - ( - v.data < date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") - and ( - coalesce(tr.quantidade_transacao_riocard, 0) = 0 - or coalesce(eev.indicador_estado_equipamento_aberto, false) - = false - ) - ) - or ( - v.data >= date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") - and ( - ( - coalesce(tr.quantidade_transacao_riocard, 0) = 0 - and coalesce(t.quantidade_transacao, 0) = 0 - ) - or coalesce(eev.indicador_estado_equipamento_aberto, false) - = false - ) - ) - ) - and ve.status - in ("Licenciado com ar e não autuado", "Licenciado sem ar e não autuado") - and v.datetime_partida not between "2024-10-06 06:00:00" - and "2024-10-06 20:00:00" -- Eleição (2024-10-06) - then "Sem transação" - else ve.status - end as tipo_viagem, - v.distancia_planejada, - coalesce(t.quantidade_transacao, 0) as quantidade_transacao, - coalesce(tr.quantidade_transacao_riocard, 0) as quantidade_transacao_riocard, - eev.percentual_estado_equipamento_aberto, - eev.indicador_estado_equipamento_aberto, - v.datetime_partida_com_tolerancia as datetime_partida_bilhetagem, - v.datetime_partida, - v.datetime_chegada, - current_datetime("America/Sao_Paulo") as datetime_ultima_atualizacao -from viagem_com_tolerancia as v -left join veiculos as ve using (data, id_veiculo) -left join transacao_contagem as t using (data, id_viagem) -left join transacao_riocard_contagem as tr using (data, id_viagem) -left join estado_equipamento_verificacao as eev using (data, id_viagem) + data, + id_viagem, + id_veiculo, + servico, + id_validador, + tipo_viagem, + distancia_planejada, + quantidade_transacao, + quantidade_transacao_riocard, + percentual_estado_equipamento_aberto, + indicador_estado_equipamento_aberto, + datetime_partida_bilhetagem, + datetime_partida, + datetime_chegada, + datetime_ultima_atualizacao +from {{ref('viagem_transacao_aux')}} diff --git a/queries/models/subsidio/viagem_transacao_aux.sql b/queries/models/subsidio/viagem_transacao_aux.sql new file mode 100644 index 00000000..ffd1f058 --- /dev/null +++ b/queries/models/subsidio/viagem_transacao_aux.sql @@ -0,0 +1,307 @@ +{{ config(materialized="ephemeral") }} + +{% if var('tipo_materializacao') == 'monitoramento' %} + {% set interval_minutes = 120 %} +{% elif var('tipo_materializacao') == 'subsidio' %} + {% set interval_minutes = 30 %} +{% endif %} +with + -- 1. Transações Jaé + transacao as ( + select id_veiculo, datetime_transacao + from {{ ref("transacao") }} + -- rj-smtr.br_rj_riodejaneiro_bilhetagem.transacao + where + data between date("{{ var('start_date') }}") and date_add( + date("{{ var('end_date') }}"), interval 1 day + ) + and date(datetime_processamento) - date(datetime_transacao) <= interval 6 day + ), + -- 2. Transações RioCard + transacao_riocard as ( + select id_veiculo, datetime_transacao + from {{ ref("transacao_riocard") }} + -- rj-smtr.br_rj_riodejaneiro_bilhetagem.transacao_riocard + where + data between date("{{ var('start_date') }}") and date_add( + date("{{ var('end_date') }}"), interval 1 day + ) + and date(datetime_processamento) - date(datetime_transacao) <= interval 6 day + ), + -- 3. GPS Validador + gps_validador as ( + select + data, + datetime_gps, + id_veiculo, + id_validador, + estado_equipamento, + latitude, + longitude + from {{ ref("gps_validador") }} + -- rj-smtr.br_rj_riodejaneiro_bilhetagem.gps_validador + where + data between date("{{ var('start_date') }}") and date_add( + date("{{ var('end_date') }}"), interval 1 day + ) + and ( + ( + data < date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") + and (latitude != 0 or longitude != 0) + ) + or data >= date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") + ) + and date(datetime_captura) - date(datetime_gps) <= interval 6 day + ), + -- 4. Viagens realizadas + viagem as ( + select + data, + servico_realizado as servico, + datetime_partida, + datetime_chegada, + id_veiculo, + id_viagem, + distancia_planejada, + sentido + from {{ ref("viagem_completa") }} + -- rj-smtr.projeto_subsidio_sppo.viagem_completa + where + data + between date_sub(date("{{ var('start_date') }}"), interval 1 day) and date( + "{{ var('end_date') }}" + ) + ), + -- 5. Status dos veículos + veiculos as ( + select data, id_veiculo, status + from {{ ref("sppo_veiculo_dia") }} + -- rj-smtr.veiculo.sppo_veiculo_dia + where + data + between date("{{ var('start_date') }}") and date("{{ var('end_date') }}") + ), + -- 6. Viagem, para fins de contagem de passageiros, com tolerância de 30 minutos, + -- limitada pela viagem anterior + viagem_com_tolerancia_previa as ( + select + v.*, + lag(v.datetime_chegada) over ( + partition by v.id_veiculo order by v.datetime_partida + ) as viagem_anterior_chegada, + case + when + lag(v.datetime_chegada) over ( + partition by v.id_veiculo order by v.datetime_partida + ) + is null + then datetime(timestamp_sub(datetime_partida, interval {{ interval_minutes }} minute)) + else + datetime( + timestamp_add( + greatest( + timestamp_sub(datetime_partida, interval {{ interval_minutes }} minute), + lag(v.datetime_chegada) over ( + partition by v.id_veiculo + order by v.datetime_partida + ) + ), + interval 1 second + ) + ) + end as datetime_partida_com_tolerancia + from viagem as v + ), + -- 7. Considera apenas as viagens realizadas no período de apuração + viagem_com_tolerancia as ( + select * + from viagem_com_tolerancia_previa + where + data + between date("{{ var('start_date') }}") and date("{{ var('end_date') }}") + ), + -- 8. Contagem de transações Jaé + transacao_contagem as ( + select v.data, v.id_viagem, count(t.datetime_transacao) as quantidade_transacao + from transacao as t + join + viagem_com_tolerancia as v + on t.id_veiculo = substr(v.id_veiculo, 2) + and t.datetime_transacao + between v.datetime_partida_com_tolerancia and v.datetime_chegada + group by v.data, v.id_viagem + ), + -- 9. Contagem de transações RioCard + transacao_riocard_contagem as ( + select + v.data, + v.id_viagem, + count(tr.datetime_transacao) as quantidade_transacao_riocard + from transacao_riocard as tr + join + viagem_com_tolerancia as v + on tr.id_veiculo = substr(v.id_veiculo, 2) + and tr.datetime_transacao + between v.datetime_partida_com_tolerancia and v.datetime_chegada + group by v.data, v.id_viagem + ), + -- 10. Ajusta estado do equipamento + -- Agrupa mesma posição para mesmo validador e veículo, mantendo preferencialmente + -- o estado do equipamento "ABERTO" quanto latitude e longitude for diferente de + -- (0,0) + estado_equipamento_aux as ( + select * + from + ( + ( + select + data, + id_validador, + id_veiculo, + latitude, + longitude, + if( + count(case when estado_equipamento = "ABERTO" then 1 end) + >= 1, + "ABERTO", + "FECHADO" + ) as estado_equipamento, + min(datetime_gps) as datetime_gps, + from gps_validador + where + ( + data >= date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") + and latitude != 0 + and longitude != 0 + ) + or data < date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") + group by 1, 2, 3, 4, 5 + ) + union all + ( + select + data, + id_validador, + id_veiculo, + latitude, + longitude, + estado_equipamento, + datetime_gps, + from gps_validador + where + data >= date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") + and latitude = 0 + and longitude = 0 + ) + ) + ), + -- 11. Relacionamento entre estado do equipamento e viagem + gps_validador_viagem as ( + select + v.data, + e.datetime_gps, + v.id_viagem, + e.id_validador, + e.estado_equipamento, + e.latitude, + e.longitude + from estado_equipamento_aux as e + join + viagem as v + on e.id_veiculo = substr(v.id_veiculo, 2) + and e.datetime_gps between v.datetime_partida and v.datetime_chegada + ), + -- 12. Calcula a porcentagem de estado do equipamento "ABERTO" por validador e + -- viagem + estado_equipamento_perc as ( + select + data, + id_viagem, + id_validador, + countif(estado_equipamento = "ABERTO") + / count(*) as percentual_estado_equipamento_aberto + from gps_validador_viagem + group by 1, 2, 3 + ), + -- 13. Considera o validador com maior porcentagem de estado do equipamento + -- "ABERTO" por viagem + estado_equipamento_max_perc as ( + select + data, + id_viagem, + max_by(id_validador, percentual_estado_equipamento_aberto) as id_validador, + max( + percentual_estado_equipamento_aberto + ) as percentual_estado_equipamento_aberto + from estado_equipamento_perc + group by 1, 2 + ), + -- 14. Verifica se a viagem possui estado do equipamento "ABERTO" em pelo menos + -- 80% dos registros + estado_equipamento_verificacao as ( + select + data, + id_viagem, + id_validador, + percentual_estado_equipamento_aberto, + if( + percentual_estado_equipamento_aberto >= 0.8 + or percentual_estado_equipamento_aberto is null, + true, + false + ) as indicador_estado_equipamento_aberto + from viagem + left join estado_equipamento_max_perc using (data, id_viagem) + ) +select + v.data, + v.id_viagem, + v.id_veiculo, + v.servico, + eev.id_validador, + case + when + v.data >= date("{{ var('DATA_SUBSIDIO_V8_INICIO') }}") + and ( + ( + v.data < date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") + and ( + coalesce(tr.quantidade_transacao_riocard, 0) = 0 + or coalesce(eev.indicador_estado_equipamento_aberto, false) + = false + ) + ) + or ( + v.data >= date("{{ var('DATA_SUBSIDIO_V12_INICIO') }}") + and ( + ( + coalesce(tr.quantidade_transacao_riocard, 0) = 0 + and coalesce(t.quantidade_transacao, 0) = 0 + ) + or coalesce(eev.indicador_estado_equipamento_aberto, false) + = false + ) + ) + ) + and ve.status + in ("Licenciado com ar e não autuado", "Licenciado sem ar e não autuado") + and v.datetime_partida not between "2024-10-06 06:00:00" + and "2024-10-06 20:00:00" -- Eleição (2024-10-06) + then "Sem transação" + else ve.status + end as tipo_viagem, + v.sentido, + v.distancia_planejada, + coalesce(t.quantidade_transacao, 0) as quantidade_transacao, + coalesce(tr.quantidade_transacao_riocard, 0) as quantidade_transacao_riocard, + eev.percentual_estado_equipamento_aberto, + eev.indicador_estado_equipamento_aberto, + v.datetime_partida_com_tolerancia as datetime_partida_bilhetagem, + v.datetime_partida, + v.datetime_chegada, + current_datetime("America/Sao_Paulo") as datetime_ultima_atualizacao +from viagem_com_tolerancia as v +left join veiculos as ve using (data, id_veiculo) +left join transacao_contagem as t using (data, id_viagem) +left join transacao_riocard_contagem as tr using (data, id_viagem) +left join estado_equipamento_verificacao as eev using (data, id_viagem) diff --git a/queries/selectors.yml b/queries/selectors.yml index 27cd475f..8a24f258 100644 --- a/queries/selectors.yml +++ b/queries/selectors.yml @@ -24,6 +24,8 @@ selectors: value: models/financeiro - method: path value: models/dashboard_subsidio_sppo_v2 + - method: fqn + value: monitoramento_viagem_transacao - name: viagem_informada description: Materialização da tabela de viagens informadas @@ -86,3 +88,9 @@ selectors: value: integracao_invalida - method: fqn value: integracao_nao_realizada + + - name: monitoramento_subsidio + description: Materialização das tabelas utilizadas nos dashboards do subsidio + definition: + method: fqn + value: monitoramento_viagem_transacao \ No newline at end of file