Umstellung der Stundenberechnung auf Sollarbeitszeit.

This commit is contained in:
2026-02-23 23:23:14 +01:00
parent 5e188cace2
commit 7c81095924
5 changed files with 21 additions and 31 deletions

View File

@@ -507,19 +507,14 @@ function registerUserRoutes(app) {
}
}
// Sollstunden berechnen
// Sollstunden berechnen (Variante B: immer vertraglich, nicht reduziert durch „genommen“)
const sollStunden = (wochenstunden / arbeitstage) * workdays;
// Überstunden für diese Woche: (totalHours + vacationHours + holidayHours) - adjustedSollStunden
const weekTotalHoursWithVacation = weekTotalHours + weekVacationHours + holidayHours;
const adjustedSollStunden = sollStunden - (fullDayOvertimeDays * fullDayHours);
// weekOvertimeHours = Überstunden diese Woche (wie im Frontend berechnet)
const weekOvertimeHours = weekTotalHoursWithVacation - adjustedSollStunden;
// Überstunden/Fehlstunden = Gesamt Soll (kann negativ sein)
const weekOvertimeHours = weekTotalHoursWithVacation - sollStunden;
// Kumulativ addieren
// WICHTIG: weekOvertimeHours enthält bereits die Überstunden dieser Woche (kann negativ sein bei 8 Überstunden)
// weekOvertimeTaken enthält die verbrauchten Überstunden (8 Stunden pro Tag mit 8 Überstunden)
// Die aktuellen Überstunden = Summe aller Wochen-Überstunden - verbrauchte Überstunden
totalOvertimeHours += weekOvertimeHours;
totalOvertimeTaken += weekOvertimeTaken;
totalVacationDays += weekVacationDays;
@@ -528,10 +523,8 @@ function registerUserRoutes(app) {
// Wenn alle Wochen verarbeitet wurden, Antwort senden
if (processedWeeks === weeks.length && !hasError) {
// Aktuelle Überstunden = Summe aller Wochen-Überstunden - verbrauchte Überstunden + Offset
// weekOvertimeHours enthält bereits die korrekte Berechnung pro Woche (wie im Frontend)
// weekOvertimeTaken enthält die verbrauchten Überstunden (8 Stunden pro Tag mit 8 Überstunden)
const currentOvertime = (totalOvertimeHours - totalOvertimeTaken) + overtimeOffsetHours;
// Variante B: Verbleibend = Summe Wochen-Überstunden + Offset („genommen“ nur Anzeige)
const currentOvertime = totalOvertimeHours + overtimeOffsetHours;
const remainingVacation = urlaubstage - totalVacationDays + vacationOffsetDays;
res.json({
@@ -761,11 +754,10 @@ function registerUserRoutes(app) {
}
}
// Sollstunden berechnen
// Sollstunden berechnen (Variante B: immer vertraglich)
const sollStunden = (wochenstunden / arbeitstage) * workdays;
const weekTotalHoursWithVacation = weekTotalHours + weekVacationHours + holidayHours;
const adjustedSollStunden = sollStunden - (fullDayOvertimeDays * fullDayHours);
const weekOvertimeHours = weekTotalHoursWithVacation - adjustedSollStunden;
const weekOvertimeHours = weekTotalHoursWithVacation - sollStunden;
// Kalenderwoche berechnen
const calendarWeek = getCalendarWeek(week.week_start);
@@ -780,7 +772,7 @@ function registerUserRoutes(app) {
overtime_hours: parseFloat(weekOvertimeHours.toFixed(2)),
overtime_taken: parseFloat(weekOvertimeTaken.toFixed(2)),
total_hours: parseFloat(weekTotalHoursWithVacation.toFixed(2)),
soll_stunden: parseFloat(adjustedSollStunden.toFixed(2)),
soll_stunden: parseFloat(sollStunden.toFixed(2)),
vacation_days: parseFloat(weekVacationDays.toFixed(1)),
workdays: workdays
});