Protheus: Como Corrigir Absenteísmo > 100% (Guia para analistas de TI)

 


Ilustração surrealista estilo gothic punk mostrando engrenagens de um ERP e dados digitais em conflito.

O Enigma do Absenteísmo > 100% no Protheus: Um Guia Forense para Analistas de TI

Saudações, mentes inquietas. Se você trabalha com o ecossistema TOTVS Protheus, sabe que o ERP é mais do que um software; é um simulacro da realidade corporativa. Mas o que acontece quando essa simulação "alucina"? Recentemente, nos deparamos com um relatório customizado (LGPER019) onde o RH questionava um dado impossível: funcionários com absenteísmo superior a 100%.

Como cientistas da computação, sabemos que o tempo é uma constante, mas no banco de dados, ele pode ser traiçoeiro. Neste post, vamos abrir o "motor" do módulo de Ponto Eletrônico (SIGAPON) e entender como auditar essa falha sistemática.

A Matemática da Inconsistência

Para resolver o problema, primeiro isolamos a lógica algorítmica. No AdvPL, o cálculo geralmente reside na razão entre as horas de ausência e as horas previstas:

$$Absenteísmo (\%) = \left( \frac{\sum \text{Horas Não Trabalhadas}}{\sum \text{Horas Previstas}} \right) \times 100$$

Se o resultado estoura o limite lógico de 100%, temos apenas duas saídas científicas: ou o denominador ($\sum \text{Horas Previstas}$) é menor do que deveria, ou o numerador ($\sum \text{Horas Não Trabalhadas}$) está inflado artificialmente por redundância de dados.

Nível 1: Investigação do Banco de Dados (Audit SQL)

O primeiro passo de um analista forense é buscar por duplicidade física. Quedas de conexão ou falhas em rotinas de fechamento podem deixar registros órfãos nas tabelas transacionais.

Utilize esta query para identificar se o sistema está "contando duas vezes" o mesmo evento:

SQL
SELECT PC_FILIAL, PC_MAT, PC_DATA, PC_PD, COUNT(*) as OCORRENCIAS
FROM SPC010 -- Ajuste para sua tabela de apontamentos
WHERE D_E_L_E_T_ = ' '
GROUP BY PC_FILIAL, PC_MAT, PC_DATA, PC_PD
HAVING COUNT(*) > 1;

Se houver retorno, você encontrou fantasmas na SPC ou SPH. O sistema somará o mesmo código de verba múltiplas vezes para o mesmo dia, invalidando o relatório.

Nível 2: O Simulador de Calendário (CriaCalend)

O Protheus "constrói o mundo" do funcionário através da função CriaCalend. Ela gera o array aTabCalend, que define o que é esperado do colaborador. Se o absenteísmo está alto, verifique:

  1. Tabela SPJ: O turno do funcionário possui horários válidos cadastrados? Sem isso, o denominador tende a zero.

  2. SRA (Funcionários): Verifique os campos RA_TNOTRAB e RA_SEQTURN. Uma sequência de turno errada pode fazer o sistema entender que o funcionário não deveria trabalhar em um dia que ele faltou, ou vice-versa.

Nível 3: Conflitos de Estados e Parâmetros

A sobreposição de eventos é a causa mais comum de "alucinações" de dados. Considere estes pontos críticos:

  • Afastamentos vs. Faltas: Se o funcionário está afastado (Tabela SR8) e o analista de RH também lançou uma falta manual na SPC, o relatório pode somar ambas. Verifique o parâmetro MV_PAR18 (Considera Afastamento como Previsto).

  • O Campo R6_APTPMAR: No cadastro de Turnos (SR6), este campo define se o sistema deve particionar as faltas (ex: uma falta antes do almoço e outra depois). Se configurado como "Sim", o relatório pode estar lendo dois registros de falta para uma única jornada prevista.

Protocolo de Resolução

Para encerrar o questionamento do RH, siga este checklist:

  1. Audite a SPC/SPH em busca de IDs de eventos duplicados.

  2. Confira a regra de apontamento (SPA) para garantir que abonos e faltas não estão sendo somados de forma indevida.

  3. Execute o CheckDupl no Configurador (SIGACFG) se houver suspeita de corrupção de índices.

Lembre-se: integridade de dados é a única defesa contra o caos sistêmico. No código, a verdade está no detalhe.

Até a próxima exploração,

Comentários