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.