diff --git a/pipelines/migration/veiculo/CHANGELOG.md b/pipelines/migration/veiculo/CHANGELOG.md index 4058be5ea..fe91652b1 100644 --- a/pipelines/migration/veiculo/CHANGELOG.md +++ b/pipelines/migration/veiculo/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog - veiculo +## [1.1.0] - 2024-08-06 + +### Alterado +- Alterações no tratamento do arquivo de infrações (https://github.com/prefeitura-rio/pipelines_rj_smtr/pull/126): + - Remove coluna `placa` das primary keys + - Remove filtro de modo + ## [1.0.1] - 2024-05-28 ### Adicionado diff --git a/pipelines/migration/veiculo/constants.py b/pipelines/migration/veiculo/constants.py index 13fae0611..db74642f7 100644 --- a/pipelines/migration/veiculo/constants.py +++ b/pipelines/migration/veiculo/constants.py @@ -13,7 +13,7 @@ class constants(Enum): # pylint: disable=c0103 Constant values for rj_smtr veiculo """ - SPPO_LICENCIAMENTO_TABLE_ID = "sppo_licenciamento_stu" + SPPO_LICENCIAMENTO_TABLE_ID = "licenciamento_stu" SPPO_LICENCIAMENTO_MAPPING_KEYS = { "placa": "placa", @@ -46,7 +46,7 @@ class constants(Enum): # pylint: disable=c0103 "names": SPPO_LICENCIAMENTO_MAPPING_KEYS.keys(), # pylint: disable=e1101 } - SPPO_INFRACAO_TABLE_ID = "sppo_infracao" + SPPO_INFRACAO_TABLE_ID = "infracao" SPPO_INFRACAO_MAPPING_KEYS = { "permissao": "permissao", diff --git a/pipelines/migration/veiculo/tasks.py b/pipelines/migration/veiculo/tasks.py index b9eabd5da..fd27a4b77 100644 --- a/pipelines/migration/veiculo/tasks.py +++ b/pipelines/migration/veiculo/tasks.py @@ -13,7 +13,7 @@ from prefect import task from pipelines.constants import constants as smtr_constants -from pipelines.migration.utils import connect_ftp, data_info_str, filter_data +from pipelines.migration.utils import connect_ftp, data_info_str from pipelines.migration.veiculo.constants import constants from pipelines.utils.utils import log # ,get_vault_secret @@ -200,13 +200,13 @@ def pre_treatment_sppo_infracao(status: dict, timestamp: datetime): log("Updating valor type to float...", level="info") data["valor"] = data["valor"].str.replace(",", ".").astype(float) - filters = ["modo != 'ONIBUS'"] - log(f"Filtering '{filters}'...", level="info") - data = filter_data(data, filters) + # filters = ["modo != 'ONIBUS'"] + # log(f"Filtering '{filters}'...", level="info") + # data = filter_data(data, filters) - log("Filtering null primary keys...", level="info") - primary_key = ["placa", "id_auto_infracao"] - data.dropna(subset=primary_key, inplace=True) + # log("Filtering null primary keys...", level="info") + primary_key = ["id_auto_infracao"] + # data.dropna(subset=primary_key, inplace=True) # Check primary keys # pk_columns = ["placa", "id_auto_infracao"] diff --git a/queries/macros/get_license_date.sql b/queries/macros/get_license_date.sql index 3c43b28ba..dc1621dfa 100644 --- a/queries/macros/get_license_date.sql +++ b/queries/macros/get_license_date.sql @@ -10,7 +10,7 @@ SELECT WHEN DATE("{{ var('run_date') }}") >= "2024-03-16" AND DATE("{{ var('run_date') }}") < "2024-04-01" THEN DATE("2024-04-09") ELSE ( SELECT MIN(DATE(data)) - FROM {{ ref("sppo_licenciamento_stu_staging") }} + FROM {{ ref("licenciamento_stu_staging") }} WHERE DATE(data) >= DATE_ADD(DATE("{{ var('run_date') }}"), INTERVAL 5 DAY) -- Admite apenas versões do STU igual ou após 2024-04-09 a partir de abril/24 devido à falha de atualização na fonte da dados (SIURB) AND (DATE("{{ var('run_date') }}") < "2024-04-01" OR DATE(data) >= '2024-04-09') diff --git a/queries/models/veiculo/CHANGELOG.md b/queries/models/veiculo/CHANGELOG.md index 6577475e9..7600182c3 100644 --- a/queries/models/veiculo/CHANGELOG.md +++ b/queries/models/veiculo/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog - veiculo +## [2.0.0] - 2024-08-06 + +### Adicionado +- Criado os modelos `infracao.sql` e `licenciamento.sql` para guardar os dados completos de infração e licenciamento do STU (https://github.com/prefeitura-rio/pipelines_rj_smtr/pull/126) + +### Alterado +- Altera tipo dos modelos `sppo_infracao.sql` e `sppo_licenciamento.sql` para `ephemeral` (https://github.com/prefeitura-rio/pipelines_rj_smtr/pull/126) +- Adiciona colunas `placa`, `data_licenciamento`, `data_infracao` e `datetime_ultima_atualizacao` no modelo `sppo_veiculo_dia.sql` (https://github.com/prefeitura-rio/pipelines_rj_smtr/pull/126) + ## [1.1.3] - 2024-10-25 #### Alterado @@ -12,36 +21,36 @@ ## [1.1.2] - 2024-04-25 -#### Adicionado +### Adicionado - Criada macro `get_license_date.sql` para retornar relacionamento entre `run_date` e data de licenciamento dos modelos `sppo_licenciamento_stu_staging.sql`, `sppo_licenciamento.sql` e `sppo_veiculo_dia.sql`. Nesta macro, serão admitidas apenas versões do STU igual ou após 2024-04-09 a partir de abril/24 devido à falha de atualização na fonte da dados (SIURB) (https://github.com/prefeitura-rio/queries-rj-smtr/pull/280) -#### Corrigido +### Corrigido - Altera lógica de particionamento nos modelos `sppo_licenciamento_stu_staging.sql`, `sppo_licenciamento.sql`, `sppo_infracao_staging.sql` e `sppo_infracao.sql` (https://github.com/prefeitura-rio/queries-rj-smtr/pull/280) ## [1.1.1] - 2024-04-16 -#### Corrigido +### Corrigido - Cria lógica de deduplicação na tabela `sppo_registro_agente_verao` (https://github.com/prefeitura-rio/queries-rj-smtr/pull/271) ## [1.1.0] - 2024-04-15 -#### Alterado +### Alterado - Reorganizar modelos intermediários de licenciamento em staging (https://github.com/prefeitura-rio/queries-rj-smtr/pull/255) - Atualiza schema para refletir as alterações (https://github.com/prefeitura-rio/queries-rj-smtr/pull/255) ## [1.0.2] - 2024-04-12 -#### Alterado +### Alterado - Fixa versão do STU em `2024-04-09` para mar/Q2 devido à falha de atualização na fonte da dados (SIURB) nos modelos `sppo_licenciamento.sql` e `sppo_veiculo_dia.sql` (https://github.com/prefeitura-rio/queries-rj-smtr/pull/264) ## [1.0.1] - 2024-04-05 -#### Alterado +### Alterado - Altera a localização da verificação de validade da vistoria de `sppo_licenciamento` para `sppo_veiculo_dia` (https://github.com/prefeitura-rio/queries-rj-smtr/pull/252) - Adiciona coluna `data_inicio_veiculo` na tabela `sppo_licenciamento` (https://github.com/prefeitura-rio/queries-rj-smtr/pull/252) @@ -65,7 +74,7 @@ - Atualiza documentação de tabelas e colunas (https://github.com/prefeitura-rio/queries-rj-smtr/pull/239) - Alterações feitas em https://github.com/prefeitura-rio/queries-rj-smtr/pull/229 e https://github.com/prefeitura-rio/queries-rj-smtr/pull/236 corrigidas em https://github.com/prefeitura-rio/queries-rj-smtr/pull/239 -## Corrigido +### Corrigido - Corrige versão dos dados de licenciamento do STU a partir de 01/03/24 na tabela `sppo_licenciamento` (https://github.com/prefeitura-rio/queries-rj-smtr/pull/239) diff --git a/queries/models/veiculo/infracao.sql b/queries/models/veiculo/infracao.sql new file mode 100644 index 000000000..ba17d0d17 --- /dev/null +++ b/queries/models/veiculo/infracao.sql @@ -0,0 +1,44 @@ + +{{ + config( + materialized='incremental', + partition_by={ + "field":"data", + "data_type": "date", + "granularity":"day" + }, + unique_key=['data', 'id_auto_infracao'], + incremental_strategy='insert_overwrite' + ) +}} + +{%- if execute and is_incremental() %} + {% set infracao_date = run_query("SELECT MIN(SAFE_CAST(data AS DATE)) FROM " ~ ref('infracao_staging') ~ " WHERE SAFE_CAST(data AS DATE) >= DATE_ADD(DATE('" ~ var("run_date") ~ "'), INTERVAL 7 DAY)").columns[0].values()[0] %} +{% endif -%} + +WITH infracao AS ( + SELECT + * EXCEPT(data), + SAFE_CAST(data AS DATE) AS data + FROM + {{ ref("infracao_staging") }} as t + {% if is_incremental() %} + WHERE + DATE(data) = DATE("{{ infracao_date }}") + {% endif %} +), +infracao_rn AS ( + SELECT + *, + ROW_NUMBER() OVER (PARTITION BY data, id_auto_infracao ORDER BY timestamp_captura DESC) rn + FROM + infracao +) +SELECT + * EXCEPT(rn), + CURRENT_DATETIME("America/Sao_Paulo") AS datetime_ultima_atualizacao, + "{{ var("version") }}" AS versao +FROM + infracao_rn +WHERE + rn = 1 \ No newline at end of file diff --git a/queries/models/veiculo/licenciamento.sql b/queries/models/veiculo/licenciamento.sql new file mode 100644 index 000000000..a006d279c --- /dev/null +++ b/queries/models/veiculo/licenciamento.sql @@ -0,0 +1,88 @@ +-- depends_on: {{ ref('aux_sppo_licenciamento_vistoria_atualizada') }} +{{ + config( + materialized="incremental", + partition_by={"field": "data", "data_type": "date", "granularity": "day"}, + unique_key=["data", "id_veiculo"], + incremental_strategy="insert_overwrite", + ) +}} + +{% if execute and is_incremental() %} + {% set licenciamento_date = run_query(get_license_date()).columns[0].values()[0] %} +{% endif %} + +WITH stu AS ( + SELECT + * EXCEPT(data), + DATE(data) AS data + FROM + {{ ref("licenciamento_stu_staging") }} AS t + {% if is_incremental() %} + WHERE + DATE(data) = DATE("{{ licenciamento_date }}") + {% endif %} +), +stu_rn AS ( + SELECT + * EXCEPT (timestamp_captura), + EXTRACT(YEAR FROM data_ultima_vistoria) AS ano_ultima_vistoria, + ROW_NUMBER() OVER (PARTITION BY data, id_veiculo) rn + FROM + stu +), +stu_ano_ultima_vistoria AS ( + -- Temporariamente considerando os dados de vistoria enviados pela TR/SUBTT/CGLF + SELECT + s.* EXCEPT(ano_ultima_vistoria), + CASE + WHEN data >= "2024-03-01" AND c.ano_ultima_vistoria > s.ano_ultima_vistoria THEN c.ano_ultima_vistoria + WHEN data >= "2024-03-01" THEN COALESCE(s.ano_ultima_vistoria, c.ano_ultima_vistoria) + ELSE s.ano_ultima_vistoria + END AS ano_ultima_vistoria_atualizado, + FROM + stu_rn AS s + LEFT JOIN + ( + SELECT + id_veiculo, + placa, + ano_ultima_vistoria + FROM + {{ ref("aux_sppo_licenciamento_vistoria_atualizada") }} + ) AS c + USING(id_veiculo, placa) +) +SELECT + data, + modo, + id_veiculo, + ano_fabricacao, + carroceria, + data_ultima_vistoria, + id_carroceria, + id_chassi, + id_fabricante_chassi, + id_interno_carroceria, + id_planta, + indicador_ar_condicionado, + indicador_elevador, + indicador_usb, + indicador_wifi, + nome_chassi, + permissao, + placa, + quantidade_lotacao_pe, + quantidade_lotacao_sentado, + tipo_combustivel, + tipo_veiculo, + status, + data_inicio_vinculo, + ano_ultima_vistoria_atualizado, + CURRENT_DATETIME("America/Sao_Paulo") AS datetime_ultima_atualizacao, + "{{ var("version") }}" AS versao +FROM + stu_ano_ultima_vistoria +WHERE + rn = 1 + diff --git a/queries/models/veiculo/schema.yml b/queries/models/veiculo/schema.yml index a14206db7..db15fb2b0 100644 --- a/queries/models/veiculo/schema.yml +++ b/queries/models/veiculo/schema.yml @@ -1,7 +1,7 @@ version: 2 models: - - name: sppo_infracao + - name: infracao description: "Tabela histórica de todas as multas aplicadas aos modos de transporte no município do Rio de Janeiro, com qualquer situação. Dados capturados diariamente de: https://www.data.rio/documents/multas-aplicadas-aos-modos-de-transporte-nos-%C3%BAltimos-cinco-anos" columns: @@ -34,7 +34,11 @@ models: CANCELADA - Multa foi cancelada através de um Processo de Recurso" - name: data_pagamento description: "Data de pagamento" - - name: sppo_licenciamento + - name: datetime_ultima_atualizacao + description: "Última atualização (GMT-3)." + - name: versao + description: "SHA do repositório no Github" + - name: licenciamento description: "Tabela histórica de dados cadastrais dos veículos que operam o sistema de ônibus (BRT e SPPO), considerando tanto os licenciados no Sistema de Transporte Urbano (STU) quanto as solicitações válidas em andamento para ingresso no sistema" @@ -90,6 +94,10 @@ models: description: "Ano atualizado da última vistoria realizada pelo veículo" - name: data_inicio_vinculo description: "Data de início do vínculo do veículo no STU" + - name: datetime_ultima_atualizacao + description: "Última atualização (GMT-3)." + - name: versao + description: "SHA do repositório no Github" - name: sppo_licenciamento_solicitacao description: "Tabela histórica de dados cadastrais das solicitações em andamento para ingresso no Sistema de Transporte Urbano (STU)" columns: @@ -153,6 +161,8 @@ models: description: "Data de operação" - name: id_veiculo description: "Número de ordem do veículo, identificação que é exibida na lateral do ônibus" + - name: placa + description: "Placa do veículo" - name: indicadores description: "Indicadores para caraterização do status do veículo" - name: indicadores.indicador_licenciado @@ -179,6 +189,12 @@ models: - Autuado por limpeza/equipamento - Veículo que operou, foi licenciado, mas foi autuado cumulativamente por infrações relacionadas à limpeza e equipamentos do veículo\n - Sem ar e não autuado - Veículo que operou, foi licenciado sem ar condicionado e não foi autuado\n - Com ar e não autuado - Veículo que operou, foi licenciado com ar condicionado e não foi autuado" + - name: datetime_ultima_atualizacao + description: "Última atualização (GMT-3)." + - name: data_licenciamento + description: "Data do arquivo de licenciamento utilizado" + - name: data_infracao + description: "Data do arquivo de infrações utilizado" - name: versao description: "SHA do repositório no Github" - name: sppo_registro_agente_verao diff --git a/queries/models/veiculo/sppo_infracao.sql b/queries/models/veiculo/sppo_infracao.sql index 71074b0b0..fcd9b116e 100644 --- a/queries/models/veiculo/sppo_infracao.sql +++ b/queries/models/veiculo/sppo_infracao.sql @@ -1,40 +1,13 @@ - - {{ config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - }, - unique_key=['data', 'id_auto_infracao'], - incremental_strategy='insert_overwrite' -) +{{ + config( + materialized="ephemeral" + ) }} -{%- if execute %} - {% set infracao_date = run_query("SELECT MIN(SAFE_CAST(data AS DATE)) FROM " ~ ref('sppo_infracao_staging') ~ " WHERE SAFE_CAST(data AS DATE) >= DATE_ADD(DATE('" ~ var("run_date") ~ "'), INTERVAL 7 DAY)").columns[0].values()[0] %} -{% endif -%} - -WITH - infracao AS ( - SELECT - * EXCEPT(data), - SAFE_CAST(data AS DATE) AS data - FROM - {{ ref("sppo_infracao_staging") }} as t - WHERE - DATE(data) = DATE("{{ infracao_date }}") - ), - infracao_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY data, id_auto_infracao) rn - FROM - infracao - ) SELECT - * EXCEPT(rn) + * FROM - infracao_rn + {{ ref("infracao") }} WHERE - rn = 1 \ No newline at end of file + modo = 'ONIBUS' + AND placa IS NOT NULL \ No newline at end of file diff --git a/queries/models/veiculo/sppo_licenciamento.sql b/queries/models/veiculo/sppo_licenciamento.sql index ec581d95d..28a8715d6 100644 --- a/queries/models/veiculo/sppo_licenciamento.sql +++ b/queries/models/veiculo/sppo_licenciamento.sql @@ -1,71 +1,12 @@ --- depends_on: {{ ref('aux_sppo_licenciamento_vistoria_atualizada') }} {{ - config( - materialized="incremental", - partition_by={"field": "data", "data_type": "date", "granularity": "day"}, - unique_key=["data", "id_veiculo"], - incremental_strategy="insert_overwrite", - ) + config( + materialized="ephemeral" + ) }} -{% if execute %} - {% set licenciamento_date = run_query(get_license_date()).columns[0].values()[0] %} -{% endif %} - -with - -- Tabela de licenciamento - stu as ( - select - * except(data), - date(data) AS data - from - {{ ref("sppo_licenciamento_stu_staging") }} as t - where - date(data) = date("{{ licenciamento_date }}") - and tipo_veiculo not like "%ROD%" - ), - stu_rn AS ( - select - * except (timestamp_captura), - EXTRACT(YEAR FROM data_ultima_vistoria) AS ano_ultima_vistoria, - ROW_NUMBER() OVER (PARTITION BY data, id_veiculo) rn - from - stu - ), - stu_ano_ultima_vistoria AS ( - -- Temporariamente considerando os dados de vistoria enviados pela TR/SUBTT/CGLF - {% if var("run_date") >= "2024-03-01" %} - SELECT - s.* EXCEPT(ano_ultima_vistoria), - CASE - WHEN c.ano_ultima_vistoria > s.ano_ultima_vistoria THEN c.ano_ultima_vistoria - ELSE COALESCE(s.ano_ultima_vistoria, c.ano_ultima_vistoria) - END AS ano_ultima_vistoria_atualizado, - FROM - stu_rn AS s - LEFT JOIN - ( - SELECT - id_veiculo, - placa, - ano_ultima_vistoria - FROM - {{ ref("aux_sppo_licenciamento_vistoria_atualizada") }} - ) AS c - USING - (id_veiculo, placa) - {% else %} - SELECT - s.* EXCEPT(ano_ultima_vistoria), - s.ano_ultima_vistoria AS ano_ultima_vistoria_atualizado, - FROM - stu_rn AS s - {% endif %} - ) -select - * except(rn), -from - stu_ano_ultima_vistoria -where - rn = 1 - +SELECT + * +FROM + {{ ref("licenciamento") }} +WHERE + tipo_veiculo NOT LIKE "%ROD%" \ No newline at end of file diff --git a/queries/models/veiculo/sppo_veiculo_dia.sql b/queries/models/veiculo/sppo_veiculo_dia.sql index 779df690a..ef9705a0b 100644 --- a/queries/models/veiculo/sppo_veiculo_dia.sql +++ b/queries/models/veiculo/sppo_veiculo_dia.sql @@ -1,44 +1,53 @@ --- depends_on: {{ ref('sppo_licenciamento_stu_staging') }} +-- depends_on: {{ ref('licenciamento_stu_staging') }} +-- depends_on: {{ ref("infracao") }} {{ - config( - materialized="incremental", - partition_by={"field": "data", "data_type": "date", "granularity": "day"}, - unique_key=["data", "id_veiculo"], - incremental_strategy="insert_overwrite", - ) + config( + materialized="incremental", + partition_by={"field": "data", "data_type": "date", "granularity": "day"}, + unique_key=["data", "id_veiculo"], + incremental_strategy="insert_overwrite", + ) }} {% if execute %} {% set licenciamento_date = run_query(get_license_date()).columns[0].values()[0] %} {% endif %} -WITH - licenciamento AS ( +WITH licenciamento AS ( SELECT DATE("{{ var('run_date') }}") AS data, id_veiculo, placa, tipo_veiculo, + CASE + WHEN tipo_veiculo LIKE "%BASIC%" OR tipo_veiculo LIKE "%BS%" THEN "BASICO" + WHEN tipo_veiculo LIKE "%MIDI%" THEN "MIDI" + WHEN tipo_veiculo LIKE "%MINI%" THEN "MINI" + WHEN tipo_veiculo LIKE "%PDRON%" OR tipo_veiculo LIKE "%PADRON%" THEN "PADRON" + WHEN tipo_veiculo LIKE "%ARTICULADO%" THEN "ARTICULADO" + ELSE NULL + END AS tecnologia, indicador_ar_condicionado, TRUE AS indicador_licenciado, CASE - WHEN ano_ultima_vistoria_atualizado >= CAST(EXTRACT(YEAR FROM DATE_SUB(DATE("{{ var('run_date') }}"), INTERVAL {{ var('sppo_licenciamento_validade_vistoria_ano') }} YEAR)) AS INT64) THEN TRUE -- Última vistoria realizada dentro do período válido - WHEN data_ultima_vistoria IS NULL AND DATE_DIFF(DATE("{{ var('run_date') }}"), data_inicio_vinculo, DAY) <= {{ var('sppo_licenciamento_tolerancia_primeira_vistoria_dia') }} THEN TRUE -- Caso o veículo seja novo, existe a tolerância de 15 dias para a primeira vistoria - WHEN ano_fabricacao IN (2023, 2024) AND CAST(EXTRACT(YEAR FROM DATE("{{ var('run_date') }}")) AS INT64) = 2024 THEN TRUE -- Caso o veículo tiver ano de fabricação 2023 ou 2024, será considerado como vistoriado apenas em 2024 (regra de transição) - ELSE FALSE - END AS indicador_vistoriado, + WHEN ano_ultima_vistoria_atualizado >= CAST(EXTRACT(YEAR FROM DATE_SUB(DATE("{{ var('run_date') }}"), INTERVAL {{ var('sppo_licenciamento_validade_vistoria_ano') }} YEAR)) AS INT64) THEN TRUE -- Última vistoria realizada dentro do período válido + WHEN data_ultima_vistoria IS NULL AND DATE_DIFF(DATE("{{ var('run_date') }}"), data_inicio_vinculo, DAY) <= {{ var('sppo_licenciamento_tolerancia_primeira_vistoria_dia') }} THEN TRUE -- Caso o veículo seja novo, existe a tolerância de 15 dias para a primeira vistoria + WHEN ano_fabricacao IN (2023, 2024) AND CAST(EXTRACT(YEAR FROM DATE("{{ var('run_date') }}")) AS INT64) = 2024 THEN TRUE -- Caso o veículo tiver ano de fabricação 2023 ou 2024, será considerado como vistoriado apenas em 2024 (regra de transição) + ELSE FALSE + END AS indicador_vistoriado, + data_inicio_vinculo FROM - {{ ref("sppo_licenciamento") }} --`rj-smtr`.`veiculo`.`sppo_licenciamento` + {{ ref("sppo_licenciamento") }} --`rj-smtr`.`veiculo`.`licenciamento` WHERE data = DATE("{{ licenciamento_date }}") - ), - gps AS ( +), +gps AS ( SELECT DISTINCT data, id_veiculo FROM - {{ ref("gps_sppo") }} - -- rj-smtr.br_rj_riodejaneiro_veiculos.gps_sppo + {{ ref("gps_sppo") }} + -- `rj-smtr.br_rj_riodejaneiro_veiculos.gps_sppo` WHERE data = DATE("{{ var('run_date') }}") ), autuacoes AS ( @@ -47,25 +56,27 @@ WITH placa, id_infracao FROM - {{ ref("sppo_infracao") }} + {{ ref("sppo_infracao") }} + --`rj-smtr.veiculo.sppo_infracao` WHERE {%- if execute %} - {% set infracao_date = run_query("SELECT MIN(data) FROM " ~ ref("sppo_infracao") ~ " WHERE data >= DATE_ADD(DATE('" ~ var("run_date") ~ "'), INTERVAL 7 DAY)").columns[0].values()[0] %} + {% set infracao_date = run_query("SELECT MIN(data) FROM " ~ ref("infracao") ~ " WHERE data >= DATE_ADD(DATE('" ~ var("run_date") ~ "'), INTERVAL 7 DAY)").columns[0].values()[0] %} {% endif -%} data = DATE("{{ infracao_date }}") AND data_infracao = DATE("{{ var('run_date') }}") - AND modo = "ONIBUS"), - registros_agente_verao AS ( - SELECT - DISTINCT data, - id_veiculo, - TRUE AS indicador_registro_agente_verao_ar_condicionado - FROM - {{ ref("sppo_registro_agente_verao") }} - -- rj-smtr.veiculo.sppo_registro_agente_verao - WHERE - data = DATE("{{ var('run_date') }}") ), - autuacao_ar_condicionado AS ( +), +registros_agente_verao AS ( + SELECT + DISTINCT data, + id_veiculo, + TRUE AS indicador_registro_agente_verao_ar_condicionado + FROM + {{ ref("sppo_registro_agente_verao") }} + -- `rj-smtr.veiculo.sppo_registro_agente_verao` + WHERE + data = DATE("{{ var('run_date') }}") +), +autuacao_ar_condicionado AS ( SELECT data, placa, @@ -100,8 +111,9 @@ WITH "025.XII", "025.XIII", "025.XIV", - "026.X") ), - autuacao_equipamento AS ( + "026.X") +), +autuacao_equipamento AS ( SELECT data, placa, @@ -126,8 +138,9 @@ WITH "025.VIII", "025.IX", "025.X", - "025.XI") ), - autuacao_limpeza AS ( + "025.XI") +), +autuacao_limpeza AS ( SELECT data, placa, @@ -145,20 +158,15 @@ WITH autuacao_ar_condicionado FULL JOIN autuacao_seguranca - USING - (data, - placa) + USING(data, placa) FULL JOIN autuacao_equipamento - USING - (data, - placa) + USING(data, placa) FULL JOIN autuacao_limpeza - USING - (data, - placa) ), - gps_licenciamento_autuacao AS ( + USING(data, placa) +), +gps_licenciamento_autuacao AS ( SELECT data, id_veiculo, @@ -201,34 +209,35 @@ WITH COALESCE(a.indicador_autuacao_equipamento, FALSE) AS indicador_autuacao_equipamento, COALESCE(r.indicador_registro_agente_verao_ar_condicionado, FALSE) AS indicador_registro_agente_verao_ar_condicionado) {% endif %} - AS indicadores + AS indicadores, + l.placa, + tecnologia FROM gps g LEFT JOIN licenciamento AS l - USING - (data, - id_veiculo) + USING(data, id_veiculo) LEFT JOIN autuacoes_agg AS a - USING - (data, - placa) + USING(data, placa) LEFT JOIN registros_agente_verao AS r - USING - (data, - id_veiculo)) + USING(data, id_veiculo) +) {% if var("run_date") < var("DATA_SUBSIDIO_V5_INICIO") %} SELECT gla.* EXCEPT(indicadores), TO_JSON(indicadores) AS indicadores, status, + DATE("{{ licenciamento_date }}") AS data_licenciamento, + DATE("{{ infracao_date }}") AS data_infracao, + CURRENT_DATETIME("America/Sao_Paulo") AS datetime_ultima_atualizacao, "{{ var("version") }}" AS versao FROM gps_licenciamento_autuacao AS gla LEFT JOIN - {{ ref("subsidio_parametros") }} AS p --`rj-smtr.dashboard_subsidio_sppo.subsidio_parametros` + {{ ref("subsidio_parametros") }} AS p + -- `rj-smtr.dashboard_subsidio_sppo.subsidio_parametros` AS p ON gla.indicadores.indicador_licenciado = p.indicador_licenciado AND gla.indicadores.indicador_ar_condicionado = p.indicador_ar_condicionado @@ -253,6 +262,9 @@ SELECT WHEN indicadores.indicador_ar_condicionado IS TRUE THEN "Licenciado com ar e não autuado" ELSE NULL END AS status, + DATE("{{ licenciamento_date }}") AS data_licenciamento, + DATE("{{ infracao_date }}") AS data_infracao, + CURRENT_DATETIME("America/Sao_Paulo") AS datetime_ultima_atualizacao, "{{ var("version") }}" AS versao FROM gps_licenciamento_autuacao diff --git a/queries/models/veiculo/staging/sppo_infracao_staging.sql b/queries/models/veiculo/staging/infracao_staging.sql similarity index 85% rename from queries/models/veiculo/staging/sppo_infracao_staging.sql rename to queries/models/veiculo/staging/infracao_staging.sql index bd2cb2181..a84054fcd 100644 --- a/queries/models/veiculo/staging/sppo_infracao_staging.sql +++ b/queries/models/veiculo/staging/infracao_staging.sql @@ -1,24 +1,25 @@ {{ config( materialized='view', - alias='sppo_infracao' + alias='infracao' ) }} SELECT data, - SAFE_CAST(DATETIME(TIMESTAMP_TRUNC(TIMESTAMP(timestamp_captura), SECOND), "America/Sao_Paulo" ) AS DATETIME) timestamp_captura, + SAFE_CAST(JSON_VALUE(content,'$.id_infracao') AS STRING) id_infracao, SAFE_CAST(JSON_VALUE(content,'$.modo') AS STRING) modo, + SAFE_CAST(JSON_VALUE(content,'$.servico') AS STRING) servico, SAFE_CAST(JSON_VALUE(content,'$.permissao') AS STRING) permissao, - SAFE_CAST(placa AS STRING) placa, + SAFE_CAST(JSON_VALUE(content,'$.placa') AS STRING) placa, SAFE_CAST(id_auto_infracao AS STRING) id_auto_infracao, PARSE_DATE("%d/%m/%Y", SAFE_CAST(JSON_VALUE(content,'$.data_infracao') AS STRING)) data_infracao, - SAFE_CAST(JSON_VALUE(content,'$.valor') AS FLOAT64) valor, - SAFE_CAST(JSON_VALUE(content,'$.id_infracao') AS STRING) id_infracao, SAFE_CAST(JSON_VALUE(content,'$.infracao') AS STRING) infracao, + SAFE_CAST(JSON_VALUE(content,'$.valor') AS FLOAT64) valor, SAFE_CAST(JSON_VALUE(content,'$.status') AS STRING) status, - IF(JSON_VALUE(content,'$.data_pagamento') = "", NULL, PARSE_DATE("%d/%m/%Y", JSON_VALUE(content,'$.data_pagamento'))) data_pagamento + IF(JSON_VALUE(content,'$.data_pagamento') = "", NULL, PARSE_DATE("%d/%m/%Y", JSON_VALUE(content,'$.data_pagamento'))) data_pagamento, + SAFE_CAST(DATETIME(TIMESTAMP_TRUNC(TIMESTAMP(timestamp_captura), SECOND), "America/Sao_Paulo" ) AS DATETIME) timestamp_captura FROM {{ source('veiculo_staging','sppo_infracao') }} as t diff --git a/queries/models/veiculo/staging/licenciamento_stu_staging.sql b/queries/models/veiculo/staging/licenciamento_stu_staging.sql new file mode 100644 index 000000000..72526166b --- /dev/null +++ b/queries/models/veiculo/staging/licenciamento_stu_staging.sql @@ -0,0 +1,46 @@ + +{{ + config( + materialized='view', + alias='licenciamento_stu' + ) +}} + +SELECT + data, + SAFE_CAST(DATETIME(TIMESTAMP_TRUNC(TIMESTAMP(timestamp_captura), SECOND), "America/Sao_Paulo" ) AS DATETIME) timestamp_captura, + SAFE_CAST(JSON_VALUE(content,"$.modo") AS STRING) modo, + SAFE_CAST(id_veiculo AS STRING) id_veiculo, + SAFE_CAST(JSON_VALUE(content,"$.ano_fabricacao") AS INT64) ano_fabricacao, + SAFE_CAST(JSON_VALUE(content,"$.carroceria") AS STRING) carroceria, + CASE + WHEN + JSON_VALUE(content,"$.data_ultima_vistoria") = "" THEN NULL + ELSE + SAFE_CAST(PARSE_DATETIME("%d/%m/%Y", JSON_VALUE(content,"$.data_ultima_vistoria")) AS DATE) + END AS data_ultima_vistoria, + SAFE_CAST(JSON_VALUE(content,"$.id_carroceria") AS INT64) id_carroceria, + SAFE_CAST(JSON_VALUE(content,"$.id_chassi") AS INT64) id_chassi, + SAFE_CAST(JSON_VALUE(content,"$.id_fabricante_chassi") AS INT64) id_fabricante_chassi, + SAFE_CAST(JSON_VALUE(content,"$.id_interno_carroceria") AS INT64) id_interno_carroceria, + SAFE_CAST(JSON_VALUE(content,"$.id_planta") AS INT64) id_planta, + SAFE_CAST(JSON_VALUE(content,"$.indicador_ar_condicionado") AS BOOL) indicador_ar_condicionado, + SAFE_CAST(JSON_VALUE(content,"$.indicador_elevador") AS BOOL) indicador_elevador, + SAFE_CAST(JSON_VALUE(content,"$.indicador_usb") AS BOOL) indicador_usb, + SAFE_CAST(JSON_VALUE(content,"$.indicador_wifi") AS BOOL) indicador_wifi, + SAFE_CAST(JSON_VALUE(content,"$.nome_chassi") AS STRING) nome_chassi, + SAFE_CAST(JSON_VALUE(content,"$.permissao") AS STRING) permissao, + SAFE_CAST(JSON_VALUE(content,"$.placa") AS STRING) placa, + SAFE_CAST(JSON_VALUE(content,"$.quantidade_lotacao_pe") AS INT64) quantidade_lotacao_pe, + SAFE_CAST(JSON_VALUE(content,"$.quantidade_lotacao_sentado") AS INT64) quantidade_lotacao_sentado, + SAFE_CAST(JSON_VALUE(content,"$.tipo_combustivel") AS STRING) tipo_combustivel, + SAFE_CAST(JSON_VALUE(content,"$.tipo_veiculo") AS STRING) tipo_veiculo, + SAFE_CAST(JSON_VALUE(content,"$.status") AS STRING) status, + CASE + WHEN + JSON_VALUE(content,"$.data_inicio_vinculo") = "" THEN NULL + ELSE + SAFE_CAST(PARSE_DATETIME("%d/%m/%Y", JSON_VALUE(content,"$.data_inicio_vinculo")) AS DATE) + END AS data_inicio_vinculo, + FROM + {{ source('veiculo_staging','sppo_licenciamento_stu') }} as t \ No newline at end of file diff --git a/queries/models/veiculo/staging/schema.yml b/queries/models/veiculo/staging/schema.yml index dce839d1b..1aa553e6b 100644 --- a/queries/models/veiculo/staging/schema.yml +++ b/queries/models/veiculo/staging/schema.yml @@ -58,7 +58,7 @@ models: description: "Empresa ao qual o veículo está vinculado" - name: ano_ultima_vistoria description: "Ano da última vistoria realizada pelo veículo" - - name: sppo_licenciamento_stu_staging + - name: licenciamento_stu_staging description: "View de Dados cadastrais dos veículos que operam o sistema de ônibus (BRT e SPPO) no município do Rio de Janeiro.\n Dados capturados diariamente de: https://www.data.rio/documents/c6c97d3c15434b5088965e25f85e27c3" columns: @@ -112,7 +112,7 @@ models: description: "Licenciado - Veículo licenciado no Sistema de Transporte Urbano (STU)" - name: data_inicio_vinculo description: "Data de início do vínculo do veículo no STU" - - name: sppo_infracao_staging + - name: infracao_staging description: "View de todas as multas aplicadas aos modos de transporte no município do Rio de Janeiro, com qualquer situação. Dados capturados diariamente de: https://www.data.rio/documents/multas-aplicadas-aos-modos-de-transporte-nos-%C3%BAltimos-cinco-anos" columns: diff --git a/queries/models/veiculo/staging/sppo_licenciamento_stu_staging.sql b/queries/models/veiculo/staging/sppo_licenciamento_stu_staging.sql deleted file mode 100644 index 61a7dc0fa..000000000 --- a/queries/models/veiculo/staging/sppo_licenciamento_stu_staging.sql +++ /dev/null @@ -1,45 +0,0 @@ - -{{ config( - materialized='view', - alias='sppo_licenciamento_stu' -) -}} - -SELECT - data, - SAFE_CAST(DATETIME(TIMESTAMP_TRUNC(TIMESTAMP(timestamp_captura), SECOND), "America/Sao_Paulo" ) AS DATETIME) timestamp_captura, - SAFE_CAST(JSON_VALUE(content,"$.modo") AS STRING) modo, - SAFE_CAST(id_veiculo AS STRING) id_veiculo, - SAFE_CAST(JSON_VALUE(content,"$.ano_fabricacao") AS INT64) ano_fabricacao, - SAFE_CAST(JSON_VALUE(content,"$.carroceria") AS STRING) carroceria, - CASE - WHEN JSON_VALUE(content,"$.data_ultima_vistoria") = "" THEN NULL - ELSE - SAFE_CAST(PARSE_DATETIME("%d/%m/%Y", JSON_VALUE(content,"$.data_ultima_vistoria")) AS DATE) - END - AS data_ultima_vistoria, - SAFE_CAST(JSON_VALUE(content,"$.id_carroceria") AS INT64) id_carroceria, - SAFE_CAST(JSON_VALUE(content,"$.id_chassi") AS INT64) id_chassi, - SAFE_CAST(JSON_VALUE(content,"$.id_fabricante_chassi") AS INT64) id_fabricante_chassi, - SAFE_CAST(JSON_VALUE(content,"$.id_interno_carroceria") AS INT64) id_interno_carroceria, - SAFE_CAST(JSON_VALUE(content,"$.id_planta") AS INT64) id_planta, - SAFE_CAST(JSON_VALUE(content,"$.indicador_ar_condicionado") AS BOOL) indicador_ar_condicionado, - SAFE_CAST(JSON_VALUE(content,"$.indicador_elevador") AS BOOL) indicador_elevador, - SAFE_CAST(JSON_VALUE(content,"$.indicador_usb") AS BOOL) indicador_usb, - SAFE_CAST(JSON_VALUE(content,"$.indicador_wifi") AS BOOL) indicador_wifi, - SAFE_CAST(JSON_VALUE(content,"$.nome_chassi") AS STRING) nome_chassi, - SAFE_CAST(JSON_VALUE(content,"$.permissao") AS STRING) permissao, - SAFE_CAST(JSON_VALUE(content,"$.placa") AS STRING) placa, - SAFE_CAST(JSON_VALUE(content,"$.quantidade_lotacao_pe") AS INT64) quantidade_lotacao_pe, - SAFE_CAST(JSON_VALUE(content,"$.quantidade_lotacao_sentado") AS INT64) quantidade_lotacao_sentado, - SAFE_CAST(JSON_VALUE(content,"$.tipo_combustivel") AS STRING) tipo_combustivel, - SAFE_CAST(JSON_VALUE(content,"$.tipo_veiculo") AS STRING) tipo_veiculo, - SAFE_CAST(JSON_VALUE(content,"$.status") AS STRING) status, - CASE - WHEN JSON_VALUE(content,"$.data_inicio_vinculo") = "" THEN NULL - ELSE - SAFE_CAST(PARSE_DATETIME("%d/%m/%Y", JSON_VALUE(content,"$.data_inicio_vinculo")) AS DATE) - END - AS data_inicio_vinculo, - FROM - {{ source('veiculo_staging','sppo_licenciamento_stu') }} as t \ No newline at end of file