Pular para o conteúdo
Português - Brasil
  • Não há sugestões porque o campo de pesquisa está em branco.

Ajuste na data de admissão considerando vínculos em sequência // aniversário colaborador contando vinculo em sequência

Em alguns cenários, o colaborador pode possuir mais de um vínculo/cadastro na Senior, seja por recontratação, mudança de tipo de contrato, alteração de CLT para PJ, transferência ou novo cadastro com outra matrícula.

Inicialmente, foi aplicada uma regra para buscar sempre a menor data de admissão existente para o mesmo CPF. Porém, em uma nova validação, foi identificado que essa regra nem sempre atende todos os casos.

Isso porque pode existir um colaborador com vínculos antigos, mas com um grande intervalo entre o desligamento e uma nova admissão. Nesses casos, não faz sentido considerar a primeira admissão histórica, pois o colaborador ficou um período fora da empresa.

Exemplo apresentado pelo cliente:

Vínculo 1: admissão em 03/05/2010 e afastamento em 17/05/2016 Vínculo 2: admissão em 10/02/2021 e afastamento em 28/06/2024 Vínculo 3: admissão em 01/07/2024 e situação atual Trabalhando

Nesse caso, mesmo existindo uma admissão antiga em 2010, ela não deve ser considerada, pois houve um intervalo grande entre 2016 e 2021.

A data correta para o campo admission_date deve ser:

"admission_date": "2021-02-10T00:00:00.000Z"

Ou seja, o sistema deve considerar o início da sequência atual de vínculos, e não necessariamente a primeira admissão histórica do CPF.

No retorno do cliente, também foi reforçado que o caso do Fábio estava correto porque ele trabalhou de forma contínua, apenas alterando o cadastro/vínculo. Já o caso do Cidemar exigia essa validação por intervalo entre vínculos.


Regra aplicada

A lógica ajustada considera os vínculos do mesmo CPF e valida se eles estão em sequência.

A regra ficou assim:

  • Busca todos os vínculos do mesmo CPF;
  • Ordena os vínculos pela data de admissão;
  • Verifica a data de afastamento/desligamento do vínculo anterior;
  • Compara com a data de admissão do próximo vínculo;
  • Se o intervalo for pequeno, considera como continuidade;
  • Se o intervalo for grande, entende que houve quebra no vínculo;
  • Para o cadastro consultado, retorna a menor data de admissão da sequência atual.

Foi considerada uma tolerância de 7 dias entre o desligamento de um vínculo e a admissão do próximo.

Essa tolerância ajuda a cobrir situações como final de semana, feriado ou diferença operacional no cadastro.

Caso o cliente solicite uma regra mais rígida, esse prazo pode ser ajustado.


Por que não usar apenas a menor data do CPF?

A regra anterior usava apenas:

MIN(fun_cpf.datadm)

para buscar a menor data de admissão do CPF.

Isso funcionava quando todos os vínculos faziam parte de uma continuidade real, mas causava problema quando existia um vínculo antigo com uma pausa grande até a nova contratação.

Por isso, a regra foi ajustada para buscar a menor data somente dentro da sequência atual.


Ajuste aplicado na query

Como algumas ferramentas podem interpretar WITH/CTE como tentativa de escrita em ambiente somente leitura, foi utilizado OUTER APPLY, mantendo a consulta como leitura iniciando diretamente com SELECT.

Na query principal, o campo:

fun.datadm AS admission_date,

foi substituído por:

COALESCE(adm_seq.admission_date, fun.datadm) AS admission_date,

E foi incluído o bloco OUTER APPLY para calcular a admissão correta conforme a sequência de vínculos.


Trecho responsável por definir a sequência

O ponto principal da regra é este trecho:

CASE   WHEN vca.datafim_anterior IS NULL THEN 1   WHEN DATEDIFF(DAY, vca.datafim_anterior, vca.datadm) <= 7 THEN 0   ELSE 1 END AS quebra_vinculo

Na prática:

  • Se não existe vínculo anterior, inicia uma nova sequência;
  • Se o vínculo anterior terminou até 7 dias antes da nova admissão, mantém na mesma sequência;
  • Se passou de 7 dias, considera que houve quebra e inicia uma nova contagem.

Bloco utilizado para calcular o admission_date
OUTER APPLY (   SELECT      MIN(q.datadm) AS admission_date   FROM (     SELECT        g.*,       MAX(         CASE            WHEN g.numemp = fun.numemp            AND g.tipcol = fun.tipcol            AND g.numcad = fun.numcad           THEN g.grupo_vinculo         END       ) OVER () AS grupo_atual     FROM (       SELECT         vm.*,         SUM(vm.quebra_vinculo) OVER (           PARTITION BY vm.cpf_norm           ORDER BY vm.datadm, vm.numcad           ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW         ) AS grupo_vinculo       FROM (         SELECT           vca.*,           CASE             WHEN vca.datafim_anterior IS NULL THEN 1             WHEN DATEDIFF(DAY, vca.datafim_anterior, vca.datadm) <= 7 THEN 0             ELSE 1           END AS quebra_vinculo         FROM (           SELECT             bv.*,             LAG(bv.datafim) OVER (               PARTITION BY bv.cpf_norm               ORDER BY bv.datadm, bv.numcad             ) AS datafim_anterior           FROM (             SELECT               RIGHT(CONCAT('00000000000', f.numcpf), 11) AS cpf_norm,               f.numemp,               f.tipcol,               f.numcad,               f.datadm,               CASE                  WHEN f.datafa IS NULL                   OR CONVERT(date, f.datafa) <= '1900-12-31'                   OR f.sitafa = 1                 THEN NULL                 ELSE f.datafa               END AS datafim             FROM vw_joinin_funcionario f             WHERE f.tipcol IN (1,2)               AND f.datadm IS NOT NULL               AND RIGHT(CONCAT('00000000000', f.numcpf), 11) = RIGHT(CONCAT('00000000000', fun.numcpf), 11)           ) bv         ) vca       ) vm     ) g   ) q   WHERE q.grupo_vinculo = q.grupo_atual ) adm_seq

Como validar antes ou depois do ajuste

Antes de aplicar a regra, é recomendado consultar todos os vínculos do CPF para entender se existe continuidade ou quebra entre os cadastros.

Exemplo de consulta de apoio:

SELECT    fun.numcpf,   fun.numcad,   fun.tipcol,   fun.datadm,   fun.datafa,   fun.nomfun,   fun.sitafa,   fun.dessit FROM vw_joinin_funcionario fun WHERE RIGHT(CONCAT('00000000000', fun.numcpf), 11) = (   SELECT TOP 1 RIGHT(CONCAT('00000000000', f.numcpf), 11)   FROM vw_joinin_funcionario f   WHERE f.numcad = 47 ) ORDER BY fun.datadm;

Essa validação ajuda a identificar:

  • Quantos vínculos existem para o mesmo CPF;
  • Qual foi a primeira admissão;
  • Se houve desligamento;
  • Qual foi o intervalo até a próxima admissão;
  • Se os vínculos fazem parte da mesma sequência ou não.

Quando aplicar esse ajuste

Esse ajuste deve ser utilizado quando o cliente precisar que o campo admission_date considere o tempo de empresa de forma contínua, mas sem considerar períodos antigos em que o colaborador ficou fora da organização.

É indicado para casos como:

  • Aniversário de empresa;
  • Tempo de casa;
  • Reconhecimentos internos;
  • Recontratação;
  • Mudança de CLT para PJ ou PJ para CLT;
  • Colaboradores com mais de uma matrícula;
  • Casos onde existe histórico antigo, mas com intervalo entre contratos.

Atenção

Esse ajuste depende de os vínculos antigos ainda existirem na vw_joinin_funcionario.

Se o cadastro anterior tiver sido excluído da Senior ou não estiver disponível na view usada pela integração, a query não conseguirá considerar essa informação automaticamente.

Também é importante alinhar com o cliente qual intervalo deve ser considerado como continuidade. Neste caso, foi usado o limite de 7 dias, mas ele pode ser alterado conforme a regra de negócio do cliente.

Para alterar a tolerância, basta ajustar este trecho:

DATEDIFF(DAY, vca.datafim_anterior, vca.datadm) <= 7

Exemplos:

<= 1

para considerar apenas até 1 dia de diferença.

<= 30

para permitir até 30 dias entre vínculos.


Resultado esperado

Após o ajuste, o campo admission_date passa a retornar a data inicial da sequência atual de vínculos.

Exemplo com pausa grande:

Admissão antiga: 03/05/2010 Desligamento: 17/05/2016  Nova admissão: 10/02/2021 Desligamento: 28/06/2024  Novo vínculo atual: 01/07/2024

Como houve uma pausa grande entre 2016 e 2021, a data de 2010 não deve ser considerada.

Retorno esperado:

"admission_date": "2021-02-10T00:00:00.000Z"

Exemplo com vínculo contínuo:

Vínculo anterior encerrado próximo ao início do novo vínculo Novo vínculo iniciado dentro do limite de tolerância

Nesse caso, a query considera os vínculos como parte da mesma sequência e retorna a primeira admissão daquele bloco contínuo.