| Data de elaboração | 18/11/2025 |
|---|---|
| Responsável pelo estudo | Jônatas Neves Legal |
| Equipe do estudo | CAOS |
| Alvo | Governa RH, módulo governa-rh-calculo |
| Origem | Melhoria: Adequação do antigo Auxílio Transporte que passou a ser Auxílio Deslocamento |
| Objetivo | Implementar a concessão do Auxílio Deslocamento |
| Documentação correlata |
Código-fonte: - - |
| Observações | A solução propõe a substituição do antigo Auxílio Transporte que passou a ser denominado Auxílio Deslocamento, com novas regras quanto aos critérios de concessão, valores e forma de pagamento |
Conforme a Lei Complementar nº 1.306, de 23 de outubro de 2025, o antigo Auxílio Transporte passou a ser denominado Auxílio Deslocamento, com novas regras quanto aos critérios de concessão, valores e forma de pagamento, entrando em vigor a partir de novembro/2025. Atualmente, o benefício será de R$ 200,00 mensais, destinado aos servidores ativos da administração direta e indireta cuja remuneração mensal não ultrapasse R$ 6.200,00 (base de cálculo do IR). O auxílio tem caráter indenizatório, não é incorporado à remuneração e não sofre desconto previdenciário ou de IR.
Atualmente, o cálculo do vale transporte é executado no método CalculoTransporte.calcularValeTransporte(...). Ainda, este método é invocado nos outros métodos CalculoPagamentoFolha.calcularPagamentoFolha(...) e CalculoPagamentoFolha.calcularBaseDoPagamentoFolha(...) , sendo este segundo utilizado para servidores com mais de uma matrícula.
Código relevante:
549:552:governa-rh-calculo/src/main/java/br/com/governa/rh/calculo/folha/CalculoPagamentoFolha.java
// Calcular vale transporte
if (servidorEfetivo.getPercursoId() != null) {
calculoTransporte.calcularValeTransporte(servidorCalculoCtx, rotinaPorVerbaIdMap, moedaValorCtx, totalDiasUteis, paramSistema);
}
O cálculo do vale transporte, segundo o código acima, possui apenas uma restrição quanto a sua aplicação, condicionada por “if (servidorEfetivo.getPercursoId() != null)” sendo obrigatório o servidor estar vinculado a um percurso.
Código relevante:
74:127:governa-rh-calculo/src/main/java/br/com/governa/rh/calculo/folha/CalculoTransporte.java
public void calcularValeTransporte(ServidorCalculoContexto servidorCalculo, Map<Long, VerbaRotina> rotinaPorVerbaIdMap,
MoedaValorContexto moedaValorCtx, Integer totalDiasUteis, ParamSistema paramSistema)
throws ParseException, RestricaoNegocioExcecao, FormulaCalculoExcecao, ItemInvalidoExcecao {
if (servidorCalculo.getServidorEfetivo().getPercursoId() == null) {
return;
}
ServidorMensalVisao servidorEfetivo = servidorCalculo.getServidorEfetivo();
Integer mesReferencia = servidorEfetivo.getMesReferencia();
Long cidadeId = servidorEfetivo.getCidadeTrabalhoId();
Percurso percurso = percursoBO.buscar(servidorEfetivo.getPercursoId());
// Utiliza com base o próximo mês referência
if ((boolean) StringUtil.isNull(percurso.getValeTransporteAdiantado(), false)) {
mesReferencia = MesReferenciaUtil.retornarMesReferenciaProximo(mesReferencia);
}
// A variavel totalDiasUteis ignora os feriados do tipo ponto facultativo
if ((boolean) StringUtil.isNull(paramSistema.getConsiderarPontoFacultativoDiaUtil(), false)) {
totalDiasUteis = feriadoBO.buscarTotalDiasUteisPorMunicipioConsiderandoPontoFacultativo(mesReferencia,
servidorEfetivo.getCidadeTrabalhoId(), paramSistema.getEmpresa().getId());
} else {
totalDiasUteis = feriadoBO.buscarTotalDiasUteisPorMunicipio(mesReferencia, servidorEfetivo.getCidadeTrabalhoId(),
paramSistema.getEmpresa().getId());
}
if (!percurso.getUtilizarDiasUteis()) {
if (PercursoLancamentoEnum.TOTAL_INFORMADO.equals(percurso.getPercursoLancamentoEnum())) {
totalDiasUteis = percurso.getQuantidadeDias();
} else {
totalDiasUteis = DateUtil.calcularDiferencaDias(MesReferenciaUtil.retornarPrimeiroDiaMes(mesReferencia),
MesReferenciaUtil.retornarUltimoDiaMes(mesReferencia));
}
}
// Buscando o total de dias do mês descontando afastamento
int totalDiasAfastamento = servidorAfastamentoBO.buscarTotalDiasAfastamentoCalculo(servidorEfetivo.getServidor().getId(), mesReferencia,
cidadeId, percurso.getUtilizarDiasUteis());
// Buscando o total de dias do mês descontando férias
int totalDiasFerias = servidorFeriasBO.buscarTotalDiasFeriasCalculo(servidorCalculo.getServidorEfetivo().getIdServidor(), mesReferencia,
cidadeId, percurso.getUtilizarDiasUteis());
int totalDiasApontamento = servidorApontamentoBO.buscarTotalDiasApontamentoCalculo(servidorCalculo.getServidorEfetivo().getIdServidor(),
mesReferencia);
if (MesReferenciaUtil.retornarMes(mesReferencia).equals("02") && totalDiasFerias > 0 && totalDiasUteis == 30) {
totalDiasUteis = 28;
}
totalDiasUteis = totalDiasUteis - totalDiasAfastamento - totalDiasFerias - totalDiasApontamento;
executarCalculoValeTransporte(servidorCalculo, totalDiasUteis, moedaValorCtx, rotinaPorVerbaIdMap);
}
Código relevante:
132:182:governa-rh-calculo/src/main/java/br/com/governa/rh/calculo/folha/CalculoTransporte.java
private void executarCalculoValeTransporte(ServidorCalculoContexto servidorCalculoCtx, Integer totalDiasUteis, MoedaValorContexto moedaValorCtx,
Map<Long, VerbaRotina> rotinaPorVerbaIdMap) throws FormulaCalculoExcecao, ItemInvalidoExcecao {
log.debug("Iniciando o Cálculo de Vale Transporte para o Servidor Matricula: {}", servidorCalculoCtx.getServidorEfetivo().getMatricula());
ServidorMensalVisao servidorEfetivo = servidorCalculoCtx.getServidorEfetivo();
VerbaValorContexto verbaValorCtx = servidorCalculoCtx.getVerbaValorCtx();
ValorPercurso percursoValor = valorPercursoBO.buscarPorPercursoEMesRef(servidorEfetivo.getPercursoId(), servidorEfetivo.getMesReferencia());
if (percursoValor == null) {
log.debug("Não há dados do valor do percurso {} no mês de referencia {} ", servidorEfetivo.getPercursoId(),
servidorEfetivo.getMesReferencia());
return;
}
Fracao transporteQuantidade = new Fracao(percursoValor.getPercurso().getQuantidade());
transporteQuantidade = transporteQuantidade.multiplicarPor(totalDiasUteis);
Fracao transporteValor = new Fracao(percursoValor.getValor());
transporteValor = transporteValor.multiplicarPor(transporteQuantidade);
if (transporteValor.doubleValor() > 0 && rotinaPorVerbaIdMap.get(percursoValor.getVerba().getId()) != null) {
Double valorMaximoVerba = (Double) StringUtil.isNull(rotinaPorVerbaIdMap.get(percursoValor.getVerba().getId()).getValorMaximo(),
VERBA_VALOR_MAXIMO);
if (transporteValor.doubleValor() > valorMaximoVerba) {
transporteValor = new Fracao(valorMaximoVerba);
}
Fracao resultadoFormula;
if (percursoValor.getConsisteTeto()) {
String formula = rotinaPorVerbaIdMap.get(percursoValor.getVerba().getId()).getFormula();
if (!formula.trim().isEmpty()) {
resultadoFormula = formulaGerenciador.calcularFormula(formula, verbaValorCtx, moedaValorCtx,
servidorCalculoCtx.getVariavelValorCtx());
if (resultadoFormula.doubleValor() < transporteValor.doubleValor()) {
transporteValor = resultadoFormula;
}
}
}
VerbaAutomatica transporteVerba = new VerbaAutomatica(rotinaPorVerbaIdMap.get(percursoValor.getVerba().getId()));
if (calcularDesconto(servidorCalculoCtx, moedaValorCtx, rotinaPorVerbaIdMap, verbaValorCtx, percursoValor, transporteValor,
transporteVerba)) {
log.debug("Verba.: {} Valor.: {}", transporteVerba.getCodigoVerba(), transporteValor.doubleValor());
verbaValorCtx.adicionarAoContexto(transporteVerba, transporteValor, transporteQuantidade.doubleValor());
this.calculoVerba.acumularValores(servidorCalculoCtx, transporteVerba, transporteValor);
}
}
}
Por sua vez, o percurso deve ter vínculo com uma verba, sendo assim, caso a condição “if (percursoValor == null)” seja cumprida, estando o percurso sem vínculo com uma verba, o cálculo do vale transporte não ocorrerá. Os percursos cadastrados no sistema possuem vínculo com alguma das verbas na tabela a seguir:
| Código da Verba | Descrição da Verba |
| 575 | AUX TRANSP ART 84 LC 68 |
| 588 | AUX. TRANSP (CANDEIAS) |
| 1575 | AUX TRANSP RESOLUCAO 62 DPE |
| 3575 | Auxilio Transporte LC 874/16 |
| 4912 | AUXILIO TRANSPORTE SENTENCA JUDICIAL |
| 458 | AUXILIO DESLOCAMENTO |
Nota-se que a verba de código 458 (AUXILIO DESLOCAMENTO) já foi vinculada a alguns percursos, tendo seu valor calculado e atribuído ao financeiro de alguns servidores no mês de novembro de 2025.
A Lei Complementar nº 1.306, de 23 de outubro de 2025, trouxe mudanças nas regras quanto a concessão do auxílio deslocamento, atualmente destinado aos servidores ativos da administração direta e indireta cuja remuneração mensal não ultrapasse R$ 6.200,00 (base de cálculo do IR). Esta nova regra deve ser implementada no cálculo da folha de pagamento.
A solução mais rápida e com menor alteração será adicionar outra restrição ao trecho “if (servidorEfetivo.getPercursoId() != null)” concomitantemente verificando se o servidor possui a base de cálculo de IRRF acima de R$6.200,00. A verba 458 também deverá ser vinculada aos percursos a que compete para que esta seja utilizada no cálculo do auxílio.
Além disso, não haverá mais a verba de desconto do auxílio transporte, calculada pelo método “CalculoTransporte.calcularDesconto()” logo em seguida do cálculo do vale transporte, logo, deverá ser removido o seguinte trecho de código: “if (calcularDesconto(..)){..}”.
Tendo em vista que a concessão do auxílio deslocamento agora será condicionada a base de cálculo do IRRF, vale ressaltar alguns cenários:
Pequenas variações na base de cálculo do IRRF podem excluir ou incluir servidores no benefício, gerando questionamentos e possíveis contestações.
A mudança do Auxílio Transporte para Auxílio Deslocamento representa uma adequação legal e técnica importante, mas traz desafios operacionais. O principal ponto crítico é a correta aplicação da restrição baseada na base de cálculo do IRRF, especialmente em cenários de múltiplas matrículas e verbas dependentes do salário líquido. A mitigação passa por ajustes técnicos no sistema, testes e validações consistentes de vínculos de percursos. Com essas medidas, a implementação da verba 458 poderá ser automatizada.
governa-rh-calculo/folha/CalculoPagamentoFolha.javagoverna-rh-calculo/folha/CalculoTransporte.java