Solicitação de modificação de query para atender demanda de data de admissão da empresa / data aniversário, contar como data do primeiro vinculo.
Em alguns casos, o colaborador pode ter mais de um cadastro/vínculo na base da Senior, normalmente por troca de tipo de colaborador, recontratação, transferência ou alteração de vínculo.
Nesse cenário, a query original retornava a data de admissão do cadastro consultado no momento, ou seja, considerava apenas o numcad informado no filtro.
Por exemplo, no caso analisado, o colaborador possuía dois vínculos com o mesmo CPF:
numcad 2876 → Data de admissão: 10/03/1997 → Situação: Demitido numcad 47 → Data de admissão: 18/05/2016 → Situação: Trabalhando
Ao consultar apenas o numcad 47, a query retornava a data de admissão do vínculo atual:
"admission_date": "2016-05-18T00:00:00.000Z"
Porém, para a regra esperada pelo cliente, a data correta deveria considerar a primeira admissão encontrada para o mesmo CPF, mesmo que esteja vinculada a outro numcad.
Nesse caso, o retorno esperado seria:
"admission_date": "1997-03-10T00:00:00.000Z"
Como foi feito o ajuste
A alteração foi feita diretamente no campo admission_date.
Antes, a query retornava apenas:
fun.datadm AS admission_date,
Com isso, era considerada somente a data de admissão do registro que estava sendo retornado pela consulta.
Depois do ajuste, foi incluída uma subconsulta para buscar todos os registros existentes na vw_joinin_funcionario com o mesmo CPF do colaborador e retornar a menor data de admissão encontrada.
O campo ficou assim:
COALESCE( ( SELECT MIN(fun_cpf.datadm) FROM vw_joinin_funcionario fun_cpf WHERE RIGHT(CONCAT('00000000000', fun_cpf.numcpf), 11) = RIGHT(CONCAT('00000000000', fun.numcpf), 11) AND fun_cpf.tipcol IN (1,2) AND fun_cpf.datadm IS NOT NULL ), fun.datadm ) AS admission_date,
Explicação da lógica
A query continua buscando o colaborador normalmente pelo numcad informado no filtro.
A diferença é que, para preencher o campo admission_date, ela não usa mais apenas a data daquele cadastro específico. Antes de retornar o valor, ela valida o CPF do colaborador e procura a menor data de admissão existente para aquele CPF dentro da própria vw_joinin_funcionario.
Na prática, a regra ficou assim:
- Consulta o colaborador normalmente pelo
numcad; - Identifica o CPF desse colaborador;
- Busca todos os vínculos que tenham o mesmo CPF;
- Retorna a menor
datadmencontrada; - Caso não encontre outra data válida, mantém a própria
fun.datadm.
Foi utilizado o COALESCE para garantir que, se por algum motivo a subconsulta não encontrar uma data, o sistema ainda retorne a data de admissão original do cadastro consultado.
Também foi mantida a comparação do CPF com 11 dígitos:
RIGHT(CONCAT('00000000000', fun_cpf.numcpf), 11)
Isso evita divergência em casos onde o CPF esteja salvo sem zeros à esquerda.
Query de apoio para validação
Antes de aplicar ou validar esse tipo de ajuste, pode ser usada uma consulta auxiliar para verificar se existem outros vínculos para o mesmo CPF:
SELECT fun.numcpf, fun.numcad, fun.tipcol, fun.datadm, 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;
No caso analisado, essa validação retornou os dois vínculos do colaborador, confirmando que o mesmo CPF possuía uma admissão mais antiga em outro numcad.
Quando usar esse ajuste
Esse ajuste pode ser aplicado quando o cliente precisar que a data de admissão considere o histórico do colaborador na empresa, e não apenas o vínculo atual retornado pela integração.
É útil principalmente em casos de:
- Colaborador com mais de uma matrícula;
- Recontratação;
- Alteração de tipo de colaborador;
- Transferência entre vínculos;
- Cenários onde o tempo de empresa precisa considerar a primeira admissão;
- Casos em que a data de admissão impacta regras internas, aniversário de empresa ou exibição de informações no Joinin.
Atenção
Esse ajuste só funciona se o vínculo antigo ainda existir na vw_joinin_funcionario.
Caso a matrícula anterior tenha sido excluída da base, ou não esteja mais disponível na view utilizada pela integração, a query não terá como localizar automaticamente a data antiga.
Nesses casos, é necessário validar com o cliente ou com o responsável pela base Senior se o registro anterior ainda existe e onde ele pode ser consultado.
Resultado esperado
Após o ajuste, mesmo que a consulta seja feita pelo vínculo atual do colaborador, o campo admission_date passa a retornar a data de admissão mais antiga encontrada para o mesmo CPF.
Exemplo:
Consulta realizada pelo numcad: 47 Data do vínculo atual: 18/05/2016 Data mais antiga encontrada para o CPF: 10/03/1997
Retorno esperado:
"admission_date": "1997-03-10T00:00:00.000Z"