portal_publico/portal_api/dashboard_contabil/pipeline.py

28 lines
1.2 KiB
Python

"""Orquestração do Dashboard Contábil: extrai o PDF e roda o motor de regras
sobre o resultado — só em memória (dataclasses), sem tocar no ORM diretamente.
Mesmo padrão de `portal_api.indicadores.pipeline`/`portal_api.planos_saude.
pipeline`; quem persiste é a view.
Diferente dos outros dois pacotes, aqui a chave de busca do histórico
(`codigo_empresa`) só é conhecida **depois** de extrair o cabeçalho do PDF —
por isso `processa_apuracao` recebe `busca_historico` como uma função
(injetada pela view, que sabe consultar o ORM) em vez de já receber o
histórico pronto."""
from __future__ import annotations
from typing import IO, Callable
from .modelos import CabecalhoExtraido, ResultadoProcessamento, SnapshotHistorico
from .parser import extrai_balancete_dre
from .regras import gera_achados
def processa_apuracao(
origem: str | IO[bytes], busca_historico: Callable[[CabecalhoExtraido], list[SnapshotHistorico]]
) -> ResultadoProcessamento:
extracao = extrai_balancete_dre(origem)
historico = busca_historico(extracao.cabecalho)
achados = gera_achados(extracao, historico)
return ResultadoProcessamento(extracao=extracao, achados=achados)