Skip to content

Commit

Permalink
Add Remume itens do Vitacare and Vitai
Browse files Browse the repository at this point in the history
  • Loading branch information
ThiagoTrabach committed Jan 9, 2024
1 parent a6295f1 commit 38abb64
Show file tree
Hide file tree
Showing 8 changed files with 234 additions and 43 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
with
-- Sources
remume as (select * from {{ ref("raw_sheets__material_remume") }}),
-- Sources
remume as (
select *
from {{ ref("raw_sheets__material_remume") }}
where
remume_grupo = "Atenção Básica - Medicamentos" or remume_grupo = "Hospital" -- só mostrar medicamentos por enquanto
),

estabelecimento as (
select *
from {{ ref("dim_estabelecimento") }}
where prontuario_estoque_tem_dado = "sim" -- só mostrar unidade que usam o modulo de estoque do prontuario
),


-- Unidades de Saúde
combinacao_estabelecimento_remume as (
select
Expand All @@ -29,11 +33,8 @@ with
or id_cnes in unnest(estabelecimento_disponibilidade)
),


-- TPC
remume_distintos as (
select distinct id_material from remume
),
remume_distintos as (select distinct id_material from remume),

relacao_remume_tpc as (
select
Expand All @@ -45,7 +46,8 @@ with
from remume_distintos as remume
)

select * from relacao_remume_unidades
select *
from relacao_remume_unidades
union all
select * from relacao_remume_tpc

select *
from relacao_remume_tpc
Original file line number Diff line number Diff line change
@@ -1,13 +1,60 @@
-- posicao do dia de hoje adicionado os materiais remume que estão zerados

with
-- source
posicao_atual as (select * from {{ ref('raw_prontuario_vitacare__estoque_posicao') }} where
data_particao = current_date())
-- source
posicao_atual as (
select *
from {{ ref("raw_prontuario_vitacare__estoque_posicao") }}
where data_particao = current_date()
),

materiais as (select * from {{ ref("dim_material") }}),

-- relacão de unidades que posição de estoque na data atual
unidades_vitacare_com_posicao_atual as (
select distinct id_cnes from posicao_atual
),

-- remume
-- relação de itens remume por estabelecimento
remume as (
select remume.*
from
{{ ref("int_estoque__material_relacao_remume_por_estabelecimento") }}
as remume
left join unidades_vitacare_com_posicao_atual as est on remume.id_cnes = est.id_cnes
where est.id_cnes is not null
),

-- Filtra as posições zeradas
posicao_zeradas as (
select remume.id_material, remume.id_cnes, 0 as material_quantidade,
from remume
left join posicao_atual on remume.id_material = posicao_atual.id_material
where posicao_atual.id_material is null
),

-- Transforma as posições zeradas na mesma estrutura da posição atual
posicao_zeradas_estruturada as (
select
"" as id_estoque_posicao,
"" as area_programatica,
pz.id_cnes,
"" as id_lote,
pz.id_material,
"" as id_atc,
"" as estabelecimento_nome,
cast(null as date) as lote_data_cadastro,
cast(null as date) as lote_data_vencimento,
mat.nome as material_descricao,
pz.material_quantidade,
current_date() as data_particao,
current_datetime() as data_ingestao,
from posicao_zeradas as pz
left join materiais as mat on pz.id_material = mat.id_material
)

select * from posicao_atual
-- Une os itens zerados com a posição atual
select *
from posicao_atual
union all
select *
from posicao_zeradas_estruturada
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
-- posicao do dia de hoje adicionado os materiais remume que estão zerados

with
-- source
posicao_atual as (
select *
from {{ ref("raw_prontuario_vitai__estoque_posicao") }}
where data_particao = current_date()
),

materiais as (select * from {{ ref("dim_material") }}),

-- relacão de unidades que posição de estoque na data atual
unidades_vitai_com_posicao_atual as (
select distinct id_cnes from posicao_atual
),

-- relação de itens remume por estabelecimento
remume as (
select remume.*
from
{{ ref("int_estoque__material_relacao_remume_por_estabelecimento") }}
as remume
left join unidades_vitai_com_posicao_atual as est on remume.id_cnes = est.id_cnes
where est.id_cnes is not null
),

-- Filtra as posições zeradas
posicao_zeradas as (
select remume.id_material, remume.id_cnes, 0 as material_quantidade,
from remume
left join posicao_atual on remume.id_material = posicao_atual.id_material
where posicao_atual.id_material is null
),

-- Transforma as posições zeradas na mesma estrutura da posição atual
posicao_zeradas_estruturada as (
select
pz.id_cnes,
"" as id_lote,
pz.id_material,
"" as estoque_secao,
mat.nome as material_descricao,
mat.unidade as material_unidade,
cast(null as date) as lote_data_vencimento,
pz.material_quantidade,
0 as material_valor_unitario,
0 as material_valor_total,
current_date() as data_particao,
current_datetime() as data_snapshot,
current_datetime() as data_carga,
from posicao_zeradas as pz
left join materiais as mat on pz.id_material = mat.id_material
)

-- Une os itens zerados com a posição atual
select *
from posicao_atual
union all
select *
from posicao_zeradas_estruturada
where lote_data_vencimento is not null
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
select id_cnes, id_material, avg(quantidade_dispensada) as quantidade,
from {{ ref("int_estoque__dispensacao_serie_historica_com_outliers_identificados") }}
where outlier = "nao"
where outlier = "nao"
group by id_cnes, id_material
order by id_cnes, id_material
66 changes: 50 additions & 16 deletions models/marts/core/facts/fct_estoque_posicao.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,49 @@
)
}}

# TODO: subtituir .tipo por .tipo

with
-- sources
--- Vitacare
vitacare_atual as (
select * from {{ ref("int_estoque__posicao_hoje_vitacare_com_zerados_remume") }}
),
vitacare_dias_anteriores as (
select *
from {{ ref("raw_prontuario_vitacare__estoque_posicao") }}
where data_particao < current_date()
),

remume as (select * from {{ ref('int_estoque__material_relacao_remume_por_estabelecimento') }}),

-- importar a posicao vitacare
-- juntar posicao remume com seu respectivo prontuario
-- ajustar os campos nullos da remume na tabela de posicao
-- re-apontar o posicao_vitacare_final para a tabela de posicao ajustada
vitacare_completa as (
select * from vitacare_atual
union all
select * from vitacare_dias_anteriores
),

--- Vitai
vitai_atual as (
select * from {{ ref("int_estoque__posicao_hoje_vitai_com_zerados_remume") }}
),
vitai_dias_anteriores as (
select *
from {{ ref("raw_prontuario_vitai__estoque_posicao") }}
where data_particao < current_date()
),

vitai_completa as (
select * from vitai_atual
union all
select * from vitai_dias_anteriores
),

posicao_vitacare_final as (
-- constroi a posicação para cada source
posicao_vitacare as (
select
estoque.id_cnes,
estoque.id_lote,
estoque.id_material,
"" as estoque_secao,
estoque.material_descricao,
"" as material_unidade, --payload da viticare não possui esta informação
"" as material_unidade, -- payload da viticare não possui esta informação
estoque.lote_data_vencimento,
estoque.material_quantidade,
if(
Expand All @@ -49,11 +72,11 @@ with
estabelecimento.tipo as estabelecimento_tipo,
estabelecimento.tipo_sms as estabelecimento_tipo_sms,
estabelecimento.area_programatica as estabelecimento_area_programatica,
from {{ ref("raw_prontuario_vitacare__estoque_posicao") }} as estoque
from vitacare_completa as estoque
left join {{ ref("dim_estabelecimento") }} as estabelecimento using (id_cnes)
left join
{{ ref("int_estoque__material_valor_unitario_tpc") }}
as valor_unitario using (id_material)
{{ ref("int_estoque__material_valor_unitario_tpc") }} as valor_unitario
using (id_material)
),

posicao_vitai as (
Expand All @@ -63,7 +86,7 @@ with
estabelecimento.tipo as estabelecimento_tipo,
estabelecimento.tipo_sms as estabelecimento_tipo_sms,
estabelecimento.area_programatica as estabelecimento_area_programatica,
from {{ ref("raw_prontuario_vitai__estoque_posicao") }} as estoque
from vitai_completa as estoque
left join {{ ref("dim_estabelecimento") }} as estabelecimento using (id_cnes)
),

Expand All @@ -86,7 +109,17 @@ with
from posicao_tpc
union all
select *
from posicao_vitacare_final
from posicao_vitacare
),

posicao_consolidada_com_remume as (
select pos.*,
if(remume.id_material is null, "nao", "sim") as material_remume,
from posicao_consolidada as pos
left join {{ ref("int_estoque__material_relacao_remume_por_estabelecimento") }} as remume
on pos.id_cnes = remume.id_cnes
and pos.id_material = remume.id_material

)

select
Expand All @@ -107,6 +140,7 @@ select
end as id_curva_abc,

-- Common Fields
material_remume,
estoque_secao,
material_descricao,
material_unidade,
Expand All @@ -120,4 +154,4 @@ select
data_particao,
data_snapshot,
data_carga,
from posicao_consolidada
from posicao_consolidada_com_remume
1 change: 1 addition & 0 deletions models/marts/estoque/mart_estoque__posicao_atual.sql
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ select
estabelecimento_administracao,
estabelecimento_responsavel_sms,
abc_categoria,
material_remume,
material_descricao2 as material_descricao,
material_unidade,
material_cadastro_esta_correto,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,53 @@
},
)
}}
-- source
with
source as (
select * from {{ source("brutos_prontuario_vitai_staging", "estoque_posicao") }}
),

-- fix mudança no formato dos campos de data de Date para Datetime
source_2023 as (
select
*,
safe_cast(
safe_cast(datavencimento as datetime) as date
) as lote_data_vencimento,
safe_cast(datahora as datetime) as data_snapshot,
from source
where data_particao <= '2023-12-31'
),

source_2024 as (
select
*,
safe_cast(
datetime(
parse_timestamp('%Y-%m-%dT%H:%M:%E*S%Ez', datavencimento),
'UTC-03:00'
) as date
) as lote_data_vencimento,
safe_cast(
datetime(
parse_timestamp('%Y-%m-%dT%H:%M:%E*S%Ez', datahora),
'UTC-03:00'
) as datetime
) as data_snapshot,
from source
where data_particao > '2023-12-31'
),

source_merged as (
select *
from source_2023
union all
select *
from source_2024
)

select
-- Primary Key

-- Foreign Keys
safe_cast(cnes as string) as id_cnes,
safe_cast(lote as string) as id_lote,
Expand All @@ -25,23 +68,25 @@ select
safe_cast(secao as string) as estoque_secao,
safe_cast(descricao as string) as material_descricao,
safe_cast(apresentacao as string) as material_unidade,
safe_cast(safe_cast(datavencimento as datetime) as date) as lote_data_vencimento,
safe_cast(lote_data_vencimento as date) as lote_data_vencimento,
safe_cast(saldo as float64) as material_quantidade,
safe_cast(valormedio as float64) as material_valor_unitario,
safe_cast(valormedio as float64)
* safe_cast(saldo as float64) as material_valor_total,

-- metadata
safe_cast(data_particao as date) as data_particao,
safe_cast(datahora as datetime) as data_snapshot,
data_snapshot,
safe_cast(_data_carga as datetime) as data_carga,

from {{ source("brutos_prontuario_vitai_staging", "estoque_posicao") }}

where cnes <> "2970619" -- Centro Carioca dos Olhos
from source_merged

{% if is_incremental() %}
where
cnes <> "2970619" -- Centro Carioca dos Olhos

{% if is_incremental() %}

and safe_cast(data_particao as date) > (select max(data_particao) from {{ this }})
and safe_cast(data_particao as date)
> (select max(data_particao) from {{ this }})

{% endif %}
{% endif %}
Loading

0 comments on commit 38abb64

Please sign in to comment.