Field trips & excursions.
A field trip is one of the busiest workflows a school runs: a teacher proposes it, a head approves it, a budget is split between the school and the families, parents sign a consent slip, the bursar bills the net, the transport office finds a bus, and the class register has to follow the students out of the gate and back again. YESS threads all of it — request to consent to bus to attendance — through one spine, so the trip that leaves on Friday is the same trip the books, the timetable, and the parent portal already know about.
- 6trip kinds
- 11trip states
- 4consent states
- ≈13 minto read
Prologue
A note on this book and the excursion#
A trip out of school touches more of the platform than almost anything else a teacher does. It is an academic activity (it has learning objectives and a subject), a money event (someone pays for the coach and the entry tickets), a logistics job (a vehicle, a route, a driver), a safeguarding exercise (consent, a register, an emergency contact), and a timetable disruption (the lead teacher's own lessons still need covering). YESS was built so that one record — the field trip — carries every one of those concerns and fans them out to the modules that own them.
One thing to set straight up front: there is no standalone “Field trips” menu item. Trips are an activity of a department, so they are planned, approved, and rostered from inside the department mini-world, with two satellite surfaces — an approval queue for managers and a consent screen in the parent portal. This handbook walks you through every one of those surfaces in the order a real trip moves through them.
The trip that leaves on Friday is the same trip the books, the timetable, and the parent portal already know about.
Chapter one
Where field trips live#
Open the departments hub at /dashboard/departments and step into a department — Sciences, say. Each department is a mini-world, and one of its rooms is the field-trip catalogue: upcoming trips, recent trips, and (for managers) the controls to plan a new one. A trip belongs to a department, but it is also tagged to a programme, so the same Sciences department can keep three distinct activity catalogues side by side: an IB CAS activity, a GCE field trip, and a BAC sortie scolaire, each under its own programme's banner.
That programme-flavoured variant is the trip kind. YESS ships six: field trip, CAS activity, sortie scolaire, practical excursion, cultural visit, and other. A trip can also be school-wide rather than departmental — leave the department, subject, and section tags empty and it becomes a whole-school activity.
What a trip carries
- 1
Identity & scope
Name, description, learning objectives, destination and address, a start and end timestamp, and the scope tags — department, programme, subject IDs, section IDs. All scope tags empty = a school-wide activity.
- 2
Staff
A lead staff member plus an array of accompanying staff. The lead's own timetable periods during the trip window are surfaced for cover (see the timetable-impact chapter).
- 3
Money
Cost per student, the school's per-student subsidy, and a total school budget — the three numbers that decide who pays for what. More on these in the budgets chapter.
- 4
Consent & safety
A parent-consent-required flag (on by default), a consent deadline, a risk-assessment document URL, an insurance acknowledgement timestamp, and an emergency-contact record.
- 5
Transport
A transport-required flag and a transport status that hands the trip off to the transport office when the school needs to lay on a bus.
- 6
Status
The lifecycle state — eleven of them, from requested all the way to completed (or rejected / cancelled / postponed). The status is the engine that fires every downstream effect.
Chapter two
The request and the approval#
Field trips support two origin paths, and which one you get depends on your permission. A manager — anyone with field_trips.manage (school admin, principal, vice-principal, head of department) — plans a trip directly, and it starts life in planned. A classroom teacher with only field_trips.create can file a request: the database pins their new trip to status requested and stamps them as the requesting teacher. A teacher cannot self-approve — the rule is enforced at the database, not just in the screen.
The moment a request is filed, every manager in the school is notified and deep-linked to the review queue at /dashboard/departments/trip-requests. That page lists every pending request school-wide with the cost breakdown — net charge to the family, the subsidy, the school budget — right where the decision is made. One click approves; one click rejects with a reason. Either way, the requesting teacher is notified back of the decision.
The eleven states
A trip moves through a deliberate lifecycle: requested → approved → planned / consent_open / consent_closed / confirmed → in progress → completed. Two terminal branches sit off to the side — rejected (a declined request) and cancelled — plus postponed for a trip that slips. Several of these states are not just labels: crossing into an active state opens consent, bills consented families, and writes the attendance register, as the next chapters show.
Chapter three
Who pays — the budget split#
Every trip answers one question before consent opens: who pays? YESS models it with three figures on the trip. The cost per student is the full price. The school subsidy per student is the slice the school absorbs. The net charge to a family is the cost minus the subsidy, floored at zero. The total school budget is the lump the school sets aside for the trip overall — coach hire, entry tickets, staff per-diem.
From those three numbers, YESS supports every funding shape a real school uses, and routes each to finance automatically:
Four funding shapes
- 1
Family pays in full
Cost per student set, subsidy zero. When a parent consents, YESS emits an invoice to that family for the full amount.
- 2
School subsidises part
Cost and subsidy both set. The family is billed only the net (cost minus subsidy); the parent letter shows the breakdown so they see what the school absorbed.
- 3
Free for students
Net charge is zero, but the school still spends real money. Set the total school budget and YESS raises a school expense instead — the founder's 'free for students, an expense for the school' case.
- 4
Both, or neither
A trip can emit a family invoice and a school expense, just one, or none. The funding shape is whatever the three numbers describe — nothing is hard-wired.
When a trip is approved or confirmed with a positive school budget, YESS raises a finance expense automatically — a pending approval row in a “Field Trips” category, scoped to the trip's department, waiting for the bursar at /dashboard/expenses. The emission is idempotent: a re-approval never doubles the expense.
Chapter four
The roster and the consent#
Once a trip is approved, the manager opens its roster dialog from the department catalogue. The roster has two panes: the current attendees with their consent status, and an add-students pane with a section picker and a multi-select student list. Enrolling is bulk and idempotent — re-adding a student already on the roster is a no-op. Adding students opens consent on the trip.
Each attendee carries a consent status, and there are four: pending, consented, declined, and waiver (the office records consent received off-system, e.g. a signed paper slip). A summary band across the top of the roster counts each state at a glance.
The parent's side
Every parent sees their children's pending consent requests at /portal/field-trips. Each card carries the trip name, the date range, the destination, the per-student cost, the description, and the consent deadline — then two buttons: Consent or Decline. Acting on a card flips the roster pip on the admin's side immediately, and (if the parent consents) sets the billing chain in motion.
Consent → fee
The moment an attendee's consent flips to consented, YESS raises that family's invoice automatically — for the net charge (cost minus subsidy), due in three weeks, numbered FT-YYYYMMDD-…. It skips free trips and stamps the invoice id back onto the attendee so it never double-bills. The office can also run a manual Bill consentees sweep from the roster for any consented-but-unbilled attendees, and print a parent letter with the full cost breakdown and a tear-off consent slip for families who prefer paper.
Chapter five
Laying on the bus#
A trip might walk to the local museum, or the families might drop their children at the destination — in which case the school arranges nothing. But when the school needs to lay on a coach, the roster's transport panel is the handoff. Mark the trip transport required and its transport status flips to requested.
That requested flag is the boundary between academics and the transport office. The transport team picks up requested trips at /dashboard/transport/requests, materialises a real transport request from the trip's details — destination, departure and return times, supervising staff, an estimated headcount from the consented roster — and once a vehicle, route, and driver are assigned, the trip's transport status flips to confirmed. The whole transport network — vehicles, routes, drivers, incidents — has its own handbook at the Transport module.
Chapter six
The register that travels#
Here is the safeguarding heart of the module. When a trip crosses into an active state — approved, consent open or closed, in progress, or completed — YESS writes the attendance register on the students' behalf. For every consented (or waiver) attendee, for every day of the trip, for every period they would have sat in their own section, it marks an attendance entry with the status field trip.
The effect on the classroom is immediate and important: the teacher who would otherwise be looking at an empty seat sees the student shaded out as on a field trip, so nobody is ever wrongly marked absent. The auto-mark is idempotent (a unique key per trip, student, period, and date means replays and late-joiners never duplicate a mark), and if a student is added to the roster after the trip is already active, just that student's periods are auto-marked. Cancel the trip and every auto-mark it wrote is reversed.
Covering the lead teacher
The students are not the only ones leaving the timetable — the lead teacher is too. The roster surfaces the lead's own teaching periods that fall inside the trip window and lets the manager assign a substitute for each one, in place, with a single pick. The substitution flows into the timetable's cover engine like any other, so the school is never short a teacher because a colleague took a class to the botanical garden.
Chapter seven
What makes the field-trip module elite#
Six things that make this elite
- 1
Request → approval, enforced at the row
A teacher files; a manager decides. The rule that a teacher cannot self-approve is a database guard, not a UI check, and the approval is stamped server-side. The request can't be lost — every manager is notified and deep-linked to the queue the moment it lands.
- 2
Every funding shape, routed automatically
Family-pays, school-subsidises, free-to-student, both, or neither — the three budget numbers describe the shape, and YESS emits the family invoice and/or the school expense to finance on its own, idempotently.
- 3
Consent that bills itself
A parent tapping Consent in the portal raises that family's invoice for the net amount in the same chain — no second step, no manual reconciliation between who said yes and who got billed.
- 4
The register leaves with the class
Active trips auto-mark every traveller as on a field trip across all their periods, so a student on an excursion can never be marked absent in a classroom they were never going to be in. Cancel and it all reverses.
- 5
No teacher left uncovered
The lead teacher's own lessons during the trip are surfaced with an inline substitute picker, so taking a class out never quietly leaves another class unattended.
- 6
Programme-aware activity catalogues
One Sciences department keeps an IB CAS activity, a GCE field trip, and a BAC sortie scolaire as distinct catalogues via the trip-kind tag — the curriculum's own vocabulary, not a flattened generic list.
Planned features
What comes next#
The pieces below are modelled or partly wired today and are being finished in upcoming releases. They are listed here so you can plan around them honestly.
Four honest gaps
- 1
On-the-day check-in
Each attendee carries an attendance status field — checked-in, no-show, left-early, medical-emergency — for the head-count at the gate. The data model is in place; a dedicated day-of-trip check-in surface (ideally on mobile) is the next step.
- 2
In-portal consent capture
Parents consent and decline from the portal today. Capturing the risk-assessment acknowledgement and the emergency-contact confirmation inside the same flow — rather than as office-entered fields — is planned.
- 3
A school-wide trips calendar
Trips surface inside their department and the approval queue. A consolidated, school-wide field-trips view alongside the shared calendar — every excursion this term in one place — is on the roadmap.
- 4
Consent-dispatch fan-out
Opening consent leaves a trail the notifications cluster can pick up; the automatic email/SMS/WhatsApp dispatch to every affected parent on consent-open is being wired through the same dispatcher the rest of the platform uses.
The full lifecycle
A trip, request to safe return#
Week one. A Sciences teacher files a request for a botanical-garden trip — destination, dates, learning objectives, cost per student. Every manager is notified.
Approval. The deputy opens the trip-requests queue, sees the cost breakdown, and approves. The teacher is notified; the trip's school budget raises a pending expense for the bursar.
Consent. The teacher builds the roster from the section list. Consent opens; parents see the request in their portal. As each family consents, their invoice for the net charge is raised automatically. The office prints the parent letter for the few families who prefer paper.
Logistics. The trip is marked transport-required; the transport office picks up the request, assigns a coach and a driver, and confirms. The manager assigns substitutes for the lead teacher's two lessons that fall on trip day.
Trip day. The trip is in progress. Every traveller's periods are already marked field trip, so no classroom teacher marks them absent. The class goes, learns, and comes home.
After. The trip is completed. The invoices sit on the families' accounts; the expense sits on the school's books; the register tells the true story of where every student was. Nothing was reconciled by hand.
Adjacent modules
Where field trips connect#
A field trip is a hub that reaches into five other modules. Some connections fire automatically; some hand off to a team that owns the next step.
Adjacent modules
- 20Finance, fees & accountingConsent raises the family's invoice for the net charge; an approved school budget raises a pending expense. Both flow to finance automatically.
- 22Transport networkMarking a trip transport-required hands it to the transport office, which materialises a real transport request and assigns a vehicle.
- 10Attendance engineActive trips auto-mark every traveller's periods as field-trip so no student on an excursion is wrongly marked absent.
- 05Timetable & schedulingThe lead teacher's own periods during the trip are surfaced for cover; substitutes flow into the timetable's cover engine.
- 16Parent & student portalsParents consent or decline from their portal, and the consent flip drives the billing and attendance chains.
- 31Calendar & eventsA consolidated school-wide trips view alongside the shared calendar is the roadmap surface for every excursion this term.
Tutorial
Do it step by step#
Run a field trip end to end, from the teacher's request to the register that comes home safe. Six steps, in the order the school actually works.
- 1
File or plan the trip
From a department mini-world at /dashboard/departments, a teacher files a request (it lands in requested) or a manager plans one directly (planned). Set the name, dates, destination, learning objectives, and the cost per student.Pick the right trip kind — field trip, CAS activity, sortie scolaire — so the trip lands in its programme's own activity catalogue.
- 2
Approve the request
A manager opens the queue at /dashboard/departments/trip-requests, reads the cost breakdown, and approves or rejects with a reason. Approving stamps the approver server-side and — if there's a school budget — raises a pending expense for the bursar. - 3
Set the budget split
Decide who pays: a cost per student the family covers, a school subsidy that lowers the net, or a total school budget that makes the trip free for students and an expense for the school. The net charge is the cost minus the subsidy, floored at zero.Free-to-student trips still cost money — set the total school budget so the coach and tickets land on the school's books, not nobody's.
- 4
Build the roster, open consent
In the roster dialog, pick a section and bulk-enrol students. Consent opens; parents see the request at /portal/field-trips and tap Consent or Decline. Each consent raises that family's invoice for the net automatically; print the parent letter for paper families. - 5
Request the bus, cover the teacher
Mark the trip transport-required; the transport office picks it up at /dashboard/transport/requests and assigns a vehicle. Back in the roster, assign a substitute for each of the lead teacher's periods that fall on trip day. - 6
Travel — the register follows
Once the trip is active, every traveller's periods are already marked field trip, so no classroom teacher marks them absent. The class goes and comes home; the invoices and the expense are already on the books. If a trip is called off, cancel it — never delete — and every auto-mark reverses.
Request to consent to bus to register — every concern a trip raises landed on the module that owns it, with no spreadsheet in between.