User guide · Modules

Bookings

The reservation pipeline: a board for today's work, a paged list of every booking, a month calendar, the two-step booking wizard, group blocks, rate plans, and the check-in / check-out rules that protect rooms and folios.
Whole guide

Purpose and who uses it

ReceptionistHotel Manager

Every 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.

Bookings, Pipeline view (the List is the default)
123458
  1. 1
    Page head
    Title, the List / Cards / Pipeline / Calendar switch (List opens first; the choice is remembered), the Filters button, and (Bookings = Edit) New group and New booking.
  2. 2
    New Requests
    Bookings still in the New Reservation status, awaiting confirmation.
  3. 3
    Confirmed
    Confirmed bookings whose arrival date is still in the future.
  4. 4
    Arriving Today
    Confirmed bookings whose check-in date is today or earlier (late arrivals stay here until checked in or marked no-show).
  5. 5
    Booking card
    Guest, code, Room / type / rate-plan / group tags, dates and the stay total. Click to open the drawer; drag to move (Edit).
  6. 8
    KPI tiles
    Total 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)

Receptionist

Two steps: stay details with a live quote and an availability check, then room and guest.

  1. 1
    Click New booking
    The “New booking” dialog opens on “Step 1 of 2: stay details & availability”.
  2. 2
    Enter the stay
    Check-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.
  3. 3
    Read the quote
    A 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.
  4. 4
    Click Check availability
    The 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”.
  5. 5
    Pick a room, or Assign later
    Room 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.
  6. 6
    Choose the guest
    Existing 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.
  7. 7
    Add Special requests (optional) and click Create booking
    The booking is saved as Confirmed, a “Booking BK-… created” toast appears and the board refreshes.

Checking a guest in

Receptionist

Check-in is allowed on or after the arrival day, into a ready room of the booked type that nobody else is still occupying.

  1. 1
    Open the booking
    Click 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.
  2. 2
    Click Check in in the drawer footer
    You can also drag the card into In-House Guests, or pick Checked In in the Status select.
  3. 3
    Assign a room if there is none yet
    The 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”.
  4. 4
    Done
    A 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 Manager

The folio must be settled first; a Payments = Full user may check out and bill later.

  1. 1
    Settle the folio
    Open the invoice on the Payments screen and use Record payment until the balance is zero (see the Payments chapter).
  2. 2
    Click Check out in the booking drawer
    Or drag the card from In-House Guests to Checked Out, or pick Checked Out in the Status select.
  3. 3
    If a balance remains
    The 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.
  4. 4
    What happens next
    The 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

Receptionist

Each 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

Receptionist

Block several rooms of one or more types under one lead guest; room numbers are assigned later.

  1. 1
    Click New group
    The “New group” dialog: “Allot rooms under one lead guest, assign room numbers later”.
  2. 2
    Fill in the block
    Group 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).
  3. 3
    Click Create group
    The 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 Manager

A 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.

Booking lifecycle, arrows the server allows
Booking lifecycle, arrows the server allowsConfirmCancelCheck in (API)Check inNo-showCancelCheck outNew ReservationConfirmedChecked InChecked OutNo ShowCancelled
  • New ReservationConfirmed (Confirm)
  • New ReservationCancelled (Cancel)
  • New ReservationChecked In (Check in (API))
  • ConfirmedChecked In (Check in)
  • ConfirmedNo Show (No-show)
  • ConfirmedCancelled (Cancel)
  • Checked InChecked 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.

New booking wizard
FieldTypeNotes
Check-in *dateHotel-local calendar date. The wizard does not allow a past date.
Check-out *dateMust be after check-in, at least one night.
Room type *selectShown as “Deluxe (UGX 250,000/night · 1 King)”. Decides the base rate and which rooms are offered.
Guests1–6 paxAdults on the booking. The server accepts up to 12 adults and up to 12 children; the wizard sends children as 0.
SourceselectBooking.com, Direct (default), Expedia, Walk-in, Travel Agent or Corporate. Feeds the Booking sources chart.
Rate planselectOnly shown when the hotel has active plans; filtered to the chosen room type. BAR is preselected.
RoomchipOne 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 newExisting: search by name, code, phone or email. New: Full name (at least 2 characters), Phone, Email (must be a valid address if given).
Special requeststext ≤ 500Shown in an amber box on the drawer, high floor, late check-in, and so on.
New group dialog
FieldTypeNotes
Group name *text 2–120Tour operator, wedding, conference…
Check-in / Check-out *datesOne block of dates for every room in the group.
Lead guest *existing guestEvery room booking in the group is made under this profile.
Allotment *0–40 per typeUp 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.

Default levels for the modules Bookings touches
RoleBookingsPaymentsRooms
Super AdminFullFullFull
Hotel ManagerFullFullFull
ReceptionistFullViewEdit
AccountantViewFullNone
Housekeeping MgrViewNoneFull
MaintenanceNoneNoneEdit
Restaurant MgrViewEditNone
HR ManagerNoneViewNone
SecurityViewNoneView
None No accessView View onlyEdit Can editFull Full access
  • 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.

400Check-out must be after check-in
Why
Same-day or reversed dates.
Fix
Pick a check-out date at least one night after check-in.
400Provide either guestId or a new guest
Why
The request named an existing guest and a new one, or neither.
Fix
In the wizard choose Existing guest or New guest, not both.
400Room 204 is not a Deluxe
Why
A specific room was requested that is not of the booked room type.
Fix
Pick a room of the chosen type, or change the room type.
409Room 204 is out of service
Why
The room is flagged out of service (or “under maintenance”).
Fix
Choose another room; a Rooms = Edit user can Return to service when it is fixed.
409No Deluxe left for 2026-09-12: 8 sellable, 8 already booked
Why
The room-type capacity guard: on that night every sellable room of the type is already held (assigned and unassigned bookings together). Group blocks add “, 5 requested”.
Fix
Offer another room type or other dates. Only rooms out of service are excluded from the sellable count, a room under maintenance today still sells for later dates.
409Room is already booked for those dates
Why
Two holding bookings would overlap on the same room.
Fix
Pick a different room or dates.
400That rate plan does not apply to this room type
Why
The plan is restricted to another type.
Fix
Choose a plan listed for the type, or BAR.
409Cannot edit a checkedout booking
Why
Checked-out, cancelled and no-show bookings are read-only.
Fix
Create a new booking instead.
409Room 204 is unavailable
Why
On an edit or check-in, the room is out of service or under maintenance.
Fix
Assign a different room.
409Cannot check in a cancelled booking
Why
Only New or Confirmed bookings can be checked in.
Fix
Re-create the booking if the guest has arrived after all.
409BK-1042 arrives on 2026-09-12. Move the booking dates for an early check-in
Why
The hotel-local date is before the booking's check-in date.
Fix
Change the dates first so the folio charges the extra night(s), then check in.
400Assign a room before check-in
Why
The booking has no room and none was chosen.
Fix
Click one of the “Assign a room to check in” chips.
400Room 204 is a Suite; BK-1042 was booked as a different type. Assign it on the booking first
Why
A room chosen at the desk must match the booked type.
Fix
Pick a room of the booked type. An upgrade assigned on the booking beforehand is accepted.
409Room 204 is not clean yet (HK-88 is open). Pick another room or wait for housekeeping
Why
The room is in Cleaning or has an open housekeeping task.
Fix
Wait for Ready for Guest on the Housekeeping board, or pick another room.
409Room 204 is still occupied by BK-1039. Check them out first
Why
Same-day turnover: the previous guest has not checked out.
Fix
Check the outgoing booking out, then retry.
409Cannot check out a confirmed booking
Why
Only Checked In bookings can be checked out.
Fix
Check the guest in first.
409INV-2301 still owes UGX 120,000. Collect it before check-out, or a Payments manager can check out and bill later
Why
Code FOLIO_UNSETTLED, an open folio has a balance.
Fix
Record payment on the invoice, or have a Payments = Full user confirm the bill-later check-out.
403INV-2301 still owes UGX 120,000. Only Payments "Full access" can check out with a balance
Why
settleLater was requested by a user without Payments = Full.
Fix
Collect the balance, or ask a Payments manager.
409Cannot move a checkedin booking to cancelled
Why
The lifecycle does not allow that move (see the diagram).
Fix
Use the move that applies: a checked-in guest is checked out, not cancelled.
400occurredAt must be within the last 48 hours
Why
An offline replay carried a timestamp older than two days or in the future.
Fix
Perform the action again online.
400month must be YYYY-MM
Why
The calendar was asked for a malformed month.
Fix
Use the month arrows; the URL parameter must look like 2026-09.
400Cap a group at 80 rooms
Why
The allotments add up to more than 80.
Fix
Split the block into two groups.
400Rate plan WEEKEND already exists
Why
A plan with that code already exists for the hotel.
Fix
Edit the existing plan or choose another code.