File size: 6,337 Bytes
4b8596d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# 🌐 Integração com Portal da Transparência
**Status**: ✅ Totalmente Implementada
**Modo de Operação**: Híbrido (API Real + Demo)
## 📋 Visão Geral
O Cidadão.AI possui integração completa com o [Portal da Transparência](https://www.portaldatransparencia.gov.br/) do Governo Federal, permitindo análise de dados reais de contratos, despesas, licitações e servidores públicos.
## 🔑 Modos de Operação
### 1. **Modo Produção** (Com API Key)
- Acessa dados reais e atualizados
- Análise de contratos de múltiplos órgãos
- Rate limiting inteligente (90 req/min)
- Cache de 1 hora para otimização
### 2. **Modo Demo** (Sem API Key)
- Dados sintéticos para demonstração
- Funcionalidade completa do sistema
- Indicação clara "[DEMO]" nos resultados
- Ideal para testes e desenvolvimento
## 🚀 Como Configurar
### Passo 1: Obter API Key (Opcional)
1. Acesse https://www.portaldatransparencia.gov.br/api-de-dados
2. Clique em "Cadastre-se"
3. Preencha o formulário
4. Receba a chave por email
### Passo 2: Configurar Ambiente
#### Opção A: Arquivo `.env` (Recomendado)
```bash
# .env
TRANSPARENCY_API_KEY=sua-chave-aqui
```
#### Opção B: Variável de Ambiente
```bash
export TRANSPARENCY_API_KEY=sua-chave-aqui
```
#### Opção C: Docker
```bash
docker run -e TRANSPARENCY_API_KEY=sua-chave-aqui ...
```
### Passo 3: Verificar Configuração
```bash
# Executar aplicação
python app.py
# Verificar logs
# Com API key: "Using real Portal da Transparência data"
# Sem API key: "Portal da Transparência API key not configured, using demo data"
```
## 🔧 Configurações Avançadas
### Parâmetros Configuráveis
```python
# src/core/config.py
transparency_api_base_url: str = "https://api.portaldatransparencia.gov.br"
transparency_api_timeout: int = 30 # segundos
transparency_api_max_retries: int = 3
transparency_api_rate_limit: int = 90 # requests/minuto
transparency_cache_ttl: int = 3600 # 1 hora
```
### Endpoints Disponíveis
- `/api-de-dados/contratos` - Contratos públicos
- `/api-de-dados/despesas` - Despesas executadas
- `/api-de-dados/convenios` - Convênios
- `/api-de-dados/licitacoes` - Processos licitatórios
- `/api-de-dados/servidores` - Servidores públicos
## 📊 Uso no Sistema
### Cliente API (`src/tools/transparency_api.py`)
```python
from src.tools.transparency_api import TransparencyAPIClient, TransparencyAPIFilter
# Cliente detecta automaticamente se há API key
async with TransparencyAPIClient() as client:
# Filtros de busca
filters = TransparencyAPIFilter(
codigo_orgao="26000", # Ministério da Saúde
ano=2024,
mes=1,
valor_inicial=100000
)
# Buscar contratos
response = await client.get_contracts(filters)
# Response inclui metadados
if response.is_demo:
print("Usando dados de demonstração")
else:
print(f"Dados reais: {response.total_records} contratos")
```
### Análise de Anomalias
O sistema analisa automaticamente:
- **Anomalias de Preço**: Z-score > 1.5
- **Concentração de Fornecedores**: > 25% do valor total
- **Padrões Temporais**: Gastos suspeitos no fim do exercício
- **Contratos Duplicados**: Similaridade > 85%
## 🔒 Segurança
### Proteção da API Key
- Nunca é logada ou exposta
- Armazenada como `SecretStr` (Pydantic)
- Não incluída em mensagens de erro
- Não enviada ao frontend
### Headers de Autenticação
```python
headers = {
"chave-api-dados": "***" # Valor mascarado nos logs
}
```
## 📈 Métricas e Monitoramento
### Cache Performance
```python
# Métricas rastreadas
cache_hits: Counter
cache_misses: Counter
api_calls: Counter
api_errors: Counter
response_time: Histogram
```
### Logs Detalhados
```
INFO: Fetching contracts from Portal da Transparência (real data)
INFO: Cache hit for key: contracts_26000_2024_1
INFO: Found 15 anomalies in 127 contracts
```
## 🚨 Tratamento de Erros
### Rate Limiting
```python
# Aguarda automaticamente quando necessário
WARNING: Rate limit reached, waiting 15.3 seconds
INFO: Resuming after rate limit wait
```
### Fallback Automático
```python
# Se API falhar, usa modo demo
ERROR: Portal da Transparência API error: 503
WARNING: Falling back to demo data
```
## 🧪 Testando a Integração
### Modo Demo (Sem API Key)
```bash
# Remove a variável temporariamente
unset TRANSPARENCY_API_KEY
python app.py
# Acesse http://localhost:7860
# Resultados mostrarão "[DEMO]"
```
### Modo Produção (Com API Key)
```bash
# Configure a chave
export TRANSPARENCY_API_KEY=sua-chave-aqui
python app.py
# Resultados serão dados reais
```
### Verificar Endpoints
```bash
# Health check
curl http://localhost:7860/health
# Investigar com Zumbi
curl -X POST http://localhost:7860/api/agents/zumbi/investigate \
-H "Content-Type: application/json" \
-d '{"orgao": "26000", "ano": 2024}'
```
## 📊 Exemplos de Resposta
### Modo Produção (Dados Reais)
```json
{
"status": "completed",
"source": "portal_transparencia_api",
"data_freshness": "2024-01-15T10:30:00Z",
"contracts_analyzed": 342,
"anomalies_found": 27,
"confidence": 0.89,
"cache_hit": false
}
```
### Modo Demo
```json
{
"status": "completed_fallback",
"source": "demo_data",
"warning": "[DEMO] Using demonstration data",
"contracts_analyzed": 10,
"anomalies_found": 3,
"confidence": 0.75,
"demo_mode": true
}
```
## 🔄 Fluxo de Dados
```mermaid
graph LR
A[Request] --> B{API Key?}
B -->|Sim| C[Portal da Transparência API]
B -->|Não| D[Gerar Dados Demo]
C --> E{Cache?}
E -->|Hit| F[Retorna Cache]
E -->|Miss| G[Busca API]
G --> H{Rate Limit?}
H -->|OK| I[Processa Dados]
H -->|Excedido| J[Aguarda]
J --> G
D --> K[Dados Sintéticos]
I --> L[Análise de Anomalias]
K --> L
F --> L
L --> M[Retorna Resultado]
```
## 📚 Recursos Adicionais
- [Documentação da API](https://www.portaldatransparencia.gov.br/swagger-ui.html)
- [Dicionário de Dados](https://www.portaldatransparencia.gov.br/pagina-interna/603578-dicionario-de-dados)
- [Termos de Uso](https://www.portaldatransparencia.gov.br/pagina-interna/603421-termos-de-uso)
---
**Nota**: Este sistema foi desenvolvido para promover transparência e accountability no uso de recursos públicos. |