M MahirRMS What's New

What's New

Product updates and release notes — newest first.

Waiter App and Customer App Join the Duplicate-Order Guard

Bug Fix

Aug 19, 2026  ·  v2.30.214

The same database-level guarantee that ended POS double-punches now covers the other two ways an order arrives (v2.30.214–215): the waiter app and the customer app.

📱 Waiter App — One Punch, One Order: • A tablet retry on a stalled placement used to slip past the duplicate check and land a second order with the same ticket — the database now refuses the copy outright and answers "Order Already Placed" instead of an error that invites a third punch • A waiter is also no longer locked out for ten seconds after successfully placing an order.

🛒 Customer App — Retries Get Their Order Back: • When the customer's phone retries after a timeout, the retry is now answered with the original order number — not a second order, and not a "lost order" error.

Result: POS, waiter tablet or the customer's phone — however an order comes in, a retry can never create a second one.

One Cart, One Order: POS Double-Punch Duplicates Are Gone

Bug Fix

Aug 17, 2026  ·  v2.30.205

A stalled order punch can no longer turn into a pile of duplicate orders. When placement slowed down at rush hour, the POS looked frozen, the cashier punched again — and once things cleared, every attempt landed as its own order (a real incident produced six identical orders in two seconds).

🛡️ Guarded by the Database Itself: • Every cart now carries a single fingerprint, and the database enforces one order per cart — no matter how many times a submit is retried, or how many retries run at exactly the same moment • A refused retry tells the cashier the token their order already has, instead of a scary system error • The POS screen also recovers after a timeout instead of leaving the terminal dead.

🧾 Also in this release:Service charges print on the bill again for dine-in orders on branch-default receipt settings — the printed bill now matches what the POS preview showed all along.

Result: A slow moment at rush hour costs you seconds — never duplicate orders, duplicate KOTs, or a manager deleting five copies afterwards.

Lines Served After the Day Close Are No Longer Lost

Bug Fix

Aug 16, 2026  ·  v2.30.212

An order line marked served after its day close had already run used to fall between two closes — neither window consumed it, so the stock it used was never deducted (v2.30.212–213).

🕰️ Caught by the Next Close: • Each day-close consumption run now also picks up late-served, still-unconsumed lines from earlier in the same business day • Only lines that were never consumed are eligible, so nothing can ever be counted twice • The catch-up is bounded to the current business day — it never reaches back into days that were already settled.

Result: Every served line is consumed exactly once — nothing slips between closes, nothing is double-counted.

Day-Close Stock Consumption: Built to Finish, and Much Faster

Improvement

Aug 16, 2026  ·  v2.30.206

The stock consumption that runs with every day close got a reliability and speed overhaul (v2.30.206–211). Busy branches with big menus and long days were hitting a hard 60-second processing limit — the consumption run was silently cut short, leaving stock figures behind reality.

🚛 Its Own Dedicated Lane: • Consumption now runs on a dedicated background worker with nearly an hour of headroom instead of sharing the 60-second lane with everything else • If a run is interrupted, it resumes safely — no half-counted stock.

Several Times Faster: • A new database index removes a costly per-item scan and stock updates are written in batches — the nightly run now finishes in a fraction of the time, even for the busiest branch.

🔍 Diagnosable When It Matters: • A failed run now records the real cause in the day-close log instead of a generic "An error occurred" — support can see what happened without guesswork.

Result: Day-close stock consumption finishes — fast, resumable, and honest about any error — no matter how busy the branch.

Chart of Accounts, Under Your Control: Bank Head Picker + Merge Tool

New Feature

Aug 10, 2026  ·  v2.30.202

Two new controls for keeping your chart of accounts clean (v2.30.202–204) — pick the right head up front, and merge the duplicates that history left behind.

🏦 Bank Accounts Pick Their Own Head: • The bank form now offers a COA picker listing the accounts under your Bank Accounts parent • Link a bank to an existing head, or leave it on Auto and the system keeps creating and renaming a head for you, exactly as before • An account already linked to another bank can never be picked twice.

🔀 Merge Two Accounts Into One: • A new page under Accounts moves every GL entry and every linked record — contacts, banks, users, categories, branch settings — from one account into another, then retires the emptied account (never deletes it) • You are shown both accounts' entry counts and balances before anything moves, and the destination account is asked twice for verification • Merging across account types is blocked outright — your trial balance stays a trial balance.

Result: Duplicate and misplaced heads stop accumulating — and cleaning up the ones you have is a two-minute, fully audited job instead of a support ticket.

New Businesses Start With Real Roles on Day One

Improvement

Aug 10, 2026  ·  v2.30.199

A freshly created business no longer opens with an empty roles page. It is provisioned with ready-made roles — Cashier, Manager, Menu Manager and System Setup — each granted exactly the permissions its job needs (v2.30.199–201).

🛡️ Built to Stay Correct: • Permissions are granted by permission name, not by copied ID lists, so the default roles stay accurate as the permission catalogue grows • Roles are mirrored into the authorization layer automatically, exactly like hand-made roles.

Result: Day one of a new business is spent taking orders — not reverse-engineering which of 400 permissions a cashier needs.

One Form for a Person: User and Employee, Entered Once

Improvement

Aug 10, 2026  ·  v2.30.198

Creating a staff member used to mean two forms — a user account here, an HRM employee record there. The HRM employee modal is now merged into Add/Edit User: one form captures the person once, and a single service writes both records consistently, every time.

🧍 What Changed: • Add or edit a user and the employee details live on the same screen • No more mismatched or orphaned employee records from filling the forms in the wrong order • Duplicate fields were removed rather than asked twice.

Result: A person is entered once, exists once, and stays in sync across users and HRM.

Compact Receipt Header: No More Half-Empty Bills

New Feature

Aug 09, 2026  ·  v2.30.194

Turned off some receipt fields and ended up with a bill that is half blank at the top? The new Compact Header option (v2.30.194–195) repacks the header dynamically: whatever information you show flows into the empty slots, two items per line, with nothing lost and no gaps left behind.

🧾 How It Works: • Enable Compact Header on any invoice layout — it is off by default, so existing receipts print exactly as before • Empty label rows disappear, long values get a full line, short ones pair up • Works on both the standard and slim receipt designs.

💰 Why You Care: • Shorter receipts mean real paper savings on every single order — the header shrinks to fit what you actually print.

Result: Your receipt header is now exactly as tall as the information on it — not as tall as the fields you turned off.

Coupons at the POS: Every Type Redeemable at Checkout

New Feature

Aug 09, 2026  ·  v2.30.192

Coupons are now first-class citizens on the POS: every coupon type can be redeemed directly at checkout, with the discount applied and recorded in one motion.

🏷️ New: Brand Wise Coupons: • Issue coupons that are valid for a specific brand only — multi-brand businesses can run per-brand campaigns from one system without cross-brand leakage.

🧾 Triple Audit Trail: • Each redemption is recorded on the coupon, on the order and in a dedicated application ledger — who redeemed what, on which order, for how much is always answerable.

Result: Cashiers redeem any coupon without workarounds — and finance can trace every rupee of discount to a coupon, an order and a person.

Third-Party Orders: One Order, No Duplicates, No Double KOTs

Improvement

Aug 08, 2026  ·  v2.30.187

A hardening pass across the whole third-party webhook pipeline (v2.30.187–191): integration orders now flow in as exactly one order with one order number, no matter how many times the platform re-sends or updates them.

🔁 Accepted in Place: • Accepting a pending/draft webhook order no longer creates a second order — the pending order itself becomes the live one, keeping the same order ID from arrival to completion • A re-sent webhook refreshes the existing pending order instead of duplicating it.

🍳 Kitchen Stays Honest: • When a refresh does arrive, unchanged menu lines are reused — lines are only replaced on a real menu change • Superseded lines are excluded from every kitchen reader, killing the double-printed KOT.

🛡️ Built for Rush Hour: • A new lookup index plus automatic placement retry means an order that hits a database deadlock is retried and landed, not lost.

Result: Platform re-sends, edits and rush-hour collisions no longer produce duplicate orders, ghost tickets or double KOTs.

Material Theme Polish: Sharper Inputs, True Previews

Improvement

Aug 07, 2026  ·  v2.30.186

The Material theme received a round of polish: framed input fields, properly boxed multi-selects and a ripple effect that fires reliably — forms across the app now look and feel consistent.

🖼️ Honest Theme Previews: • Themes 3 and 4 were showing Theme 2's screenshot in the theme picker — every theme now has its own real preview image, and Theme 1/2 previews were recompressed to load faster.

Result: What you pick in the theme gallery is what you actually get — rendered in cleaner, sharper controls.

KDS Design Toggle: Classic or Compact, Your Kitchen's Call

New Feature

Aug 07, 2026  ·  v2.30.185

The Kitchen Display System now ships with a Classic / Compact design toggle. Compact mode tightens paddings and trims the order cards so more tickets fit on the same screen — busy kitchens see the queue at a glance instead of scrolling for it.

🖥️ Pick Per Screen: • Classic keeps the familiar spacious cards • Compact packs denser, cleaner cards for high-volume stations • Switch any time — it is a display setting, not a migration.

Result: High-volume kitchens see more orders per screen; quieter ones keep the roomy layout — same KDS, your choice.