Bookings
Purpose and who uses it
ReceptionistHotel ManagerEvery stay starts here: a reservation becomes a room to prepare, a folio to settle and a line on the night audit.
Bookings is the front desk's home screen. A booking records who is staying, in which room type (and, once assigned, which room), for which nights, at what rate and from which source. Its status drives the rest of the house: confirming it may raise a deposit invoice, checking in opens the folio and marks the room occupied, checking out closes the folio and drops a cleaning task on the housekeeping board.
- Receptionists create bookings, confirm, check in and out, and mark cancellations and no-shows (Bookings = Full by default).
- Hotel Managers do the same and may also check a guest out with a balance still owed (that needs Payments = Full).
- Accountants, Housekeeping Managers, Restaurant Managers and Security see the board and list read-only.
Screen anatomy
Three views share one page: the List archive (the default), the Pipeline board and the month Calendar, plus four KPI tiles.
- 1Page headTitle, the List / Cards / Pipeline / Calendar switch (List opens first; the choice is remembered), the Filters button, and (Bookings = Edit) New group and New booking.
- 2New RequestsBookings still in the New Reservation status, awaiting confirmation.
- 3ConfirmedConfirmed bookings whose arrival date is still in the future.
- 4Arriving TodayConfirmed bookings whose check-in date is today or earlier (late arrivals stay here until checked in or marked no-show).
- 5Booking cardGuest, code, Room / type / rate-plan / group tags, dates and the stay total. Click to open the drawer; drag to move (Edit).
- 8KPI tilesTotal bookings, Pending requests, In-house and Pipeline value for the bookings currently visible on the board.
The three views
- Pipeline: six columns: New Requests, Confirmed, Arriving Today, In-House Guests, Checked Out, Cancelled. It shows a working set: every booking whose stay touches the seven days either side of today, plus everyone in-house. This is also the snapshot the app keeps for offline use.
- List: the full archive, one page at a time from the server. Search box (“Search booking, guest, phone, room…”), Status and Source dropdowns, and a “Showing / total” count. Columns: Booking, Guest, Room, Dates, Status, Amount, Source. Newest arrival date first; the filters and page live in the address bar (
/bookings?view=list&status=confirmed&page=2). - Calendar: a Monday-first month grid. Each day lists up to three arrivals (“+N more arriving” beyond that), a “N in-house” count for stays spanning the day and “N departing”. Use the arrows or Today to move months; on a phone it becomes an agenda of active days only.
Filters opens the “Filter bookings” dialog: Status, Source, Stay from and Stay until, with Clear and Show results. On the Pipeline the filters narrow the board and the KPI tiles; on the List they are written to the URL so the page can be bookmarked or shared.
Creating a booking (the wizard)
ReceptionistTwo steps: stay details with a live quote and an availability check, then room and guest.
- 1Click New bookingThe “New booking” dialog opens on “Step 1 of 2: stay details & availability”.
- 2Enter the stayCheck-in (today or later), Check-out (at least one night), Room type, Guests (1–6 pax), Source (Booking.com, Direct, Expedia, Walk-in, Travel Agent, Corporate) and, if the hotel has any, a Rate plan. The BAR plan is preselected; only plans that apply to the chosen room type are listed.
- 3Read the quoteA grey box shows “N nights · room charge …” for the chosen plan. It is the room charge before tax; the final total is computed from the hotel's service charge, VAT and levy settings when you save.
- 4Click Check availabilityThe wizard asks the server which rooms of that type are free for those nights (maintenance and out-of-service rooms are never offered) and moves to “Step 2 of 2: room & guest”.
- 5Pick a room, or Assign laterRoom chips read “204 · Fl 2”. If none are free you see “No {type} rooms free for those dates. The booking can still be saved without a room and assigned later.”: the capacity guard still checks that the type is not oversold.
- 6Choose the guestExisting guest: type at least two characters of a name, code, phone or email and pick from the list. New guest: Full name (required), Phone, Email, the profile is created with the booking.
- 7Add Special requests (optional) and click Create bookingThe booking is saved as Confirmed, a “Booking BK-… created” toast appears and the board refreshes.
Checking a guest in
ReceptionistCheck-in is allowed on or after the arrival day, into a ready room of the booked type that nobody else is still occupying.
- 1Open the bookingClick the card in Arriving Today (or Confirmed for an early arrival, which will be refused, see below), or find it in the List and click the row.
- 2Click Check in in the drawer footerYou can also drag the card into In-House Guests, or pick Checked In in the Status select.
- 3Assign a room if there is none yetThe drawer shows “Assign a room to check in · N free” with a chip per room that is free for the stay, of the booked type, not cleaning, with no open housekeeping task and no guest still inside. Click a chip to check in to it. If the list is empty you see “No free {type} rooms for those dates”.
- 4DoneA toast reads “BK-… → Checked In”. The room turns Occupied, the folio opens with the room nights and tax lines, and a “Guest checked in: Room N” alert is posted.
The rules the server enforces
- Arrival day: the hotel-local date of the action must not be before the booking's check-in date. Late arrivals are fine; an early arrival must have its dates moved first so the folio charges the nights actually slept.
- A room must be assigned: either earlier on the booking or from the chips at check-in.
- Type must match: a room picked at the desk must be of the booked room type. A room assigned earlier on the booking stands even if it is a different type (an upgrade).
- Room must be ready: not out of service or under maintenance, not in Cleaning, and with no open housekeeping task.
- Nobody still inside: a same-day turnover is a legal reservation, but the physical check-in waits until the outgoing guest has checked out. The room row is locked so two desks cannot both pass the check.
Checking a guest out
ReceptionistHotel ManagerThe folio must be settled first; a Payments = Full user may check out and bill later.
- 1Settle the folioOpen the invoice on the Payments screen and use Record payment until the balance is zero (see the Payments chapter).
- 2Click Check out in the booking drawerOr drag the card from In-House Guests to Checked Out, or pick Checked Out in the Status select.
- 3If a balance remainsThe server refuses with “INV-… still owes UGX …. Collect it before check-out, or a Payments manager can check out and bill later”. A user with Payments = Full is asked “Check out anyway and bill later? The folio stays open on Payments.”: confirming checks out with the balance outstanding and writes an audit entry.
- 4What happens nextThe open folio is closed to new charges, a High-priority checkout-clean housekeeping task due in two hours is created for the room, the room turns Cleaning, and a “Guest checked out: room to cleaning” alert is posted.
Confirming, cancelling and no-shows
ReceptionistEach move has a confirmation dialog; cancellations and no-shows may post a fee to the folio.
- Confirm (New → Confirmed), drawer button Confirm, or drag the card from New Requests to Confirmed. Posts the deposit hold and sends the confirmation email as described above.
- Cancel booking (New or Confirmed → Cancelled), opens “Cancel BK-…?” / “{guest}'s stay will be cancelled and the room released.” Confirm with Cancel booking. A cancellation fee of the hotel's cancel percentage of the stay total is posted if that percentage is above zero (default 0%).
- No-show (Confirmed → No Show), opens “Mark BK-… as a no-show?” / “{guest} did not arrive. The room is released. A no-show fee may post to the folio.” Confirm with Mark no-show. The fee is the hotel's no-show percentage of one night (default 100%).
Fees and deposits land on the booking's open pre-arrival invoice (one is opened if needed) as a line such as “No-show fee · BK-1042 (100% of one night)”. A fee posted onto an invoice that was already paid reopens it.
Group bookings
ReceptionistBlock several rooms of one or more types under one lead guest; room numbers are assigned later.
- 1Click New groupThe “New group” dialog: “Allot rooms under one lead guest, assign room numbers later”.
- 2Fill in the blockGroup name (tour operator, wedding, conference…), Check-in and Check-out, the Lead guest (search an existing profile) and an Allotment count per room type (0–40 each, up to eight types, 80 rooms in total).
- 3Click Create groupThe server checks capacity for each type over the whole block, then creates one Confirmed booking per room, unassigned, 1 pax, source Direct, all under the lead guest, and gives the group a GRP-… code. Toast: “Group GRP-… · N rooms”.
Group bookings appear on the board as ordinary cards carrying the group code tag. Assign rooms and check each one in exactly like a single booking. The wizard's validation messages are “Give the group a name”, “Pick the lead guest” and “Allot at least one room”.
Rate plans and the quote
Hotel ManagerA plan adjusts the room type's base rate per night; the booking stores the average nightly rate and the tax-inclusive total.
Every room type has a base rate. A rate plan is one of three kinds, BAR (rack), Weekend, Promo , and can be limited to one room type, to certain days of the week, and to a valid-from / valid-to window. Inactive plans are never offered.
- For each night of the stay: if the plan is inactive, outside its dates or not on its days, the base rate applies. Otherwise a fixed plan amount wins; failing that the base rate is adjusted by the plan's percentage (for example −15%).
- The booking keeps rate = the average of the nightly rates and amount = the subtotal with service charge, VAT and levy applied in that order. The folio opened at check-in uses the same figures, so quote and folio always agree.
- Changing a room type's base rate or a plan later affects new quotes only. Existing bookings keep the rate they were sold at.
Plans are managed in Settings → Hotel → Rate plans (Settings = Edit): each row shows the name, code and kind with an editable percentage and a Save button. The BAR plan is what the wizard preselects.
Statuses and the board columns
Six stored statuses; the board columns are derived from status and the hotel-local date, never stored.
- New Reservation → Confirmed (Confirm)
- New Reservation → Cancelled (Cancel)
- New Reservation → Checked In (Check in (API))
- Confirmed → Checked In (Check in)
- Confirmed → No Show (No-show)
- Confirmed → Cancelled (Cancel)
- Checked In → Checked Out (Check out)
- New Reservation: a request that holds inventory but has not been confirmed. The drawer offers Confirm and Cancel booking. (The server also accepts a direct check-in of a New booking; the drawer only offers Check in on Confirmed ones.)
- Confirmed: holds the room type (and room, if assigned). Deposit and confirmation email have gone out.
- Checked In: guest in-house; folio open; room Occupied.
- Checked Out, Cancelled, No Show: final. Read-only from here; the room is released.
Board columns are derived
The column a card sits in is computed from its status and the hotel's date, by the same function on the server and in the browser:
- New Reservation → New Requests
- Confirmed with check-in after today → Confirmed; check-in today or earlier → Arriving Today
- Checked In → In-House Guests; Checked Out → Checked Out
- Cancelled and No Show → Cancelled
So you cannot drop a card into Arriving Today, the toast says “Arriving Today is based on the check-in date. Confirm the booking if it is still a request.” Any other move the lifecycle does not allow answers “That column isn't a valid next step for this booking”.
A booking's history (every status change, who made it and when) is stored and shown by the API; the drawer's Status select offers only the moves drawn above (“Only valid transitions are offered; check-in asks for a room, check-out closes the folio.”).
Fields
What the wizard collects and what the server validates.
| Field | Type | Notes |
|---|---|---|
| Check-in * | date | Hotel-local calendar date. The wizard does not allow a past date. |
| Check-out * | date | Must be after check-in, at least one night. |
| Room type * | select | Shown as “Deluxe (UGX 250,000/night · 1 King)”. Decides the base rate and which rooms are offered. |
| Guests | 1–6 pax | Adults on the booking. The server accepts up to 12 adults and up to 12 children; the wizard sends children as 0. |
| Source | select | Booking.com, Direct (default), Expedia, Walk-in, Travel Agent or Corporate. Feeds the Booking sources chart. |
| Rate plan | select | Only shown when the hotel has active plans; filtered to the chosen room type. BAR is preselected. |
| Room | chip | One of the rooms free for the stay, or Assign later. A room out of service is never offered; a room under maintenance today is still offered for later dates, but cannot be checked into until its work order closes. |
| Guest * | existing or new | Existing: search by name, code, phone or email. New: Full name (at least 2 characters), Phone, Email (must be a valid address if given). |
| Special requests | text ≤ 500 | Shown in an amber box on the drawer, high floor, late check-in, and so on. |
| Field | Type | Notes |
|---|---|---|
| Group name * | text 2–120 | Tour operator, wedding, conference… |
| Check-in / Check-out * | dates | One block of dates for every room in the group. |
| Lead guest * | existing guest | Every room booking in the group is made under this profile. |
| Allotment * | 0–40 per type | Up to eight room types; 80 rooms in total. Each type is capacity-checked for the whole block. |
Permissions
View opens the board, list and calendar; Edit performs every booking action; checking out with a balance needs Payments = Full.
| Role | Bookings | Payments | Rooms |
|---|---|---|---|
| Super Admin | Full | Full | Full |
| Hotel Manager | Full | Full | Full |
| Receptionist | Full | View | Edit |
| Accountant | View | Full | None |
| Housekeeping Mgr | View | None | Full |
| Maintenance | None | None | Edit |
| Restaurant Mgr | View | Edit | None |
| HR Manager | None | View | None |
| Security | View | None | View |
- Bookings = View: Pipeline, List, Calendar, the booking drawer, rate plans and the availability search (the wizard's room list also needs Rooms = View to load room types).
- Bookings = Edit: New booking, New group, Confirm, Cancel booking, No-show, Check in, Check out, drag-and-drop on the board.
- Payments = Full: the “Check out anyway and bill later?” override when a folio still has a balance.
- Settings = Edit: create or change rate plans.
Tips
Live updates, remembered views, the List URL, and where to look when a card is missing.
Errors you may see
Every refusal the bookings, groups and rate-plan endpoints can return, with what to do.
Check-out must be after check-inProvide either guestId or a new guestRoom 204 is not a DeluxeRoom 204 is out of serviceNo Deluxe left for 2026-09-12: 8 sellable, 8 already bookedRoom is already booked for those datesThat rate plan does not apply to this room typeCannot edit a checkedout bookingRoom 204 is unavailableCannot check in a cancelled bookingBK-1042 arrives on 2026-09-12. Move the booking dates for an early check-inAssign a room before check-inRoom 204 is a Suite; BK-1042 was booked as a different type. Assign it on the booking firstRoom 204 is not clean yet (HK-88 is open). Pick another room or wait for housekeepingRoom 204 is still occupied by BK-1039. Check them out firstCannot check out a confirmed bookingINV-2301 still owes UGX 120,000. Collect it before check-out, or a Payments manager can check out and bill laterINV-2301 still owes UGX 120,000. Only Payments "Full access" can check out with a balanceCannot move a checkedin booking to cancelledoccurredAt must be within the last 48 hoursmonth must be YYYY-MMCap a group at 80 roomsRate plan WEEKEND already exists