# 🤖 Sistema de Predição de Glosas Médicas

Sistema completo de Machine Learning para predição de glosas em guias médicas usando XGBoost.

## 🎯 Início Rápido

```bash
# 1. Certifique-se que Docker Desktop está rodando
# 2. Execute o script de inicialização:
./start.sh

# Ou manualmente:
docker compose up -d
```

**Acessar:**
- 🌐 **Interface Web**: http://localhost:8000 (Gestão de modelos)
- 🔌 **API REST**: http://localhost:8010 (Predições)

---

## 📁 Estrutura do Projeto

```
modelo_ml_acdoc/
├── 📊 DADOS DE TREINAMENTO
│   ├── 20251112_treinamento.csv              # Dataset completo
│   ├── 20251112_treinamento_consulta.csv     # Dados de consultas
│   ├── 20251112_treinamento_internacao.csv   # Dados de internações
│   └── 20251112_treinamento_sadt.csv         # Dados de SADT
│
├── 🤖 MODELOS TREINADOS
│   ├── modelo_20251112_treinamento_consulta_tipo3.pkl
│   ├── modelo_20251112_treinamento_consulta_tipo3_oov.pkl
│   ├── modelo_20251112_treinamento_internacao_tipo1.pkl
│   ├── modelo_20251112_treinamento_internacao_tipo1_oov.pkl
│   ├── modelo_20251112_treinamento_sadt_tipo2.pkl
│   └── modelo_20251112_treinamento_sadt_tipo2_oov.pkl
│
├── 🔧 SCRIPTS DE TREINAMENTO
│   ├── extrai_dados_e_treina.py              # Extrai dados do MySQL e treina
│   └── treina_por_tipo_guia_oov.py           # Treina modelos por tipo com OOV
│
├── 🔮 SCRIPTS DE PREDIÇÃO
│   ├── predizer_inteligente.py               # Preditor com seleção automática de modelo
│   └── predizer_json.py                      # Preditor para entrada JSON
│
├── 🌐 API REST
│   ├── api_server.py                         # Servidor Flask
│   ├── api_predicao.py                       # Lógica de predição
│   ├── run_api.py                            # Script para iniciar API
│   └── start_api.sh                          # Shell script para iniciar API
│
├── 🐳 DOCKER
│   ├── Dockerfile                            # Dockerfile para containerização
│   ├── docker-compose.yml                    # Orquestração de containers
│   └── requirements-docker.txt               # Dependências para Docker
│
├── 📚 DOCUMENTAÇÃO
│   ├── INSTALACAO.md                         # Guia de instalação
│   ├── exemplos_api.md                       # Exemplos de uso da API
│   └── exemplo_integracao.py                 # Exemplo de integração
│
└── 📦 CONFIGURAÇÃO
    ├── requirements.txt                      # Dependências Python
    ├── .env                                  # Variáveis de ambiente
    └── .dockerignore                         # Arquivos ignorados no build

modelos/                                      # Modelos adicionais
├── modelo_20251112_treinamento.pkl          # Modelo geral
├── modelo_20251112_treinamento_tipo1.pkl    # Modelo Internação
├── modelo_20251112_treinamento_tipo2.pkl    # Modelo SADT
└── modelo_20251112_treinamento_tipo3.pkl    # Modelo Consulta
```

## 🚀 Uso Rápido

### 1. Treinar Modelos
```bash
# Treinar modelos por tipo de guia com detecção OOV
python treina_por_tipo_guia_oov.py 20251112_treinamento.csv
```

### 2. Fazer Predições
```bash
# Usar preditor inteligente
python predizer_inteligente.py guias.csv

# Predição via JSON
python predizer_json.py dados.json
```

### 3. API REST
```bash
# Iniciar servidor
python run_api.py
# ou
./start_api.sh

# Testar
curl http://localhost:8010/health
```

### 4. Docker (API + Interface Web)
```bash
# Build e start (API + Interface Web)
docker-compose up -d

# Acessar
# - Interface Web: http://localhost:8000
# - API REST: http://localhost:8010

# Ver logs
docker-compose logs -f

# Parar tudo
docker-compose down
```

### 5. Interface Web para Gestão de Modelos
```bash
# Já incluída no Docker Compose!
# Acesse: http://localhost:8000

# Ou rode localmente:
cd web/
php -S localhost:8000
```

## 📡 Endpoints da API

- `GET /` - Informações da API
- `GET /health` - Status do serviço
- `GET /modelos` - Lista modelos disponíveis
- `POST /predizer` - Predição individual ou em lote
- `POST /predizer/batch` - Predição em lote otimizada

## 🎯 Tipos de Guia Suportados

1. **Internação** (tipo 1)
2. **SADT** (tipo 2)
3. **Consulta** (tipo 3)
4. **Honorários** (tipo 4)
5. **Odonto** (tipo 5)

## 🔍 Características Especiais

- **Detecção OOV (Out-of-Vocabulary)**: Identifica e penaliza códigos nunca vistos no treinamento
- **Modelos Específicos**: Um modelo treinado para cada tipo de guia
- **API REST**: Integração fácil via HTTP
- **Docker Ready**: Containerização completa
- **Predição em Lote**: Otimizado para grandes volumes

## 📊 Formato de Entrada (JSON)

```json
{
  "protocolo": 123456,
  "tipo_guia": 3,
  "id_convenio": 4,
  "cod": 10101012,
  "quantidade": 1,
  "tipo_atendimento": 0
}
```

## 📈 Formato de Saída

```json
{
  "protocolo": 123456,
  "tipo_guia": "Consulta",
  "analise_procedimentos": [
    {
      "id_procedimento": "PROC-001",
      "cod": "10101012",
      "risco": 0.15
    }
  ],
  "resultado": {
    "media": 0.15,
    "maximo": 0.15,
    "risco": "baixo",
    "predicao": "aprovado",
    "threshold": 0.77
  },
  "tempo_processamento_ms": 45.23
}
```

## 🛠️ Tecnologias

- Python 3.8+
- XGBoost
- scikit-learn
- pandas
- Flask (API)
- Docker

## 📝 Notas

- Modelos OOV (_oov.pkl) são priorizados por incluírem tratamento de códigos desconhecidos
- Use sempre ambiente virtual para desenvolvimento
- Logs são salvos na pasta `logs/`
- Modelos mais recentes: 12/11/2025

## 🔒 Segurança

- Arquivo `.env` contém credenciais (não versionado)
- API rodando na porta 8010
- CORS habilitado para desenvolvimento

---

**Última atualização**: 01/12/2025
