All checks were successful
Deploy to K8s / deploy (push) Successful in 6s
Ports calculate_fee and calculate_junior_fee from scripts/attendance.py into a new go/internal/domain/fees package. Introduces the Expected type (Value int, Unknown bool) for the junior "?" sentinel, keeping the Go API strictly typed instead of mirroring Python's str|int return. All 20 table-driven tests pass with -race; golangci-lint clean. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
35 lines
1.0 KiB
Go
35 lines
1.0 KiB
Go
// Package fees ports fee calculation from scripts/attendance.py.
|
|
package fees
|
|
|
|
const (
|
|
AdultFeeDefault = 700 // CZK fallback for 2+ practices when month not in AdultFeeMonthlyRate
|
|
AdultFeeSingle = 200 // CZK for exactly 1 practice
|
|
)
|
|
|
|
// AdultFeeMonthlyRate mirrors ADULT_FEE_MONTHLY_RATE in scripts/attendance.py.
|
|
// Months absent from this map fall back to AdultFeeDefault.
|
|
var AdultFeeMonthlyRate = map[string]int{
|
|
"2025-09": 750, "2025-10": 750, "2025-11": 750, "2025-12": 750,
|
|
"2026-01": 750, "2026-02": 750, "2026-03": 350,
|
|
"2026-04": 700, "2026-05": 700,
|
|
}
|
|
|
|
// CalculateFee returns the adult fee in CZK for attendanceCount practices in
|
|
// the given monthKey (format "YYYY-MM").
|
|
//
|
|
// 0 practices → 0
|
|
// 1 practice → AdultFeeSingle (200)
|
|
// 2+ → AdultFeeMonthlyRate[monthKey] or AdultFeeDefault
|
|
func CalculateFee(attendanceCount int, monthKey string) int {
|
|
if attendanceCount == 0 {
|
|
return 0
|
|
}
|
|
if attendanceCount == 1 {
|
|
return AdultFeeSingle
|
|
}
|
|
if rate, ok := AdultFeeMonthlyRate[monthKey]; ok {
|
|
return rate
|
|
}
|
|
return AdultFeeDefault
|
|
}
|