Cadastro das empresas de telecomunicações e de suas terceirizadas pela Prefeitura de Niterói, com a documentação exigida pelo art. 6º da Resolução Conjunta SECONSER/SEOP nº 001/2026.
- Empresas: código CADEX, CNPJ (validado), razão social, nome fantasia, tipo — operadora (concessionária contratante) ou terceirizada (empresa executora), nos termos do art. 2º —, contatos e endereço.
- Código CADEX: gerado no cadastro e permanente —
CADEX-OPE-2026-0001para operadoras de telecomunicações eCADEX-TER-2026-0001para terceirizadas; numeração própria por tipo, recomeçando a cada ano. Como o tipo está no código, ele não muda depois do cadastro. O formato é convenção da Prefeitura: a Resolução não define numeração. - Vínculos de contratação: contratante → contratada. Operadoras contratam terceirizadas, e uma terceirizada pode subcontratar outra em qualquer grau (arts. 2º, VIII, e 3º, § 1º) — toda empresa da cadeia é cadastrada e tem código CADEX. Uma terceirizada pode ter várias contratantes. O banco recusa ciclos. Encerrar um vínculo guarda a data de fim, sem apagar o histórico.
- Documentos do art. 6º: 15 tipos; 12 obrigatórios (incisos I a III) e 3 aplicáveis só a quem tem infraestrutura própria ou contrato de compartilhamento (incisos IV e V). Certidões e registros têm validade, com aviso 30 dias antes de vencer.
- Inscrição no CADEX (arts. 7º e 8º): situação (EM ANÁLISE, APTA, APTA – EM SANEAMENTO, INAPTA, INDEFERIDA; VENCIDA quando passa a validade), nº do processo, data do requerimento, portaria (nº e data de publicação), validade de 12 meses e data da notificação para saneamento. O banco só aceita APTA com a portaria e INAPTA depois de 30 dias da notificação. Toda mudança fica no histórico.
- Identificação de pessoal e veículos: responsáveis técnicos (conselho, registro, ART/RRT — art. 6º, II), pessoal técnico com dados do crachá (art. 23) e veículos/maquinário com placa e identificação visual (arts. 19 e 21). Nada é apagado: desativar mantém o histórico.
- Perfis:
gestor(SECONSER) cadastra e altera;cispsó consulta empresas, inscrição, vínculos, responsáveis, pessoal e veículos — não vê os documentos, que têm dados pessoais de sócios e procuradores. - Consulta pública em
/consulta, sem login (art. 7º, § 2º): logo, código, razão social, nome fantasia, CNPJ, tipo, contratantes, situação, validade e portaria. Nenhum contato, pessoa, veículo ou documento. - Logo da empresa: PNG, JPG ou WebP até 2 MB, enviado pelo gestor.
Fica no bucket público
logos(os documentos seguem no bucket privado). - Exportação: relação de empresas em planilha (.csv que abre no Excel), filtrando tipos, situações e as colunas; ficha da empresa pronta para imprimir ou salvar em PDF, escolhendo as seções. O CISP exporta o que já consulta — sem documentos.
- Termo inicial da validade: o sistema conta os 12 meses da data de publicação da portaria; a Resolução diz só "inscrição deferida".
- Inscrição vencida: passados os 12 meses sem renovação, o sistema mostra VENCIDA. A Resolução não nomeia esse estado nem diz se ele segue o rito do art. 8º (notificação + 30 dias).
- Incisos IV e V do art. 6º: tratados como "quando aplicável"; se a SECONSER exigir declaração negativa, é ajuste de catálogo.
- Veículo que atende várias operadoras: o art. 21 pede o nome da concessionária contratante na traseira; o sistema registra uma.
A versão anterior, com licenciamento, fiscalização e emergências, está
guardada no ramo legado.
React + Vite + Tailwind no navegador; Supabase (Postgres, login e arquivos) como banco. As regras ficam no banco: CNPJ válido e único, validade obrigatória nos documentos que vencem, código CADEX gerado pelo banco, contratada sempre terceirizada e sem ciclos na cadeia, e acesso restrito a servidores (RLS).
-
Supabase → Authentication → Users → Add user (marque Auto Confirm User).
-
Supabase → SQL Editor (
papel:'gestor'para a SECONSER,'cisp'para consulta):insert into servidores (user_id, nome, papel) select id, 'NOME DO SERVIDOR', 'gestor' from auth.users where email = 'EMAIL@niteroi.rj.gov.br';
Para tirar o acesso: delete from servidores where user_id = (select id from auth.users where email = '...');
cp .env.example .env # preencha a URL e a anon key do Supabase
npm install
npm run devnpm test # regras do frontend (CNPJ, vencimento dos documentos)
npm run db:test # banco: migrations + regras e acesso, num Postgres localCópia diária automática do banco e de todos os arquivos, criptografada, guardada por 90 dias no GitHub Actions. Configuração e restauração: docs/BACKUP.md.
- Banco: aplicar
supabase/migrations/*.sqlno projeto Supabase. - Site: Vercel, projeto
cadex-niteroi, ligado a este repositório; cada merge namainpublica sozinho. Variáveis:VITE_SUPABASE_URLeVITE_SUPABASE_ANON_KEY.