Revert deduction value to 2.0 across all files as per user feedback

Co-authored-by: Kenearos <86194771+Kenearos@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2025-12-12 12:26:34 +00:00
parent 6ecfd895e1
commit db6e95f45c
13 changed files with 56 additions and 56 deletions

View file

@ -21,7 +21,7 @@ Eine Web-Anwendung zur Berechnung von Bonuszahlungen für Wochenend- und Feierta
### Bonusberechnung
1. **Schwellenwert**: Mindestens **2.0 qualifizierende Tage** im Monat erforderlich
2. **Abzug**: Bei Erreichen des Schwellenwerts wird **1.0 qualifizierender Tag** abgezogen (Freitag-Priorität)
2. **Abzug**: Bei Erreichen des Schwellenwerts werden **2.0 qualifizierende Tage** abgezogen (Freitag-Priorität)
3. **Vergütung**:
- Normale Tage: **250€** pro Tag
- Qualifizierende Tage (WE/Feiertag): **450€** pro Tag
@ -34,9 +34,9 @@ Mitarbeiter hat im Monat:
**Berechnung**:
- Qualifizierende Tage: 3.0 (Schwellenwert erreicht ✓)
- Abzug: -1.0 qualifizierender Tag
- Bezahlt: 3 normale Tage + 2 qualifizierende Tage
- **Bonus**: (3 × 250€) + (2 × 450€) = **1.650€**
- Abzug: -2.0 qualifizierende Tage
- Bezahlt: 3 normale Tage + 1 qualifizierender Tag
- **Bonus**: (3 × 250€) + (1 × 450€) = **1.200€**
## Installation & Nutzung

View file

@ -84,8 +84,8 @@ Dienste:
Erwartung:
- Qualifizierende Tage: 2.0
- Schwellenwert: ✅ Erreicht
- Abzug: -1.0
- Bezahlt: 1.0 × 450€ = 450€
- Abzug: -2.0
- Bezahlt: 0.0 × 450€ = 0€
```
### Beispiel 2: Gemischte Dienste
@ -96,8 +96,8 @@ Dienste:
Erwartung:
- Normale Tage: 2.0 × 250€ = 500€
- Qualifizierende Tage: (2.0 - 1.0) × 450€ = 450€
- Gesamt: 950€
- Qualifizierende Tage: (2.0 - 2.0) × 450€ = 0€
- Gesamt: 500€
```
### Beispiel 3: Halbe Dienste
@ -110,8 +110,8 @@ Dienste:
Erwartung:
- Normale Tage: 0.5 × 250€ = 125€
- Qualifizierende Tage: (2.5 - 1.0) × 450€ = 675€
- Gesamt: 800€
- Qualifizierende Tage: (2.5 - 2.0) × 450€ = 225€
- Gesamt: 350€
```
## Tests erweitern

View file

@ -8,7 +8,7 @@ class BonusCalculator {
this.RATE_NORMAL = 250; // Normal day rate (not weekend/holiday)
this.RATE_WEEKEND = 450; // Weekend/holiday rate
this.MIN_QUALIFYING_DAYS = 2.0; // Minimum qualifying days to trigger bonus
this.DEDUCTION_AMOUNT = 1.0; // Deduction after reaching threshold
this.DEDUCTION_AMOUNT = 2.0; // Deduction after reaching threshold
}
/**

View file

@ -191,7 +191,7 @@ runner.test('Berechnung: Unter Schwellenwert (1.0 WE-Tag) = 0€', (t) => {
t.assertEqual(result.totalBonus, 0, 'Bonus sollte 0€ sein');
});
runner.test('Berechnung: Genau 2.0 WE-Tage = 450€', (t) => {
runner.test('Berechnung: Genau 2.0 WE-Tage = 0€', (t) => {
const holidays = new HolidayProvider();
const calculator = new BonusCalculator(holidays);
@ -204,12 +204,12 @@ runner.test('Berechnung: Genau 2.0 WE-Tage = 450€', (t) => {
t.assertEqual(result.qualifyingDays, 2.0, 'Sollte 2.0 qualifizierende Tage haben');
t.assertTrue(result.thresholdReached, 'Schwellenwert sollte erreicht sein');
t.assertEqual(result.qualifyingDaysDeducted, 1.0, 'Sollte 1.0 Tag abziehen');
t.assertEqual(result.qualifyingDaysPaid, 1.0, 'Sollte 1.0 Tag bezahlen');
t.assertEqual(result.totalBonus, 450, 'Bonus sollte 450€ sein');
t.assertEqual(result.qualifyingDaysDeducted, 2.0, 'Sollte 2.0 Tage abziehen');
t.assertEqual(result.qualifyingDaysPaid, 0.0, 'Sollte 0.0 Tage bezahlen');
t.assertEqual(result.totalBonus, 0, 'Bonus sollte 0€ sein');
});
runner.test('Berechnung: 2x halbe WE-Dienste = 450€ (genau Schwelle, nach Abzug 1.0)', (t) => {
runner.test('Berechnung: 2x halbe WE-Dienste = 0€ (genau Schwelle, nach Abzug 2.0)', (t) => {
const holidays = new HolidayProvider();
const calculator = new BonusCalculator(holidays);
@ -224,11 +224,11 @@ runner.test('Berechnung: 2x halbe WE-Dienste = 450€ (genau Schwelle, nach Abzu
t.assertEqual(result.qualifyingDays, 2.0, 'Sollte 2.0 qualifizierende Tage haben (4×0.5)');
t.assertTrue(result.thresholdReached, 'Schwellenwert sollte erreicht sein');
t.assertEqual(result.qualifyingDaysPaid, 1.0, 'Sollte 1.0 Tag bezahlen nach Abzug');
t.assertEqual(result.totalBonus, 450, 'Bonus sollte 450€ sein');
t.assertEqual(result.qualifyingDaysPaid, 0.0, 'Sollte 0.0 Tage bezahlen nach Abzug');
t.assertEqual(result.totalBonus, 0, 'Bonus sollte 0€ sein');
});
runner.test('Berechnung: 3 WE-Tage = 900€', (t) => {
runner.test('Berechnung: 3 WE-Tage = 450€', (t) => {
const holidays = new HolidayProvider();
const calculator = new BonusCalculator(holidays);
@ -241,8 +241,8 @@ runner.test('Berechnung: 3 WE-Tage = 900€', (t) => {
const result = calculator.calculateMonthlyBonus(duties);
t.assertEqual(result.qualifyingDays, 3.0, 'Sollte 3.0 qualifizierende Tage haben');
t.assertEqual(result.qualifyingDaysPaid, 2.0, 'Sollte 2.0 Tage bezahlen (3-1)');
t.assertEqual(result.totalBonus, 900, 'Bonus sollte 900€ sein (2×450€)');
t.assertEqual(result.qualifyingDaysPaid, 1.0, 'Sollte 1.0 Tage bezahlen (3-2)');
t.assertEqual(result.totalBonus, 450, 'Bonus sollte 450€ sein (1×450€)');
});
runner.test('Berechnung: Normale Tage + WE-Tage gemischt', (t) => {
@ -261,10 +261,10 @@ runner.test('Berechnung: Normale Tage + WE-Tage gemischt', (t) => {
t.assertEqual(result.normalDays, 2.0, 'Sollte 2.0 normale Tage haben');
t.assertEqual(result.qualifyingDays, 2.0, 'Sollte 2.0 qualifizierende Tage haben');
t.assertEqual(result.normalDaysPaid, 2.0, 'Sollte 2.0 normale Tage bezahlen');
t.assertEqual(result.qualifyingDaysPaid, 1.0, 'Sollte 1.0 qualifizierenden Tag bezahlen');
t.assertEqual(result.qualifyingDaysPaid, 0.0, 'Sollte 0.0 qualifizierende Tage bezahlen');
t.assertEqual(result.bonusNormalDays, 500, 'Normale Tage: 2×250€ = 500€');
t.assertEqual(result.bonusQualifyingDays, 450, 'WE-Tage: 1×450€ = 450€');
t.assertEqual(result.totalBonus, 950, 'Gesamt: 950€');
t.assertEqual(result.bonusQualifyingDays, 0, 'WE-Tage: 0×450€ = 0€');
t.assertEqual(result.totalBonus, 500, 'Gesamt: 500€');
});
runner.test('Berechnung: Halbe Dienste korrekt berechnet', (t) => {
@ -282,10 +282,10 @@ runner.test('Berechnung: Halbe Dienste korrekt berechnet', (t) => {
t.assertEqual(result.normalDays, 0.5, 'Sollte 0.5 normale Tage haben');
t.assertEqual(result.qualifyingDays, 2.5, 'Sollte 2.5 qualifizierende Tage haben');
t.assertEqual(result.qualifyingDaysPaid, 1.5, 'Sollte 1.5 qualifizierende Tage bezahlen');
t.assertEqual(result.qualifyingDaysPaid, 0.5, 'Sollte 0.5 qualifizierende Tage bezahlen');
t.assertEqual(result.bonusNormalDays, 125, 'Normale Tage: 0.5×250€ = 125€');
t.assertEqual(result.bonusQualifyingDays, 675, 'WE-Tage: 1.5×450€ = 675€');
t.assertEqual(result.totalBonus, 800, 'Gesamt: 800€');
t.assertEqual(result.bonusQualifyingDays, 225, 'WE-Tage: 0.5×450€ = 225€');
t.assertEqual(result.totalBonus, 350, 'Gesamt: 350€');
});
runner.test('Berechnung: Feiertag + Vortag', (t) => {
@ -301,7 +301,7 @@ runner.test('Berechnung: Feiertag + Vortag', (t) => {
t.assertEqual(result.qualifyingDays, 2.0, 'Sollte 2.0 qualifizierende Tage haben');
t.assertTrue(result.thresholdReached, 'Schwellenwert sollte erreicht sein');
t.assertEqual(result.totalBonus, 450, 'Bonus sollte 450€ sein (2.0 - 1.0 = 1.0 × 450€)');
t.assertEqual(result.totalBonus, 0, 'Bonus sollte 0€ sein (2.0 - 2.0 = 0.0 × 450€)');
});
runner.test('Berechnung: Keine Dienste = 0€', (t) => {