refactor(calculator): drop unused dutyDetails/totalDuties result fields
No UI reads them - app.js computes its own labels via isQualifyingDay/ getDayTypeLabel when rendering the duty list. Only the test-suite asserted them; those asserts are removed too. buildDutyDetails goes with them. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
bbc8690a0b
commit
cb46e8fb04
2 changed files with 4 additions and 24 deletions
|
|
@ -36,23 +36,11 @@ class BonusCalculator {
|
|||
return days[dayOfWeek];
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the dutyDetails array (date, share, isQualifying, dayType) for the UI.
|
||||
*/
|
||||
buildDutyDetails(duties) {
|
||||
return duties.map(duty => ({
|
||||
date: duty.date,
|
||||
share: duty.share,
|
||||
isQualifying: this.isQualifyingDay(duty.date),
|
||||
dayType: this.getDayTypeLabel(duty.date)
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the bonus for a single employee for a given month.
|
||||
* @param {Array} duties - Array of { date: Date, share: number }
|
||||
* @param {boolean} isVacation - Vacation toggle (halves thresholds + deductions)
|
||||
* @returns {Object} new-shape result (winner, allResults, totalBonus, classified, isVacation, dutyDetails)
|
||||
* @returns {Object} new-shape result (winner, allResults, totalBonus, classified, isVacation)
|
||||
*/
|
||||
calculateMonthlyBonus(duties, isVacation = false) {
|
||||
if (!duties || duties.length === 0) {
|
||||
|
|
@ -83,9 +71,7 @@ class BonusCalculator {
|
|||
isVacation,
|
||||
winner,
|
||||
allResults: results,
|
||||
totalBonus: winner.bonus,
|
||||
totalDuties: duties.length,
|
||||
dutyDetails: this.buildDutyDetails(duties)
|
||||
totalBonus: winner.bonus
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -116,9 +102,7 @@ class BonusCalculator {
|
|||
isVacation,
|
||||
winner: { ...empty, isWinner: true },
|
||||
allResults: [1, 2, 3].map(variantId => ({ ...empty, variantId, isWinner: variantId === 1 })),
|
||||
totalBonus: 0,
|
||||
totalDuties: 0,
|
||||
dutyDetails: []
|
||||
totalBonus: 0
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -284,9 +284,7 @@ runner.test('Berechnung: Keine Dienste = 0 EUR', (t) => {
|
|||
const holidays = new HolidayProvider();
|
||||
const calculator = new BonusCalculator(holidays);
|
||||
const result = calculator.calculateMonthlyBonus([], false);
|
||||
t.assertEqual(result.totalDuties, 0, '0 duties');
|
||||
t.assertEqual(result.totalBonus, 0, '0 bonus');
|
||||
t.assertEqual(result.dutyDetails.length, 0, '0 dutyDetails');
|
||||
});
|
||||
|
||||
// ============================================================================
|
||||
|
|
@ -901,7 +899,7 @@ runner.test('Winner: nur V3 produziert positive bonus -> V3 winner', (t) => {
|
|||
t.assertEqual(result.totalBonus, 450, 'bonus=450');
|
||||
});
|
||||
|
||||
runner.test('Winner: result-Shape enthaelt classified, isVacation, dutyDetails', (t) => {
|
||||
runner.test('Winner: result-Shape enthaelt classified, isVacation', (t) => {
|
||||
const hp = new HolidayProvider();
|
||||
const calc = new BonusCalculator(hp);
|
||||
const duties = [
|
||||
|
|
@ -911,8 +909,6 @@ runner.test('Winner: result-Shape enthaelt classified, isVacation, dutyDetails',
|
|||
const result = calc.calculateMonthlyBonus(duties, false);
|
||||
t.assertTrue('classified' in result, 'classified field exists');
|
||||
t.assertTrue('isVacation' in result, 'isVacation field exists');
|
||||
t.assertTrue('dutyDetails' in result, 'dutyDetails field exists');
|
||||
t.assertEqual(result.dutyDetails.length, 2, 'dutyDetails has 2 entries');
|
||||
t.assertEqual(result.isVacation, false, 'isVacation=false');
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue