Korat

Rooms, bookings and lease contracts

A complete lodging management system — today's room board, room types + pricing, bookings customers make themselves, monthly tenants, and lease contracts. These sections are separate but linked; read how each differs before you start.

6 tabs — what's different

TabWhat it isDifferent from
RoomsToday's room board — which rooms are free/occupiedDifferent from "Room types," which is the price catalog, not today's board
Room typesSet the price and details for each room typeNot today's room board — the board is in "Rooms"
BookingsRoom bookings customers made themselves (from the app/web)Different from "Monthly," which is monthly tenants, separate from daily/nightly guests
MonthlyMonthly tenants — add tenants, issue rent + utility billsSeparate from daily/nightly guests in the "Bookings" tab
LeasesMonthly/yearly lease contracts for tenants, with tenant info/deposit/documentsTied to tenants in the "Monthly" tab, but a more detailed contract system
Stay settingsProperty rules — check-in/check-out times, cancellation policy, amenitiesPrice and occupancy are set in "Room types," not here

Rooms — today's board

  1. 1Click "Set room count" the first time (requires the "manage shop page" permission, page.manage) — reducing the room count later doesn't delete existing stays; a room removed from the board can't be checked out until it's set back
  2. 2A free room shows green — click to open the check-in form: choose a room type (price/night auto-fills from today's seasonal price), enter the guest's name/phone, number of nights, and price/night
  3. 3An occupied room shows red with the guest's name — click to open check-out: enter a discount (if any), choose a payment method (cash/PromptPay/transfer), then click "Check out & collect payment"

The amount shown before you click check-out is before deducting the customer's credit — customer credit/points are only actually applied when the bill closes on the server. See the real amount on the receipt after check-out succeeds.

The board auto-refreshes every 15 seconds (the web has no push notifications) so two people working the same shop see the same room status.

Room types — price and seasonal pricing

Add/edit room types (requires page.manage): name (e.g. Standard/Deluxe), photos, price/night, room count, amenities, and open/close for booking. If "Monthly" mode is on in stay settings, extra fields appear for price/month and deposit.

Seasonal pricing & promotions

Set a date range + price adjustment (positive = high season, negative = low season/promotion); the rule automatically applies to price/night based on check-in date, both on the front-desk check-in page and the price customers see when booking.

The end date must always be after the start date — a rule where the end date comes before the start date would never be usable. The system warns before you save, and a rule missing either date is never saved at all (so it never looks active while actually doing nothing).

Bookings — the inbound box from customers

When a customer books through the "Stay" menu in the app/web, the booking lands here with a status:

StatusMeaningAvailable action
Awaiting confirmationThe customer just bookedConfirm / decline (must select a reason; the customer will see it was cancelled)
ConfirmedThe shop confirmed it, awaiting the stay dateCheck in
Checked inAlready checked inCheck out & collect payment
Checked out / cancelledClosed— no button

Monthly — tenants and bills

  1. 1Set "Mode & utilities" first (page.manage): choose the service mode (daily/monthly/both), the water/electricity rate per unit, and any other flat monthly fees (e.g. common area fee, internet)
  2. 2Click "+ Add tenant" — choose a room type to auto-fill rent/deposit, and enter name, phone, room number
  3. 3Click a tenant's name to "Issue this month's bill" — enter the water/electricity units used, and the system calculates: rent + water + electricity + other fees = total
  4. 4Tap the bill to check "Paid" once you've received the money (tap again to undo if checked by mistake)

The "Move out (end lease)" button removes the tenant from the current list, but all past bills stay intact, and the room can accept a new tenant immediately.

Leases

A detailed lease-contract system, tied to tenants in "Monthly" but keeping deeper records: emergency contact, attached documents (contract/ID), and a separate itemized deposit ledger.

3 ways to create a lease

  • + New lease — fill in everything yourself
  • From a booking — choose an existing daily booking; the system copies the guest's name/phone/room/customer account over immediately (a booking that already has a lease won't appear twice in the list)
  • From an existing tenant — pull in a tenant who existed before this lease system, and attach a lease retroactively

Lease status

Draft → active → ended or cancelled — the "Open" filter tab above shows only draft + active.

Security deposit

4 types of entries can be recorded: received · deducted · refunded · forfeited. Any entry can be voided later if the staff member has permission — a voided entry shows as "voided," it isn't deleted outright. The running balance (received − paid out) is calculated automatically.

Tenant ID documents

The field for entering a full national ID/passport number is deliberately not enabled yet — the system can only store the last 4 digits (stored as plain text, not encrypted), because the full number needs to go through a hashing step that this form has no connection to yet. Do not type a full ID number into another notes field to work around this limit.

Attached documents (contract/ID copy) are stored in private file storage, viewable only by people with access to that lease.

The counterparty's name requires the "view accounting documents" permission (accounting.view) to be visible — without this permission, you'll still see the lease list (room/date/amount/status), but the name field will be blank with an explanation, not a fully broken screen.

Stay settings

Basic property settings (requires page.manage): property type, on-site amenities, check-in/check-out times, cancellation policy, and rules like pets/smoking.

Every yes/no rule always has 3 possible answers: allowed · not allowed · not specified — "not specified" does not mean "not allowed"; it means the shop hasn't answered this question yet. The customer will see that there's no information yet, not that it's forbidden.

What can break

SymptomCause / fix
Can't check in — "This room was just occupied"Someone else checked into the same room a few seconds earlier — close this page and check the board again
After checkout: "This bill is already closed (no second receipt issued)"The system automatically prevents duplicate bills — the bill really has been closed, no need to click again
Checkout failed partway throughThe room may already be released but the bill not yet closed — the message will say you can immediately click the same button again; the system prevents duplicate billing on its own
Room price doesn't auto-fill at check-inReading the room–room type match failed, or the room was never linked to a type — you can still type the price in manually as normal
Can't save seasonal pricing — "Couldn't read the existing price rule"The system refused to overwrite the save to prevent the old rule from being lost — try again, or edit from the mobile app instead
Issued a monthly bill but water/electricity shows 0Reading the water/electricity rate failed while issuing the bill — check your connection and re-issue the bill
Can't see the counterparty's name on a leaseYou don't have the accounting.view permission — ask the shop owner to grant it