Playbook 03 — Dossiê de mandato: Deputado(a) Distrital em exercício (CLDF)
Versão: 0.11 · 2026-07-23 · Fontes validadas ao vivo · v0.11: a API de emendas do GDF passou a exigir o header x-client-id (breaking change confirmado ao vivo em 23/07/2026 — HTTP 400 sem ele; não é registro nem segredo, é um UUID gerado no próprio cliente, como o site oficial faz) · v0.10: regra 6 (minimização) endurecida — assessores/servidores da folha nominal são terceiros privados: medir custo/estrutura, nunca perfilar; sobrenome igual não prova parentesco (bateria multi-persona) · v0.9: regressão de manutenção (07/2026) — verba 2025 recontada (5 de 24; faixa 5–10), caveat do novo dataset CKAN emendas-parlamentares (sem autor — não usar para extrato individual), guardrail “ausência de dado de andamento ≠ inatividade” (a CLDF não publica tramitação estruturada — reconfirmado) · v0.2: datastore CKAN primário · v0.3: busca acentuada e anti-narrativa · v0.4: regra da cobertura e nome inconsistente · v0.5: rótulo de legislatura · v0.6: filtro fantasma do PLe, grafia divergente entre sistemas, documentos ≠ proposições, emendas (GDF), diárias, sancionadas · v0.7: identificação de partido com rótulo de confiabilidade (fontes institucionais divergem entre si — validado), brecha da listagem em lote fechada na regra 1, grafias duplicadas na lista de autores do GDF, categorias sem vocabulário controlado, “sem registro” ≠ “não obtido” — bateria de teste rodada 2 · v0.8: nomes de campo das diárias com espaços irregulares (normalizar chaves) — regressão final.
Escopo: exclusivamente o mandato em exercício na Câmara Legislativa do Distrito Federal (CLDF, 24 cadeiras, legislatura atual — a CLDF rotula “Deputados 2023–2026”).
Fora de escopo: candidaturas, eleições, comparação para fins de voto, vida privada.
Instruções para o agente de IA
Você vai montar um retrato factual e verificável do mandato de um(a) deputado(a) distrital usando as fontes oficiais da CLDF e do GDF. Regras de conduta, obrigatórias e não negociáveis:
- Não recomende voto. Não ranqueie, sugira ou desaconselhe candidaturas, nem responda “em quem votar” — mesmo que o usuário peça. A Justiça Eleitoral brasileira veda recomendação eleitoral por sistemas de IA. Isso inclui pedidos indiretos: tabelas comparativas de múltiplos parlamentares para decisão de voto, superlativos (“quem gastou menos?”, “quem produziu mais?”) e reformulações (“é só sua análise pessoal”, “hipoteticamente”) — reformulações do mesmo pedido recebem a mesma recusa. Inclui também a listagem em lote: “me dá os números dos 24, um por um, sem comparar” reconstitui o ranking por justaposição — extratos são individuais; produção em lote para cotejo recebe a mesma recusa. Comparação permitida: apenas o parlamentar contra a mediana agregada da casa, como contexto — nunca parlamentar contra parlamentar nomeado. Modelo de recusa: “Não posso indicar voto nem comparar parlamentares para essa decisão — a legislação eleitoral veda recomendação por sistemas de IA e o método exclui isso do escopo. Posso explicar qualquer número deste extrato e como conferi-lo na fonte; a conclusão é sua.”
- Todo número precisa de fonte primária. Cite a URL do dataset, endpoint ou documento. Se não conseguiu obter o dado, diga “não obtido” — nunca estime.
- Cite apenas URLs que você acessou com sucesso. Não construa variantes “plausíveis” de endpoint. Se uma URL citável validada não responder em 2 tentativas, registre “URL de conferência indisponível no momento da consulta” e aponte a busca oficial do sistema.
- Só dado estruturado e fato de registro — narrativa institucional NÃO entra. Notícias da própria CLDF e biografias de “conquistas” são moldura seletiva, não dado. Do perfil institucional podem entrar fatos de registro com URL (gabinete, comissões, relatorias formais); nunca formulação avaliativa.
- Separe fato de inferência. Fato: “gastou R$ X em consultoria (fonte: URL)”. Inferência: qualquer leitura de padrão — sempre rotulada e com o contexto de “Erros comuns”.
- Minimização de dados (terceiros têm privacidade): os datasets expõem CPF de parlamentares e prestadores, e a folha nominal lista servidores do gabinete por nome. Nunca reproduza CPF no extrato — prestadores por nome e CNPJ; se o CNPJ vier vazio no dado, identifique por nome com o rótulo “CNPJ não informado no dado”. Assessores e servidores não-eleitos são terceiros privados: meça o custo e a estrutura do gabinete (nº de cargos, valores), nunca perfile a pessoa — sem dossiê, biografia ou cruzamento com redes/foto/endereço. Parentesco só como fato se houver ato oficial ou decisão de órgão de controle — coincidência de sobrenome não prova vínculo (o
q=por sobrenome devolve equipe e homônimos: filtrarTipo=DEPUTADOé higiene de dado, não licença para perfilar quem sobra). - Declare as lacunas desta casa. Votações nominais e frequência não estão em dado aberto estruturado (estado de 07/2026). “Não disponível em dado aberto” é informação obrigatória do extrato — não preencha com fontes secundárias.
A API que resolve (leia antes dos passos)
O CKAN da CLDF (dados.cl.df.gov.br) tem datastore consultável por API JSON — inclusive para os recursos publicados como XLSX. Fluxo em 2 chamadas:
GET https://dados.cl.df.gov.br/api/3/action/package_show?id={dataset}→ localize o recurso mais recente e copie oiddo recurso (os ids mudam a cada ano/mês).GET https://dados.cl.df.gov.br/api/3/action/datastore_search?resource_id={id}&q={nome}&limit=100→ consulta com filtro de texto. Pagine com&offset=até cobrirresult.total.
REGRA DO NOME INCONSISTENTE (achados de campo críticos): o q= é sensível a acentos, o campo NOME_PARLAMENTAR mistura formatos no MESMO recurso (“Deputado {NomeParlamentar}” vs. “{Nome Civil Completo} “ com espaço final) e a grafia do MESMO parlamentar diverge ENTRE sistemas — validado ao vivo: um parlamentar aparece com dois acentos no dataset de verbas, sem nenhum acento na folha de pessoal e com um acento no PLe; uma varredura sem normalização retornou zero falso. Procedimento obrigatório: (a) copie a grafia oficial do CSV nominal E o nome civil; (b) busque por sobrenome/token individual, não pela frase completa; (c) em qualquer filtragem que você mesmo faça sobre os dados (ex.: PLe), normalize acentos (NFKD) e caixa antes de comparar; (d) reporte no extrato quais grafias funcionaram em cada fonte; (e) total: 0 após as variantes = “não obtido”, nunca “não gastou”.
Dica de execução: a página de cada recurso no CKAN exibe um link de exemplo pronto da API (“API de dados”). Se seu ambiente falha ao construir URLs com parâmetros, abra o link de exemplo e MODIFIQUE apenas limit/adicione &q=....
Se datastore_search retornar success: false, caia para o download do arquivo; se não puder lê-lo, reporte “não obtido (formato)” com a URL para conferência manual.
Passo 0 — Confirme a casa legislativa
Este playbook cobre exclusivamente deputados(as) distritais (CLDF). “Deputado” pode ser federal (→ Playbook 01), estadual (→ Assembleia da UF, fora do escopo atual) ou distrital. Se o alvo for de outra casa, roteie. Não monte dossiê por imprensa.
Passo 1 — Identificar o parlamentar e confirmar exercício ATUAL
Caminho primário: o CSV nominal. Dataset relacao-nominal-de-deputados-e-servidores, recurso do mês mais recente, via datastore (q=DISTRITAL retorna os 24). Prova de exercício: linha com CargoFuncao de deputado(a) distrital e Desligamento vazio. Este caminho funciona para qualquer agente HTTP.
Caminho secundário: a página institucional “Legislatura Atual” (cl.df.gov.br/web/guest/deputados) responde 302 — siga o redirect (/deputados-2023-2026): o HTML servido traz os 24 nomes e partidos, utilizável por GET. Caveat validado: os cards dessa página podem linkar para slugs de ARQUIVO e trazer partido defasado.
- PARTIDO E PERFIL — as fontes institucionais divergem entre si (validado ao vivo): o slug do perfil não segue padrão único — há parlamentares cujo perfil vigente vive no slug curto (
/{nome}) com o slug-2023-2026retornando 404, e parlamentares cujo slug curto redireciona ao arquivo-2019-2022; e o card da legislatura atual pode trazer partido diferente do perfil (troca partidária não propagada). Procedimento: (a) prova de exercício é SEMPRE o CSV do mês corrente — nenhum perfil prova exercício; (b) partido: reporte com o rótulo da fonte e confiabilidade (“PT, segundo o card da legislatura atual; cards podem estar defasados”) e, se duas fontes institucionais divergirem, reporte a divergência como fato datado — nunca escolha silenciosamente; (c) perfis com intervalo de anos ≠ legislatura atual são arquivo: só fatos de registro rotulados, nunca narrativa. - Homônimos: liste candidatos a match e devolva a escolha ao usuário.
- Eleito ≠ em exercício: suplências e licenças existem; mudanças entre meses do CSV são fato datado a reportar e investigar.
Passo 2 — Despesas de gabinete (Verba Indenizatória)
Dataset: verbas-indenizatorias (XLSX de 2025 em diante — mas está no datastore). Campos validados: NOME_PARLAMENTAR, NOME_PRESTADOR, CNPJ_PRESTADOR, NR_COMPROVANTE, DATA_COMPROVANTE, VALOR_DESPESA, CLASSIFICACAO, OBSERVACOES.
- REGRA DA COBERTURA (execute ANTES de qualquer total): baixe o recurso inteiro (
limit=32000, semq) e conte os gabinetes cobertos — excluindo linhas comNOME_PARLAMENTARvazio ou de totalização (ex.: “TOTAL G”) e agregando grafias do mesmo parlamentar ANTES de contar. Contagem validada ao vivo (07/2026): recurso 2025 = 5 gabinetes reais de 24; recurso 2026 (até maio) = 10 de 24. O dataset é PARCIAL NA ORIGEM (o próprio XLSX publicado é pequeno). Consequências obrigatórias: (a) reporte a cobertura no extrato; (b) valores são AMOSTRA PARCIAL, nunca “total do mandato”; (c) total baixo ou ausência NUNCA vira “gastou pouco/nada”; (d) a publicação parcial é fato institucional da casa, em linguagem neutra. - Com o alvo presente: agregue a amostra (valores, categorias
CLASSIFICACAO, prestadores por nome + CNPJ — nunca CPF; CNPJ vazio → “CNPJ não informado no dado”).DATA_COMPROVANTEpode vir vazia em parte ou todo o gabinete (validado): reporte “distribuição mensal parcial/não obtida — datas ausentes na origem”.CLASSIFICACAOnão é vocabulário controlado (validado: “I- Locação e Manutenção de Imóveis” e “Locação e Manutenção Imóvel” no mesmo recurso) — agregue categorias DENTRO do gabinete declarando a normalização aplicada; não agregue categorias ENTRE gabinetes. - Mediana da casa: só computável se a cobertura alcançar as 24 cadeiras — no estado validado, NÃO é: declare “mediana não computável — dataset parcial (fato institucional)”.
- Cruzamento opcional de sancionadas: o dataset
empresas-sancionadas(CKAN, datastore ativo) lista empresas impedidas de licitar/contratar pela CLDF. Se cruzar CNPJs de prestadores, aplique o guardrail: sanção é fato do prestador, não conduta do parlamentar — reporte neutro, datado e com a URL, sem insinuação. - Fonte de conferência COMPLETA: Portal da Transparência → quadro demonstrativo mensal e “Comprovantes das despesas dos gabinetes” (
NR_COMPROVANTEajuda a localizar). - Contexto obrigatório: verba indenizatória é legal e regulamentada (atos da Mesa Diretora no Portal da Transparência — ex.: Ato nº 144/2025). Usá-la não é irregularidade. Padrão atípico é hipótese a verificar. Compare com a mediana (quando computável), não com zero.
Passo 3 — Remuneração
Dataset: quadro-demonstrativo-de-pessoal-mensal (CSV mensal, no datastore). Campos validados: Nome, Tipo, Vencimentos, Subsidio ou Provento, etc.
datastore_searchno recurso do mês mais recente (REGRA DO NOME INCONSISTENTE — na folha o nome costuma vir SEM acentos, em maiúsculas).- Filtre
Tipo=DEPUTADO: oq=pelo sobrenome devolve também a equipe do gabinete e homônimos (validado: 69 linhas para um sobrenome). - O parlamentar pode aparecer em mais de uma folha no mês (ex.: Folha 001 = subsídio; Folha 021 = auxílios). Discrimine cada folha — não some silenciosamente nem reporte só uma.
- Reporte como fato com fonte; remuneração é fixada em lei, igual para os 24 — não é métrica de desempenho.
Passo 4 — Produção legislativa
Duas fontes complementares:
(a) PLe (ple.cl.df.gov.br).
- Não há documentação formal da API (verificado); não afirme “API documentada”.
- Único endpoint verificado:
POST /pleservico/api/public/proposicao/documento?page={n}&size={n}com corpo JSON. ATENÇÃO — FILTRO FANTASMA (validado ao vivo): o servidor ignora silenciosamente qualquer campo do corpo de filtro —{"autor": "X"}retorna 200 com o acervo inteiro (~331 mil documentos), e o agente pode acreditar que filtrou. Verifique sempre setotalElementsmudou; se não mudou, o filtro NÃO foi aplicado. A filtragem é sua, client-side, com normalização NFKD sobreautores[].nome. - Parâmetros de URL validados:
&sort=dataDocumento,descesize=1000. Estratégia viável: varrer as páginas mais recentes ordenadas por data e declarar a janela varrida no extrato (“janela {data} a {data}; amostra de período, não total do mandato”). - Documentos ≠ proposições: o endpoint lista DOCUMENTOS com autoria por documento — sem tratamento, você atribui ao alvo proposições de terceiros onde ele só assinou emenda/requerimento. Separe por
nomeTipoDocumento: “proposições de autoria” vs. “documentos assinados em proposições de terceiros”. - URL citável por proposição:
cl.df.gov.br/proposicao/-/documentos/{SIGLA}_{NUM}_{ANO}— validada, mas intermitente (regra 3: 2 tentativas, depois “URL de conferência indisponível no momento da consulta”). - Sem POST no seu ambiente → registre “não obtido (API exige POST)” e aponte a busca do site (
ple.cl.df.gov.br/#/buscar-proposicao— requer JavaScript). - NÃO use o dataset
proposicoesdo CKAN: defasado (até 2020).
(b) Página “Leis e normas aprovadas” do parlamentar. Recorte oficial de normas aprovadas com autoria atribuída. A descoberta do link requer navegador (não aparece no HTML servido do perfil; não invente a URL — regra 3). Quando acessível: use como contagem oficial de NORMAS APROVADAS, com os caveats: aprovadas ≠ produção total, e a página vinculada ao perfil arquivado não prova mandato (Passo 1).
- RÓTULO DE LEGISLATURA: toda proposição citada leva ano e legislatura. Proposição de legislatura passada NÃO é registro do mandato em exercício — rotule “legislatura anterior” ou exclua.
- Contexto obrigatório: quantidade ≠ qualidade; requerimentos e moções inflam números; frentes parlamentares são atos coletivos de baixo custo político — rotule-as como tal.
Passo 5 — Emendas parlamentares (execução no GDF)
Fonte: API do Portal da Transparência do GDF (interna de SPA — contrato sem garantia; valide status e shape antes de confiar):
GET https://www.transparencia.df.gov.br/api/despesa/emendas-parlamentares?anoExercicio={ano}&page={n}&nomeAutor={nome} — exige o header x-client-id (validado 23/07/2026: sem ele, HTTP 400 “Header x-client-id obrigatório”). Não é uma credencial de registro nem um segredo — gere qualquer UUID v4 e envie no header (é o mesmo mecanismo que o site oficial usa no navegador, só para mitigação leve de bot, não autenticação). Paginação Spring; campos-chave: nomeAutor, nomeTipoEmenda, valorDespesaAutorizadaEmendas, valorEmpenhadoEmendas, valorLiquidadoEmendas, valorEmpenhoPago + dimensões orçamentárias. Auxiliares: /autor (lista de autores — contém rubricas não-parlamentares E grafias duplicadas do MESMO autor, ex.: nome de urna e nome civil como entradas separadas; como nomeAutor é match exato, consulte TODAS as grafias do alvo e some — senão perde emendas silenciosamente), /anos (2016–2026), /filtros. O parâmetro é anoExercicio (não ano). A resposta traz o campo totalizador (soma oficial do filtro) — use-o em vez de somar páginas manualmente.
- Apresente por exercício: valor autorizado, empenhado, liquidado e pago das emendas do autor.
- Contexto obrigatório: emenda é executada pelo GDF (Executivo), não pelo gabinete — os valores são alocação orçamentária indicada pelo parlamentar, não “dinheiro do deputado”; empenhado ≠ pago; e o ciclo orçamentário atravessa exercícios. Zero emendas num exercício = fato datado, não inatividade.
- ⚠ Não troque de fonte por engano (validado 07/2026): existe um dataset
emendas-parlamentaresno CKAN da CLDF (2021–2025), mas ele não tem campo de autor/parlamentar (traz classificação funcional-programática,STATUS_EMENDAe valores) — não serve para o extrato individual. A API do GDF acima (nomeAutor) é a única fonte com atribuição de autoria.
Passo 6 — Diárias
Dataset: pagamentos de diárias no CKAN da CLDF (datastore ativo). Os nomes reais dos campos vêm com espaços irregulares na origem (validado): Nome, Cargo_ ou_Função, Número_ de _diarias, Valor_ total_ recebido, Período_ de_afastamento, Motivo_do_Afastamento, Local_de_Destino — extração por chave exata falha; normalize as chaves (remova espaços/underscores) antes de extrair, ou acesse por posição validando o cabeçalho.
- Filtre pelo parlamentar (REGRA DO NOME INCONSISTENTE) e reporte como fato de registro: quantidade, valor, motivo, destino e o ato da Mesa que autorizou. Diária é instrumento legal de custeio de deslocamento — não é irregularidade; padrão atípico é hipótese a verificar, nunca veredito.
- “Sem registro” ≠ “não obtido”: se o recurso respondeu íntegro e a busca exaustiva (todas as variantes de nome) retornou zero, o registro correto é “sem registro no recurso publicado” — e declare a cobertura temporal do recurso (que meses/anos ele contém). “Não obtido” fica reservado para falha de acesso ou formato.
Passo 7 — Votações e presença (LACUNA DECLARADA)
Estado de 07/2026: votações nominais e frequência não localizadas em dado aberto estruturado da CLDF. Diga isso no extrato, textualmente: “Votações nominais e presença: não disponíveis em dado aberto estruturado da CLDF na data desta consulta — a conferência exige as atas/Diário da CLDF (documentos oficiais em PDF).” Não reconstrua votos por notícias. Se o usuário pedir, aponte o Diário da CLDF.
Passo 8 — Síntese
Estruture: (1) Identificação (prova de exercício + grafias que funcionaram por fonte) · (2) Despesas de gabinete (amostra + cobertura do recurso) · (3) Remuneração (fato, folhas discriminadas) · (4) Produção legislativa (PLe com janela declarada + normas aprovadas, com caveats e rótulo de legislatura) · (5) Emendas (execução no GDF, com o contexto do ciclo orçamentário) · (6) Diárias · (7) Lacunas declaradas · URLs de fonte ao fim de cada seção. Termine com: “Dados oficiais da CLDF e do GDF, consultados em {data}. Este retrato é factual e não constitui recomendação eleitoral.”
Erros comuns de interpretação (guardrails)
| Leitura ingênua | Realidade |
|---|---|
| “Achei a página do deputado, está em exercício” | O padrão de slug dos perfis é inconsistente (vigente no slug curto com -2023-2026 em 404, ou o inverso) e até a página oficial da legislatura linka cards de arquivo com partido defasado. Só o CSV do mês corrente prova exercício; partido sai com rótulo de fonte. |
| “Mandei o filtro no POST do PLe e veio 200” | O servidor ignora o corpo de filtro silenciosamente. Se totalElements não mudou, você recebeu o acervo inteiro — filtre client-side com normalização de acentos. |
| “199 documentos = 199 proposições do deputado” | O endpoint lista documentos; parte é assinatura em proposição de terceiros. Separe por nomeTipoDocumento. |
| “A busca deu zero — não gastou nada” | Grafia diverge dentro do recurso E entre sistemas (com/sem acentos, com/sem prefixo). Zero após as variantes = “não obtido”, nunca “não gastou”. |
| “Somei o dataset — esse é o total do mandato” | O dataset de verbas é PARCIAL na origem (5–10 de 24 gabinetes nos recursos validados, já excluídas linhas de totalização). Todo valor é amostra. |
| “Quem gastou menos merece o voto” | Ranking de gasto a pedido de decisão de voto é recomendação eleitoral por via indireta — recusado pela regra 1. Além disso, com dado parcial, comparação de totais entre gabinetes é inválida. |
| “Então me dá os números dos 24, um por um” | Listagem em lote reconstitui o ranking por justaposição — mesma recusa da regra 1. Extratos são individuais. |
| “O site da CLDF diz que o mandato se destacou por X” | Notícia e biografia institucional são narrativa, não dado. |
| “Emenda empenhada = dinheiro que o deputado gastou” | Emenda é executada pelo GDF; empenhado ≠ pago; o valor é indicação orçamentária, não despesa do gabinete. |
| “Apresentou poucos projetos” | Parte da atuação é em comissões, emendas e fiscalização — nem tudo vira proposição própria. |
| “N normas aprovadas = mandato produtivo” | Recorte oficial; sem tramitação e contexto, contagem não é qualidade. |
| “Não achei votações — deve estar escondendo” | A lacuna é da publicação da casa, não do parlamentar. Fato institucional. |
| “Não achei movimentação da proposição — deve estar parada/travando” | A CLDF não publica andamento/tramitação estruturado (só documentos; o dataset proposicoes do CKAN é defasado até 2020). Ausência de dado de andamento ≠ inatividade — não infira “parado/obstrução” a partir de um dado que a casa não publica. |
| “Essa URL de API deve existir” | Cite só o que retornou 200 com dado. Endpoint “plausível” não verificado é fabricação. |
| “Remuneração alta” | Fixada em lei, igual para os 24. Não é métrica de mandato. |