Adiciona fluxo intermediário de revisão pelo Setor Legislativo antes do
envio ao Protocolo, protegido por feature flag (desabilitado por padrão).
- Novos campos: data_envio_setor, data_retorno_setor, usuario_envio_setor,
usuario_retorno_setor, observacao_setor em Proposicao
- Flag revisao_setor_legislativo em AppConfig (Sistema > Configurações)
- Novo grupo "Operador do Setor Legislativo" com permissões específicas
- Ações send_setor e return_from_setor no DetailView
- Views ProposicaoPendenteSetor (inbox) e RevisarProposicaoSetor
- OnlyOffice: setor pode editar documento quando proposição está com eles
- Status S (Enviada ao Setor) e V (Revisada pelo Setor) no histórico
- Templates: badges, alertas, botões condicionais e subnav
- Fonte Arial forçada em todos os slots XML (ascii, hAnsi, eastAsia, cs)
nos documentos criados via python-docx e na numeração de matéria
- Substituir alert() nativo por SweetAlert2 nos 3 templates do editor
- Corrigir beforeunload que disparava sem alterações no documento
- Substitui carimbo sobreposto na última página por página dedicada de
autenticação no final do PDF com blocos de assinatura, código de
autenticação (SHA-256 truncado) e QR Code
- Remove exposição de CPF do PDF e da interface web
- Adiciona campo codigo_autenticacao em MateriaLegislativa e
DocumentoAcessorio com migration
- Adiciona views públicas de verificação (/materia/<pk>/verificar/ e
/materia/documentoacessorio/<pk>/verificar/) sem exigir login
- Cria template verificar_assinatura.html com status verde/vermelho
- Adiciona botão "Verificar Autenticidade" nos templates de detail
- Corrige lookup de cargo do assinante via Autor.operadores
- Corrige URL de download para OnlyOffice usando build_onlyoffice_url
- Melhora layout dos botões de ação na página de detail da matéria
- Adiciona dependência qrcode[pil]==7.4.2
Permite que múltiplos co-autores assinem o mesmo documento sequencialmente.
O primeiro assinante usa o fluxo atual (ReportLab + pyhanko), e os subsequentes
adicionam assinatura incremental preservando as anteriores. Template mostra
botões "Ver PDF Assinado" e "Assinar" simultaneamente, e o card lista todos
os assinantes. Backward-compatible com assinatura_info legado (dict → lista).
Co-Authored-By: rangelbruno <rangelbruno@users.noreply.github.com>
Adiciona opção de baixar matéria + acessórios mesclados em um único PDF,
além do ZIP já existente. Reorganiza botões da página de detalhe com
flex-wrap responsivo e cores distintas para cada ação.
Permite baixar ZIP com o PDF da matéria (assinado ou original) junto
com todos os documentos acessórios. Botão aparece na página de detalhe
e na pesquisa de matérias quando há documentos acessórios cadastrados.
Adiciona verificação de signer None antes de acessar signing_cert,
evitando erro 'NoneType object has no attribute signing_cert' ao
assinar matéria e documento acessório com certificado inválido.
Signed-off-by: rangelbruno
Permite atribuir o grupo "Presidente da Mesa Diretora" diretamente ao usuário
na tela /sistema/usuario/, como alternativa à verificação via Mesa Diretora
cadastrada na Sessão Legislativa.
Signed-off-by: rangelbruno
- Renomeia DEBUG para DJANGO_DEBUG nos docker-compose de dev,
alinhando com o que settings.py espera via python-decouple
- Corrige bug em menus.py onde itens com check_permission tinham
a URL limpa mesmo quando o usuário possuía a permissão,
causando o menu Sistema vazio
Signed-off-by: rangelbruno <rangelbruno@users.noreply.github.com>
Adicionada verificação de presidente da Mesa Diretora vigente na lógica
de permissão pode_assinar do DocumentoAcessorioCrud.DetailView. O sistema
busca a SessaoLegislativa e MesaDiretora vigentes, identifica o parlamentar
com cargo Presidente e verifica se o usuário logado é operador desse autor.
Condição is_autor era restritiva demais — superusuários e usuários com
permissão change_documentoacessorio não viam o botão. Adicionada variável
pode_assinar no contexto que inclui is_autor, superuser e permissão.
Adiciona funcionalidade de assinatura digital com certificado A1 para
DocumentoAcessório, replicando o fluxo já existente em MateriaLegislativa.
- Novos campos no model: pdf_assinado, assinatura_info, assinado_em, assinado_por
- Views: assinar A1, PDF assinado, verificar e remover assinatura
- Template detail com botão de assinar, card de info e modal parametrizado
- Modal reutilizável via urlPrefix (retrocompatível com MateriaLegislativa)
- Contexto is_autor baseado nos operadores de autores da matéria-pai
O canvas do carimbo era criado com pagesize=A4 fixo. Se o PDF original
tivesse dimensões diferentes, o mergePage expandia o MediaBox, gerando
página maior que A4 e cortando o carimbo ao imprimir/visualizar.
Agora lê as dimensões reais da última página do PDF original.
- Redesign da página 404 com layout responsivo e navegação
- Redireciona usuários não autenticados para /login/ no 404
- Protege nav_run contra resolver_match None
- Mescla has_iframe: getattr seguro + leitura/gravação do parâmetro ?iframe= na sessão
Adiciona botão "Criar e Editar no OnlyOffice" no formulário de criação de
Documento Acessório, permitindo criar o documento sem upload de arquivo e
redirecionar para o editor OnlyOffice. Corrige também NoReverseMatch na
URL de detalhe do documento acessório no editor.
Co-Authored-By: rangelbruno <rangelbruno@users.noreply.github.com>
Adiciona parâmetro em Sistema > Configurações da Aplicação para escolher
entre nome político (parlamentar) e nome civil na assinatura digital de
Matérias Legislativas. Inclui atalho no menu /sistema/.
Usa Django cache para rastrear o ciclo forcesave → callback → check_doc,
evitando que o polling retorne true antes do callback salvar o arquivo.
Aplica a correção em Matéria, Documento Acessório e Proposição.
- Adiciona botão "Salvar e Voltar" com forcesave no editor de Matéria e Doc Acessório
- Corrige callbacks que não reescreviam a URL de download do OnlyOffice (causava falha no salvamento em ambiente Docker)
- Adiciona endpoints check-doc e forcesave para Matéria e Doc Acessório
- Template genérico agora suporta forcesave condicionalmente
Corrige o problema onde o botão Salvar e Voltar no editor OnlyOffice da
proposição redirecionava antes do documento ser salvo, mostrando
"Documento não criado". A solução usa o Command Service do OnlyOffice
para forçar o salvamento (forcesave) e polling server-side para
confirmar que o documento foi persistido antes de redirecionar.
Adiciona endpoints check-doc e forcesave para proposição.
- Adiciona botão "Editar com OnlyOffice" na detail de Matéria Legislativa
para administradores, operadores de matéria e protocolo
- Adiciona botão OnlyOffice na listagem e detail de Documento Acessório
- Refatora URLs do OnlyOffice usando SAPL_INTERNAL_URL para comunicação
entre containers Docker (evita URLs hardcoded)
- Centraliza lógica de URL em build_onlyoffice_url() e
get_onlyoffice_browser_url() no utils.py
Adiciona automaticamente o cabeçalho com tipo, número e ano
no início do documento da matéria legislativa após o recebimento
da proposição. Ex: "INDICAÇÃO 10 / 2026"
- Adiciona verificação is_operador_protocolo na IndexView
- Exibe card com atalhos para proposições pendentes e recebidas
- Card visível apenas para usuários com permissão de protocolo
Signed-off-by: rangelbruno <brunojp.rangel@gmail.com>
Antes: o corpo do template era removido e substituído por texto padrão
Agora: mantém todo o conteúdo do template e substitui apenas placeholders
Placeholders suportados: {titulo}, {ementa}, {descricao}, {tipo}, {data}
Signed-off-by: rangelbruno <brunojp.rangel@gmail.com>
- Remove substituição de URLs para sapl-dev:8000 que quebrava em produção
- Usa ONLYOFFICE_URL do settings para substituir host nas URLs de callback
Signed-off-by: rangelbruno <brunojp.rangel@gmail.com>
Integra funcionalidades da branch franco-rocha:
- Templates de documentos para OnlyOffice
- Integração completa do editor em todos os tipos de documentos
- Correções de hash_code para documentos PDF
- Geração de PDF para assinatura digital
Conflitos resolvidos mantendo configurações da 3.1.x:
- onlyoffice_materia_views.py: mantém URLs via settings
- urls.py: mantém rotas de assinatura digital A1/A3
- Botão "Editar com OnlyOffice" só aparece para autores e se não foi protocolado
- Botão "Assinar PDF Digitalmente" só aparece para autores
- Adiciona verificação is_autor no contexto do DetailView
- Botão "Editar com OnlyOffice" só aparece para autores e se não foi protocolado
- Botão "Assinar PDF Digitalmente" só aparece para autores
- Adiciona verificação is_autor no contexto do DetailView
Quando um documento é editado via OnlyOffice durante a fase de confirmação,
o hash_code agora é regenerado automaticamente para manter o link de
confirmação válido.
Quando um documento é editado via OnlyOffice durante a fase de confirmação,
o hash_code agora é regenerado automaticamente para manter o link de
confirmação válido.
- Adiciona botão "Editar com OnlyOffice" na página de confirmação de proposição
- Permite que usuários com permissão de protocolo editem o documento durante a confirmação
- Adiciona validação de hash para segurança do link de confirmação
- Corrige permissão de download para permitir acesso a usuários do protocolo
- Adiciona botão "Editar com OnlyOffice" na página de confirmação de proposição
- Permite que usuários com permissão de protocolo editem o documento durante a confirmação
- Adiciona validação de hash para segurança do link de confirmação
- Corrige permissão de download para permitir acesso a usuários do protocolo
Remove lógica que substituía URLs de download do OnlyOffice
por endereços internos do Docker. Com OnlyOffice remoto, as
URLs retornadas já são acessíveis publicamente.
- Altera URL padrão do OnlyOffice para https://onlyoffice.legisinc.com.br
- Configura JWT para autenticação com o servidor OnlyOffice remoto
- Remove serviço OnlyOffice local do docker-compose-dev-db.yml