Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ajustes em CID, motivo e desfecho do episódio assistencial #91

Merged
merged 12 commits into from
Sep 24, 2024
9 changes: 9 additions & 0 deletions macros/clean_abe_obs.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

{% macro clean_abe_obs(text) %}
CASE
WHEN {{text}} = '' THEN null
WHEN regexp_contains(lower(trim({{text}})),r'^((\.)|(none)|(baixa autom[á|a]tica)|(alta)|(alta ((com orientaç[õ|o]es)|(m[é|e]dica)|(administrativa)|(hospitalar)|(com prescr medica)))|(o+p)|(prescrevo( *e *oriento){0,1})|(prescriç[ã|a]o e orientaçao pa{0,1}ra casa)|(segue de alta com orientaç[o|õ]es gerais e sobre riscos e prescriç[a|ã]o)|((com ){0,1}orientaç[o|õ]es)|(orientaç[a|ã]o))$') THEN null
ELSE {{text}}
END

{% endmacro %}
31 changes: 23 additions & 8 deletions macros/clean_cid.sql
Original file line number Diff line number Diff line change
@@ -1,18 +1,33 @@

{% macro clean_cid(text) %}

CASE
WHEN regexp_contains(lower({{text}}),'gravidez.*') THEN {{text}}
ELSE
regexp_replace(
regexp_replace(
regexp_replace(
{{text}},
'Emissão de prescrição de repetição',
''
regexp_replace(
regexp_replace(
regexp_replace(
lower({{text}}),
r'(em circunstâncias não especificadas)|(e a causas não especificadas)|(não classificad[o|a]s em outra parte)|([(sem)|(com)] confirmação bacteriológica ou histológica)|((, ){0,1}e [à|a|o]s não especificad[a|o]s)|(outras formas e as não especificadas da )|(de localização não especificada)|(^alguns)|(algumas)|(emissão de prescrição de repetição)|(, nível não especificado)',
''
),
'(^outr[a|o]s{0,1}( (tipos|formas) de ){0,1})|(não especificadas)',
''
),
r'.*[E|e]xames* .*',
'Exame'
),
r'(^ +)|(,{0,1} {0,1}$)|[( [][ a-z-à-ü-0-9]+[])]|(,,)',
''
),
'[E|e]xames* .*',
'Exame'
' {2,}',
' '
),
r' [\(|\[].*[\]|\)]',
''
' {1,}, {1,}',
', '
)
END

{% endmacro %}
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
--Cria tabela de de-para da categoria e sua descrição resumida.
--O resumo de descrição é construído como o nível de agrupamento da categoria que possui o menor número de caracteres.
with
cids as (
select distinct
categoria.id as id_categoria,
categoria.descricao as categoria_descricao,
{{clean_cid('categoria.descricao')}} as categoria_descricao_c,
grupo.descricao as grupo_descricao,
grupo.abreviatura as grupo_abreviatura,
char_length(categoria.descricao) as len_categoria,
char_length(grupo.descricao) as len_grupo,
{{clean_cid('grupo.descricao')}} as grupo_descricao_c,
char_length({{clean_cid('categoria.descricao')}}) as len_categoria,
char_length({{clean_cid('grupo.descricao')}}) as len_grupo,

from {{ ref("dim_condicao_cid10") }}, unnest(grupo) as grupo
qualify dense_rank() over (partition by id order by grupo.comprimento asc) = 1
),
Expand Down Expand Up @@ -35,16 +39,29 @@ with
get_best_agg_3_dig.id_categoria,
case
when agrupador = 'len_categoria'
then categoria_descricao
then categoria_descricao_c
when agrupador = 'len_grupo'
then grupo_descricao
then grupo_descricao_c
end as best_agrupador
from get_best_agg_3_dig
left join
cids
on get_best_agg_3_dig.id_categoria = cids.id_categoria
)

select * from agg_3_dig where id_categoria != 'U07'
select
id_categoria,
CASE
WHEN (char_length(best_agrupador)-1 > 0)
THEN
CONCAT(
UPPER(LEFT(best_agrupador,1)),
RIGHT(best_agrupador,char_length(best_agrupador)-1)
)
ELSE
best_agrupador
END as best_agrupador
from agg_3_dig where id_categoria != 'U07'
-- Contornando CIDs de COVID que atualmente fazem parte de um grupos de "códigos para uso de emergência", sendo não informativo para o resumo
union all
select 'U07', 'COVID19'
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
--Cria tabela de de-para da subcategoria e sua descrição resumida.
--O resumo de descrição é construído como o nível de agrupamento da subcategoria que possui o menor número de caracteres.
with
cids as (
select
id,
categoria.id as id_categoria,
cid.descricao,
cid.descricao as subcategoria_descricao,
{{clean_cid('cid.descricao')}} as subcategoria_descricao_c,
categoria.descricao as categoria_descricao,
{{clean_cid('categoria.descricao')}} as categoria_descricao_c,
grupo.descricao as grupo_descricao,
grupo.abreviatura as grupo_abreviatura,
char_length(cid.descricao) as len_subcategoria,
char_length(categoria.descricao) as len_categoria,
char_length(grupo.descricao) as len_grupo,
{{clean_cid('grupo.descricao')}} as grupo_descricao_c,
char_length({{clean_cid('cid.descricao')}}) as len_subcategoria,
char_length({{clean_cid('categoria.descricao')}}) as len_categoria,
char_length({{clean_cid('grupo.descricao')}}) as len_grupo,

from {{ ref("dim_condicao_cid10") }} as cid, unnest(grupo) as grupo

Expand All @@ -24,7 +28,7 @@ with
),

get_min_len_4_dig as (
select id, id_categoria, min(len) as min_len from pivoting_4_dig group by 1, 2
select id, min(len) as min_len from pivoting_4_dig group by 1
),

get_best_agg_4_dig as (
Expand All @@ -44,24 +48,39 @@ with
agg_4_dig as (
select
get_best_agg_4_dig.id,
descricao,
get_best_agg_4_dig.id_categoria,
subcategoria_descricao,
categoria_descricao,
grupo_descricao,
id_categoria,
case
when agrupador = 'len_categoria'
then categoria_descricao
then categoria_descricao_c
when agrupador = 'len_subcategoria'
then descricao
then subcategoria_descricao_c
when agrupador = 'len_grupo'
then grupo_descricao
then grupo_descricao_c
end as best_agrupador
from get_best_agg_4_dig
left join cids on get_best_agg_4_dig.id = cids.id
)

select *
select
id,
subcategoria_descricao,
id_categoria,
CASE
WHEN (char_length(best_agrupador)-1 > 0)
THEN
CONCAT(
UPPER(LEFT(best_agrupador,1)),
RIGHT(best_agrupador,char_length(best_agrupador)-1)
)
ELSE best_agrupador
END as best_agrupador
from agg_4_dig
where id not in ('U071', 'U072')
-- Contornando CIDs de COVID que atualmente fazem parte de um grupos de "códigos para uso de emergência", sendo não informativo para o resumo
union all
select 'U071', 'COVID19, virus identificado', 'U07', 'COVID19'
union all
select 'U072', 'COVID19, virus não identificado', 'U07', 'COVID19'
select 'U072', 'COVID19, virus não identificado', 'U07', 'COVID19'
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,14 @@ with
-- -=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--
-- DIM: Condições
-- -=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--
cid_descricao as (select * from {{ ref("raw_datasus__cid10") }}),
cid_descricao as (
select distinct id, descricao from {{ ref("dim_condicao_cid10") }}
union all
select distinct categoria.id as id, categoria.descricao as descricao from {{ ref("dim_condicao_cid10") }}
),
condicoes as (
select
distinct
gid as fk_atendimento,

json_extract_scalar(condicao_json, "$.cod_cid10") as id,
Expand All @@ -90,14 +95,16 @@ with
array_agg(
struct(
condicoes.id as id,
cid_descricao.subcategoria_descricao as descricao,
cid_descricao.descricao,
condicoes.situacao as situacao,
condicoes.data_diagnostico as data_diagnostico
)
order by data_diagnostico desc, subcategoria_descricao
order by data_diagnostico desc, cid_descricao.descricao
) as condicoes
from condicoes
left join cid_descricao on condicoes.id = cid_descricao.id_subcategoria
left join (
select distinct id, descricao from cid_descricao
) as cid_descricao on condicoes.id = cid_descricao.id
group by fk_atendimento
),
-- -=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--
Expand Down Expand Up @@ -173,8 +180,8 @@ with
safe_cast(datahora_fim as datetime) as saida_datahora,

-- Motivo e Desfecho
upper(soap_subjetivo_motivo) as motivo_atendimento,
upper(soap_plano_observacoes) as desfecho_atendimento,
upper(trim(soap_subjetivo_motivo)) as motivo_atendimento,
upper(trim(soap_plano_observacoes)) as desfecho_atendimento,

-- Condições
dim_condicoes_atribuidas.condicoes,
Expand Down Expand Up @@ -244,3 +251,4 @@ from episodios_validos
{% if is_incremental() %}
where data_particao >= {{ partitions_to_replace }}
{% endif %}

Loading
Loading