Skip to content

devtulio/sgcd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

359 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SGCD — Sistema de Gestão de Contratação Direta

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

Descrição

O SGCD é uma aplicação web multiusuário para gestão completa de processos de Dispensa de Licitação conforme a Lei Federal nº 14.133/2021 (Nova Lei de Licitações e Contratos Administrativos). Desenvolvido para agentes de contratação pública, o sistema organiza todas as etapas do processo — da formalização da demanda até a publicação do contrato no PNCP — em um fluxo de trabalho guiado, com geração automática de documentos.

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

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


Funcionalidades Principais

  • Checklist estruturado com 18 etapas do processo de Dispensa de Licitação, cada uma com fundamento legal e orientação de preenchimento
  • Geração automática de documentos prontos para assinatura: Autorização de Abertura, Aviso de Dispensa, Ata de Sessão, Mapa de Preços, Despachos e Extrato de Contrato — cada um com a opção "Gerar como MINUTA" (marca d'água), desmarcada por padrão
  • Cadastro de fornecedores com consulta automática de CNPJ via ReceitaWS/BrasilAPI e controle de certidões com alertas de vencimento
  • Gestão de propostas e cotações com cálculo automático do valor de referência por média, mediana ou menor preço (art. 6º da IN SEGES/ME nº 65/2021)
  • Dotação orçamentária por processo — Programa/Ação, Elemento de Despesa, Fonte e Dotação Completa
  • Verificação de conformidade automática: aponta pendências e inconsistências no processo
  • Alerta de fracionamento — detecta processos com objetos similares e calcula soma dos valores no exercício
  • Controle de limites anuais Art. 75, I e II com painel de acumulado e alerta ao atingir o teto legal
  • Cálculo automático de prazos (Art. 75 §3°) — data mínima de encerramento com alerta visual
  • Trilha de auditoria global com timeline agrupada por dia, filtros por tipo de evento, período e usuário
  • Exportação para CSV de processos, fornecedores e trilha de auditoria — respeita os filtros/busca ativos na tela
  • Agenda de Vencimentos — prazos de propostas, contratos e processos parados em um único painel
  • Vinculação entre processos — vínculos relacionais (renovação, aditivo, continuidade) bidirecionais e clicáveis
  • Visualização Kanban por fase (Instrução / Publicado / Análise / Adjudicação / Contratação / Concluído)
  • Notificações por e-mail via SMTP com editor rich text para fornecedor e equipe interna — os destinatários são os fornecedores cotados no processo (casados com o cadastro por CNPJ), não o cadastro inteiro; cada um recebe um e-mail individual, com saudação pelo nome do sócio ou simples ("Prezado fornecedor"), à escolha
  • Notificações in-app — alertas de prazo, processos parados e certidões vencendo
  • Resumo diário por e-mail — prazos e processos parados, enviado automaticamente pelo servidor sem depender de ninguém logado (requer SMTP configurado)
  • QR Code de autenticidade em todos os documentos gerados
  • Exportação PNCP — JSON estruturado no formato da API do Portal Nacional de Contratações Públicas
  • Backup automático após o último usuário sair (JSON + banco de dados SQLite) com rotação configurável — o servidor continua no ar, pronto pro próximo login
  • Sincronização de backup entre agentes/máquinas — mescla dados de outra instalação (soma o que é novo, revisa o que conflita) sem substituir o banco inteiro
  • Cadastro de fornecedores compartilhado — Exportar/Sincronizar cadastro com os sistemas irmãos (SGCA/SGEA), casando os registros por CNPJ, com tela de revisão quando o mesmo fornecedor foi alterado dos dois lados
  • Etiquetas (tags) nos processos — classificação livre com sugestão das etiquetas já usadas, exibidas nos cards e consideradas na busca
  • Motor de erros com tela "Erros recentes" — falhas do servidor e do navegador dos usuários registradas em log rotativo e exibidas agrupadas em Configurações → Diagnóstico (visível só ao administrador); travamentos graves vão para o SGCD_crash.log
  • Lixeira — processos e fornecedores excluídos ficam recuperáveis por 30 dias (processos incluem os arquivos anexados). Exclusão de fornecedor bloqueada se ele estiver vinculado a algum processo
  • Autenticação multiusuário com hashing PBKDF2-HMAC-SHA256 e gestão de usuários pelo admin
  • Relatório executivo com KPIs, gráfico de barras por status e alertas de processos parados
  • Diagnóstico e correção automática de rede — verifica IP, porta 3000, perfil de rede, regra de firewall, antivírus de terceiros e outros dispositivos alcançáveis na LAN; corrige automaticamente o que estiver ao alcance do Windows (com elevação de Administrador)

Requisitos

  • Python 3.7+
  • Google Chrome ou Microsoft Edge (recomendado)
  • Windows 10/11
  • Nada a instalar: além da biblioteca padrão do Python, o servidor usa o waitress (servidor WSGI puro-Python), que já vem incluído na pasta waitress/ do próprio projeto — não é preciso pip install nem acesso à internet para subir o sistema

Servidor sem Python instalado (ex.: Windows Server bloqueado por política de TI): o Iniciar SGCD.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. Isso resolve o caso comum de instaladores .exe bloqueados por AppLocker/antivírus corporativo em servidores.


Instalação e uso

  1. Copie a pasta SGCD/ para o computador que atuará como servidor
  2. Clique duas vezes em Iniciar SGCD.bat
  3. Escolha [2] Iniciar Servidor no menu que aparecer — o navegador abre automaticamente
  4. Faça login com as credenciais iniciais abaixo e altere a senha imediatamente

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

Login inicial

Campo Valor
Usuário admin
Senha admin123

Menu de inicialização

O Iniciar SGCD.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 as demais acessam pelo navegador, sem instalar nada.

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

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

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

http://192.168.x.x:3000/SGCD.html

Cada usuário 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 SGCD.bat (ou a opção [1] do Iniciar SGCD.bat) na máquina servidora: ele descobre o IP, verifica e corrige automaticamente firewall, perfil de rede e antivírus de terceiros. Ele também testa se há outros dispositivos alcançáveis na rede — útil para identificar isolamento de cliente (Wi-Fi) ou VLANs separadas, casos que exigem intervenção do time de TI.

Se o diagnóstico indicar tudo certo mas outra máquina ainda não conseguir acessar, é sinal de bloqueio fora do alcance do Windows (isolamento de rede corporativa, VLAN, ou firewall de outro dispositivo/roteador) — nesse caso, use o teste indicado pelo próprio diagnóstico (ping e Test-NetConnection) a partir da outra máquina para confirmar e leve essa evidência ao TI.

⚠️ 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

SGCD/
├── SGCD.html                # Frontend — aplicação web completa
├── server.py                # Servidor Python (API REST + SQLite + uploads)
├── base.css                 # Estilos compartilhados da família (cópia distribuída)
├── base.js                  # Utilitários JS compartilhados da família (cópia distribuída)
├── sgx_base.py              # Infraestrutura Python compartilhada (cópia distribuída)
├── _esqueleto.sha256        # Manifesto de integridade das cópias compartilhadas
├── waitress/                # Servidor WSGI puro-Python, vendorizado (nada a instalar)
├── scripts/                 # Utilitários de desenvolvimento
│   ├── lint.mjs
│   └── verificar_esqueleto.py   # Confere as cópias compartilhadas contra o manifesto
├── tests/                   # Suíte de testes automatizados do backend
│   ├── test_server.py
│   └── e2e/                 # Testes E2E (Playwright) — navegador real de ponta a ponta
├── Iniciar SGCD.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 SGCD.bat    # Cria atalho na área de trabalho com ícone
├── Criar Atalho SGCD.ps1    # Script PowerShell de criação do atalho
├── Diagnostico SGCD.bat     # Roda o diagnóstico de rede (clique duplo)
├── Liberar Porta SGCD.bat   # Cria regra de firewall para porta 3000 (Admin)
├── diagnostico.py           # Script de diagnóstico de rede e firewall
├── sgcd.ico                 # Ícone personalizado do sistema
├── sgcd.db                  # Banco de dados SQLite (criado automaticamente)
├── uploads/                 # Documentos anexados (criado automaticamente)
├── backups/                 # Backups automáticos (criado automaticamente)
├── requirements.txt         # Nada a instalar — o waitress vem junto, na pasta acima
├── README.md
├── CHANGELOG.md
└── MANUAL.html

Documentos Gerados pelo Sistema

Documento Descrição
Autorização de Abertura Despacho formal para início do processo, assinado pela autoridade competente
Aviso de Dispensa Aviso formatado para publicação no PNCP (Art. 75, §3º)
Ata de Sessão Documento completo do processo com propostas, certidões e espaço para assinaturas
Mapa de Preços Tabela comparativa de propostas recebidas
Justificativa de Enquadramento Legal Declaração formal do enquadramento na hipótese de dispensa (Art. 72, III)
Despacho de Recusa / Desclassificação Decisão fundamentada de recusa de proposta (Art. 59)
Despacho de Habilitação Decisão formal de habilitação do fornecedor (Art. 69)
Despacho de Inabilitação Decisão fundamentada de inabilitação do fornecedor (Art. 69 e 72)
Termo de Adjudicação Formalização da declaração do vencedor (Art. 18, §1º)
Termo de Homologação Aprovação do procedimento pela autoridade competente (Art. 71)
Extrato de Contrato Extrato para publicação no Diário Oficial e PNCP (Art. 94)
Relatório Geral Visão consolidada de todos os processos com filtros aplicados
Relatório Executivo KPIs, gráfico por status e alertas para gestores

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


Base Legal

  • Lei Federal nº 14.133/2021 — Nova Lei de Licitações e Contratos Administrativos (Art. 75 — hipóteses de dispensa)
  • Decreto nº 12.807/2025 — atualização dos limites de valor para dispensa (vigente desde 1º jan/2026)
    • Obras e engenharia: R$ 130.984,20
    • Bens e serviços: R$ 65.492,11
  • IN SEGES nº 65/2021 — pesquisa de preços para aquisições de bens e contratação de serviços
  • PNCP — Portal Nacional de Contratações Públicas (prazo mínimo de 3 dias úteis, Art. 75 §3°)

Segurança

  • Senhas armazenadas com PBKDF2-HMAC-SHA256 e salt aleatório por usuário
  • Sessões server-side invalidadas automaticamente por inatividade
  • Acesso à API exige token de sessão em todas as rotas (exceto login e verificação)
  • Upload restrito a extensões seguras (PDF, DOCX, imagens, planilhas) com limite de 20 MB por arquivo, aplicado nos dois lados: a tela recusa antes de enviar e o servidor rejeita o que passar
  • 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, proxy CNPJ
waitress Servidor WSGI puro-Python que atende as requisições — vendorizado na pasta waitress/, nada a instalar
SQLite Armazenamento persistente dos dados (sgcd.db)
ReceitaWS / BrasilAPI Consulta de CNPJ (primária + fallback automático)
ViaCEP Preenchimento automático de endereço por CEP

Desenvolvimento

O sistema não exige nenhuma instalação: roda com a biblioteca padrão do Python mais o waitress, que vem vendorizado na pasta waitress/ do repositório (puro-Python, sem pip install). O frontend é HTML/CSS/JS puro, sem frameworks. Para quem for alterar o código, há um lint opcional que verifica variáveis indefinidas no JavaScript de SGCD.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 (SGCA, SGDP 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, processos, fornecedores, auditoria, configurações, usuários, backup):

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 processo, gerar 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 sgcd.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 sgcd.db na pasta do sistema. Faça backups regulares em Configurações → Backup de Dados e mantenha cópia do sgcd.db em local seguro.

About

Sistema de Gestão de Contratação Direta — Dispensas de Licitação conforme a Lei 14.133/2021

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages