Skip to content

Commit

Permalink
Merge branch 'feat/abbreviated-cid'
Browse files Browse the repository at this point in the history
  • Loading branch information
ThiagoTrabach committed Sep 9, 2024
2 parents 575b98b + efd4f15 commit 6980793
Show file tree
Hide file tree
Showing 11 changed files with 311 additions and 27 deletions.
18 changes: 18 additions & 0 deletions macros/clean_cid.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

{% macro clean_cid(text) %}

regexp_replace(
regexp_replace(
regexp_replace(
{{text}},
'Emissão de prescrição de repetição',
''
),
'[E|e]xames* .*',
'Exame'
),
r' [\(|\[].*[\]|\)]',
''
)

{% endmacro %}
55 changes: 55 additions & 0 deletions models/intermediate/cid/int_historico_clinico__cid_categoria.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
with cids as (
select distinct
id_categoria,
categoria_descricao,
grupo_descricao,
grupo_descricao_abv,
char_length(categoria_descricao) as len_categoria,
char_length(grupo_descricao) as len_grupo,
dense_rank() over (partition by id_subcategoria order by grupo_descricao_len asc) as ranking
from {{ref("raw_datasus__cid10")}}
),
-- 3 DIGITOS --
pivoting_3_dig as (
select *
from (
select distinct
id_categoria,
categoria_descricao,
grupo_descricao,
grupo_descricao_abv,
len_categoria,
len_grupo,
from cids where ranking = 1
)
UNPIVOT(len FOR agrupador IN (len_categoria,len_grupo))
),
get_min_len_3_dig as (
select id_categoria, min(len) as min_len
from pivoting_3_dig
group by 1
),
get_best_agg_3_dig as (
select
get_min_len_3_dig.*,
pivoting_3_dig.len,
pivoting_3_dig.agrupador,
row_number() over(partition by get_min_len_3_dig.id_categoria) as ranking
from get_min_len_3_dig
left join pivoting_3_dig
on pivoting_3_dig.id_categoria = get_min_len_3_dig.id_categoria
and pivoting_3_dig.len = get_min_len_3_dig.min_len
),
agg_3_dig as (
select
get_best_agg_3_dig.id_categoria,
CASE
WHEN agrupador = 'len_categoria' THEN categoria_descricao
WHEN agrupador = 'len_grupo' THEN grupo_descricao
END as best_agrupador
from (select * from get_best_agg_3_dig where ranking=1) as get_best_agg_3_dig
left join ( select * from cids where ranking = 1) as cids_u
on get_best_agg_3_dig.id_categoria = cids_u.id_categoria
)
select * from agg_3_dig
order by 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
with cids as (
select
id_subcategoria,
id_categoria,
subcategoria_descricao,
categoria_descricao,
grupo_descricao,
grupo_descricao_abv,
char_length(subcategoria_descricao) as len_subcategoria,
char_length(categoria_descricao) as len_categoria,
char_length(grupo_descricao) as len_grupo,
dense_rank() over (partition by id_subcategoria order by grupo_descricao_len asc) as ranking
from {{ref("raw_datasus__cid10")}}
),
--- 4 DIGITOS ---
pivoting_4_dig as (
select *
from ( select * from cids where ranking = 1)
UNPIVOT(len FOR agrupador IN (len_subcategoria,len_categoria,len_grupo))
),
get_min_len_4_dig as (
select id_subcategoria, id_categoria, min(len) as min_len
from pivoting_4_dig
group by 1,2
),
get_best_agg_4_dig as (
select
get_min_len_4_dig.*,
pivoting_4_dig.len,
pivoting_4_dig.agrupador,
row_number() over(partition by get_min_len_4_dig.id_subcategoria) as ranking
from get_min_len_4_dig
left join pivoting_4_dig
on pivoting_4_dig.id_subcategoria = get_min_len_4_dig.id_subcategoria
and pivoting_4_dig.len = get_min_len_4_dig.min_len
),
agg_4_dig as (
select
get_best_agg_4_dig.id_subcategoria,
subcategoria_descricao,
get_best_agg_4_dig.id_categoria,
CASE
WHEN agrupador = 'len_categoria' THEN categoria_descricao
WHEN agrupador = 'len_subcategoria' THEN subcategoria_descricao
WHEN agrupador = 'len_grupo' THEN grupo_descricao
END as best_agrupador
from (select * from get_best_agg_4_dig where ranking=1) as get_best_agg_4_dig
left join ( select * from cids where ranking = 1) as cids_u
on get_best_agg_4_dig.id_subcategoria = cids_u.id_subcategoria
)
select * from agg_4_dig
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,31 @@ models:
- name: paciente.data_nascimento
description: |
Data de nascimento do paciente.
policy_tags:
- '{{ var ("TAG_DTNASCIMENTO") }}'
- name: tipo
description: |
Tipo de atendimento classificado como 'Exames', 'Consulta' ou 'Internação', baseado no tipo de atendimento informado no boletim.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: subtipo
description: |
Subtipo do atendimento, obtido a partir do tipo de atendimento do boletim.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: exames_realizados
description: |
No caso de tipo de episódio como 'Exame', detalha tipos de exames realizados e descrição
- name: exames_realizados.tipo
description: |
Tipo do exame, pode ser preenchido com 'Imagem' ou 'Laboratório'
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: exames_realizados.descricao
description: |
Descrição do exame realizado
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: entrada_datahora
description: |
Data e hora de início do atendimento. Representa o momento em que o atendimento começou.
Expand All @@ -51,9 +61,13 @@ models:
- name: motivo_atendimento
description: |
Queixa inicial do paciente
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: desfecho_atendimento
description: |
Desfecho do episódio
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: condicoes
description: >
Códigos e descrições dos CID (Classificação Internacional de Doenças)
Expand All @@ -62,9 +76,13 @@ models:
- name: condicoes.id
description: |
Código CID ativo
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: condicoes.descricao
description: |
Descrição do CID associado
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: condicoes.situacao
description: |
Situação do CID associado ao atendimento. Na Vitai assume apenas o valor "ATIVO".
Expand All @@ -75,6 +93,8 @@ models:
description: >
Descrições das alergias associadas ao atendimento, extraídas dos
registros de alergias.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: estabelecimento
description: >
Informações sobre o estabelecimento de saúde onde o atendimento foi
Expand Down Expand Up @@ -110,6 +130,8 @@ models:
- name: profissional_saude_responsavel.especialidade
description: |
Especialidade do profissional responsável pelo atendimento.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: profissional_saude_responsavel.cpf
description: |
CPF do profissional responsável pelo atendimento.
Expand Down Expand Up @@ -173,10 +195,14 @@ models:
description: >
Tipo de atendimento classificado como 'Exames', 'Consulta' ou
'Internação', baseado no tipo de atendimento informado no boletim.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: subtipo
description: >
Subtipo do atendimento, obtido a partir do tipo de atendimento do
boletim.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: entrada_datahora
description: >
Data e hora de início do atendimento. Representa o momento em que o
Expand All @@ -189,7 +215,6 @@ models:
description: >
Informações sobre os pacientes envolvidos no atendimento, incluindo
CPF e CNS.
Agrupados por identificador de prontuário.
- name: paciente.id_prontuario
description: |
Expand All @@ -204,24 +229,36 @@ models:
CNS do paciente.
policy_tags:
- '{{ var ("TAG_CNS") }}'
- name: paciente.data_nascimento
description: |
Data de nascimento do paciente.
policy_tags:
- '{{ var ("TAG_DTNASCIMENTO") }}'
- name: motivo_atendimento
description: |
Queixa inicial do paciente
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: desfecho_atendimento
description: |
Desfecho do episódio
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: condicoes
description: >
Códigos e descrições dos CID (Classificação Internacional de Doenças)
relacionados ao atendimento.
Inclui informações como código e nome do CID.
- name: condicoes.id
description: |
Código CID ativo
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: condicoes.descricao
description: |
Descrição do CID associado
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: condicoes.situacao
description: |
Situação do CID associado ao atendimento. Pode assumir os valores "ATIVO", "NAO ESPECIFICADO" OU "RESOLVIDO"
Expand All @@ -232,19 +269,27 @@ models:
description: >
Descrições das alergias associadas ao atendimento, extraídas dos
registros de alergias.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: prescricoes
description: >
Informações sobre as prescrições médicas realizadas durante o
atendimento, incluindo medicamentos e dosagens.
- name: prescricoes.id
description: |
ID da prescrição.
policy_tags:
- '{{ var ("TAG_MEDICAMENTO") }}'
- name: prescricoes.nome
description: |
Nome do medicamento prescrito.
policy_tags:
- '{{ var ("TAG_MEDICAMENTO") }}'
- name: prescricoes.concentracao
description: |
Concentração do medicamento prescrito.
policy_tags:
- '{{ var ("TAG_MEDICAMENTO") }}'
- name: prescricoes.uso_continuo
description: |
Flag que indica se o medicamento é de uso contínuo.
Expand Down Expand Up @@ -283,6 +328,8 @@ models:
- name: profissional_saude_responsavel.especialidade
description: |
Especialidade do profissional responsável pelo atendimento.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: profissional_saude_responsavel.cpf
description: |
CPF do profissional responsável pelo atendimento.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,14 @@ with
array_agg(
struct(
condicoes.id as id,
cid_descricao.descricao as descricao,
cid_descricao.subcategoria_descricao as descricao,
condicoes.situacao as situacao,
condicoes.data_diagnostico as data_diagnostico
)
order by data_diagnostico desc, descricao
order by data_diagnostico desc, subcategoria_descricao
) as condicoes
from condicoes
left join cid_descricao on condicoes.id = cid_descricao.codigo_cid
left join cid_descricao on condicoes.id = cid_descricao.id_subcategoria
group by fk_atendimento
),
-- -=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--
Expand Down Expand Up @@ -152,7 +152,7 @@ with
when vacinas != '[]'
then 'Vacinação'
when datahora_marcacao is null
then 'Demanda Expontânea'
then 'Demanda Espontânea'
else 'Agendada'
end as string
) as tipo,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@ with
episodios.cid_codigo as cid_id,
episodios.cid_nome as cid_nome,
from episodios
where (cid_codigo is not null or cid_nome is not null)
),
cid_grouped as (
select
Expand Down
20 changes: 16 additions & 4 deletions models/marts/historico_clinico/_mart_historico_clinico_schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,22 +81,32 @@ models:
description: >
Códigos e descrições dos CID (Classificação Internacional de Doenças)
relacionados ao atendimento.
- name: condicoes.id
- name: condicoes.relacao
description: |
Lista de cids associados ao atendimento.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: condicoes.relacao.id
description: |
Código CID ativo
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: condicoes.descricao
- name: condicoes.relacao.descricao
description: |
Descrição do CID associado ao atendimento.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: condicoes.situacao
- name: condicoes.relacao.situacao
description: |
Situação do CID associado ao atendimento. Pode assumir os valores "ATIVO", "NAO ESPECIFICADO" OU "RESOLVIDO"
- name: condicoes.data_diagnostico
- name: condicoes.relacao.data_diagnostico
description: |
Data do diagnóstico da condição na Atenção Primária. Para a UPAs e Hospitais, este campo é vazio.
- name: condicoes.resumo
description: |
Descreve de forma resumida os cids marcados como "Ativos" ou "Não especificados"
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: prescricoes
description: >
Informações sobre as medicações prescritas durante o atendimento.
Expand Down Expand Up @@ -158,6 +168,8 @@ models:
- name: profissional_saude_responsavel.especialidade
description: |
Especialidade do profissional responsável pelo atendimento.
policy_tags:
- '{{ var ("TAG_DADOS_CLINICOS") }}'
- name: prontuario
description: >
Informações adicionais sobre o atendimento, como o fornecedor e o
Expand Down
Loading

0 comments on commit 6980793

Please sign in to comment.