CNDs — Certidões Negativas
Cadastro de certidões do fornecedor com classificação automática de status e cron diário de vencimento
Por que importa
Pagar fornecedor com CND vencida cria responsabilidade solidária para a incorporadora — especialmente em empreitada (Lei 9.711/1998 e CLT). Pode gerar passivo trabalhista, previdenciário ou fiscal.
OctaBuild força o registro e monitoramento das CNDs antes de cada pagamento.
Tipos cobertos
| Tipo | Emissor |
|---|---|
| Federal | RFB / PGFN (CND Federal Conjunta) |
| FGTS | Caixa (CRF-FGTS) |
| Trabalhista | TST (CNDT) |
| Estadual | SEFAZ do estado |
| Municipal | Prefeitura (ISS) |
Cadastrar
Financeiro → Fornecedores → menu ⋮ → Qualificação → aba CNDs
Campos:
- Tipo (federal / fgts / trabalhista / estadual / municipal)
- Emissor (UF para estadual, código IBGE para municipal)
- Número da certidão
- Validade até (data — campo crítico)
- Arquivo (PDF/imagem — upload para
compras-cnds/no Supabase Storage) - Observações
Status automático
Trigger SQL classifica conforme validade_ate:
| Status | Quando |
|---|---|
vigente | Validade > 30 dias no futuro |
a_vencer | Validade entre hoje e +30 dias |
vencida | Validade no passado |
irregular | Marcado manualmente — fornecedor com pendências fiscais |
positiva_com_efeitos_negativa | Manual — para fornecedor com débito mas com situação juridicamente equiparada à negativa |
Reclassificação automática a cada update da validade_ate.
Cron diário
/api/cron/cnds-vencimento roda às 14:00 UTC (11h BRT):
- Força reclassificação de todas as CNDs (refresca status)
- Para cada CND vencida ou a vencer (≤ 7 dias), busca admins/financeiro da org
- Envia digest por email (Resend) com lista agrupada:
- CNDs vencidas (vermelho)
- CNDs a vencer (amarelo)
- Idempotente: não envia mais que 1 email por dia por CND (via
ultima_notificacao_em)
Verificação no pagamento
Quando você gera CAP via recebimento ou medição, sistema chama checkSupplierCnds(supplierId):
{
ok: false,
bloqueia: true, // tem vencidas ou irregulares
alertas: [
"CND Federal VENCIDA em 15/04/2026",
"CRF FGTS a vencer em 02/05/2026"
],
vencidas: [...],
a_vencer: [...],
irregulares: [...]
}Response da geração de CAP retorna cnd_warnings[] e cnd_bloqueia_pagamento. UI mostra alerta antes do pagamento ser efetivado.
Atualmente alerta apenas. Bloqueio rígido configurável é planejado para a próxima iteração.
Visualização
Aba CNDs no qualification dialog mostra cada certidão com:
- Ícone colorido (verde/amarelo/vermelho)
- Tipo + emissor
- "Validade dd/mm/aaaa (em N dias)" ou "(vencida há N dias)"
- Badge de status
- Botão para baixar PDF (URL assinada 60s)
- Botão deletar
Permissões
| Permissão | Escopo | Default |
|---|---|---|
cnds:read | global | Todos os roles |
cnds:write | global | Financeiro, administrativo, diretor, proprietário |
cnds:manage | global | Financeiro, diretor, proprietário (consultas automáticas — phase 2+) |
Consulta automática
Para Phase 2.1+: integração com APIs públicas para buscar CNDs automaticamente:
- Receita Federal (CND Federal)
- Caixa (FGTS)
- TST (CNDT)
- SEFAZ (algumas UFs)
Hoje é cadastro manual + arquivo. Trigger ainda assim mantém o status sempre atual.
Storage
Bucket compras-cnds (privado):
- RLS por organização:
<org_id>/<entity_id>/<filename> - Apenas membros da org acessam
- URL assinada de 60s para download — não fica público