Files
AI-upflux-docprocessor/docs/visao-geral.md
2026-05-14 15:30:38 -03:00

116 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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:
1. **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.
2. **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.
3. **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 |
---