2.4 KiB
2.4 KiB
FeeCalculationController plan
Scope
- Controller:
app/Http/Controllers/Api/Finance/FeeCalculationController.php - Purpose: finance calculation endpoints (refunds, tuition totals/breakdowns, family balances).
- Primary dependencies:
FeeRefundCalculatorService(refund calculations)FeeStudentFeeService(tuition total)TuitionCalculationService(tuition breakdown)BalanceCalculationService(family account/balance aggregation)
- Resources:
FeeRefundResourceFeeTuitionTotalResourceFeeTuitionBreakdownResourceFeeFamilyBalanceResource
Routes
All routes are under:
- Base prefix:
/api/v1/finance - (Route file shows this under a
financegroup; actual auth middleware depends on the surroundingv1group setup.)
Endpoints:
POST /api/v1/finance/fees/refund→refundPOST /api/v1/finance/fees/tuition-total→tuitionTotalPOST /api/v1/finance/fees/tuition-breakdown→tuitionBreakdownPOST /api/v1/finance/fees/family-balance→familyBalance
Requests/validation
refund:FeeRefundRequest- expects
parent_idandstudentsarray
- expects
tuitionTotal:FeeTuitionTotalRequest- expects
studentsarray
- expects
tuitionBreakdown:FeeTuitionBreakdownRequest- expects
studentsarray
- expects
familyBalance:FeeFamilyBalanceRequest- expects
parent_id,studentsarray, optionalschool_year
- expects
Response shapes
Legacy { ok: ... } shape:
refund:{ ok:true, refund: FeeRefundResource }
tuitionTotal:{ ok:true, tuition: FeeTuitionTotalResource({ total_tuition }) }
tuitionBreakdown:{ ok:true, tuition: FeeTuitionBreakdownResource }
familyBalance:{ ok:true, account: FeeFamilyBalanceResource }
Error handling expectations
- Each endpoint wraps calculation in
try/catch:- On exception: logs error and returns
500with{ ok:false, message:"Unable to ..." }
- On exception: logs error and returns
- Validation errors are handled by the FormRequest layer (422).
Test plan (feature/unit mix)
- Validation:
- Missing required fields → 422.
- Refund:
- Valid input returns
ok:trueand resource fields. - Service exception returns 500 and message.
- Valid input returns
- Tuition total/breakdown:
- Calculates expected totals for a known dataset.
- Service exception returns 500.
- Family balance:
- Produces stable account totals for known payments/charges.
- Service exception returns 500.