CLAUDE.md/AGENTS.md agora apontam para knowledge/AGENTS.md com regras
anti-alucinação explícitas (vale para Claude Code, Codex e Cursor):
não inventar regra/contrato, dizer quando não está documentado, citar o
doc governante, knowledge/ prevalece sobre doc local divergente.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Documentacao oficial em knowledge/ (submodule de docs-ia-projects, branch
main). Path knowledge/ e nao docs/ porque tres repositorios ja tem docs/
proprio ainda nao migrado.
Clone: git clone --recurse-submodules
Atualizar: git -C knowledge pull origin main && git add knowledge
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A borda era desenhada no TextBoxStyle (tamanho do texto), ficando menor
que o bloco. Movida para o TextStampStyle (tamanho da annotation box)
para coincidir com os blocos do ReportLab. Texto alinhado topo-esquerdo.
O parâmetro avg_width do SimpleFontEngineFactory estava com valor 600
(unidades glyph space) quando o pyhanko espera fração do font_size (0.5).
Isso causava largura natural do texto de ~105.000pt, e o SHRINK_TO_FIT
reduzia a escala para ~0.2%, tornando o texto invisível nos stamps
das assinaturas subsequentes.
- Adicionar validador combinado (documentos + imagens) para DocumentoAcessorio
- Criar modelo AnexoProposicao para anexos durante edição de proposição
- Adicionar upload drag-and-drop na lista de Documentos Acessórios da matéria
- Adicionar seção de anexos na tela do editor OnlyOffice de proposição
- Transferir anexos automaticamente para DocumentoAcessorio ao incorporar proposição
- Corrige fonte dos stamps subsequentes de Courier para Helvetica
- Elimina borda dupla (border_width=0 no outer, 1 no inner)
- Substitui y_base=500 fixo por grid dinâmico baseado nas dimensões da página
- Unifica col_width entre ReportLab e pyhanko (era 70mm vs calculado)
- Footer (código, QR, URL, aviso legal) em posição fixa no rodapé (68mm)
- Adiciona Hash do documento abaixo da Data em cada bloco de assinatura
- Suporta até 14 assinaturas por página de autenticação
Signed-off-by: rangelbruno <rangelbruno@users.noreply.github.com>
Assinaturas após a primeira usavam a aparência padrão do pyhanko
em vez do template customizado da página de autenticação. Agora
usa PdfSigner com TextStampStyle para manter o visual consistente.
Remove a página de documentação customizada (/api/doc/) e adiciona
card de atalho para Swagger UI e ReDoc na tela inicial do administrador.
Corrige ReDoc em branco fixando versão estável do CDN.
Adiciona /api/doc/ com documentação auto-gerada de todos os endpoints
REST, incluindo testador interativo com suporte a GET, POST, PUT, PATCH
e DELETE, autenticação por token e busca por endpoints.
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.