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:
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:
SELECT PC_FILIAL, PC_MAT, PC_DATA, PC_PD, COUNT(*) as OCORRENCIASFROM SPC010 -- Ajuste para sua tabela de apontamentosWHERE D_E_L_E_T_ = ' 'GROUP BY PC_FILIAL, PC_MAT, PC_DATA, PC_PDHAVING 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:
Tabela SPJ: O turno do funcionário possui horários válidos cadastrados? Sem isso, o denominador tende a zero.
SRA (Funcionários): Verifique os campos
RA_TNOTRABeRA_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:
Audite a SPC/SPH em busca de IDs de eventos duplicados.
Confira a regra de apontamento (SPA) para garantir que abonos e faltas não estão sendo somados de forma indevida.
Execute o
CheckDuplno 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
Postar um comentário