Melhorias de transparência (PNTP): correções de relatórios e novas funcionalidades#3842
Melhorias de transparência (PNTP): correções de relatórios e novas funcionalidades#3842joaohortsenado wants to merge 9 commits into
Conversation
O resumo da Sessão Plenária (HTML e PDF) ordenava as votações nominais por
order_by('-materia'), divergindo da ordem das Matérias da Ordem do Dia, que
seguem numero_ordem. Passa a ordenar por numero_ordem nas listas de
Expediente e de Ordem do Dia, tanto no resumo HTML quanto no gerador de PDF.
O relatório "Imprimir Tramitação" exibia apenas o primeiro autor (autores.first()). Passa a exibir todos os autores/co-autores da matéria, ajustando a view (autores.all()) e o template (rótulo Autor/Autores e junção dos nomes).
Amplia TIPOS_TEXTO_PERMITIDOS (validador restringe_tipos_de_arquivo_txt), usado nos campos de Pauta/Ata/Anexo, para aceitar formatos editáveis de planilha e CSV: .csv, .xls, .xlsx e .ods (e variantes de MIME). Não requer migração, pois o validador é referenciado nas migrations apenas pelo nome.
…niões Adiciona ReuniaoFilterSet (número, nome, tema e período de data) à listagem de Reuniões de Comissão, permitindo localizar reuniões sem navegar página a página. Inclui a coluna 'Pauta da Reunião' ao lado de 'Ata da Reunião'.
…na busca Renomeia o verbose_name do campo upload_anexo de SessaoPlenaria de 'Anexo da Sessão' para 'Votações Nominais' (com migração) e passa a exibir os links de Pauta da Sessão e Votações Nominais ao lado da Ata na pesquisa pública de sessões plenárias.
Adiciona uma faixa no topo do layout com 'Informações atualizadas em DD/MM/AAAA' (data corrente, sem horário), oculta na impressão e em iframes.
03b69f4 to
3d952f6
Compare
eribeiro
left a comment
There was a problem hiding this comment.
Adicionei algumas sugestões de mudanças, mas LGTM
| # Mensagem de atualidade (PNTP): data de última atualização da entidade, | ||
| # quando o modelo possuir o campo. Consumido pelo banner em base.html. | ||
| context['data_atualizacao_conteudo'] = getattr( | ||
| self.object, 'data_ultima_atualizacao', None) |
There was a problem hiding this comment.
Uma ideia: o getattr retornar now() como valor default ao invés de None. Assim, no base.html a gente poderia simplicar o snippet abaixo:
{% if data_atualizacao_conteudo %}{{ data_atualizacao_conteudo|date:"d/m/Y" }}{% else %}{% now "d/m/Y" %}{% endif %}para
{% if data_atualizacao_conteudo %}{{ data_atualizacao_conteudo|date:"d/m/Y" }}{% endif %}| data_ultima_atualizacao = models.DateTimeField( | ||
| blank=True, null=True, auto_now=True, | ||
| verbose_name=_('Data da Última Atualização')) |
There was a problem hiding this comment.
Então, a gente tem um problema de inconsistência de nomes que poderiamos (ou não) tentar resolver nesse PR. Temos os seguintes casos:
- Models com os campos
data_ultima_atualizacaoeultima_atualizacao
Neste caso eu acho que deveriamos remover o ultima_atualizacao e deixar somente data_ultima_atualizacao.
- Models com somente o campo
ultima_atualizacao
Nestes a gente só renomeia pra data_ultima_atualizacao
O problema: a gente precisa percorrer onde ultima_atualizacao é utilizado removendo linhas assim: materia.ultima_edicao = tz.localize(datetime.now()), pois data_ultima_atualizacao tem auto_now=True. E naqueles que for só renomear, se certificar de incluir auto_now=True,
─$ grep -rn 'ultima' sapl/*/models.py | grep -v 'data'
sapl/materia/models.py:306: ultima_edicao = models.DateTimeField(
sapl/materia/models.py:1066: ultima_edicao = models.DateTimeField(
sapl/materia/models.py:1344: ultima_edicao = models.DateTimeField(
sapl/norma/models.py:223: ultima_edicao = models.DateTimeField(
sapl/parlamentares/models.py:303: return ultima_filiacao.partido.sigla
sapl/protocoloadm/models.py:242: ultima_edicao = models.DateTimeField(
sapl/protocoloadm/models.py:461: ultima_edicao = models.DateTimeField(```
Substitui o campo parlamentar_autor (FK direta a Parlamentar) pelo Autor polimórfico do SAPL em AudienciaPublica, permitindo Parlamentar, Comissão, Bancada e demais tipos. Atualiza o formulário, o layout e a validação de autoria do requerimento. A migração preserva os autores já cadastrados.
…ntidade Em telas de detalhe (CrudDetailView), a faixa do topo passa a exibir a data de última atualização do registro (campo data_ultima_atualizacao); nas demais telas (pesquisa/listagem) exibe a data atual. Adiciona data_ultima_atualizacao (auto_now) a Parlamentar, Comissao, DocumentoAdministrativo e AudienciaPublica.
…nais Desfaz o rename de upload_anexo (volta a 'Anexo da Sessão' e remove a migração de verbose_name) e adiciona, na pesquisa pública de sessões, um link 'Votações Nominais' que aponta para o resumo da sessão.
83d8946 to
fd3d093
Compare
Descrição
Conjunto de correções e melhorias voltadas à transparência legislativa. São 7 mudanças independentes, cada uma em seu commit:
order_by('-materia'), divergindo da ordem das Matérias da Ordem do Dia (numero_ordem). Passa a ordenar pornumero_ordemno Expediente e na Ordem do Dia.restringe_tipos_de_arquivo_txt(usado em Pauta/Ata/Anexo) passa a aceitar formatos editáveis de planilha e CSV (.csv,.xls,.xlsx,.ods). Sem migração (validador referenciado por nome).data_ultima_atualizacaoda entidade; nas demais (pesquisa/listagem) mostra a data atual. O campo é adicionado aParlamentar,Comissao,DocumentoAdministrativoeAudienciaPublica(Norma/Materia/Sessao/DocumentoAcessorio já o possuíam).Autorpolimórfico do SAPL (Parlamentar, Comissão, Bancada, etc.). Inclui migração que preserva os autores já cadastrados.Issue Relacionada
Não há issue vinculada. As mudanças derivam de uma solicitação de adequação ao PNTP (Programa Nacional de Transparência Pública).
Motivação e Contexto
Critérios de transparência do PNTP vinham sendo reprovados por limitações do SAPL: ausência de indicação de atualidade, impossibilidade de baixar pautas em formato editável, ordenação incorreta de votações nominais nos relatórios, relatório de tramitação omitindo co-autores, dificuldade de localizar reuniões de comissão e restrição de autoria em audiências públicas. Estas mudanças endereçam esses pontos.
Como Isso Foi Testado?
Ambiente de desenvolvimento com o código local servido via
docker-compose-devsobre PostgreSQL, comparando o comportamento da imagem publicada (baseline) com o código alterado. Para cada item foram capturadas telas ANTES e DEPOIS (anexadas abaixo). Além disso:.csv/.xls/.xlsx/.ods— rejeitadas antes, aceitas depois.manage.py check: sem problemas.Observação: a suíte
pytestnão foi executada porquepytest-djangonão consta nas dependências do projeto (lacuna pré-existente, emborapytest.iniuse--reuse-db).Capturas de Tela
Item 1 — Faixa "Informações foram atualizadas em DD/MM/AAAA"
ANTES (sem faixa) x DEPOIS (com faixa):
Tela de detalhe (mostra a data de última atualização da entidade) x tela de listagem/pesquisa (mostra a data atual):
Item 2 — Upload de formatos editáveis (validador ANTES x DEPOIS)
Item 3 — Ordem das Votações Nominais no resumo (ANTES x DEPOIS)
Item 4 — "Imprimir Tramitação" com todos os autores (ANTES x DEPOIS)
Item 5 — Reuniões de Comissão: filtro + coluna Pauta (ANTES x DEPOIS + filtro em ação)
Item 6 — Pauta/Ata/Anexo juntos na busca pública + link "Votações Nominais"
ANTES (só "Ata da Sessão") x DEPOIS (Ata, Pauta, Anexo da Sessão e link "Votações Nominais" para o resumo):
Item 7 — Audiência Pública: autor de qualquer tipo (ANTES x DEPOIS)
Tipos de Mudanças
Checklist: