Contratos de Empreitada
Contratos formais de mão de obra terceirizada, com retenção 5%, aditivos e medições mensais
Por que existem
Empreitada (mão de obra terceirizada) tem ritual diferente da compra de material:
- Não é entregue de uma vez — é executada ao longo de meses
- Precisa de cláusulas que um PC normal não tem: cronograma físico-financeiro, forma de medição, reajuste, multa, retenção de garantia 5%, anti-vínculo trabalhista, recebimento provisório/definitivo
Onde acessar
Suprimentos → "Contratos de empreitada" (botão no header) ou diretamente /projects/[id]/suprimentos/contratos.
Criar contrato
FormWizard de 8 passos:
- Identificação — fornecedor (autocomplete), título
- Objeto — descrição detalhada do que será executado, tipo (preço unitário / global / preço misto / administração)
- Valor — valor total, forma de medição (etapa / preço unitário / global), multa por atraso, bônus antecipação
- Cronograma — data assinatura, início e fim previstos
- Reajuste — índice (INCC / IPCA / IGPM / sem reajuste), periodicidade
- Garantia — tipo (caução / seguro performance / retenção técnica / sem garantia), %
- ART/CNO — ART/RRT do responsável técnico, CNO da obra
- Revisão — resumo + observações
Cláusulas estruturadas (jsonb): objeto, multa, anti-vínculo, foro, reajuste, garantia, recebimento. Permite editor markdown opcional.
Aprovação
Após criar, sistema dispara approval contrato_empreitada:
- Default: gerente + diretor (sempre 2 níveis)
- > R$ 100k: gerente + jurídico + diretor (3 steps — referência ética da Lei 8.666)
Após aprovado, callback marca status='aprovado'. Você passa manualmente para assinado quando tiver assinatura física (data + URL do PDF).
Estados
em_elaboracao → aguardando_aprovacao → aprovado → assinado → em_execucao
→ em_recebimento_provisorio → em_garantia → recebimento_definitivo → encerrado
↓
distratado (qualquer estado pós-assinado)Aditivos
Toda alteração de prazo / valor / escopo é um aditivo formal, não edição direta.
Criar aditivo
No detalhe do contrato → seção Aditivos → "Novo aditivo":
- Tipo: prazo / valor / escopo / misto
- Descrição
- Δ valor (negativo = redução)
- Δ prazo (dias)
Regra dos 25%
Sistema calcula automaticamente:
pct_acumulado= soma dos aditivos aplicados ÷ valor originalpct_se_aprovado= projeção com este novo
Se pct_relevante > 25%, sobe alçada automaticamente:
- Acima de 25% → diretor sempre (
approval_policiesaditivo_contrato> 25→ diretor) - Notifica visualmente no dialog antes de submeter
Aplicar
Aditivo aprovado fica em status='aprovado'. O gerente clica "Aplicar ao contrato" para materializar a alteração:
- Trigger SQL atualiza
valor_aditivos_acumuladosdo contrato valor_atual(generated column) reflete imediatamente
Esse 2º clique registra quando o aditivo foi efetivamente aplicado (separado de quando foi aprovado).
Medições mensais
A cada mês, o empreiteiro apresenta boletim de medição. No detalhe do contrato → seção Medições → "Nova medição":
| Campo | Notas |
|---|---|
| Tipo | medicao / glosa / recebimento_provisorio / recebimento_definitivo |
| Mês referência | Data |
| Valor | Bruto da medição |
| % físico | Quanto da obra foi executada |
| Justificativa (glosa) | Obrigatório para refazimento |
Sistema calcula em tempo real:
- Retenção técnica = valor ×
garantia_pct(default 5%) - Líquido = valor - retenção - retenções tributárias (depois)
Acumula retencao_tecnica_acumulada no contrato para visibilidade.
Aprovação
Cada medição vai por medicao_empreiteiro (gerente sempre, diretor se > R$ 100k). Após aprovado, status vira aprovada.
Calcular retenções LC 116
Após medição aprovada, botão "Retenções" abre dialog:
- Selecione código de serviço LC 116/2003 (ex: 7.02 empreitada construção civil)
- Município ISS, alíquota override
- Toggles Simples Nacional + ISS retido no tomador
Sistema calcula automaticamente: INSS 11%, ISS, IRRF 1.5%, PIS/COFINS/CSLL 4.65%. Salva no retencoes_calculadas.
Gerar CAP da medição
Botão "Gerar CAP": cria conta a pagar com valor líquido (descontando retenção técnica + retenções tributárias).
Glosa (medição negativa)
Se na medição seguinte se constata que parte foi medida demais (refazimento), gera-se medição com tipo_lancamento='glosa' e valor negativo. Justificativa obrigatória (mínimo 10 chars).
Não estorna NF já emitida — gera glosa para a próxima.
Liberar retenção
Quando obra recebida, o empreiteiro pede para liberar a retenção técnica acumulada. Botão "Liberar retenção" numa medição aprovada:
- Cria approval
liberacao_retencao(alçada diretor) - Após aprovado, callback marca
medicao.retencao_liberada=trueautomaticamente - Visível no detalhe do contrato (KPI atualizado)
A retenção típica fica retida até recebimento definitivo (geralmente 90 dias após o recebimento provisório).
Recebimento provisório / definitivo
Marcos do contrato:
em_recebimento_provisorio— fim da obra física, começa contagem do prazo de garantiaem_garantia— período de defesa contra vícios construtivosrecebimento_definitivo— encerra contrato, libera todas as retenções
Acessível como mudança de status no detalhe + datas registráveis.
Permissões
| Permissão | Escopo | Default |
|---|---|---|
compras_contrato:read | project | Todos + jurídico |
compras_contrato:write | project | gerente |
compras_contrato:manage | project | diretor (aditivos, garantia, distrato) |
| `compras_medicao:read | write | manage` |
KPIs
No header do contrato:
- Valor original vs valor atual (com % aditivos — alerta visual se > 25%)
- Total medido
- Retenção líquida (acumulada - liberada)