mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.3 KiB
6.3 KiB
POC do provedor LexML no SGVP (explicado de forma simples)
Pense no LexML como uma grande biblioteca que quer receber copias digitais das leis que voce publica no SGVP. O SGVP ja fala esse idioma (OAI-PMH); basta preencher alguns formularios e mostrar o endereco certo para o coletor do LexML.
Escopo rapido da POC
- SGVP entrega dados em formato LexML sem programacao extra.
- Basta preencher dados da Casa, cadastrar provedor/publicador e ter ao menos uma norma.
- Endpoint
.../sistema/lexml/oairesponde aos verbosIdentifyeListRecords.
Quem e quem (em termos bem simples)
- SGVP: o site da Casa que guarda as normas.
- LexML: a biblioteca nacional que vai buscar os dados.
- Casa Legislativa: dados institucionais (nome, cidade, UF, site, email).
- Tipo de Norma: o "tipo de livro" (lei, resolucao, regimento etc.).
- Norma Juridica: o "livro" com numero, ano, data, texto e resumo.
- Provedor / Publicador: cartoes de visita fornecidos pelo time do LexML (ids e XML).
Preparacao do ambiente
- SGVP 3.1+ rodando (dev ou staging). Exemplos:
./manage.py runserver 0.0.0.0:8000oudocker-compose -f dist/docker-compose.yml up -d. - Dependencias instaladas:
pip install -r requirements/requirements.txt. - Banco migrado e usuario administrador ativo.
Casa Legislativa.endereco_webe o host usado nos identificadores; configure o mesmo host emALLOWED_HOSTSe nos testes do navegador.
Implantacao passo a passo (modo receita)
- Suba o SGVP: escolha execucao local ou container e confirme acesso ao admin.
- Casa Legislativa: em
Sistema -> Casa Legislativa, preencha nome, sigla, municipio, UF, endereco_web e email. - Esfera Federacao: em
Sistema -> Parametros -> Configuracoes da Aplicacao, escolhaM(Municipal) ouE(Estadual). - Tipos de Norma Juridica: em
Tabelas Auxiliares -> Norma Juridica -> Tipo de Norma Juridica, ajuste o campoEquivalente LexML(ex.:lei,lei.organica,resolucao,regimento.interno). - Norma Juridica de exemplo: cadastre ao menos uma norma com
numero,ano,data,esfera_federacao, tipo com equivalente LexML,ementae, se possivel,texto_integral(PDF ou DOC). O formulario gravatimestampautomaticamente; para dados antigos, abra e salve de novo. - Provedor: em
Sistema -> LexML -> Provedor, preenchaid_provedor,nome, responsavel, email e cole o XML que o LexML enviou. O SGVP valida contrasapl/templates/lexml/schema.xsde aponta erros de schema. - Publicador: em
Sistema -> LexML -> Publicador, preenchaid_publicador,nome,sigla,tipoe responsavel. - Teste interno: acesse
http://localhost:8000/sistema/lexml/oai?verb=IdentifyeListRecords(commetadataPrefix=oai_lexml) para ver se a resposta chega em XML. - Compartilhe a baseURL: envie ao time LexML o
baseURLgerado (o mesmo usado no XML de provedor) para que eles habilitem o coletor externo.
XML de exemplo (ajuste IDs e dominio)
<ConfiguracaoProvedor dataGeracao="2024-01-01T00:00:00">
<Provedor idProvedor="123" nome="Camara Exemplo" tipo="Provedor" baseURL="https://seu.dominio/sistema/lexml/oai">
<Administrador idResponsavel="1" email="contato@dominio.gov.br"/>
<Publicador idPublicador="456" nome="Camara Exemplo" sigla="CE">
<Responsavel idResponsavel="1" email="contato@dominio.gov.br"/>
<Perfil localidade="BR;DF;Brasilia"/>
</Publicador>
</Provedor>
<RepositorioOAILexML baseURL="https://www.lexml.gov.br/oai"/>
<RepositorioOAILexML baseURL="https://seu.dominio/sistema/lexml/oai"/>
<RepositorioOAILexML baseURL="https://seu.dominio/sistema/oai"/>
<RepositorioOAILexML baseURL="https://seu.dominio/oai"/>
<RepositorioOAILexML baseURL="http://seu.dominio/sistema/lexml/oai"/>
</ConfiguracaoProvedor>
Comandos para testar e demonstrar
- Identify:
curl "http://localhost:8000/sistema/lexml/oai?verb=Identify" - ListRecords (padrao):
curl "http://localhost:8000/sistema/lexml/oai?verb=ListRecords&metadataPrefix=oai_lexml&batch_size=10" - ListRecords filtrando por data:
curl "http://localhost:8000/sistema/lexml/oai?verb=ListRecords&metadataPrefix=oai_lexml&from=2023-01-01T00:00:00Z&batch_size=50"
O que aparece no ListRecords:
Itemcom link do conteudo (PDF/HTML) e outroItempara o metadado.DocumentoIndividualcom URN montada a partir da Casa, tipo, data e numero/ano.Epigrafe,Ementae opcionalmenteIndexacao.
Uso diario na rotina LexML
- Cadastre novas normas sempre com
numero,ano,data, esfera e tipo comEquivalente LexML; anexe otexto_integralquando existir. - Se atualizar metadados de normas antigas, salve novamente para atualizar o
timestampque o coletor usa no filtro por data. - Mantenha apenas um provedor e um publicador ativos e corretos; revise o XML sempre que o LexML mandar atualizacao.
- Valide periodicamente chamando
IdentifyeListRecordspara checar disponibilidade externa (use o host oficial, nao apenas localhost). - Se o coletor do LexML reportar falhas, verifique
sapl.loge se oendereco_webesta batendo com o dominio publicado. - Quando trocar certificados/HTTPS, confira se a
baseURLno XML do provedor esta coerente e acessivel.
Roteiro de falas simples (colinha)
- "O SGVP e nosso site. O LexML e a biblioteca. Vamos fazer eles conversarem."
- "Preenchi os dados da Casa e disse se ela e Municipal ou Estadual."
- "Escolhi o tipo de lei e marquei o equivalente LexML, que define como a URN e montada."
- "Cadastrei o Provedor e o Publicador com o XML que o time do LexML enviou; o sistema checa se esta correto."
- "Aqui esta uma norma de exemplo com PDF e resumo."
- "Chamando Identify, o SGVP mostra quem ele e e qual e a baseURL."
- "Chamando ListRecords, vemos o XML LexML com a URN e os links para o conteudo."
- "Esse mesmo endereco pode ser usado pelo coletor do LexML para sincronizar as normas."
Checklist final (confira antes da demo ou producao)
- Casa Legislativa preenchida (nome, sigla, municipio, UF, endereco_web, email).
- Esfera Federacao escolhida em Parametros.
- Tipos de Norma com
Equivalente LexMLdefinido. - Pelo menos 1 Norma com data, numero, ano, esfera e
timestampsalvo. - Provedor e Publicador cadastrados com XML validado.
IdentifyeListRecordsretornando 200 e XML legivel (usando host publico).