Dividi salário por 160 e achei R$ 107 a hora. Refiz a conta com as horas que sobram e deu R$ 268,68
Dividir salário por 160 é a conta mais usada para chegar no valor da hora de um desenvolvedor no Brasil. Ela devolve um número que não aparece em contrato nenhum, nem de quem vende hora nem de quem compra.
Escrevi a conta inteira num script para parar de discutir isso de cabeça. A entrada é uma pessoa CLT com uns R$ 11,8 mil de salário base, empresa no Simples Nacional. A saída são três valores da mesma pessoa, no mesmo mês: R$ 107,21 pela divisão por 160, R$ 184,85 de custo por hora faturável e R$ 268,68 de preço mínimo da hora.
O caminho entre o primeiro e o terceiro é o que uma tabela de salário nunca mostra.
A folha, linha por linha
| linha | por mês |
|---|---|
| salário base | R$ 11.800,00 |
| 13º provisionado | R$ 983,33 |
| férias + 1/3 provisionadas | R$ 1.311,11 |
| FGTS 8% | R$ 1.127,56 |
| provisão de multa (40% do FGTS) | R$ 451,02 |
| benefícios (saúde + alimentação) | R$ 1.480,00 |
| total | R$ 17.153,02 |
O 13º e as férias não são bônus de dezembro e janeiro, são 1/12 e 1/12 mais um terço que você guarda todo mês. O FGTS incide sobre os três, por isso são 8% de R$ 14.094,44 e não de R$ 11.800. A multa rescisória eu provisiono inteira, nos 40%: se na sua operação a maioria pede demissão em vez de ser demitida, use uma fração e o preço final cai uns R$ 6 na hora.
Um aviso de premissa que muda tudo: no anexo III do Simples a contribuição patronal está dentro da alíquota, então não existe linha de INSS patronal de 20% aqui. Fora do Simples, some perto de 26,8% sobre salário, 13º e férias, uns R$ 3.777 por mês, e o custo por hora faturável sai de R$ 184,85 para uns R$ 219,67 sem mudar mais nada.
As 160 horas que ninguém trabalha
160 é o número de folha de pagamento, não de calendário. O ano tem 261 dias úteis e uns 9 feriados nacionais caindo em dia útil, o que deixa 252 dias, ou 2.016 horas contratadas.
Desse total saem as férias, 30 dias corridos que valem perto de 22 dias úteis, mais 176 horas. Saem também as ausências, atestado, falta e luto, que eu provisiono em perto de 4 dias por ano, outras 32 horas. Restam 1.808 horas de presença, algo como 150 por mês.
Hora de presença ainda não virou hora de projeto. Cerimônia, 1:1, entrevista de candidato, onboarding de quem chegou, incidente de outro cliente, estudo obrigatório e troca de contexto comem um pedaço fixo disso. No apontamento da operação que eu administro, a média de um semestre fica perto de 72% das horas de presença virando hora de projeto. Esse é o número que você tem de medir aí, porque é o que mais move o resultado final.
1.808 vezes 0,72 dá 1.302 horas por ano, ou 108 por mês. As 160 do contracheque viraram 108 na planilha de faturamento.
O script
#!/usr/bin/env python3
# custo_hora.py
SALARIO_BASE = 11_800.00
BENEFICIOS = 1_480.00 # saúde + alimentação
OVERHEAD_MES = 2_900.00 # ferramentas, contabilidade, máquina, gestão
JORNADA_H = 8
DIAS_UTEIS_ANO = 252 # 261 menos uns 9 feriados em dia útil
FERIAS_DIAS = 22 # 30 dias corridos em dias úteis
AUSENCIAS_DIAS = 4 # atestado, falta, luto
OCUPACAO = 0.72 # presença que vira hora de projeto
IMPOSTO = 0.112 # Simples, anexo III, alíquota efetiva
MARGEM = 0.20
decimo = SALARIO_BASE / 12
ferias = SALARIO_BASE * (4 / 3) / 12
fgts = 0.08 * (SALARIO_BASE + decimo + ferias)
multa = 0.40 * fgts
folha = SALARIO_BASE + decimo + ferias + fgts + multa + BENEFICIOS
h_contrato = DIAS_UTEIS_ANO * JORNADA_H
h_presenca = (DIAS_UTEIS_ANO - FERIAS_DIAS - AUSENCIAS_DIAS) * JORNADA_H
h_faturavel = h_presenca * OCUPACAO
hora_ingenua = folha / 160
custo_hora = (folha + OVERHEAD_MES) * 12 / h_faturavel
preco_hora = custo_hora / (1 - IMPOSTO - MARGEM)
print(f"{'folha + provisões / mês':<26} R$ {folha:>9.2f}")
print(f"{'horas contratadas / ano':<26} {h_contrato:>12.0f}")
print(f"{'horas de presença / ano':<26} {h_presenca:>12.0f}")
print(f"{'horas faturáveis / ano':<26} {h_faturavel:>12.0f}")
print(f"{'horas faturáveis / mês':<26} {h_faturavel / 12:>12.1f}")
print(f"{'hora por salário / 160':<26} R$ {hora_ingenua:>9.2f}")
print(f"{'custo por hora faturável':<26} R$ {custo_hora:>9.2f}")
print(f"{'preço mínimo da hora':<26} R$ {preco_hora:>9.2f}")
$ python3 -I custo_hora.py
folha + provisões / mês R$ 17153.02
horas contratadas / ano 2016
horas de presença / ano 1808
horas faturáveis / ano 1302
horas faturáveis / mês 108.5
hora por salário / 160 R$ 107.21
custo por hora faturável R$ 184.85
preço mínimo da hora R$ 268.68
O overhead de R$ 2.900 por pessoa é rateio de ferramenta, licença, contabilidade, máquina e o tempo de quem administra. Quem é PJ sozinho troca essa linha por outra bem menor e mantém o resto da estrutura.
A premissa que move o preço inteiro
Mexi em uma variável de cada vez para ver qual dói.
Ocupação de 72% para 60%: as horas faturáveis caem para 1.085 no ano e o preço mínimo vai de R$ 268,68 para R$ 322,43. Ocupação de 72% para 85%: o preço cai para R$ 227,59.
Agora o salário. Subir a base de R$ 11.800 para R$ 13.000, com todas as provisões refeitas, leva o preço de R$ 268,68 para R$ 290,05.
Ou seja, 12 pontos de ocupação pesam mais que R$ 1.200 de aumento. Quem discute preço de hora olhando tabela de salário está olhando a variável menos sensível da conta, e é por isso que a pesquisa de salário nunca fecha com a proposta que chega por email.
O que eu quero saber de vocês
A ocupação de 72% é a minha, medida num semestre, numa operação pequena. Ela é a premissa mais frágil do script e a que eu mais queria comparar: qual ocupação faturável sai do apontamento de verdade na sua empresa, e vocês provisionam a multa de 40% inteira ou uma fração dela?
Fonte da tabela de referência de hora que eu uso para comparar o resultado: https://revin.com.br/pt/blog/valor-hora-desenvolvimento-brasil-2026