Operations
Transport setup and usage
Routes, stops, vehicles, driver logins and assignments, then daily duty with GPS, the TRN fee handoff, and boarding reports.
Operations guide for day and boarding schools.
Last updated August 29, 2026
Transport is the most order-dependent module in the product, because each step is the prerequisite for the next. A stop cannot exist without a route, a duty cannot start without a vehicle that has a route, a roster cannot be seeded without student assignments, and billing cannot happen without a stop fee and a TRN fee type. Build it once in the right order and the daily routine is short; build it out of order and the failure usually appears days later as a driver who cannot start a trip or a family who is never billed.
Prerequisites
- An account with Platform Admin, Principal or Vice Principal. Every setup write - routes, stops, vehicles, providers, drivers, assignments and the waitlist - is limited to those three roles.
- An active academic year, because assignments and the fee sync are both scoped to one.
- A fee type with code TRN at /fees/fee-types if stops carry a monthly fee. The fee structure is created on first use, but the fee type is not.
- An active Transport role in the roles list, so provider driver profiles can be given a duty login.
- Students already on the roster, since an assignment points at a student account.
Setup workflow
- Create routes at /transport or /transport/routes with a name and code.
- On /transport/[id], add stops with a sequence, pickup and drop times, a map pin, and the monthly fee. Optimise the stop order here if you added them out of sequence.
- Add providers, then on provider detail create each driver with a duty login or link an existing user account.
- Link vehicles to a route and driver under /transport/vehicles, and record insurance, fitness and licence expiry dates while you are there.
- Assign students to a stop from route detail or /transport/assignments, or in bulk through the assignment import.
Who can do what
| Task | Who |
|---|---|
| Every setup change and every assignment | Platform Admin, Principal, Vice Principal only |
| Read the back office, day sheet and reports | Those three plus Admin and Support Staff - Finance, read-only |
| Start a duty, mark boarding, finish or cancel a trip | Transport-role drivers on their own vehicles, plus leadership and Admin |
| Report an incident during a trip | Anybody who may operate a duty |
| Resolve an incident or assign a substitute vehicle | Leadership and Admin |
Daily duty workflow
- The driver opens /transport/duty and starts pickup or drop. Both trips for the day are created and the roster is seeded from active assignments on that route.
- On /transport/duty/[tripId] the browser takes an immediate position fix and then watches location, posting a ping about every fifteen seconds while the trip is in progress.
- Mark each student present or absent for the board phase and again for the drop. Children the family has already reported as not riding today arrive pre-marked absent.
- Finish the trip, which flags anybody still unmarked as absent, or cancel it with an optional reason.
- Parents receive an in-app alert and an email for each board and drop mark, and an in-app alert when the trip starts, deep linked to /parent-dashboard/transport with their child id.
The fee handoff
A stop with a monthly fee above zero is the trigger. When a student is assigned, the sync creates one TRN fee instance per month from the current calendar month through to the end of the academic year, capped at twelve months, each due on the seventh. It is idempotent: every instance carries a marker of the assignment id and the year and month in its notes, so repeating the assignment cannot double-bill a month. Ending an assignment waives the unpaid pending, overdue and partial instances for it and leaves paid history alone.
- A stop fee of zero produces nothing at all, which is the intended way to run free transport.
- With no TRN fee type, or no active academic year, the sync returns a reason and writes nothing. There is no visible warning on the assignment screen.
- The fee structure for TRN is created on first use with twelve installments and a seven-day grace period, so no fee setup beyond the fee type is needed.
- From the moment an instance exists it is an ordinary finance item. Collection, receipts and any waiver happen in the fees module, and the transport screens cannot reverse one.
Where it goes wrong
- Assigning students before creating the TRN fee type. The assignment succeeds, billing silently does not, and it is usually noticed a month later.
- Reassigning a student rather than ending the old assignment first, which leaves the previous unpaid instances in place.
- Filling a vehicle past capacity. The assignment is refused with a capacity error and a waitlist suggestion; the waitlist at /transport/waitlist is where those students should go.
- Leaving a vehicle without a route. Duty cannot start, and the roster for that vehicle never seeds.
- Treating the documents screen as an alert. Expiry inside thirty days is calculated when you open /transport/documents or /transport/dashboard, and nothing is emailed.
Monitoring and reports
- Office live view: /transport/day-sheet, with the fleet map and a day export.
- Boarding history: /transport/reports, also exposed as report id transport-boarding at /api/transport/boarding-report. A query may span at most 92 days, and an export stops at 5,000 rows with a truncation flag rather than trimming quietly.
- Parents poll live status at /parent-dashboard/transport and students at /my-transport, both about every fifteen seconds.
- Retention is handled by the daily cron: GPS pings are deleted after 30 days and boarding events after 730, so the boarding report is the durable record and the live map is not.
Common questions
Quick answers in plain language.
I assigned students to a stop with a monthly fee and no fee instances appeared. Why?+
The sync needs a fee type with code TRN to already exist, and an active academic year. Missing either and it returns a reason - trn_fee_type_missing or no_academic_year - and writes nothing. The response carries that reason but the screen does not raise an error, so create the TRN fee type at /fees/fee-types before you start assigning.
A driver cannot start a duty. What is usually wrong?+
Most often the vehicle has no active route, which is refused with vehicle has no active route. Otherwise the driver is not linked to that vehicle through their driver profile, or the other trip type is still in progress - only one trip per vehicle may run at a time.
We moved a child to a different stop. What happened to the old billing?+
Creating the new assignment silently ends the previous active one without waiving its unpaid instances, because waiving only happens when you set an assignment to ENDED yourself. Check /fees for leftover TRN instances after any reassignment, or end the old assignment first and then create the new one.
Do parents get an email when the bus breaks down?+
No. A transport incident writes an in-app notification to the parents on that trip, and an SOS also notifies the transport office, but no email is sent for either. Board and drop marks are the one transport event that emails parents.
Related searches
School leaders and IT teams often search for: how to transport workflows in school management software, best school transport software for K-12 schools, Schoolyi transport workflows guide, transport workflows step by step, school bus tracking app, library management software, and school inventory management.

