Skip to content

devtulio/sgdp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

180 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SGDP — Sistema de Gestão de Documentos da Procuradoria

Versão Tecnologia Licença Multiusuário DOI CI

Descrição

O SGDP é uma aplicação web multiusuário para a Procuradoria-Geral municipal gerenciar seus documentos jurídicos — Leis, Decretos, Portarias, Pareceres e Ofícios. O sistema controla numeração automática, armazena os PDFs assinados digitalmente e oferece busca, auditoria e backup completo.

Compartilha a arquitetura (servidor Python + SQLite + frontend single-file, sem nada a instalar) com os sistemas irmãos SGCD, SGCA e SGEA.

Funciona em rede local: um único computador executa o servidor e todos os procuradores acessam pelo navegador via IP ou localhost.


Funcionalidades Principais

  • Gestão de 5 tipos de documento: Lei, Decreto, Portaria, Parecer e Ofício
  • Numeração automática por tipo e ano, com possibilidade de ajuste manual — Lei e Decreto usam numeração histórica contínua (nunca reinicia por ano), com separador de milhar
  • Ofício Interno — numeração própria e separada por departamento (Procuradoria-Geral/Gabinete), com sufixo automático (ex: "nº 001/2026 PG"), sem colidir com a sequência normal de Ofício
  • Últimos instrumentos no Dashboard — cada card de tipo mostra a numeração mais recente cadastrada (ex: Última Lei: 012/2026)
  • Campo Assunto com categorias dinâmicas: 14 gerais e 46 jurídicas específicas para Parecer
  • Campos específicos por tipo — Parecer: PA + Modalidade licitatória (ativados por assunto); Portaria: tipo de ato e cargo
  • Relatório Gerencial — produção por tipo, assunto e mês com filtros de período e gráfico SVG
  • Sons de notificação — feedback sonoro para cliques, sucesso e erro via Web Audio API
  • Brasão do município na sidebar, configurável e persistido no servidor (visível para todos os procuradores)
  • Upload e visualização de PDF assinado diretamente no navegador
  • Login multiusuário — a sessão se renova sozinha enquanto a aba está aberta e expira cerca de um minuto depois de fechada; até N procuradores simultâneos
  • Busca e filtros por número, ementa, partes envolvidas e ano
  • Trilha de auditoria completa de todas as ações (criar, editar, excluir, upload)
  • Gestão de usuários com perfil administrador e perfil padrão, cada um com departamento fixo (Procuradoria-Geral ou Gabinete)
  • Documentos sigilosos — marcação opcional (só pra Parecer, Portaria e Ofício — Lei e Decreto nunca podem ser sigilosos) que restringe a visibilidade e a edição a quem criou e a administradores; documentos não-sigilosos podem ser editados por qualquer colega do mesmo departamento de quem criou. Coluna "Origem" no Dashboard e nas listagens mostra o departamento de cada documento
  • Exportação com diálogo "Salvar Como" — todo botão de exportar/baixar (PDF, CSVs de relatório e auditoria, backups) abre o explorador nativo do Windows na máquina servidora; cai no download tradicional pra Downloads ao acessar por outro computador na rede
  • Backup e restauração — exporta JSON com todos os documentos e PDFs; backup automático do banco em pacote .zip (banco + pasta de anexos), cuja restauração repõe também os PDFs (backups .db antigos continuam sendo aceitos, sem os anexos)
  • Sincronização de backup entre agentes — mescla dados de outra instalação (soma o que é novo, revisa o que conflita) sem substituir o banco inteiro
  • Navegação persistente — F5 mantém o usuário na tela atual via location.hash
  • Encerramento do sistema com tela de confirmação e desligamento do servidor
  • Diagnóstico de rede — verifica IP, porta 3001, regras de firewall e acessibilidade pela LAN; disponível como script independente e no menu de inicialização
  • Lixeira — exclusão reversível com restauração em até 30 dias, tanto para documentos quanto para lembretes
  • Agenda — lembretes com prazo, vinculáveis a documentos
  • Envio por e-mail — anexa o PDF assinado e envia via SMTP configurável
  • Importação em lote via CSV — cadastro de múltiplos documentos de uma vez
  • Personalização visual — largura do conteúdo (compacta/expandida) e cor de destaque (institucional/azul/verde/roxo)
  • Histórico de revisões — cada edição de documento guarda os campos anteriores, com autor e data/hora
  • Notificação de prazo por e-mail — avisa automaticamente o responsável (ou um e-mail padrão) quando um lembrete vence
  • Resumo diário por e-mail — envia diariamente um resumo de lembretes vencidos e vencendo em breve, mesmo sem ninguém logado
  • Busca full-text (FTS5) — pesquisa em ementa, partes e observações por palavras (não só substring), com índice sincronizado automaticamente
  • Etiquetas (tags) livres — categorização adicional além do Assunto fixo, com autocomplete e filtro por etiqueta
  • Vínculos entre documentos — relação tipada (revoga, altera, complementa, referencia) navegável nos dois sentidos
  • Exportação do relatório — CSV com os dados brutos do período, e impressão/PDF limpo (sem menu/sidebar)
  • Exportação da Trilha de Auditoria em CSV, respeitando os filtros ativos na tela
  • Sincronização de auditoria entre instâncias — a sincronização de backup também mescla o histórico de auditoria, preservando autor e data originais
  • Relatórios em papel timbrado — Pendências e Prazos, Produtividade por Usuário, Certidão de Documento, Certidão Negativa de Pendências, Certidões em lote, Cadeia Normativa, Relatório de Etiquetas e Backup e Integridade (admin), no mesmo padrão documental do SGCD (brasão, Times New Roman, bloco de assinatura manuscrita)
  • Comparativo entre períodos no Relatório Gerencial — variação (▲/▼, diferença e percentual) contra o intervalo de mesma duração imediatamente anterior
  • Aviso de edição simultânea — se outro procurador salvar o mesmo documento enquanto sua tela está aberta, a gravação é recusada com aviso para reabrir o documento, em vez de sobrescrever o trabalho do colega
  • Erros recentes — tela no Diagnóstico (administrador) com os erros registrados em log rotativo, agrupados por tipo e contagem, incluindo os ocorridos no navegador dos usuários; travamentos graves ficam em *_crash.log

Requisitos

  • Python 3.8+
  • Google Chrome ou Microsoft Edge (recomendado)
  • Windows 10/11
  • Nada a instalar além do Python — o SGDP usa a biblioteca padrão e o servidor waitress, que já vem vendorizado na pasta waitress/ do próprio repositório (não é stdlib, mas não exige pip install nem acesso à internet)

Servidor sem Python instalado (ex.: Windows Server bloqueado por política de TI): o Iniciar SGDP.bat detecta automaticamente a ausência do Python e extrai uma versão portátil (embarcável, sem instalador) incluída no próprio projeto (python-3.12.9-embed-amd64.zip) para C:\Python312-embed\ — não exige instalação nem privilégio de administrador.


Instalação e uso

  1. Copie a pasta SGDP/ para o computador que atuará como servidor
  2. Clique duas vezes em Iniciar SGDP.bat
  3. No menu que aparecer no terminal, escolha [2] Iniciar Servidor (ou aguarde — é a opção padrão)
  4. Faça login com as credenciais iniciais abaixo — o sistema exige a troca de senha no primeiro acesso

⚠️ Importante: abrir o SGDP.html diretamente pelo navegador (sem o servidor) impede o funcionamento do sistema. Use sempre o Iniciar SGDP.bat.

Login inicial

Campo Valor
Usuário admin
Senha admin123

Menu de inicialização

O Iniciar SGDP.bat abre um menu no terminal:

Opção Descrição
[1] Diagnóstico Verifica e corrige automaticamente rede, porta e firewall (pede elevação de Administrador quando necessário)
[2] Iniciar Servidor Sobe o servidor e mantém rodando continuamente — atende uso individual e em rede. Só encerra com Ctrl+C no terminal ou fechando a janela

Acesso em rede local

O sistema foi projetado para uso multiusuário em rede local (LAN): uma única máquina executa o servidor (e guarda o banco de dados) e os demais procuradores acessam pelo navegador, sem instalar nada.

Na máquina servidora (uma vez só):

  1. Execute Liberar Porta SGDP.bat como Administrador (botão direito → Executar como administrador) — cria a regra no Firewall do Windows liberando a porta 3001 para conexões de entrada
  2. Inicie o sistema pelo Iniciar SGDP.bat e deixe a máquina ligada — ao iniciar, o console mostra o endereço de rede pronto para distribuir (Rede: http://<IP>:3001/SGDP.html)

Nas outras máquinas: basta abrir o navegador (Chrome ou Edge) no endereço do servidor:

http://192.168.x.x:3001/SGDP.html

Cada procurador faz login com sua própria conta — o servidor atende acessos simultâneos e todos enxergam os mesmos dados.

Se a conexão não funcionar, execute Diagnostico SGDP.bat (ou a opção [1] do Iniciar SGDP.bat) na máquina servidora: ele descobre o IP e verifica a acessibilidade pela rede.

⚠️ Uso restrito à rede interna. A comunicação é HTTP simples (sem criptografia de transporte) — adequado para uma LAN interna confiável, mas nunca exponha a porta do sistema à internet (redirecionamento de porta no roteador, DMZ etc.). Para acesso remoto, use a VPN institucional.


Estrutura de arquivos

SGDP/
├── SGDP.html               # Frontend — aplicação web completa
├── server.py               # Servidor Python (API REST + SQLite + uploads)
├── sgx_base.py             # Camada compartilhada da família (sessões, backup, log de erros)
├── base.css                # Estilos compartilhados da família (cópia distribuída)
├── base.js                 # Helpers de front compartilhados da família (cópia distribuída)
├── _esqueleto.sha256       # Manifesto de conferência das cópias compartilhadas (checado no CI)
├── waitress/               # Servidor WSGI vendorizado (não precisa instalar nada)
├── scripts/                # Scripts de apoio ao desenvolvimento (lint, verificação do esqueleto)
├── tests/                  # Suíte de testes automatizados do backend
│   ├── test_server.py
│   └── e2e/                # Testes E2E (Playwright) — navegador real de ponta a ponta
├── Iniciar SGDP.bat        # Inicializa o servidor
├── python-3.12.9-embed-amd64.zip  # Python portátil (fallback se não houver Python instalado)
├── get-pip.py              # Usado só pelo script acima (Python embarcável não vem com pip)
├── Criar Atalho SGDP.bat   # Cria atalho na área de trabalho com ícone
├── Criar Atalho SGDP.ps1   # Script PowerShell de criação do atalho
├── Diagnostico SGDP.bat    # Roda o diagnóstico de rede (clique duplo)
├── Liberar Porta SGDP.bat  # Cria regra de firewall para porta 3001 (Admin)
├── diagnostico.py          # Script de diagnóstico de rede e firewall
├── sgdp.ico                # Ícone personalizado do sistema
├── sgdp.db                 # Banco de dados SQLite (criado automaticamente)
├── uploads/                # PDFs armazenados (criado automaticamente)
├── backups/                # Backups automáticos (criado automaticamente)
├── requirements.txt        # Nada a instalar via pip (stdlib + waitress vendorizado)
├── README.md
├── CHANGELOG.md
└── MANUAL.html

Documentos Gerados pelo Sistema

Documento Descrição
PDF assinado do documento Impressão ou download do PDF anexado ao registro (o sistema não gera o corpo do documento)
Certidão de Documento Certidão de existência e teor de um documento
Certidão Negativa de Pendências Declaração de inexistência de pendências
Certidões em Lote Emissão de certidões de vários documentos de uma vez
Relatório de Cadeia Normativa Vínculos entre normas (altera, revoga, regulamenta)
Relatório de Etiquetas Etiquetas para organização física dos documentos
Relatório de Pendências Documentos com pendências
Relatório de Produtividade Produção por período e por autor
Relatório de Integridade Estado do banco, backups e contagens

Todos os documentos abrem em janela separada com botão "🖨 Imprimir / Salvar PDF".


Segurança

  • Senhas armazenadas com PBKDF2-HMAC-SHA256 e salt aleatório por usuário
  • Sessões de curta duração, renovadas automaticamente enquanto a aba do sistema está aberta e invalidadas cerca de um minuto após ela ser fechada
  • Acesso à API exige token de sessão em todas as rotas (exceto login e verificação)
  • Upload restrito a PDF, com limite de 50 MB
  • Trilha de auditoria imutável registra todas as ações com usuário e timestamp
  • Verificação de integridade do banco de dados (SQLite PRAGMA integrity_check) na inicialização
  • Recomenda-se uso em rede interna (LAN) apenas

Tecnologias

Tecnologia Uso
HTML5 + CSS3 Interface da aplicação, temas claro/escuro, layout responsivo
JavaScript puro (ES6+) Toda a lógica de negócio, sem frameworks externos
Python 3 (stdlib) Servidor local: REST API, SQLite, auth, SMTP
waitress Servidor WSGI que atende as requisições — vendorizado em waitress/, sem instalação
SQLite Armazenamento persistente dos dados (sgdp.db), com índice FTS5 para busca full-text

Desenvolvimento

O sistema em si continua sem nada a instalar: Python stdlib + HTML puro, mais o waitress já incluído no repositório. Para quem for alterar o código, há um lint opcional que verifica variáveis indefinidas no JavaScript de SGDP.html:

npm install   # uma vez, instala apenas o ESLint (ferramenta de dev, não é usada em produção)
npm run lint

Parte do código é compartilhada com os outros sistemas da família (SGCD, SGCA e SGEA): base.css, base.js e sgx_base.py são cópias distribuídas a partir de uma fonte única, que fica fora deste repositório. Editar essas cópias aqui funciona e passa no lint — mas a alteração é silenciosamente sobrescrita na próxima distribuição. Por isso o CI confere as cópias contra o manifesto _esqueleto.sha256 e quebra o build se elas divergirem:

python scripts/verificar_esqueleto.py

Há também uma suíte de testes automatizados do backend (server.py), usando só unittest da stdlib — sobe o servidor real contra um banco e uploads temporários e testa os endpoints REST (login, documentos, departamento/sigiloso, usuários, vínculos, tags, revisões, importação CSV, arquivos, relatórios, lembretes, auditoria, config, backup/restore e sincronização):

python -m unittest discover -s tests -v

Há também uma suíte de testes E2E (tests/e2e/), usando Playwright — sobe o servidor real e dirige um Chromium de verdade pelo fluxo completo (login com troca de senha obrigatória, criar documento):

npm install
npx playwright install chromium   # uma vez, baixa o navegador de teste
npm run test:e2e

Roda contra um banco/uploads/backups temporários (nunca o sgdp.db real), criados e descartados automaticamente a cada execução.


Versionamento

Consulte o CHANGELOG.md para o histórico completo de versões e alterações.


Contribuição

Contribuições são bem-vindas! Veja o CONTRIBUTING.md para orientações sobre como reportar bugs, sugerir funcionalidades e enviar Pull Requests.


Licença

Distribuído sob a licença MIT. Veja LICENSE para o texto completo.

Aviso: Os dados ficam armazenados no arquivo sgdp.db na pasta do sistema. Faça backups regulares em Configurações → Dados e mantenha cópia do sgdp.db em local seguro.

About

Sistema de Gestão de Documentos da Procuradoria — Leis, Decretos, Portarias, Pareceres e Ofícios

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages