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

Documentação Técnica: Inativação de Vínculos Antigos e Migração de Marcações

Resumo do Incidente

Marcações de ponto de colaboradores não estão sendo enviadas à Senior, embora constem registradas na plataforma Joinin. A causa-raiz é a coexistência de múltiplos vínculos empregatícios simultaneamente ativos (active = true e situation = true) para os mesmos usuários.

Como o vínculo antigo — que deveria ter sido inativado pela integração ao criar o novo — permanece ativo, o registro de ponto cai no vínculo/matrícula desatualizado. A integração rejeita essas marcações por inconsistência cadastral na Senior (matrícula inexistente ou pertencente a outro cadastro no sistema de destino).

Mapeamento e Validação Técnica

A análise cruzada entre os bancos de dados Joinin e Senior identificou 9 vínculos incorretos que precisam de saneamento e 15 marcações presas pendentes de migração:

User ID Vínculo Incorreto (Matrícula) Vínculo ID Marcações Pendentes Vínculo ID Destino (Migração) Situação Cadastral na Senior
1307 27063 1303 11 1362 (Matrícula 27123) Matrícula excluída na Senior
1504 27261 1505 4 1519 (Matrícula 27273) Matrícula reaproveitada por outro cadastro
1243 27000 1239 0 N/A Matrícula excluída na Senior
1259 27010 1254 0 N/A Matrícula excluída na Senior
1259 27066 1306 0 N/A Matrícula excluída na Senior
1298 27038 1295 0 N/A Matrícula excluída na Senior
1298 27252 1502 0 N/A Matrícula reaproveitada por outro cadastro
1106 105 — 0 N/A Terceirizado (Usuário inativo no Joinin, vínculo active=true)
1106 108 — 0 N/A Terceirizado (Usuário inativo no Joinin, vínculo active=true)

Total de marcações afetadas: 15 marcações (todas com integration_situation = 1 - pendentes).

Consultas de Análise (SQL Anonymized)

1. Identificação de usuários com múltiplos vínculos ativos

SELECT
    u.id AS user_id,
    u.active AS usuario_ativo,
    count(er.id) AS qtd_vinculos,
    count(*) FILTER (WHERE er.active AND er.situation) AS qtd_ativos_com_situacao,
    bool_or(er.active) AS possui_algum_ativo,
    string_agg(DISTINCT er.identification_number::text, ', ' ORDER BY er.identification_number::text) AS matriculas
FROM users u
JOIN employment_relationships er ON er.user_id = u.id
WHERE er.deleted_at IS NULL
GROUP BY u.id, u.active
HAVING
    count(*) FILTER (WHERE er.active AND er.situation) > 1
    OR bool_or(er.active) = false
ORDER BY possui_algum_ativo DESC, u.id;

 

 2. Mapeamento das marcações presas por vínculo 

WITH conta AS (
    SELECT account_id FROM users WHERE id = 1504
),
vinculos_errados (user_id, matricula) AS (
    VALUES
        (1243, 27000),
        (1259, 27010),
        (1259, 27066),
        (1307, 27063),
        (1504, 27261),
        (1298, 27038),
        (1298, 27252)
),
vinculos_alvo AS (
    SELECT er.*
    FROM employment_relationships er
    JOIN users u ON u.id = er.user_id
    JOIN vinculos_errados ve ON ve.user_id = er.user_id AND ve.matricula = er.identification_number
    WHERE u.account_id = (SELECT account_id FROM conta)
)
SELECT
    v.identification_number AS matricula_errada,
    v.id AS vinculo_id,
    u.id AS user_id,
    u.active AS usuario_ativo,
    v.active AS vinculo_ativo,
    (v.deleted_at IS NOT NULL) AS vinculo_soft_deleted,
    count(ejr.id) AS qtd_marcacoes,
    count(ejr.id) FILTER (WHERE ejr.integration_situation = 1) AS marcacoes_pendentes,
    count(ejr.id) FILTER (WHERE ejr.integration_situation = 2) AS marcacoes_integradas,
    min(ejr.record_hour) AS primeira_marcacao,
    max(ejr.record_hour) AS ultima_marcacao
FROM vinculos_alvo v
JOIN users u ON u.id = v.user_id
LEFT JOIN employee_journey_records ejr
    ON ejr.employment_relationship_id = v.id
    AND ejr.deleted_at IS NULL
GROUP BY v.identification_number, v.id, u.id, u.active, v.active, v.deleted_at
ORDER BY qtd_marcacoes DESC;

 Solicitado para Correção (Saneamento de Dados)

  1. Inativação de Vínculos: Inativar (active = false) os 9 vínculos mapeados na tabela acima.
  2. Migração de Marcações: Reassociar as 15 marcações pendentes (integration_situation = 1) para seus respectivos vínculos vigentes/corretos:
    • Migrar 11 marcações do vínculo 1303 para o vínculo 1362.
    • Migrar 4 marcações do vínculo 1505 para o vínculo 1519.
  3. Reprocessamento: Disparar o reprocessamento da integração das marcações atualizadas com a Senior.