Pular para o conteúdo
legisla.bsb.br
Playbook 04 v0.2

Consumir o corpus do legisla.bsb.br

Como um agente lê o corpus já estruturado deste site — índice JSON, espelhos markdown por norma e âncoras por dispositivo — sem raspar HTML.

Atualizado em 18 de agosto de 2026 · versão .md para agentes

Diferente de um índice de links, este site hospeda um corpus estruturado: normas distritais já segmentadas dispositivo a dispositivo, com situação e link para a fonte oficial. Para os temas cobertos, é o caminho mais rápido.

Cobertura atual: saúde, educação e segurança pública — legislação distrital. Consulte o mapa de cobertura para o estado exato.

Descobrir o acervo

Um único pedido devolve o índice completo (metadados, sem o texto integral):

GET https://legisla.bsb.br/normas.json
{
  "gerado_em": "2026-08-18",
  "total": 207,
  "temas": { "saude": 50, "educacao": 99, "seguranca": 60 },
  "normas": [
    {
      "id": "lei-5321-2014",
      "titulo": "Lei nº 5.321/2014",
      "tipo": "lei",
      "ano": 2014,
      "situacao": "alterada",
      "temas": ["saude"],
      "ementa": "Institui o Código de Saúde do Distrito Federal.",
      "dispositivos": 1058,
      "url": "https://legisla.bsb.br/normas/lei-5321-2014/",
      "markdown": "https://legisla.bsb.br/normas/lei-5321-2014.md",
      "fonte_url": "https://www.sinj.df.gov.br/sinj/Norma/76331/..."
    }
  ]
}

Ler uma norma

Cada norma tem um espelho markdown — texto puro, sem HTML para raspar:

GET https://legisla.bsb.br/normas/<id>.md

O markdown traz os metadados no topo e os dispositivos com o rótulo oficial, marcando os revogados. A página HTML equivalente é https://legisla.bsb.br/normas/<id>/.

Citar um dispositivo

Cada dispositivo tem âncora estável na página da norma:

https://legisla.bsb.br/normas/lei-5321-2014/#art-5_par-2_inc-2

O padrão do id acompanha a hierarquia: art-5, art-5_par-2, art-5_par-2_inc-2, art-1_par-unico.

Mas a citação de autoridade é a fonte oficial. Use o fonte_url (SINJ-DF) na resposta ao usuário; a âncora deste site serve para leitura e conferência. Veja o Playbook 03.

Campos e vocabulário

Campo Valores
tipo lei, lei_complementar, lei_organica, decreto, portaria, resolucao, instrucao_normativa
situacao (da norma) vigente, alterada, revogada, suspensa
vigente (do dispositivo) true / false — um dispositivo revogado dentro de norma vigente tem false
temas saude, educacao, seguranca (uma norma pode ter mais de um)

A distinção entre situacao da norma e vigente do dispositivo é o detalhe que mais evita erro: o Código de Saúde está alterado (vigente), mas dezenas de dispositivos dele estão revogados.

Perguntar em linguagem natural (demonstração)

Existe uma API de pergunta-resposta com IA 100% local, ligada apenas durante demonstrações:

POST https://perguntar.legisla.bsb.br/perguntar
Content-Type: application/json
{"pergunta": "..."}

Responde em SSE: status → fontes → delta* → fim. Fora das demonstrações, o endpoint fica offline por desenho — o site continua funcionando normalmente. Não dependa dele; use normas.json e os espelhos .md.

Identifique-se: o User-Agent padrão do Python é bloqueado

O site fica atrás de CDN, e a proteção contra bots barra assinaturas conhecidas. Verificado em produção:

User-Agent Resposta
Python-urllib/3.x (padrão do urllib) 403
curl/8.x 200
GPTBot, ClaudeBot 200
Qualquer UA próprio identificado 200

Ou seja: defina um User-Agent. Em Python:

req = urllib.request.Request(url, headers={"User-Agent": "meu-agente/1.0 (+contato)"})

Um 403 aqui não significa que o recurso não existe — significa que você não se identificou. Vale a mesma lição para as fontes oficiais: o Planalto derruba a conexão com UA de robô, e ANVISA e ANEEL respondem 403 (ver os playbooks 02 e 06).

Etiqueta

O site é estático e leve, mas seja educado: prefira normas.json (um pedido) a varrer páginas HTML, e cacheie o que baixar. Todo o conteúdo é texto de norma — domínio público (art. 8º, IV, Lei federal nº 9.610/1998).

Histórico de versões

Servimos apenas a versão corrente. Se você citou uma versão anterior deste método, é aqui que descobre o que mudou desde então — e em /metodologia.json há a mesma informação em JSON, com uma impressão digital do conteúdo para detectar mudança automaticamente.

  1. v0.2

    Documenta que o User-Agent padrão do Python leva 403 na CDN deste site: um 403 não significa recurso inexistente, significa cliente não identificado.

  2. v0.1

    Publicação inicial: índice JSON, espelhos markdown por norma e âncoras por dispositivo.