O SGCA é uma aplicação web multiusuário para o Departamento de Gestão e Contratos, destinada ao controle de Contratos Administrativos e Atas de Registro de Preços conforme a Lei nº 14.133/2021.
O sistema nasceu como uma adaptação estrutural do SGCD (Sistema de Gestão de Contratação Direta), reaproveitando os módulos administrativos que não são específicos de nenhum tipo de processo — autenticação, usuários, fornecedores, auditoria, notificações e backup — e tendo sua arquitetura posteriormente padronizada com a do SGDP (Sistema de Gestão de Documentos da Procuradoria), o "irmão" mais maduro da mesma família — que inclui ainda o SGEA (Sistema de Gestão de Estoque do Almoxarifado).
Funciona em rede local: um único computador executa o servidor e todos os usuários acessam pelo navegador via IP ou localhost.
- Dashboard geral — primeira tela após o login, com indicadores consolidados de Contratos e Atas, gráfico de vencimentos dos próximos 6 meses e lista dos próximos vencimentos (contratos, atas, garantias e sanções)
- Contratos — cadastro, Kanban por status (Vigente/Em prorrogação/Encerrado/Rescindido), vínculo com fornecedor, aditivos e apostilamentos com alerta de limite legal de 25% (Art. 125, Lei nº 14.133/2021); vigência final calculada automaticamente a partir da vigência inicial (+12 meses), editável manualmente
- Relatórios gerenciais — nove documentos em A4 (execução financeira dos contratos, saldo das atas, aditivos do Art. 125, fiscalização, vencimentos e prazos, garantias, recebimento do objeto, contratos por fornecedor e riscos consolidados), considerando todos os registros e não apenas o filtro da tela
- Atas de Registro de Preços — cadastro, itens registrados com código e classificação CMMET (Catálogo Municipal de Materiais e Especificações Técnicas), código Fiorilli/SCPI (CADPRO), apresentação comercial e controle de saldo (quantidade utilizada vs. registrada) com alerta visual de esgotamento; vigência final calculada automaticamente a partir da data de assinatura (+12 meses), editável manualmente
- Documentos gerados — Extrato de Contrato e Termo Aditivo/Apostilamento (um por tipo: prazo, valor, qualitativo, reequilíbrio, repactuação), no mesmo padrão visual A4 do SGCD
- Exportação PNCP — JSON de Contratos e de Atas no formato esperado pelo Portal Nacional de Contratações Públicas, com aviso de campos pendentes
- Agenda de Vencimentos unificada — contratos, atas, garantias contratuais, fim de sanções e aniversários de reajuste, agrupados por urgência e filtráveis por tipo, com envio manual ou automático (resumo diário) por e-mail, incluindo aviso individual ao fiscal cadastrado no contrato
- Exportação de Contratos, Atas, Fornecedores e Trilha de Auditoria em CSV para planilha, respeitando os filtros ativos na tela
- Garantia Contratual — modalidade, valor, vencimento e devolução, com alerta na Agenda de Vencimentos
- Sanções e Penalidades — registro interno por fornecedor (advertência, multa, suspensão, impedimento, inidoneidade), com aviso ao selecionar um fornecedor sancionado em um Contrato/Ata e entrada do fim do prazo na Agenda de Vencimentos
- Reajuste por índice (IPCA-E, IGP-M, INCC-M, INPC) em aditivos de repactuação/reequilíbrio, com busca automática da variação acumulada no período direto do Banco Central (SGS) e cálculo automático do novo valor global
- Anexos assinados (PDF, múltiplos) vinculados ao registro do contrato e da ata
- Vínculo Contrato ↔ Ata de Registro de Preços — campo "Ata de Origem" para contratações por adesão a uma ARP nossa; para adesão a ARP de outro órgão gerenciador (não cadastrada no sistema), campos de texto "Nº da ARP de Adesão" e "Órgão Gerenciador de Origem"
- Gestor do Contrato com e-mail — recebe o mesmo aviso automático de vencimento e de fiscalização mensal pendente que o fiscal
- Relatórios consolidados de Contratos, Atas e Sanções (por fornecedor ou global), no mesmo padrão A4 usado nos demais documentos
- Indicadores e gráfico de vencimentos nas telas de Contratos e de Atas — vigentes, vencendo em 30 dias, valor total, saldo baixo e vencimentos dos próximos 6 meses
- Atalho "Ver Contratos" a partir do cadastro do fornecedor, e prorrogação assistida (sugestão automática de nova vigência ao criar aditivo de prazo)
- Numeração automática sugerida e validação de número duplicado ao cadastrar Contrato/Ata
- Filtro por Fiscal na tela de Contratos, e alerta de "Contratos sem Fiscal" no Dashboard (Art. 117, Lei 14.133/2021)
- Busca global (botão na sidebar ou atalho Ctrl+K) — pesquisa por número, objeto, órgão gerenciador e fornecedor em todos os Contratos e Atas, com acesso direto ao registro
- Histórico do registro — botão "🕘 Histórico" no Contrato/Ata mostra a trilha de auditoria filtrada só para aquele registro
- Fiscalização Mensal no Contrato — data, fiscal, parecer e observações, com alerta "Fiscalização Atrasada" no Dashboard quando um contrato vigente fica mais de 45 dias sem registro (Art. 117)
- Matriz de Risco do Contrato — riscos com probabilidade, impacto, mitigação e responsável, com documento gerável (Art. 22)
- Recebimento do Objeto — datas e responsáveis pelo recebimento provisório e definitivo, com Termo de Recebimento gerável (Art. 140)
- Subcontratação — CNPJ, razão social e percentual do subcontratado, com alerta se o total ultrapassar o limite definido para o contrato (Art. 122)
- Item do Plano de Contratações Anual (PCA) — campo de rastreabilidade no Contrato (Art. 12, Lei 14.133/2021 / IN SEGES nº 81/2022)
- Alerta de vigência total próxima do limite legal — soma da vigência inicial com todas as prorrogações, aviso configurável por contrato (Art. 107)
- Aniversário de reajuste na Agenda de Vencimentos — lembrete 12 meses após o último aditivo de reequilíbrio/repactuação (ou desde a assinatura, se nunca houve um)
- Lembrete de Fiscalização Mensal por e-mail — aviso automático ao fiscal e ao gestor quando o contrato passa 30 dias sem registro de fiscalização
- Documentos gerados reanexáveis — Extrato, Termos Aditivos, Matriz de Risco e Termo de Recebimento podem ser salvos como PDF e reanexados ao contrato, guardados junto dos demais anexos
- Autenticação multiusuário com hashing PBKDF2-HMAC-SHA256 e gestão de usuários pelo admin
- Cadastro de fornecedores com consulta automática de CNPJ via ReceitaWS/BrasilAPI, controle de certidões com alertas de vencimento e exclusão (lixeira) — bloqueada enquanto o fornecedor tiver contratos ou atas vinculados
- Selo de alerta na linha do Fornecedor conforme o Diagnóstico de Integridade — "🔴 CNPJ duplicado" ou "🟡 CNPJ inválido" na tabela de Fornecedores, indicando o motivo
- Importação de fornecedores via CSV e relatório consolidado
- Configurações — dados do órgão, brasão, tema claro/escuro, SMTP
- Notificações in-app — alertas de certidões de fornecedores vencendo
- Trilha de auditoria global — tabela com filtros por tipo de evento, período e usuário (vocabulário próprio do domínio de contratos/atas)
- Backup automático ao encerrar o sistema (JSON + banco de dados SQLite) com rotação configurável
- Sincronização por backup JSON entre instalações do SGCA — mescla os dados de outra máquina com os atuais, sem substituir o banco inteiro, com revisão dos registros alterados dos dois lados
- Cadastro de fornecedores compartilhado com SGCD/SGEA — botões "Exportar cadastro" e "Sincronizar cadastro", casando os fornecedores por CNPJ, com tela de revisão registro a registro quando o mesmo fornecedor mudou nos dois sistemas
- Exclusão de Contratos e Atas — move para a Lixeira após confirmação em três etapas (mesmo rigor do Factory Reset), com alerta informativo se houver fornecedor vinculado
- Lixeira — fornecedores, contratos e atas excluídos ficam recuperáveis por 30 dias
- Termo de Rescisão — documento formal gerado quando o status do Contrato é "Rescindido" (Art. 137 a 139, Lei nº 14.133/2021)
- Execução Financeira do Contrato e da Ata — registro de pagamentos (data, valor, nº de empenho/nota fiscal) com saldo calculado automaticamente contra o valor global/registrado
- Alimentar do Fiorilli — importa o relatório "Listagem de Licitações Integradas e Pedidos" (módulo Compras 07.05.02, CSV) do sistema contábil oficial e preenche a quantidade utilizada de cada item das Atas pela quantidade líquida pedida (Σ pedidos − Σ cancelamentos), casando por processo licitatório + código Fiorilli; somente leitura sobre o Fiorilli e idempotente, com prévia por ata (saldo negativo sinalizado) e lista dos itens ainda sem código cadastrado
- Consulta CEIS/CNEP automatizada — sanções federais por CNPJ via API do Portal da Transparência/CGU, no cadastro de Fornecedores
- Exportação em Excel (.xlsx), além de CSV, em Contratos, Atas, Fornecedores e Auditoria
- Marca d'água "MINUTA" — todo documento gerado a partir de um contrato sai marcado como minuta enquanto não houver um PDF assinado anexado ao registro; os relatórios gerenciais nunca recebem a marca
- Bloqueio de edição concorrente — ao salvar, o sistema detecta se o registro foi alterado por outro usuário depois que a tela foi carregada e avisa, em vez de sobrescrever silenciosamente o trabalho alheio
- Faixa de aviso de servidor desatualizado — quando o servidor em execução é mais antigo que a página carregada (atualização aplicada sem reiniciar), uma faixa no topo orienta a reiniciar antes que funções novas falhem
- Painel "Erros recentes" (Configurações → Diagnóstico, só admin) — erros registrados no log, agrupados por tipo e contagem, incluindo os ocorridos no navegador dos usuários
- Etiquetas (tags) em Contratos e Atas — marcadores livres com sugestão dos valores já usados, exibidos nos cards e filtráveis por "Todas as etiquetas"
- Diagnóstico e correção automática de rede — verifica IP, porta, perfil de rede e firewall
Fora de escopo por decisão de projeto: execução orçamentária/financeira completa (empenho, liquidação, pagamento formal) integrada ao sistema contábil do órgão — o SGCA registra apenas um controle simples de pagamentos por contrato/ata, não substitui o sistema financeiro oficial.
- 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 vem vendorizado na pasta
waitress/do próprio repositório. Não hápip install, nem download, nem acesso à internet na instalação
Servidor sem Python instalado (ex.: Windows Server bloqueado por política de TI): o
Iniciar SGCA.batdetecta 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) paraC:\Python312-embed\— não exige instalação nem privilégio de administrador.
- Copie a pasta
SGCA/para o computador que atuará como servidor - Clique duas vezes em
Iniciar SGCA.bat - Selecione o modo de operação no menu que aparecer
- Faça login com as credenciais iniciais abaixo e altere a senha imediatamente
⚠️ Importante: abrir oSGCA.htmldiretamente pelo navegador (sem o servidor) impede o funcionamento do sistema. Use sempre oIniciar SGCA.bat.
| Campo | Valor |
|---|---|
| Usuário | admin |
| Senha | admin123 |
O Iniciar SGCA.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 |
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ó):
- Execute
Liberar Porta SGCA.batcomo Administrador (botão direito → Executar como administrador) — cria a regra no Firewall do Windows liberando a porta 3002 para conexões de entrada - Inicie o sistema pelo
Iniciar SGCA.bate deixe a máquina ligada — ao iniciar, o console mostra o endereço de rede pronto para distribuir (Rede: http://<IP>:3002/SGCA.html)
Nas outras máquinas: basta abrir o navegador (Chrome ou Edge) no endereço do servidor:
http://192.168.x.x:3002/SGCA.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 SGCA.bat (ou a opção [1] do Iniciar SGCA.bat) na máquina servidora: ele descobre o IP e verifica/corrige automaticamente firewall e perfil de 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.
SGCA/
├── SGCA.html # Frontend — aplicação web
├── server.py # Servidor Python (API REST + SQLite) — porta 3002
├── base.css # Folha de estilo compartilhada 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 da família (cópia distribuída)
├── _esqueleto.sha256 # Manifesto de conferência das cópias compartilhadas
├── waitress/ # Servidor WSGI vendorizado (puro-Python, sem instalação)
├── scripts/ # Scripts de apoio (verificação do esqueleto, lint)
├── tests/ # Suíte de testes automatizados do backend
│ ├── test_server.py
│ └── e2e/ # Testes E2E (Playwright) — navegador real de ponta a ponta
├── Iniciar SGCA.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 SGCA.bat # Cria atalho na área de trabalho com ícone
├── Criar Atalho SGCA.ps1 # Script PowerShell de criação do atalho
├── Diagnostico SGCA.bat # Roda o diagnóstico de rede (clique duplo)
├── Liberar Porta SGCA.bat # Cria regra de firewall para a porta (Admin)
├── diagnostico.py # Script de diagnóstico de rede e firewall
├── sgca.ico # Ícone do sistema
├── sgca.db # Banco de dados SQLite (criado automaticamente)
├── uploads/ # Anexos armazenados (criado automaticamente)
├── backups/ # Backups automáticos (criado automaticamente)
├── requirements.txt # Nada a instalar (stdlib do Python + waitress vendorizado)
├── README.md
├── CHANGELOG.md
└── MANUAL.html
| Documento | Descrição |
|---|---|
| Extrato de Contrato | Extrato para publicação no Diário Oficial e no PNCP |
| Termo Aditivo | Formalização de acréscimo, supressão ou prorrogação contratual |
| Termo de Recebimento | Registro do recebimento do objeto |
| Termo de Rescisão | Formalização da rescisão contratual |
| Matriz de Risco | Quadro de riscos do contrato |
| Relatório de Contratos / Atas | Visão consolidada com os filtros aplicados |
| Relatório de Fornecedores | Cadastro de fornecedores com certidões |
| Relatório de Sanções | Fornecedores sancionados (CEIS/CNEP) |
| Relatório de Auditoria | Trilha de eventos do sistema |
| Relatório de Integridade | Estado do banco, backups e contagens |
Todos os documentos abrem em janela separada com botão "🖨 Imprimir / Salvar PDF".
- 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)
- 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
| 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 (vendorizado) | Servidor WSGI que atende as requisições — puro-Python, incluído na pasta waitress/ do repositório, sem instalação |
| SQLite | Armazenamento persistente dos dados (sgca.db) |
| ReceitaWS / BrasilAPI | Consulta de CNPJ (primária + fallback automático) |
| ViaCEP | Preenchimento automático de endereço por CEP |
O sistema em si não exige instalação de nada: Python stdlib + HTML puro, mais o waitress vendorizado em waitress/ — não é biblioteca padrão, mas viaja junto do repositório, então não há passo de instalação de dependências. Para quem for alterar o código, há um lint opcional que verifica variáveis indefinidas no JavaScript de SGCA.html:
npm install # uma vez, instala apenas o ESLint (ferramenta de dev, não é usada em produção)
npm run lintParte do código é compartilhada com os outros sistemas da família (SGCD, 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.pyHá 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, contratos, atas, fornecedores, auditoria, configurações, usuários, backup):
python -m unittest discover -s tests -vHá 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 contrato):
npm install
npx playwright install chromium # uma vez, baixa o navegador de teste
npm run test:e2eRoda contra um banco/uploads/backups temporários (nunca o sgca.db real), criados e descartados automaticamente a cada execução.
Consulte o CHANGELOG.md para o histórico completo de versões e alterações.
Contribuições são bem-vindas! Veja o CONTRIBUTING.md para orientações sobre como reportar bugs, sugerir funcionalidades e enviar Pull Requests.
Distribuído sob a licença MIT. Veja LICENSE para o texto completo.
Aviso: Os dados ficam armazenados no arquivo
sgca.dbna pasta do sistema. Faça backups regulares em Configurações → Backup de Dados e mantenha cópia dosgca.dbem local seguro.