- 2026-08 added to the junior rate table at 0 CZK, same as adults - A single practice in a 0-rate month is 0 instead of "?", since a free month needs no manual review - Mirrored in Go and legacy Python; new calculate_junior_fee parity fixtures Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
41 lines
1.3 KiB
Go
41 lines
1.3 KiB
Go
package fees
|
|
|
|
const JuniorFeeDefault = 500 // CZK fallback for 2+ practices when month not in JuniorFeeMonthlyRate
|
|
|
|
// JuniorFeeMonthlyRate mirrors JUNIOR_MONTHLY_RATE in legacy/scripts/attendance.py.
|
|
// Months absent from this map fall back to JuniorFeeDefault.
|
|
var JuniorFeeMonthlyRate = map[string]int{
|
|
"2025-09": 250,
|
|
"2026-03": 250,
|
|
"2026-08": 0,
|
|
}
|
|
|
|
// Expected is the result of a junior fee calculation.
|
|
// When Unknown is true the fee requires manual review (Python returns "?");
|
|
// in that case Value is meaningless — always check Unknown first.
|
|
type Expected struct {
|
|
Value int
|
|
Unknown bool
|
|
}
|
|
|
|
// CalculateJuniorFee returns the junior fee for attendanceCount practices in
|
|
// the given monthKey (format "YYYY-MM").
|
|
//
|
|
// 0 practices → Expected{Value: 0}
|
|
// 1 practice → Expected{Unknown: true} (manual review; Python sentinel "?"),
|
|
// or Expected{Value: 0} when the month's rate is 0
|
|
// 2+ → Expected{Value: JuniorFeeMonthlyRate[monthKey] or JuniorFeeDefault}
|
|
func CalculateJuniorFee(attendanceCount int, monthKey string) Expected {
|
|
if attendanceCount == 0 {
|
|
return Expected{Value: 0}
|
|
}
|
|
rate, ok := JuniorFeeMonthlyRate[monthKey]
|
|
if !ok {
|
|
rate = JuniorFeeDefault
|
|
}
|
|
if attendanceCount == 1 && rate > 0 {
|
|
return Expected{Unknown: true}
|
|
}
|
|
return Expected{Value: rate}
|
|
}
|