IMPORTANTE: Alteração na fórmula do evento “126 – Salário Família Normal”

Informamos que a fórmula do evento 126 – Salário Família Normal, passou por algumas alterações, confira abaixo o que mudou e compare a fórmula anterior com a alterada.

Para ter acesso ao pacote de fórmulas atualizado clique aqui.

O que mudou: Na versão anterior da fórmula, especificamente na parte que verifica se a matrícula está afastada o mês todo pela previdência, a fórmula apenas validava se existia dias afastados na competência e já suspendia, porém, é necessário verificar se a matrícula iniciou a competência afastado para que suspenda o pagamento do salário família.

int dependentes = servidor.getDependenteSalarioFamilia(TipoSalarioFamilia.CELETISTA)

if (dependentes < 1) {

  suspender “Não há dependentes de salário família com o tipo ‘Celetista’ para o funcionário”

}

 

double base30 = Bases.valor(Bases.SALAFAM)

double base = Funcoes.remuneracao(matricula.tipo).valor + base30

if (TipoProcessamento.MENSAL.equals(calculo.tipoProcessamento) && SubTipoProcessamento.INTEGRAL.equals(calculo.subTipoProcessamento)) {

  base += Bases.valorCalculado(Bases.SALAFAM, TipoProcessamento.FERIAS, SubTipoProcessamento.INTEGRAL)

}

 

if (base <= 0) {

  suspender ‘Não há valor de base de salário família normal para cálculo’

}

 

def classificacoes = [

  ClassificacaoTipoAfastamento.LICENCA_COM_VENCIMENTOS,

  ClassificacaoTipoAfastamento.LICENCA_MATERNIDADE,

  ClassificacaoTipoAfastamento.ABORTO_NAO_CRIMINOSO,

  ClassificacaoTipoAfastamento.ADOCAO_GUARDA_JUDICIAL_DE_CRIANCA,

  ClassificacaoTipoAfastamento.PRORROGACAO_DA_LICENCA_MATERNIDADE,

  ClassificacaoTipoAfastamento.PRORROGACAO_DA_LICENCA_MATERNIDADE_11_770

]

 

int diastrab = Funcoes.diastrab()

int diasgozo = Funcoes.diasferias()

int cedidosemonus = Funcoes.cedidosemonus()

int diasafast = Funcoes.diasafastcalc30(calculo.competencia, classificacoes)

 

int diasferiasant = 0

if (TipoProcessamento.FERIAS.equals(calculo.tipoProcessamento)) {

  diasferiasant = Funcoes.diasFeriasAnteriores(periodoConcessao.dataInicioGozo)

}

 

int dias = diastrab + cedidosemonus + diasafast – diasferiasant

 

if (diasgozo == 0) {

  classificacoes = [

    3 : ClassificacaoTipoAfastamento.ACIDENTE_DE_TRABALHO_PREVIDENCIA,

    4 : ClassificacaoTipoAfastamento.SERVICO_MILITAR,

    6 : ClassificacaoTipoAfastamento.AUXILIO_DOENCA_PREVIDENCIA,

    7 : ClassificacaoTipoAfastamento.LICENCA_SEM_VENCIMENTOS,

    8 : ClassificacaoTipoAfastamento.DEMITIDO,

    9 : ClassificacaoTipoAfastamento.APOSENTADO,

    11: ClassificacaoTipoAfastamento.ACIDENTE_DE_TRAJETO_PREVIDENCIA,

    12: ClassificacaoTipoAfastamento.DOENCA_DO_TRABALHO_PREVIDENCIA

  ];

  

  for (classificacao in classificacoes) {

    def i = classificacao.key

    

    int diasAfastado = Afastamentos.buscaPorPeriodo(classificacoes[i]).count { it }

    if (diasAfastado > 0) {

      suspender “Não é possível calcular o salário família pois a matrícula possui um tipo de afastamento iniciado em competencia anterior ou atual que não é permitido para o cálculo”

    }

    if (i == 7 && [UnidadePagamento.DIARISTA, UnidadePagamento.HORISTA].contains(Funcoes.remuneracao(matricula.tipo).unidade)) {

      if (Funcoes.afaslicsvenc() == calculo.quantidadeDiasCompetencia) {

        suspender “Não é possível calcular o salário família para matrículas com afastamento por ‘Licença SEM vencimentos’ durante toda a competência”

      }

    }

    if (i == 7 && UnidadePagamento.MENSALISTA == Funcoes.remuneracao(matricula.tipo).unidade) {

      if (Funcoes.afaslicsvenc().equals(30)) {

        suspender “Não é possível calcular o salário família para matrículas com afastamento por ‘Licença SEM vencimentos’ durante toda a competência”

      }

    }

    

  }

} else {

  if (dias > 0) {

    suspender “O evento será calculado no processamento mensal pois há dias trabalhados na competência”

  }

}

 

valorReferencia = dependentes

def vvar = Lancamentos.valor(evento)

if (vvar > 0) {

  valorCalculado = vvar

} else {

  double vaux2 = base.trunc(2)

  double vtot = EncargosSociais.SalarioFamilia.Celetista.buscaContribuicao(vaux2, 2) * valorReferencia

  

  def dataAdmissao = funcionario.dataAdmissao

  def dataRescisao = calculo.dataRescisao

  def diaTrab = 0

  boolean mesAdmissaoDemissao //True quando for o mês da admissão, mas que não seja no primeiro dia do mês, ou quando for o mês da rescisão, mas que não seja o último dia do mês

  

  def inicioCompetencia = Datas.data(Datas.ano(calculo.competencia), Datas.mes(calculo.competencia), 1)

  mesAdmissaoDemissao = (inicioCompetencia < dataAdmissao)

  if (!mesAdmissaoDemissao) {

    if (dataRescisao != null) {

      if (Datas.ano(dataRescisao) == Datas.ano(calculo.competencia) && Datas.mes(dataRescisao) == Datas.mes(calculo.competencia) && calculo.quantidadeDiasCompetencia > Datas.dia(dataRescisao)) {

        mesAdmissaoDemissao = true

      }

    }

  }

  

  if (mesAdmissaoDemissao) {

    diaTrab = diastrab

    vtot *= diastrab

  }

  

  if (diaTrab != 0) {

    if (UnidadePagamento.HORISTA.equals(funcionario.unidadePagamento) || UnidadePagamento.DIARISTA.equals(funcionario.unidadePagamento)) {

      vtot /= calculo.quantidadeDiasCompetencia

    } else {

      vtot /= 30

    }

  }

  valorCalculado = vtot

}

int dependentes = servidor.getDependenteSalarioFamilia(TipoSalarioFamilia.CELETISTA)

if (dependentes < 1) {

    suspender “Não há dependentes de salário família com o tipo ‘Celetista’ para o funcionário”

}

 

double base30 = Bases.valor(Bases.SALAFAM)

double base = Funcoes.remuneracao(matricula.tipo).valor + base30

if (TipoProcessamento.MENSAL.equals(calculo.tipoProcessamento) && SubTipoProcessamento.INTEGRAL.equals(calculo.subTipoProcessamento)) {

    base += Bases.valorCalculado(Bases.SALAFAM, TipoProcessamento.FERIAS, SubTipoProcessamento.INTEGRAL)

}

 

if (base <= 0) {

    suspender ‘Não há valor de base de salário família normal para cálculo’

}

 

def classificacoes = [

        ClassificacaoTipoAfastamento.LICENCA_COM_VENCIMENTOS,

        ClassificacaoTipoAfastamento.LICENCA_MATERNIDADE,

        ClassificacaoTipoAfastamento.ABORTO_NAO_CRIMINOSO,

        ClassificacaoTipoAfastamento.ADOCAO_GUARDA_JUDICIAL_DE_CRIANCA,

        ClassificacaoTipoAfastamento.PRORROGACAO_DA_LICENCA_MATERNIDADE,

        ClassificacaoTipoAfastamento.PRORROGACAO_DA_LICENCA_MATERNIDADE_11_770

]

 

int diastrab = Funcoes.diastrab()

int diasgozo = Funcoes.diasferias()

int cedidosemonus = Funcoes.cedidosemonus()

int diasafast = Funcoes.diasafastcalc30(calculo.competencia, classificacoes)

 

int diasferiasant = 0

if (TipoProcessamento.FERIAS.equals(calculo.tipoProcessamento)) {

    diasferiasant = Funcoes.diasFeriasAnteriores(periodoConcessao.dataInicioGozo)

}

 

int dias = diastrab + cedidosemonus + diasafast – diasferiasant

 

if (diasgozo == 0) {

    classificacoes = [

            3 : ClassificacaoTipoAfastamento.ACIDENTE_DE_TRABALHO_PREVIDENCIA,

            4 : ClassificacaoTipoAfastamento.SERVICO_MILITAR,

            6 : ClassificacaoTipoAfastamento.AUXILIO_DOENCA_PREVIDENCIA,

            7 : ClassificacaoTipoAfastamento.LICENCA_SEM_VENCIMENTOS,

            8 : ClassificacaoTipoAfastamento.DEMITIDO,

            9 : ClassificacaoTipoAfastamento.APOSENTADO,

            11: ClassificacaoTipoAfastamento.ACIDENTE_DE_TRAJETO_PREVIDENCIA,

            12: ClassificacaoTipoAfastamento.DOENCA_DO_TRABALHO_PREVIDENCIA

    ];

 

    for (classificacao in classificacoes) {

        def i = classificacao.key

        def afastadoPrimeiroDiaCompetencia = false

        def primeiroDiaCompetencia = Datas.data(Datas.ano(calculo.competencia), Datas.mes(calculo.competencia), 1)

        Afastamentos.buscaPorPeriodo(primeiroDiaCompetencia, primeiroDiaCompetencia, classificacoes[i]).each {

            afastadoPrimeiroDiaCompetencia = true

        }

        imprimir afastadoPrimeiroDiaCompetencia : “ + afastadoPrimeiroDiaCompetencia

        Afastamentos.buscaPorPeriodo(classificacoes[i]).each { afast ->

            def dataAfastamento = afast.inicio

            if ((dataAfastamento == null) ||

                    ((dataAfastamento != null) & (dataAfastamento < primeiroDiaCompetencia)) &

                    (afastadoPrimeiroDiaCompetencia)) {

                suspender “Não é possível calcular o salário família pois a matrícula possui um tipo de afastamento iniciado em competencia anterior ou atual que não é permitido para o cálculo”

            }

        }

        if (i == 7 && [UnidadePagamento.DIARISTA, UnidadePagamento.HORISTA].contains(Funcoes.remuneracao(matricula.tipo).unidade)) {

            if (Funcoes.afaslicsvenc() == calculo.quantidadeDiasCompetencia) {

                suspender “Não é possível calcular o salário família para matrículas com afastamento por ‘Licença SEM vencimentos’ durante toda a competência”

            }

        }

        if (i == 7 && UnidadePagamento.MENSALISTA == Funcoes.remuneracao(matricula.tipo).unidade) {

            if (Funcoes.afaslicsvenc().equals(30)) {

                suspender “Não é possível calcular o salário família para matrículas com afastamento por ‘Licença SEM vencimentos’ durante toda a competência”

            }

        }

    }

} else {

    if (dias > 0) {

        suspender “O evento será calculado no processamento mensal pois há dias trabalhados na competência”

    }

}

 

valorReferencia = dependentes

def vvar = Lancamentos.valor(evento)

if (vvar > 0) {

    valorCalculado = vvar

} else {

    double vaux2 = base.trunc(2)

    double vtot = EncargosSociais.SalarioFamilia.Celetista.buscaContribuicao(vaux2, 2) * valorReferencia

 

    def dataAdmissao = funcionario.dataAdmissao

    def dataRescisao = calculo.dataRescisao

    def diaTrab = 0

    boolean mesAdmissaoDemissao

    //True quando for o mês da admissão, mas que não seja no primeiro dia do mês, ou quando for o mês da rescisão, mas que não seja o último dia do mês

 

    def inicioCompetencia = Datas.data(Datas.ano(calculo.competencia), Datas.mes(calculo.competencia), 1)

    mesAdmissaoDemissao = (inicioCompetencia < dataAdmissao)

    if (!mesAdmissaoDemissao) {

        if (dataRescisao != null) {

            if (Datas.ano(dataRescisao) == Datas.ano(calculo.competencia) && Datas.mes(dataRescisao) == Datas.mes(calculo.competencia) && calculo.quantidadeDiasCompetencia > Datas.dia(dataRescisao)) {

                mesAdmissaoDemissao = true

            }

        }

    }

 

    if (mesAdmissaoDemissao) {

        diaTrab = diastrab

        vtot *= diastrab

    }

 

    if (diaTrab != 0) {

        if (UnidadePagamento.HORISTA.equals(funcionario.unidadePagamento) || UnidadePagamento.DIARISTA.equals(funcionario.unidadePagamento)) {

            vtot /= calculo.quantidadeDiasCompetencia

        } else {

            vtot /= 30

        }

    }

    valorCalculado = vtot

}

 

Ajuste na integração contábil de eventos e encargos

Realizamos um ajuste na integração contábil de eventos e encargos para que, quando os tipos de processamentos diferente de mensal forem enviados junto com o mensal, os mesmos sejam agrupados em um único arquivo com o tipo de processamento igual a Mensal, ou seja, quando for executado a integração contábil e selecionados: Mensal, Férias e Rescisão, ambos no subprocessamento Integral. Será enviado um arquivo com o processamento Mensal e subprocessamento Integral contendo os dados dos processamentos Mensal, Férias e Rescisão.

Retirado os processamentos Mensal e Rescisão do lançamento de variáveis

Foi retirado os processamentos Mensal (Complementar) e Rescisão (Complementar) do lançamento de variáveis. Com essa alteração o processamento com subtipo Complementar irá recalcular o processamento Integral e por consequência carregar os eventos lançados em variáveis do subtipo integral.

Inclusão dos dados de óbito do cadastro de pessoas físicas

Foi incluído na fonte de dados Dados.folha-integracao.v1.certidoes.buscarTodos, os dados de certidões de pessoas físicas, para que seja possível utilizar esses dados em artefatos.

Alteração de fórmulas e inclusão de mensagem no detalhamento de valores de múltiplos vínculos

Alteramos as fórmulas de cálculo para adequação do cálculo de folha para múltiplos vínculos.

Modificamos a consulta de composição de bases, para que nos eventos de classificação de múltiplo vínculo, cujo os valores sejam de outros tipos de processamentos, demonstrem uma mensagem indicando que estes valores não serão detalhados para outro tipo de processamento.

Essa melhoria é encontrada através do menu Executando > Folha de Pagamento > Gestão de Pagamentos.

Adicionado novas informações nas fontes de integração do Folha (Cloud) e liberado a visibilidade das fontes para os sistemas Frotas (Cloud) e Almoxarifado

Foram adicionados nas fontes de dados de integração, informações faltantes para atender a necessidade dos sistemas Frotas (Cloud) e Almoxarifado, com essa liberação é possível consultar dados cadastrais de pessoas físicas como: Nome, Endereço, Telefone, E-mail, Data de nascimento, CPF, RG, Órgão Emissor, UF, Data de emissão do RG.

“pessoa.buscarTodos”

“cargo.buscarTodosComHistorico”

“funcionario.buscarTodos”

“Endereco.buscarTodos”

“Logradouro.buscarTodos”

“TipoLogradouro.buscarTodos”

“Bairro.buscarTodos”

“Municipio.buscarTodos”

“Estado.buscarTodos”

“Email.buscarTodos”

“Telefone.buscarTodos”

 

Configuração da integração entre Folha (Cloud) e Contábil (Cloud)

Até o momento os eventos de réplica de férias calculados na mensal eram ignorados no envio dos dados de integração contábil, porém, identificamos que da forma com que estávamos fazendo a integração contábil, a DDO de Contribuição Previdenciária estava sendo enviada integralmente no adiantamento de férias, portanto alteramos a forma com que se deve configurar a integração entre Folha (Cloud) e Contábil (Cloud). 

Isso se faz necessário, pois a Contribuição Previdenciária de férias quando descontado em férias proporcionais de mais de uma competência deve entrar como DDO proporcional aos dias de férias na competência (representado pelo evento de contribuição previdenciária replicado na mensal). Já o IRRF, por exemplo, ao ser calculado integralmente na folha de adiantamento de férias, deve entrar como DDO/Receita extra na sua totalidade na data de pagamento.

902 – I.N.S.S. PAGO EM FÉRIAS;

905 – I.P.E.S.C. PAGO EM FÉRIAS;

906 – FUNDO ASSISTÊNCIA PAGO EM FÉRIAS;

907 – FUNDO PREVIDÊNCIA PAGO EM FÉRIAS;

908 – FUNDO FINANCEIRO PAGO EM FÉRIAS;

909 – ABATIMENTO I.N.S.S. PAGO EM FÉRIAS;

910 – ABATIMENTO I.P.E.S.C. PAGO EM FÉRIAS;

911 – ABATIMENTO FUNDO ASSISTÊNCIA PAGO EM FÉRIAS;

912 – ABATIMENTO FUNDO PREVIDÊNCIA PAGO EM FÉRIAS;

913 – ABATIMENTO FUNDO FINANCEIRO PAGO EM FÉRIAS;

914 – VALOR DE PREVIDÊNCIA PROPORCIONAL RETIDO NAS FÉRIAS (Esse evento não deve ser enviado para a integração contábil)

88 – I.N.S.S. SOBRE FÉRIAS = Deduz do Empenho Bruto;

92 – I.R.R.F. SOBRE FÉRIAS = DDO/Receita Extra de retenção de IRRF de Férias;

902 – I.N.S.S. PAGO EM FÉRIAS = DDO de retenção de contribuição previdenciária de Férias;

905 – I.P.E.S.C. PAGO EM FÉRIAS = DDO de retenção de contribuição previdenciária de Férias;

906 – FUNDO ASSISTÊNCIA PAGO EM FÉRIAS = DDO de retenção de contribuição previdenciária de Férias;

907 – FUNDO PREVIDÊNCIA PAGO EM FÉRIAS = DDO de retenção de contribuição previdenciária de Férias;

908 – FUNDO FINANCEIRO PAGO EM FÉRIAS = DDO de retenção de contribuição previdenciária de Férias;

909 – ABATIMENTO I.N.S.S. PAGO EM FÉRIAS = Soma Empenho Bruto;

910 – ABATIMENTO I.P.E.S.C. PAGO EM FÉRIAS = Soma Empenho Bruto;

911 – ABATIMENTO FUNDO ASSISTÊNCIA PAGO EM FÉRIAS = Soma Empenho Bruto;

912 – ABATIMENTO FUNDO PREVIDÊNCIA PAGO EM FÉRIAS = Soma Empenho Bruto;

913 – ABATIMENTO FUNDO FINANCEIRO PAGO EM FÉRIAS = Soma Empenho Bruto;