Fix remaining 1.0 deduction references to 2.0 based on code review feedback
Co-authored-by: Kenearos <86194771+Kenearos@users.noreply.github.com>
This commit is contained in:
parent
db6e95f45c
commit
af4473f4b9
6 changed files with 19 additions and 19 deletions
|
|
@ -448,7 +448,7 @@
|
|||
<h4>Berechnungsregeln (Variante 2 - Streng)</h4>
|
||||
<p>
|
||||
<strong>Schwelle:</strong> Gesamter Bonus wird nur gezahlt, wenn WE-Einheiten ≥ 2,0.<br>
|
||||
<strong>Bei Erreichen:</strong> WT = 250 EUR/Einheit, WE = 450 EUR/Einheit (abzgl. 1,0 Einheit Abzug).<br>
|
||||
<strong>Bei Erreichen:</strong> WT = 250 EUR/Einheit, WE = 450 EUR/Einheit (abzgl. 2,0 Einheiten Abzug).<br>
|
||||
<strong>Unter Schwelle:</strong> Keine Auszahlung (weder WT noch WE).<br>
|
||||
<strong>WE-Tage:</strong> Fr, Sa, So, Feiertage und Vortage von Feiertagen.
|
||||
</p>
|
||||
|
|
@ -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 {
|
|||
<li><strong>Vergütung bei Erreichen der Schwelle:</strong>
|
||||
<ul>
|
||||
<li>Werktage (WT): 250 € pro Einheit</li>
|
||||
<li>WE-Tage: 450 € pro Einheit (abzüglich 1,0 Einheit Abzug, Freitag zuerst)</li>
|
||||
<li>WE-Tage: 450 € pro Einheit (abzüglich 2,0 Einheiten Abzug, Freitag zuerst)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Unter Schwelle:</strong> Keine Bonuszahlung (weder WT noch WE)</li>
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
|
|
|
|||
|
|
@ -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 —
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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 {
|
|||
<li><strong>Vergütung bei Erreichen der Schwelle:</strong>
|
||||
<ul>
|
||||
<li>Werktage (WT): 250 € pro Einheit</li>
|
||||
<li>WE-Tage: 450 € pro Einheit (abzüglich 1,0 Einheit Abzug, Freitag zuerst)</li>
|
||||
<li>WE-Tage: 450 € pro Einheit (abzüglich 2,0 Einheiten Abzug, Freitag zuerst)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Unter Schwelle:</strong> Keine Bonuszahlung (weder WT noch WE)</li>
|
||||
|
|
|
|||
Reference in a new issue