radar-parlamentar / radar

Estamos de mudança para o GitLab: https://gitlab.com/radar-parlamentar/radar.
http://radarparlamentar.polignu.org
84 stars 44 forks source link

Interoperabilidade com LexML #273

Open ppKrauss opened 9 years ago

ppKrauss commented 9 years ago

Sugestão de se incluir no SQL função de conversão de ID da norma (ex. Lei) ou proposição (ex. PL) em URN LEX.


Para quem não conhece, o LexML é muito mais do que um "site de busca",

o Projeto LexML, http://projeto.lexml.gov.br/ , definiu uma série de padrões para interoperabilidade

sendo talvez o padrão mais importante, aquele que define a URN LEX para todas as normas e proposições normativas (projetos de Lei) do Brasil.

A proposições legislativas da base de dados do Radar Parlamentar poderiam ter já na base de dados uma expressão parcial das URNs, permitindo com isso:

diraol commented 9 years ago

+1 para a iniciativa, achei muito legal a proposta do Peter ! E acho que dialoga muito com a proposta de termos um webservice!

ppKrauss commented 9 years ago

@diraol Estou pensando numa "arquitetura de microservices" bem ao estilo dx.doi.org para apoiar as URNs e tendo o LexML como resolução federada (não precisamos esperar o governo de São Paulo se organizar para fazer uso das suas URNs visto que são transparentes)... Se quizerem discutir podemos unir esforços. Tem também a possibilidade de interoperar com o pessoal do Diário Aberto (ah e o EuVoto, o Legislando, e outros)... convidemos o @andresmrm para conversar sobre potencial de interoperabilidade com o Radar.

andresmrm commented 9 years ago

Opa! Parece interessante sim. A ideia seria fazer um micro serviço que, a partir do URN, retornasse dados sobre a lei em São Paulo?

ppKrauss commented 9 years ago

@andresmrm os serviços de "ficha catalográfica do documento" ou "ficha da revista" já existem no universo biblioteconômico, com diferentes comportamentos mas todos eles podendo ser descritos como "me passa o ID do documento que eu te passo a URL dele ou umas infos sobre ele".

Como todo "ID público" pode ser considerado uma URN, podemos usar o antigo jargão das URNs (RFC2169) para expressar o comportamento desses microserviços típicos de "resolução de nomes":

Dentro desse modelo podemos entender que diversos outros serviços por aí já realizam "resolução de URN" para diversas URNs... Listei algumas nessa proposta embrionária (veja por exemplo que o Worldcat é um resolvedor de fato para os códigos de revista, os ISSNs). Poderiamos incluir aí a resolução de CEP do Correio, a resolução de CPF da Fazenda, e por aí vai... "Tem ID público? precisa ter URN-resolver associado para se dizer aberto ao público".

Essa arquitetura simples de resolvedores permite que sistemas bem diversos se conversem, se tornem interoperáveis, e façam uso de fato dos padrões já bem estabelecidos de identificação pública das coisas.

andresmrm commented 9 years ago

Me parece uma solução bem boa. =)

Quoting Peter (2015-04-23 08:52:43)

@andresmrm os serviços de "ficha catalográfica do documento" ou "ficha da revista" já existem no universo biblioteconômico, com diferentes comportamentos mas todos eles podendo ser descritos como "me passa o ID do documento que eu te passo a URL dele ou umas infos sobre ele".

Como todo "ID público" pode ser considerado uma URN, podemos usar o antigo jargão das URNs (RFC2169) para expressar o comportamento desses microserviços típicos de "resolução de nomes":

• "URN to URL" (N2L): serviço de redirecionamento de DOI como o realizado pelo dx.doi.org (concatenado ao /DOI).

• "URN to URLs" (N2Ls) e "info": serviço de redirecionamento (ou entrega de dados em JSON, etc.) para uma página de metadados, uma "ficha catalográfica" do documento. A API do DOI faz isso. O serviço de resolução do LexML (concatenando a URN LEX ao www.lex.gov.br/urn/) também é desse tipo.

• ... outros: menos comuns.

Dentro desse modelo podemos entender que diversos outros serviços por aí já realizam "resolução de URN" para diversas URNs... Listei algumas nessa proposta embrionária (veja por exemplo que o Worldcat é um resolvedor de fato para os códigos de revista, os ISSNs). Poderiamos incluir aí a resolução de CEP do Correio, a resolução de CPF da Fazenda, e por aí vai... "Tem ID público? precisa ter URN-resolver associado para se dizer aberto ao público".

Essa arquitetura simples de resolvedores permite que sistemas bem diversos se conversem, se tornem interoperáveis, e façam uso de fato dos padrões já bem estabelecidos de identificação pública das coisas.

— Reply to this email directly or view it on GitHub.*

leonardofl commented 9 years ago

Qual seria o primeiro passo?

ppKrauss commented 9 years ago

Olá! Por conhecidência acabamos de dar o passo-1: https://github.com/okfn-brasil/getlex agora é repo OKBr, está disponível para todos colaborarmos... ;-)

Passo 2: criar uma SQL VIEW que gere a URN LEX. coisa que posso ajudar... Preciso só estudar aqui o seu modelo de dados...

leonardofl commented 9 years ago

Alguém tem alguma outra ideia de onde por isso? Talvez na view do sql seja um tanto quanto escondido... Mas tb não sei em q outro lugar ficaria legal... @ppKrauss pode passar, plz, a regra de formação da URN?

ppKrauss commented 9 years ago

A regra está descrita didaticamente aqui na intro do portal LexML (ver "nomes persistentes") e no projeto getlex posso já deixar os prefixos prontos para facilitar ... Bom, hora de estudar os modelos e adaptar projetos...

MELHOR SOLUCAO: @leonardofl que tal você conseguir algumas amostras de normas da sua base, buscando a correspondência com o link dado pela busca LexML?

Exemplo: select * from modelagem_normalex where id_radar=9 retorna 9;"PLS";"2008";"00104";"Senado";"sen";"FEDERAL";"";"foo" o que corresponde a http://www.lexml.gov.br/urn/urn:lex:br:senado.federal:projeto.lei;pls:2008-03-27;104 e tambem vai funcionar se fizer urn:lex:br:senado.federal:projeto.lei;pls:2008;104.

Quanto os casos da prefeitura eu me preparo aqui para voces, o importante agora é confirmar que as federais estão batendo...

... pelo que percebo vamos precisar de uma tabela auxiliar para mapear por exemplo seu "FEDERAL"+"Senado"+"PLS" em br:senado.federal:projeto.lei;pls. "br:senado.federal:projeto.lei;pls:2008:00104"

Feito (exemplo): select * from modelagem_proposicao_lex where id=9


CREATE VIEW modelagem_proposicao_lex AS
SELECT 
  modelagem_radar2lex(c.esfera,c.nome,sigla) || ':' || p.ano || ';'|| p.numero as urnlex,
  p.*,  
  c.nome,  c.nome_curto,    -- autoridade
  c.esfera,   c.local        -- jurisdição
FROM 
  modelagem_casalegislativa c INNER JOIN  modelagem_proposicao p
  ON p.casa_legislativa_id = c.id;

CREATE TABLE modelagem_prefixoLexml (
   chave_radar text,
   prefixolex text,
   UNIQUE (chave_radar),
   UNIQUE (prefixolex)
   );
   INSERT INTO modelagem_prefixoLexml (chave_radar,prefixolex) VALUES
     ('FEDERAL:Senado:PLS','br:senado.federal:projeto.lei;pls')
     ('...','...');

CREATE FUNCTION modelagem_radar2lex(text,text,text)
  -- 
  -- Converte campos radar em prefixo URN LEX:BR.
  -- SELECT modelagem_radar2lex(esfera,nome,sigla)
  --
  RETURNS text AS
$func$
  SELECT prefixolex FROM modelagem_prefixoLexml WHERE chave_radar=$1||':'||$2||':'||$3;
$func$ LANGUAGE sql IMMUTABLE;
ppKrauss commented 9 years ago

@leonardofl , tá resolvido (!)... Você acha que completar artesanalmente a tabela modelagem_prefixoLexml? Só são 25 registros,

SELECT DISTINCT esfera,nome,sigla
FROM 
  modelagem_casalegislativa c INNER JOIN  modelagem_proposicao p
  ON p.casa_legislativa_id = c.id
ORDER BY 1,2,3;

A resolução municipal tambem nao tem mistério,

(esses aí não existem ainda no LexML, precisa deduzir pelo bom senso)

... se preferir usar a abrev. de nome também ok.

ppKrauss commented 9 years ago

Eu pedi para "completar artesanalmente a tabela": joguei de volta para vocês uns 80% do abacaxi... Colaboração é isso, cada um faz um pouco dentro do tempo que tem ;-)

Estou formalizando melhor a minha colaboração lá pela Wiki, assim fica mais didático e menos perdida a explicação.

leonardofl commented 9 years ago

Oi Peter! Desculpa não acompanhar seu ritmo! Mas ainda te respondo ;)

ppKrauss commented 9 years ago

(ops desculpe apertei botões close/open no celular... )

Eu diria que é o ritmo ou arritmia normal da vida, que funciona a base de pulsos e espasmos esporádicos ;-)
A grande vantagem de se registrar aqui na issues, é que com isso dispensamos a necessidade de sincronia nos nossos "pulsos"... Enquanto estivermos pulsando, não importa se arrítmica e assincronamente, projetos legais como o Radar também manifestarão seus sinais de vida!

PS: o Radar tem planos de captar fundos (e aproveitar as issues discutidas) para um "Radar2"?

leonardofl commented 9 years ago

Não sei oq vc chama de radar2, mas o radar em si tem infinitas possibilidades de evolução. Mas não temos planos no momento de captar fundos, mas não que não fosse uma possibilidade.

Voltando à issue... o banco é gerado automaticamente pelo Django. E desse banco gerado automaticamente é que fazemos o dump. Então o código SQL é resultado, não insumo. Temos que pensar como esse código SQL q vc tá fazendo aí se encaixaria... daríamos um append no SQL obtido pelo dump? Algum outro caminho menos gambiarra?

ppKrauss commented 9 years ago

O termo "um Radar2" foi para isso mesmo, designar um segundo aporte ao projeto ;-) Talvez o potencial de integração/interoperabilidade seja mais um atrativo para esse "radar2": acho que podemos pensar por hora em "provar o conceito" mais do que implementar uma coisa super-bacana... Daí a ideia de gambiarra que você colocou é bem válida.

"Menos gambiarra"? É meio subjetivo, mas talvez isolando a parte do LexML num SQL schema, seja suficiente:

  CREATE SCHEMA lexml;   
  CREATE TABLE lexml.prefixo (...);
  CREATE FUNCTION lexml.radar2lex(text,text,text) ...;
  CREATE VIEW modelagem_proposicao_lex AS SELECT
       lexml.radar2lex(c.esfera,c.nome,sigla) .... ;

Esse SCHEMA lexml pode ficar a cargo de um projeto paralelo, que se responsabiliza pela atualização: o okfn-brasil/getlex. A única peça nova no sistema (a substituir peças antigas) seria então a VIEW... Que acha, fica mais elegante?

diraol commented 9 years ago

Peter, o que o Léo quis dizer com "Menos gambiarra" é que nós não escrevemos SQL no Radar, nós não escrevemos códigos que acessam o banco de dados diretamente, tudo é feito via Django (pelo ORM) [ http://turing.com.br/material/acpython/mod3/django/orm1.html] ​

saulotrento commented 9 years ago

Se for preciso, caso se queira, é possível manter tabelas "não gerenciadas" pelo django no banco de dados, e aí fazer alguma coisa com SQL.

Em 12 de maio de 2015 22:18, Diego Rabatone Oliveira < notifications@github.com> escreveu:

Peter, o que o Léo quis dizer com "Menos gambiarra" é que nós não escrevemos SQL no Radar, nós não escrevemos códigos que acessam o banco de dados diretamente, tudo é feito via Django (pelo ORM) [ http://turing.com.br/material/acpython/mod3/django/orm1.html]

— Reply to this email directly or view it on GitHub https://github.com/radar-parlamentar/radar/issues/273#issuecomment-101475152 .

saulotrento commented 9 years ago

ps. não deixa de ser um pouco gambiarra também, na minha opinião, mas só estou dizendo que é mais ou menos previsto pelo django :)

Em 12 de maio de 2015 22:26, Saulo Trento saulotrento@gmail.com escreveu:

Se for preciso, caso se queira, é possível manter tabelas "não gerenciadas" pelo django no banco de dados, e aí fazer alguma coisa com SQL.

Em 12 de maio de 2015 22:18, Diego Rabatone Oliveira < notifications@github.com> escreveu:

Peter, o que o Léo quis dizer com "Menos gambiarra" é que nós não escrevemos SQL no Radar, nós não escrevemos códigos que acessam o banco de dados diretamente, tudo é feito via Django (pelo ORM) [ http://turing.com.br/material/acpython/mod3/django/orm1.html]

— Reply to this email directly or view it on GitHub https://github.com/radar-parlamentar/radar/issues/273#issuecomment-101475152 .

ppKrauss commented 9 years ago

Hum... puro Django, agora caiu a ficha(!)... ;-) Já usei CakePHP que é similar (framework MVC com scaffolding, etc.)... Nesses frameworks sempre tem como incluir mais MVC-Models, de modo que a sql-view seria um novo model... Mas, como imagino, se a tabela envolve apenas leitura, sem gravação de dados (só Django get's), podemos "enganar" o framework oferecendo uma sql-view com o nome da sql-table (e mudando o nome da tabela original). Uma segunda abordagem, daquelas que dão menos trabalho, seria gerar o código básico das interfaces dessa nova sql-view com o tal django-admin... São chutes...

Sem chutar, a sugestão seria compor por exemplo um webservice (sem DJango!), de uma interface AJAX de modal dialog abrindo com a listagem de leis associadas à votação, seria o caso típico: que tal começar por algo assim?

diraol commented 9 years ago

Outra opção, Peter, sendo bem ousado, será desenvolvermos um "app gérico (e independente)" para o django que faça esse serviço e que futuramente possa ser reutilizado em outros projetos desenvolvidos com django.... Ai quem quiser usar é só "adicionar o app" e utilizá-lo.....

Essa é uma solução muito mais "pensando na comunidade" do que "pensando em resolver o nosso problema da forma mais rápida e fácil possível"....

ppKrauss commented 9 years ago

ok, parece otimo (!)... manda um post aqui depois, a título didático, do que vier a implementar de app.

ppKrauss commented 9 years ago

(reabrindo só para divulgar novidade na imprensa e nas discussões OKBr)

Oi gente, reparei que a iniciativa privada está fazendo uso de nossas iniciativas... Em parte por nossa falta de alinhamento em torno de uma infra-estrutura comum dos projetos (grupos do terceiro setor poderiam cooperar e dividir custos), e nossa falta de alinhamento com padrões interoperabilidade...

O Votenaweb, http://www.votenaweb.com.br/ em parte (a outra parte é expressa pelos jornais) se aproveitou disso e já usou a sugestão de fazer um EuVoto Federal... Enquanto entre nós fechamos portas.

Existe alguém aqui interessado em levar mais adiante essa ideia de interoperabilidade de projetos e integração entre as ONGs?

diraol commented 9 years ago

Peter,

algumas considerações: 1) O pessoal do VoteNaWeb, que eu saiba, não utiliza nossas tecnologias ou qualquer outro Software Livre.

2) Se existe algum grupo e/ou empresa utilizando um Software LIVRE para o desenvolvimento de algum projeto e/ou para oferecer a prestação de serviços a entidades públicas e/ou privadas, eu não vejo o menor problema nisso, desde que as licenças sejam devidamente respeitadas e o código fonte do projeto continue disponível e livre.

3) Infelizmente temos diversos órgãos e instâncias públicas que não conseguem compreender a importância do uso de Softwares Livres no Poder Público, tanto quanto existem diversos movimentos sociais (ONGs ou não) que dizem militar por uma sociedade mais democrática, participativa, livre, colaborativa, não capitalista e etc, mas que em seu dia a dia não praticam isso, utilizando diversos softwares proprietários (sistemas operacionais, softwares de edição de imagem e vídeo, suítes de escritório, etc). Então o buraco é bem mais embaixo.

4) Eu acho ótima a ideia de interoperabilidade de projetos e "integração entre ONGs". Entretanto, não acho que as "ONGs" vão "salvar o mundo". Além disso, nós (PoliGNU/Radar Parlamentar) não somos sequer uma ONG. Nosso projeto é completamente voluntário e tem um caráter educativo na área de Ciência/Engenharia de Computação também, servindo também como "laboratório didático". Gostaria de reforçar que EU não acho que "ganhar dinheiro" seja algo ruim. Gostaria de ver muito mais iniciativas de prestação de serviços (seja a instituições públicas ou não) que se utilizam se Tecnologias Livres e que se apresentam como negócios sustentáveis, que permitem aos envolvidos ganhar dinheiro suficiente para manter a qualidade de vida que desejam. Eu realmente quero que minha carreira profissional se dê ao redor de tecnologias livres e que isso consiga bancar a minha vida.

Por fim, apenas retomo que o grande problema não é uma ONG utilizar SL para vender serviço, mas sim algum órgão público fechar um acordo/parceria/contrato para utilização de software proprietário... isso sim é péssimo, não-produtivo e deveria ser evitado e combatido.

Abs

ppKrauss commented 9 years ago

@diraol Bom dia!

Não sei se houve confusão, não existe atualmente uma ONG ou empresa de software aberto ganhando dinheiro com o VoteNaWeb... O que lembrei é que poderíamos prestar o mesmo serviço (como brasileiros de ONGs e/ou de empresas honestas)... E teríamos pleno potencial de fazer algo superior, dignamente e honestamente, se nos entrosarmos melhor (!)... Meu parecer é de que ao não desenvolvermos projetos integrados (que seriam mais uteis e difíceis de serem ignorados), nos contentando em "ficar na praia", estamos estimulando o oportunismo de espertalhões. É estratégico: ou nos profissionalizamos e nos integramos um pouquinho mais, ou criaremos lacunas perfeitas para oportunismos de sempre.

Pensando mais pragmaticamente, a essa altura, uma resposta simples a esse caso da VoteNaWeb seria oferecer um demonstrativo de horas-desenvolvimento que consumiríamos para fazer desenvolver algo e chegar no mesmo resultado: tenho certeza que não seria de graça, mas que seria 10 ou 100 vezes mais barato... Mesmo para fazer uma estimativa simples dessas, precisaríamos de um pouco mais de integração entre as ONGs e os projetos... Fica por hora a sugestão de um mutirão para estimar horas.

Respondendo por item,

1) O pessoal do VoteNaWeb, que eu saiba, não utiliza nossas tecnologias (...)

Sim, sendo um software fechado não tem como saber se usou ou não, portanto há que se supor que usou (ate que se prove o contrário abrindo o software), a existência de um software publico e um projeto pronto como o EuVoto barateou o processo (dos requisitos ao layout!).... O VoteNaWeb usou também da nossa iniciativa foi a proposta como um todo, a mobilização da demanda, etc. Criamos um mercado que não existia, deveríamos ser os primeiros a serem consultados... a CAPES já vez coisa semelhante ao excluir as editoras nacionais, que criaram o mercado e possuem plena capacidade de atendimento à demanda.

A CAPES poderia estimular a formação de um consórcio, assim como a Câmara poderia estimular empresas e ONGs cooperarem na produção de um software publico melhor.

2) Se existe algum grupo e/ou empresa utilizando um Software LIVRE para o desenvolvimento de algum projeto (...)

sim, concordo, mas não é esse o ponto.

3) Infelizmente temos diversos órgãos e instâncias públicas que não conseguem compreender a importância do uso de Softwares Livres no Poder Público, (...)

Sim, concordo, mas vejo que o contexto era bem legitimo, não precisamos ficar apenas chorando "a posição do buraco"... ;-)

4) Eu acho ótima a ideia de interoperabilidade de projetos e "integração entre ONGs". Entretanto, não acho que as "ONGs" vão "salvar o mundo". (...)

Sem duvida, mas as ONGs podem e devem dar exemplo... Cabe a quem levantou a bandeira dar exemplo e estimular a "nova cultura", que inclui a cultura da interoperabilidade, e de não amarrar as nossas ações ao lobby interno das proprias ONGs... estamos discutindo aqui em público justamente por acreditarmos na transparência, no trabalho das ONGs, nas pessoas que colaboram, etc.

Ganhar dinheiro com software livre é algo que muita gente vem fazendo, a décadas, mesmo não sendo tão evidente no Brasil... Nesse contexto sistemas online (e integração do processo legislativo), tem um exemplo interessante de empresa que usa software aberto, a OpenLegis, fork do SAPL, aparentemente adotado em diversas Câmaras municipais... Modelos de negócio honestos existem vários, assim como modelos saudáveis e produtivos de parcerias das empresas com ONGs e/ou governo.

O problema em questão é a ausência de uma licitação governamental (VoteNaWeb sob grave suspeita) e a ausência de consultas públicas para legitimar requisitos, protocolos de interoperabilidade, etc. ...

leonardofl commented 8 years ago

Integração entre projetos: eu já fui pessoalmente no Vote na Web conversar com eles sobre isso. A proposta era simples pra ambos os lados: utilizar as preferências de voto do internauta no Vote na Web para que ele visse seu posicionamento no Radar. Da parte deles seria só montar um request com os votos do cidadão. Mas na prática eles não demonstraram tanto interesse, ou no mínimo não priorizaram isso.

leonardofl commented 8 years ago

Bom, eu que não ficar insistindo =)

leonardofl commented 8 years ago

Durante o mestrado eu já trabalhei num grande projeto envolvendo quase 20 instituições. O espírito é sempre procurar unir esforços para tentar evitar trabalho replicado a toa. Mas na prática o custo de coordenação entre as partes é muito grande. Só com o tempo que é preciso gastar para se coordenar com outros parceiros, daria pra implementar bastante coisa no Radar. Por isso, cada eventual parceria deve ser pensada com calma e estrategicamente, e não meramente por um abstrato "unir esforços".

ppKrauss commented 8 years ago

@leo, sobre seu comentário de "grande projeto envolvendo quase 20 instituições", existem de fato muitos exemplos de insucesso, mas não devemos esquecer exemplos com algum sucesso, como o Interlegis, que cresceu no sentido de integrar poder Judiciário e Executivo junto com o Legislativo... E até pariu, mais tarde, em ~2008 o LexML... O próprio LexML ganho autonomia em 2009 e é hoje bom exemplo de interinstitucional.

Também existe o ePING, outro grande sucesso (dadas as proporções de fracassos no Brasil).

O que estou sugerindo é gastarmos alguns minutos ou horas de colaboradores Radar para plugar nessa grande iniciativa, endossada pelo EPING, que é o LexML! Em paralelo, agora em 2016, estamos retomando o lado da própria produção e gestão dos documentos nos Diários Oficiais, como Diário Livre, LexML na CGM e iniciativas menores.


Reparei que existe um modelo de dados do Radar... Temos talvez uma alternativa simples para registrar as URNs LEX na base SQL do Radar,

Enfim, se alguém se interessar, podemos conversar sobre implantação das URNs LEX no Radar, e sobre as portas que se abrem com a interoperabilidade criada — tanto para plugar com sistemas e iniciativas nacionais, como para plugar com internacionais (ver demandas #333 e #334).

leonardofl commented 8 years ago

Yep, colocar a URN LEX na entidade Proposicao seria o primeiro grande (e simples) passo. Peter, acho q vc seria o cara para isso :) Se vc quiser contribuir c o Radar nesse sentido, terei prazer em ajudar te indicando os pontos a serem alterados e revisando seus pull requests.

ppKrauss commented 8 years ago

Oi @leonardofl , como sugere fazer isso? O ideal para mim seria ter um dump enxuto (apenas amostras relevantes de dados não precisamos da base inteira) da base de dados e fazer as modificações nesse dump, para poder testar e mostrar exemplos. Tem como criar esse dump e disponibilizar num zip?

Aí também precisaríamos decidir se crio um git a parte ou se criamos uma pasta aqui mesmo (algo como /experimentos) onde eu iria postando o que der certo. Talvez precisemos de um CSV próprio ou externo (ex. okfn-brasil/getlex/data) que garantiria a expressão de prefixos sem maior trabalho.

Em seguida plugar no Radar como SQL-View ou SQL-Function seria talvez o mais simples e suficiente.

saulotrento commented 8 years ago

Oi Peter

Eu acho que seria mais interessante fazer o seguinte:

1) Acrescentar uma coluna na tabela de proposições, onde ficará alojada a informação da URN LexML, alterando o modelo de dados ( este arquivo: modelagem/models.py https://github.com/radar-parlamentar/radar/blob/master/radar_parlamentar/modelagem/models.py )

2) Modificar cada importador para tentar preencher esta informação automaticamente no momento de cada importação, a partir dos dados da proposição. Por exemplo, para câmara dos deputados a modificação seria este arquivo: importadores/cdep.py https://github.com/radar-parlamentar/radar/blob/master/radar_parlamentar/importadores/cdep.py e por exemplo para o projeto de lei PL 3962/2008 http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ObterProposicao?tipo=PL&numero=3962&ano=2008 seria construída a URN urn:lex:br:camara.deputados:projeto.lei;pl:2008;3962 (ou o link correspondente http://www.lexml.gov.br/urn/urn:lex:br:camara.deputados:projeto.lei;pl:2008;3962 ), e essa URN ou link seria salvo no banco de dados ali no momento da importação.

Agora operacionalmente, a melhor forma (que alguém me corrija se necessário!) seria você clonar o repositório master para sua máquina, fazer um fork, alterar e testar, e quando estiver ok submeter o merge das alterações. Na prática, o passo-a-passo para fazer isso, estou um pouco enferrujado, mas certamente alguém vai saber te ajudar se estiver disposto a por a mão na massa!

Em 6 de junho de 2016 12:03, Peter notifications@github.com escreveu:

Oi @leonardofl https://github.com/leonardofl , como sugere fazer isso? O ideal para mim seria ter um dump https://www.postgresql.org/docs/current/static/app-pgdump.html enchuto (apenas amostras relevantes de dados não precisamos da base inteira) da base de dados e fazer as modificações nesse dump, para poder testar e mostrar exemplos. Tem como criar esse dump e disponibilizar num zip?

Aí também precisaríamos decidir se crio um git a parte ou se criamos uma pasta aqui mesmo (algo como /experimentos) onde eu iria postando o que der certo. Talvez precisemos de um CSV próprio ou externo (ex. okfn-brasil/getlex https://github.com/okfn-brasil/getlex) que garantiria a expressão de prefixos sem maior trabalho.

Em seguida plugar no Radar como SQL-View ou SQL-Function seria talvez o mais simples e suficiente.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/radar-parlamentar/radar/issues/273#issuecomment-223986596, or mute the thread https://github.com/notifications/unsubscribe/ABWcBhMkdEPMAVU_YvnuYXOa4DhN233Dks5qJDbfgaJpZM4EF_nT .

ppKrauss commented 8 years ago

Oi gente, reparei que tem um dump completo aqui e já baixei ele mesmo... Vish! vou postar uma issue sugerindo o _dumpdemo, psql etc < radar.sql leva uma eternidade, esteve a noite processando. Vai ser difícil alguém mais discutir modelo de dados conosco sem um demo para experimentos.


Oi @saulotrento , obrigado pelas dicas, mas lembre-se que já sugeri e reforcei que a implementação seria em SQL e PL/pgSQL, na base, não em Python. Passo-a-passo da sugestão colaborativa:

  1. Eu deixo funcionando tudo no SQL, demonstrando que está tudo lá e não precisam mais nada...
  2. (...) Na verdade talvez precisem registrar com mais rigor alguns dados, como na tabela public.modelagem_casalegislativa, que requer o campo local mais bem controlado, ou um campo extra tal como local_lex para obter dados da jurisdição da URN LEX. Isso vai gerar mais testes e discussões, continua de pé a proposta que fiz de pasta /experimentos ou similar.
  3. Você (Saulo) ou outra pessoa segue as sugestões que você passou, e as implementa como quiser: ou acessando tabelas que eu criar (na verdade SQL-VIEW, portanto pode tratar no models); ou fazendo no SQL um SELECT com chamada para as funções que eu implementar.

Dei uma olhada por alto nos links... Acho que você já está adiantando algo importante, que é a dica de como fechar a integração final no models e nos importadores, do código Python...

Pelo que estou vendo, quando forem implementar o passo-3, mesmo o código de modelagem/models.py mudaria pouco, pois a funcionalidade não será implementada em Python (será em SQL puro como dito).

class Proposicao(models.Model):
    """Proposição parlamentar (proposta de lei).
    Atributos:
        id_prop - string identificadora de acordo a fonte de dados
        sigla, numero, ano -- strings que formam o nome legal da proposição
        urn_lex  -- strings que forma a URN LEX com base no ano, numero, etc.
        ... -- ...
    Métodos:
        nome: retorna "sigla numero/ano"
    """
    # obs: id_prop não é chave primária!
    id_prop = models.CharField(max_length=100, blank=True)
    sigla = models.CharField(max_length=10)
    numero = models.CharField(max_length=10)
    ano = models.CharField(max_length=4)
    urn_lex = models.TextField(blank=True)
    ...
leonardofl commented 8 years ago

Não consegui acompanhar todo o texto, mas o que eu acho: tem dois caminhos 1) vc faz um método Proposicao.lexml_url() que calcula na hora a url lexml. ou 2) vc faz esse mesmo método na importação dos dados e grava no banco a url, aí teríamos um atributo Proposicao.lexml_url. De qualquer forma vai ter que mexer no Python. A princípio eu sou um pouco mais simpático ao 1.