Flow: service billing (transport, hostel, meals)

Transport, boarding and catering are separate apps, but a family never gets three bills. Each service posts its charge onto the student's one fee assignment through a bridge — with no double entry.

Operations (Transport /Hostel / Meals)Bridge moduleFees (ep.fee.assignment)Invoice & statementParent portal1Assign route / room /meal plan2Activate theassignment3Bridge creates a feeline4Line added to theyear's assignment5Totals recomputed6Consolidated invoiceupdated7Family sees onebalance
Service billing — each service's bridge writes one ep.fee.assignment.line; Fees recomputes the total.

Mechanics per service

ServiceSource objectMethodFee categoryAmount field
Transportep.transport.assignment_create_fee_line()ep_fees.fee_cat_transporteffective_fee
Hostelep.hostel.allocation_create_fee_lines()boarding categoryroom / term fee
Mealsep.meals.subscription_create_fee_line()meals categoryplan price
Libraryoverdue loanfine postingfinesfine amount

Recompute, never duplicate

Each bridge calls _compute_totals() and _compute_paid() on the ep.fee.assignment after writing the line, so the invoice and the family balance are instantly correct. Removing the service (_remove_fee_line()) unlinks the line and recomputes — no orphan charges.

Edge cases

  • Staff who commute: staff_commuter assignments are skipped — staff ride free, no fee line.
  • Mid-year join: if there is no active ep.fee.assignment yet, the bridge posts a note and creates the line at enrolment instead.
  • Pausing a service: pausing the assignment removes the line; the family stops being billed from that point.
No manual entry — Never type transport/hostel/meal charges into Fees by hand — the bridge owns them, so the invoice is always complete and reversible.
Was this page helpful?