Add internal/services/membership package: AttendanceLoader, TransactionLoader, ExceptionLoader interfaces + NewStubSources stub (returns ErrIOPending until M4 lands real Sheets loaders). FeesReport and ReconcileReport orchestrate domain/fees + domain/reconcile and write fixed-width text reports matching Python calculate_fees.py and match_payments.py print_report output. 13 unit tests cover all formatter branches and orchestration wiring via fake loaders. cmd/fuj/main.go: fees and reconcile subcommands now dispatch; sync/infer retain the [M4] placeholder. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
5 lines
248 B
Go
5 lines
248 B
Go
// Package membership orchestrates domain/fees and domain/reconcile against
|
|
// pluggable IO loaders. Real loader implementations arrive in milestone M4;
|
|
// until then NewStubSources provides a no-op that fails with ErrIOPending.
|
|
package membership
|