Data health — app era
every entry since the switch should keep these greenReconciliation status
New transaction
Ledger
| # ↓ | Date | Rec. | Item | Category | Dept | Channel | Amount | USD | Stay Date | Invoice | Actions |
|---|
| # ↓ | Date | Rec. | Item | Category | Dept | Channel | Amount | USD | Stay Date | Invoice | Actions |
|---|
Gross daily sales per channel, sale-day attributed. Foreign currencies converted to MYR at the airport rate, and the daily total to USD at the MYRUSD mid — the "KUL - Daily Regular Rev" sheet (columns through the total).
Monthly totals of regular revenue (the daily grid rolled up by sale-day month) — Landside, Airside and combined, in MYR and USD. Mirrors the Excel "TOTAL Regular Monthly Sales" block.
Each channel's share of daily revenue — Credit Card (incl. GIRO), Cash (all currencies), Booking.com, Web — sale-day attributed, with 7-day trailing averages. The facility selector drives both charts; the table below always shows Landside, Airside and Total side by side. Mirrors the "Daily Sales by Channel (%)" block.
Absolute revenue per channel on a 7-day trailing average. Untick a channel to hide its line. Currency switches the whole chart — each day is converted at that day's own rate, then averaged.
Consolidated daily revenue across the four channels — Cabin, Lounge, Booking.com, Web — with per-channel 7-day averages and total 7/14/28-day and all-time (running) averages. Regular channels and the USD conversion come from the ledger at the daily MYRUSD rate; Lounge is the daily lounge record. Mirrors the Excel "KUL - Daily Total Revenue" sheet (columns through the Total block).
Calendar-month totals across Cabin, Lounge, Booking.com, and Web, with month-over-month growth, year-over-year growth, and daily average. The in-progress month is excluded (see the Daily Total for live figures).
7-day rolling average of total daily revenue, per facility — recreating the three "7-day average" charts on the Excel "KUL - Daily Total Revenue" sheet. The average always uses the trailing 7 days, so the date range just sets which stretch is drawn.
Each channel's share of total revenue on a 7-day rolling basis; with all five shown they sum to 100% each day. Show picks which lines are drawn — untick the big channels to let the scale open up on a small one like Web. Combine adds two or more channels' joint share as an extra dashed line, e.g. Web + OTA together. Every line is a share of the whole day, so hiding one never changes another.
Number of lounge guests accepted per program per day — the "Daily Number of Lounge Guests" block.
Calendar-month guest totals per lounge program, with month-over-month and year-over-year growth — the guest counterpart of the Monthly Total Revenue table. The newest month shows how far its days reach.
Monthly invoice totals (MYR) per program. Use a row's Edit button to enter the actual invoice for a completed month — the unit price is then invoice ÷ guests. The current month (*) is an estimate at last completed month's unit price (shown in grey) until its invoice is entered.
Turkish Airlines, Malaysia Airlines and Journify are invoiced per passenger-stay — each stay is one row and gets its own invoice. The invoice amounts are revenue directly, booked on the check-in day; guest numbers are a volume metric and never affect revenue.
This page is a day-level summary (a ×N marker means N stays that day). Stays are logged and corrected per passenger on Operational → Corporate Stay.
These partners are invoiced daily, so there is no separate monthly invoice to reconcile against:
each month simply sums the daily amounts entered above, and that total is the month's revenue. Edit a figure on the daily table above to change it.
A self-contained invoice register: add each invoice here as you issue it, and when the money arrives, match it. Matching works both ways — several payments can settle one invoice (Match on the invoice row), and one payment can cover several invoices (Match a payment…, e.g. an airline paying a whole month of stays at once).
Every match must tie exactly: the payment total and the invoice total must be equal — no partial matches. Balances are always computed from the matches, never stored.
Log each invoice when it arrives and attach the PDF right away — that is when the document is in hand. When you pay it, Record payment writes the ledger entry itself, pre-filled, with the documents carried over. Nothing is entered twice and nothing needs matching.
Import each account's e-statement CSV, then review what the matcher proposes. Nothing changes in the Ledger: approving a match only records that a bank line and its ledger row(s) are the same money. Statement lines that have no ledger row can be booked from here — the entry form opens prefilled, with every normal rule applied.
Closing a month locks its figures: transactions, lounge days and exchange rates for that month can no longer be added, changed or voided by anyone — an admin reopens the month instead, and the reason is recorded. Receivables and bank balances stay open, since payments legitimately arrive later.
Loading…
These drive the USD conversions in the reports and load themselves every evening from BNM and TCMB — nobody types them any more. (Foreign→MYR revenue conversions use the airport rates in the next card, not these.)
Only needed if a day is missing or a published quote was later revised — the loader never overwrites a rate entered here. Save under the ledger date, which is the day after the quotes were published (see below).
The rates KLIA actually credits for foreign-currency takings — enter them whenever the airport updates them; they stay in force until the next entry. All foreign→MYR revenue conversions in the reports use these. TRY→MYR is not quoted by the airport — it is derived automatically (USDMYR ÷ USDTRY) each time you save the USD reporting rates above.
When an airline sends stranded passengers, record the day here — Finance sees it immediately as revenue and as an awaiting-invoice item, no email needed. One passenger per entry — log each guest separately, so every stay carries its own name. Partner, facility, order date, name and amount are all required; the stay date too, except for Journify (a web order can predate a known stay day — until one is entered, the day books under the order date); Duration is optional, but Malaysia Airlines invoices need it; the Order no. is how Finance matches the partner’s payment to the invoice, so write it whenever the partner sent one.
Your own entries can be corrected until the end of the day (KUL time); anything older is Finance's to fix — except a missing stay date, which you can always add from the list below once the passenger has stayed.
A read-only view of the same figures as the revenue and P&L tabs — nothing here changes any data.
One stay date, every direct channel. Leave a box empty to skip it — only the channels you fill in are entered.
Drop in the Transaction Activity export — CSV preferred, PDF also works. Each settlement is placed on the stay date it was earned, and every day is compared against what the ledger already holds: new days post in full, days whose stragglers just landed get a top-up for the difference, complete days show ✓. Run it any day; the ledger always ends up holding exactly what the bank has received.
Drop in three things: the OCBC e-Statement CSV (with header) for the card batches, the GHL StatementOfAccountDetails CSV(s) for the wallets, and the Merchant Portal’s Transaction report (Transaction Query → Download, covering the same days) — together or separately, any order. Each settlement lands on the stay date it was earned and is compared against what the ledger already holds: new days post in full, stragglers become top-ups, complete days show ✓. Card grosses fill themselves from the Transaction report and cards do not post without it — the report is the proof that the gross and fee are the terminal’s own numbers, not typed ones. Wallet gross and fee come from the GHL file itself.
Nothing is saved until you review the rows and press Approve.
Set each amount to the remittance advice's net line — the day's revenue is corrected to what the partner actually pays. The total below becomes the invoice amount.
Type what each bank app / cash count shows — leave cells blank to skip. Totals, differences and tie checks update as you type. Saving the same date overwrites it.