# 🌐 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.