refactor: update fichaPontoPDF and processamento to enhance legend styling and accumulate saldo for all days, improving report accuracy

This commit is contained in:
2025-12-15 11:50:51 -03:00
parent a951f61676
commit 60b53dac74
6 changed files with 124 additions and 36 deletions

View File

@@ -628,25 +628,34 @@ export async function processarDadosFichaPonto(
}
// Calcular saldo acumulado para cada dia
// Agora consideramos todos os dias que possuem saldo diário, inclusive
// atestados, ausências e dias não computados, para que o resumo do período
// reflita qualquer trabalho realizado e a carga horária esperada.
let saldoAcumulado = 0;
for (const dia of diasProcessados) {
if (dia.computado && dia.saldoDiario) {
if (dia.saldoDiario) {
saldoAcumulado += dia.saldoDiario.diferencaMinutos;
}
dia.saldoAcumulado = saldoAcumulado;
}
// Calcular resumo com formatações
const totalHorasTrabalhadas = diasProcessados
.filter((d) => d.computado)
.reduce((acc, d) => acc + (d.saldoDiario?.trabalhadoMinutos || 0), 0);
const totalHorasEsperadas = diasProcessados
.filter((d) => d.computado)
.reduce((acc, d) => acc + (d.saldoDiario?.esperadoMinutos || 0), 0);
const diferencaTotal = diasProcessados
.filter((d) => d.computado)
.reduce((acc, d) => acc + (d.saldoDiario?.diferencaMinutos || 0), 0);
// Total de horas trabalhadas e esperadas passa a considerar todos os dias,
// não apenas os marcados como "computados", para que trechos trabalhados
// em dias de ausência/dispensa também apareçam no resumo.
const totalHorasTrabalhadas = diasProcessados.reduce(
(acc, d) => acc + (d.saldoDiario?.trabalhadoMinutos || 0),
0
);
const totalHorasEsperadas = diasProcessados.reduce(
(acc, d) => acc + (d.saldoDiario?.esperadoMinutos || 0),
0
);
const diferencaTotal = diasProcessados.reduce(
(acc, d) => acc + (d.saldoDiario?.diferencaMinutos || 0),
0
);
const saldoPeriodo = diferencaTotal;
const saldoFinal =
diasProcessados.length > 0 ? diasProcessados[diasProcessados.length - 1]!.saldoAcumulado : 0;