116 lines
5.8 KiB
Markdown
116 lines
5.8 KiB
Markdown
# 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 |
|
||
|
||
---
|