5.8 KiB
5.8 KiB
Doc-Processor — Visão Geral do Sistema
O que é
O Doc-Processor é um serviço de análise automatizada de guias de autorização médica. Ele recebe solicitações de procedimentos médicos (guias), extrai o texto dos documentos anexados via OCR, e utiliza um agente de inteligência artificial (LLM) para decidir se cada serviço solicitado deve ser Aprovado ou Reprovado, com base em regras de negócio configuradas para cada código de procedimento.
O sistema foi desenvolvido para operar no contexto de operadoras de saúde (ex: Unimed), reduzindo o trabalho manual dos auditores médicos.
Fluxo de Processamento
POST /process
│
├─► Para cada guia (em paralelo):
│ │
│ ├─► Para cada anexo (em paralelo):
│ │ ├─► Baixa o arquivo do S3
│ │ ├─► OCR via AWS Textract
│ │ └─► Armazena texto extraído na guia
│ │
│ └─► Para cada serviço (em paralelo):
│ ├─► Verifica se o código existe nas regras
│ ├─► Monta o payload JSON (atendimento + guia + serviço + histórico)
│ ├─► Chama o agente LangGraph com o texto dos documentos
│ └─► Retorna Aprovado / Reprovado / SKIPPED
│
├─► Salva todos os resultados no S3 (bucket de saída)
└─► Retorna resposta HTTP com as avaliações
Decisão do Agente
O agente segue a seguinte lógica de decisão para cada serviço:
- Critérios de auto-aprovação (
rules.yaml › rules): Se qualquer um desses critérios estiver presente na guia ou nos documentos, o procedimento é aprovado imediatamente. - Documentação mínima (
rules.yaml › min_doc): Se nenhum critério de auto-aprovação for atendido, o agente verifica se a documentação mínima exigida está presente. Se estiver (mesmo que em tipo diferente de documento), o procedimento é aprovado. - Reprovação: Se nem os critérios de auto-aprovação nem a documentação mínima estiverem presentes, o procedimento é reprovado.
O agente também verifica, em cada documento, se o nome do beneficiário da guia está presente.
Tecnologias Utilizadas
| Tecnologia | Função |
|---|---|
| FastAPI | Framework web / API REST |
| LangGraph | Orquestração do agente de IA (fluxo ReAct) |
| LangChain AWS | Integração com AWS Bedrock (LLM Claude/Anthropic) |
| AWS Bedrock | Modelo de linguagem (LLM) para decisão |
| AWS Textract | OCR de PDFs e imagens |
| AWS S3 | Armazenamento de documentos de entrada e resultados |
| AWS Secrets Manager | Gerenciamento seguro de credenciais |
| Langfuse | Observabilidade e rastreamento de chamadas ao LLM |
| PyPDF2 | Separação de páginas de PDFs para OCR por página |
| Pydantic | Validação do corpo da requisição |
| Docker | Containerização do serviço |
Estrutura de Diretórios
code/
├── app.py # Ponto de entrada da API FastAPI
├── dockerfile # Imagem Docker da aplicação
├── Makefile # Automação de build e deploy
├── requirements.txt # Dependências Python
│
├── services/
│ ├── authorization.py # Avalia cada serviço via agente de IA
│ ├── document_extractor.py # Extrai texto de documentos no S3 via Textract
│ └── result_store.py # Persiste resultados no S3
│
├── utils/
│ ├── config.py # Variáveis de ambiente / configurações
│ ├── langgraph_agent.py # Definição e execução do agente LangGraph
│ ├── rules.yaml # Regras de autorização por código de procedimento
│ └── secrets_manager.py # Carrega segredos do AWS Secrets Manager
│
└── document/ # Documentação do sistema (esta pasta)
├── visao-geral.md
├── modulos.md
└── api.md
Configuração
Variáveis de Ambiente
| Variável | Obrigatória | Padrão | Descrição |
|---|---|---|---|
AWS_REGION |
Não | us-east-2 |
Região AWS usada para todos os serviços |
BEDROCK_MODEL_ARN |
Sim | — | ARN do modelo Claude no AWS Bedrock |
OUTPUT_BUCKET |
Não | upflux-doc-analyzer |
Bucket S3 onde os resultados são salvos |
API_VERSION |
Não | v1 |
Prefixo de versão usado na chave do S3 |
LANGFUSE_HOST |
Não | https://cloud.langfuse.com |
Host do servidor Langfuse (observabilidade) |
Segredos (AWS Secrets Manager — Secret ID: doc-analyzer)
| Chave | Descrição |
|---|---|
API-KEY |
Chave de autenticação da API (X-API-Key) |
AWS_ACCESS_KEY |
Access Key para acesso ao S3 de entrada |
AWS_SECRET_KEY |
Secret Key para acesso ao S3 de entrada |
LANGFUSE-SECRET-KEY |
Chave secreta do Langfuse |
LANGFUSE-PUBLIC-KEY |
Chave pública do Langfuse |