portal_publico/portal_api/nao_conformidades/pipeline.py

23 lines
1.0 KiB
Python

"""Orquestração: lê os dois arquivos exportados do Sigsistem e devolve as
ocorrências já com as ações e o histórico completo de acompanhamentos
aninhados. Não toca no banco — o upsert acontece na view
(`NaoConformidadeImportacaoViewSet.create`, em `portal_api/views.py`), mesma
separação de responsabilidade de `portal_api.planos_saude`/
`portal_api.indicadores`."""
from __future__ import annotations
from . import leiaute_acoes, leiaute_ocorrencias
from .modelos import ResultadoProcessamento
def processa_importacao(caminho_ocorrencias: str, caminho_acoes: str) -> ResultadoProcessamento:
ocorrencias, avisos = leiaute_ocorrencias.parse_ocorrencias(caminho_ocorrencias)
acompanhamentos_por_chave = leiaute_acoes.parse_acompanhamentos(caminho_acoes)
for ocorrencia in ocorrencias:
for acao in ocorrencia.acoes:
chave = (str(ocorrencia.codigo), str(acao.codigo))
acao.acompanhamentos = acompanhamentos_por_chave.get(chave, [])
return ResultadoProcessamento(ocorrencias=ocorrencias, avisos=avisos)