From af4473f4b9c09ec096d15789c2c27f76779f1d4c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 12 Dec 2025 19:03:54 +0000 Subject: [PATCH] Fix remaining 1.0 deduction references to 2.0 based on code review feedback Co-authored-by: Kenearos <86194771+Kenearos@users.noreply.github.com> --- Dienstplan_Portable.html | 8 ++++---- README.md | 2 +- SPECIFICATION.md | 18 +++++++++--------- android-app/IMPLEMENTATION_SUMMARY.md | 4 ++-- .../dienstplan/nrw/data/PayrollCalculator.kt | 2 +- webapp/app.js | 4 ++-- 6 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Dienstplan_Portable.html b/Dienstplan_Portable.html index 3b84e6c..af9cbb1 100644 --- a/Dienstplan_Portable.html +++ b/Dienstplan_Portable.html @@ -448,7 +448,7 @@

Berechnungsregeln (Variante 2 - Streng)

Schwelle: Gesamter Bonus wird nur gezahlt, wenn WE-Einheiten ≥ 2,0.
- Bei Erreichen: WT = 250 EUR/Einheit, WE = 450 EUR/Einheit (abzgl. 1,0 Einheit Abzug).
+ Bei Erreichen: WT = 250 EUR/Einheit, WE = 450 EUR/Einheit (abzgl. 2,0 Einheiten Abzug).
Unter Schwelle: Keine Auszahlung (weder WT noch WE).
WE-Tage: Fr, Sa, So, Feiertage und Vortage von Feiertagen.

@@ -576,7 +576,7 @@ const CONFIG = { RATE_WT: 250, RATE_WE: 450, THRESHOLD: 2.0, - DEDUCTION: 1.0, + DEDUCTION: 2.0, TOLERANCE: 0.0001 }; @@ -1071,7 +1071,7 @@ class DienstplanApp { csv += 'WT;Werktag (Montag-Donnerstag ohne Feiertag/Vortag)\n'; csv += 'WE-Tag;"Freitag, Samstag, Sonntag, Feiertag oder Tag vor Feiertag"\n'; csv += 'Schwelle;"Mindestens 2,0 WE-Einheiten für Bonuszahlung erforderlich"\n'; - csv += 'Sätze;"WT = 250 EUR/Einheit, WE = 450 EUR/Einheit (abzgl. 1,0 Abzug)"\n'; + csv += 'Sätze;"WT = 250 EUR/Einheit, WE = 450 EUR/Einheit (abzgl. 2,0 Abzug)"\n'; // Download CSV file const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' }); @@ -1373,7 +1373,7 @@ class DienstplanApp {
  • Vergütung bei Erreichen der Schwelle:
  • Unter Schwelle: Keine Bonuszahlung (weder WT noch WE)
  • diff --git a/README.md b/README.md index 69e94b4..4e0e728 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ Die Datei landet in `output/Dienstplan_YYYY_MM_NRW.xlsx`. - **WE-Tag**: Fr/Sa/So + Feiertag + Vortag Feiertag - **WT-Tag**: Alle anderen Tage (250 € pro Einheit) -- **WE-Vergütung**: Nur wenn Monatssumme ≥ 2,0 WE-Einheiten → 450 €/Einheit, dann Abzug 1,0 (zuerst von Freitag) +- **WE-Vergütung**: Nur wenn Monatssumme ≥ 2,0 WE-Einheiten → 450 €/Einheit, dann Abzug 2,0 (zuerst von Freitag) - **Unter Schwelle**: WE-Dienste = 0 € (nicht als WT vergütet) Details siehe `SPECIFICATION.md`. diff --git a/SPECIFICATION.md b/SPECIFICATION.md index f135c53..b0a7d7c 100644 --- a/SPECIFICATION.md +++ b/SPECIFICATION.md @@ -279,17 +279,17 @@ Beispiel-Formel (als hilfsweise Matrix in Checks): A hat 1,75 WE und 1,0 WT → Auszahlung_WE = 0 €; Auszahlung_WT = 0 €; Auszahlung_Gesamt = 0 €. 2) **Genau Schwelle**: - A hat 2,0 WE (Fr 1,0 + Sa 1,0) → Abzug 1,0 (zuerst Fr) → WE_bezahlt = 1,0 → 450 €. + A hat 2,0 WE (Fr 1,0 + Sa 1,0) → Abzug 2,0 (zuerst Fr) → WE_bezahlt = 0,0 → 0 €. 3) **Über Schwelle ohne Freitag**: - A hat 2,0 WE (nur Sa+So) → Abzug 1,0 aus „Andere" → WE_bezahlt = 1,0 → 450 €. + A hat 2,0 WE (nur Sa+So) → Abzug 2,0 aus „Andere" → WE_bezahlt = 0,0 → 0 €. 4) **Starke Überdeckung**: - A hat 3,5 WE → Abzug 1,0 → WE_bezahlt = 2,5 → 2,5×450 €. + A hat 3,5 WE → Abzug 2,0 → WE_bezahlt = 1,5 → 1,5×450 € = 675 €. 5) **Splits rund um 2,0**: - A hat Fr 0,4 + Sa 0,6 + So 1,0 → Summe 2,0 → Abzug 1,0 - (0,4 von Fr, 0,6 von Andere) → WE_bezahlt = 1,0 → 450 €. + A hat Fr 0,4 + Sa 0,6 + So 1,0 → Summe 2,0 → Abzug 2,0 + (0,4 von Fr, 1,6 von Andere) → WE_bezahlt = 0,0 → 0 €. 6) **Unter Schwelle, nur WE-Tage**: A hat 1,0 WE, 0 WT → Auszahlung_WE = 0 €; Auszahlung_Gesamt = 0 €. @@ -300,9 +300,9 @@ Beispiel-Formel (als hilfsweise Matrix in Checks): ## Edge-Cases und Präzisierungen -- Abzug nur einmal pro Person/Monat (fix 1,0), und nur wenn Schwelle erreicht. +- Abzug nur einmal pro Person/Monat (fix 2,0), und nur wenn Schwelle erreicht. - Der Vortag eines Feiertags ist WE-Tag – unabhängig davon, welcher Wochentag er ist. -- Wenn WE_Freitag < 1,0, wird der restliche Abzug (bis 1,0) von WE_Andere genommen. +- Wenn WE_Freitag < 2,0, wird der restliche Abzug (bis 2,0) von WE_Andere genommen. - Monatswechsel: Daten genau per >=Monat_Auswahl und <=EOMONAT(Monat_Auswahl;0) filtern. - Rundungstoleranz 1e-4 bei Schwelle und Datumssummen (Splits wie 0,33/0,67). - Tabellen-Namen („tblPlan", „tblFeiertage", „tblAuswertung") konsequent verwenden. @@ -324,11 +324,11 @@ Lieferumfang (empfohlen): - 18.11.2025: Korrektur Variante 2: **Gesamter Bonus (WT + WE) wird nur gezahlt, wenn WE_Summe ≥ 2,0**. Unter Schwelle: Auszahlung_Gesamt = 0 € (weder WT noch WE). - 14.11.2025: Umstellung auf Variante 2 (streng). WE-Vergütung nur bei WE_Summe ≥ 2,0, - anschließend Abzug 1,0 (Freitag zuerst). Unterhalb der Schwelle: WE-Auszahlung = 0 €. + anschließend Abzug 2,0 (Freitag zuerst). Unterhalb der Schwelle: WE-Auszahlung = 0 €. - 13.11.2025: Vorversion (Variante 1) mit WE-Auszahlung ab erstem WE-Dienst und Abzug nach Schwelle (ersetzt). ## Kurztext (für Blatt „Regeln" als Readme-Hinweis) -„WE-Tag = Fr/Sa/So/Feiertag/Vortag (BL-abhängig). Variante 2 (streng): Gesamter Bonus (WT + WE) wird nur gezahlt, wenn im Monat ≥ 2,0 WE-Einheiten erreicht werden. Bei Erreichen der Schwelle: WT 250 €/Einheit, WE 450 €/Einheit mit Abzug 1,0 (Freitag zuerst). Unter Schwelle: 0 € Auszahlung. Splits anteilig. Monat und Bundesland oben wählen." +„WE-Tag = Fr/Sa/So/Feiertag/Vortag (BL-abhängig). Variante 2 (streng): Gesamter Bonus (WT + WE) wird nur gezahlt, wenn im Monat ≥ 2,0 WE-Einheiten erreicht werden. Bei Erreichen der Schwelle: WT 250 €/Einheit, WE 450 €/Einheit mit Abzug 2,0 (Freitag zuerst). Unter Schwelle: 0 € Auszahlung. Splits anteilig. Monat und Bundesland oben wählen." — Ende der README — diff --git a/android-app/IMPLEMENTATION_SUMMARY.md b/android-app/IMPLEMENTATION_SUMMARY.md index 55e510f..392424c 100644 --- a/android-app/IMPLEMENTATION_SUMMARY.md +++ b/android-app/IMPLEMENTATION_SUMMARY.md @@ -78,8 +78,8 @@ Implements NRW Variante 2 (streng) rules: #### Unit Tests (PayrollCalculatorTest.kt) Comprehensive test coverage including: 1. **Under threshold test**: 1.75 WE + 1.0 WT → WE payout 0€, WT payout 250€ -2. **Exactly at threshold test**: 2.0 WE → WE payout 450€ (1.0 unit after deduction) -3. **Over threshold test**: 3.5 WE → WE payout 1125€ (2.5 units after deduction) +2. **Exactly at threshold test**: 2.0 WE → WE payout 0€ (0.0 units after 2.0 deduction) +3. **Over threshold test**: 3.5 WE → WE payout 675€ (1.5 units after 2.0 deduction) 4. **Friday deduction priority test**: Verifies deduction comes from Friday first 5. **Multiple employees test**: Separate calculations per employee diff --git a/android-app/app/src/main/java/com/dienstplan/nrw/data/PayrollCalculator.kt b/android-app/app/src/main/java/com/dienstplan/nrw/data/PayrollCalculator.kt index 48aafb4..25ebe44 100644 --- a/android-app/app/src/main/java/com/dienstplan/nrw/data/PayrollCalculator.kt +++ b/android-app/app/src/main/java/com/dienstplan/nrw/data/PayrollCalculator.kt @@ -14,7 +14,7 @@ import kotlin.math.min * - WT-Tag (Weekday): All other days * - WT compensation: 250€ per unit (only if threshold reached) * - WE compensation: Only paid if monthly total >= 2.0 WE units (threshold) - * - If threshold reached: 450€ per WE unit, then deduct exactly 1.0 WE unit + * - If threshold reached: 450€ per WE unit, then deduct exactly 2.0 WE units * - Deduction priority: Friday first, then other WE days * - Below threshold: 0€ for all shifts (neither WT nor WE) */ diff --git a/webapp/app.js b/webapp/app.js index b03568f..0b5193a 100644 --- a/webapp/app.js +++ b/webapp/app.js @@ -526,7 +526,7 @@ class DienstplanApp { csv += 'WE/Feiertag Tage;"Freitag, Samstag, Sonntag, Feiertag oder Tag vor Feiertag"\n'; csv += 'Schwelle;"Mindestens 2,0 WE-Einheiten für Bonuszahlung erforderlich"\n'; csv += 'Sätze;"Normale Tage = 250 EUR/Einheit, WE/Feiertag = 450 EUR/Einheit"\n'; - csv += 'Abzug;"Bei Erreichen der Schwelle wird 1,0 WE-Einheit abgezogen"\n'; + csv += 'Abzug;"Bei Erreichen der Schwelle werden 2,0 WE-Einheiten abgezogen"\n'; // Download CSV file const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' }); @@ -835,7 +835,7 @@ class DienstplanApp {
  • Vergütung bei Erreichen der Schwelle:
  • Unter Schwelle: Keine Bonuszahlung (weder WT noch WE)