M MahirRMS What's New

What's New

Product updates and release notes — newest first.

Account Dropdowns Survive the Biggest Charts of Accounts

Bug Fix

Aug 20, 2026  ·  v2.30.236

Opening a GL account dropdown used to load the entire account tree — every child, every level. On a business whose Customer Receivable head carries 600,000+ party accounts, that crashed the page with an out-of-memory error before a single option appeared.

🌳 The GL Browse Goes Structural: • Browsing GL heads now builds the tree from structural heads only — party and transaction accounts are never tree-loaded, at any depth • The same dropdown that exhausted 768 MB now answers with the full structural tree in a few milliseconds.

🔎 Search Still Finds Everything: • Typing into the dropdown searches all accounts, party accounts included — the structural tree is for browsing, the search box is for finding • Child accounts in the tree are also selectable again (their ids used to come through empty).

Result: The accounts screens stay instant no matter how many customer accounts the books accumulate.

What's New Is Now Public — and the Login Screen Points the Way

New Feature

Aug 19, 2026  ·  v2.30.235

This very feed now has a public home: mahirrms.com/whats-new — every release card, readable without logging in, so owners and evaluators can follow what the product ships.

🔗 Found From Day Zero: • The refreshed login screen links both the documentation site and the What's New page — the two places that answer "how does it work?" and "what changed?" before you even sign in.

Result: The product's progress is public record — one link to see what shipped, one to read how it works.

Product Documentation Is Live: docs.mahirrms.com

New Feature

Aug 19, 2026  ·  v2.30.229

MahirRMS now has a full public documentation site at docs.mahirrms.com (v2.30.229–234) — linked from your dashboard footer, right where "Tutorials — coming soon" used to sit.

📚 Organized Like a Book: • 61 pages across Introduction, Setup (including the core POS and accounting settings), Users & Permissions, Data Management and every module • Accounting is a six-part book of its own — chart of accounts, vouchers, banking & post-dated cheques, advanced ledger features, reports and period close • Fixed Assets covers the whole lifecycle, from acquisition through self-posting depreciation to disposal • Inventory goes twelve pages deep: purchasing, transfers & production, FIFO/LIFO/AVCO costing, consumption and stock reports.

🔎 Built to Be Used: • Instant search with Ctrl/Cmd+K • Dark mode • On-this-page outline, breadcrumbs and prev/next reading order on every page • Written against what the product verifiably does — grounded in the code and real production data, not marketing copy.

Result: "How does this work?" now has a permanent, searchable answer — for your staff, your accountant, and anyone evaluating the product.

Stock Count Posting: The Gate Now Thinks in Business Days

Improvement

Aug 19, 2026  ·  v2.30.227

Posting a physical stock count waits for day-close consumption to finish — but the gate compared raw timestamps, so a day closed at 23:41 could still block a count whose window ends 23:59, and posting an older count wrongly demanded TODAY's close instead of the counted day's.

📅 Judged by the Counted Day: • The gate now reasons in business days — anchored to your shop start time, post-midnight closes included — and reads the day-close journal • A count posts as soon as the counted day's own consumption has finished, no matter when you actually post it — even days later.

Still Strict Where It Matters: • If the day closed but its consumption failed or was overridden, posting stays blocked with a pointer to the repair — posting then would be wrong by exactly the unconsumed amount.

Result: Closed days post cleanly, late postings check the right day — and a count can never land on top of unfinished consumption.

Delivery Charges, Service Charges and Manual VAT Now Ask for a Signature

New Feature

Aug 19, 2026  ·  v2.30.225

Discounts have needed authorization for years — but delivery charges, service charges and a manually entered VAT figure were the three amounts a cashier could change without touching a single item, with nothing but a log entry behind them. They are now signature-gated at the POS.

🔏 Two Switches, Sensible Defaults:Charges authorization covers delivery and service charges together; Manual VAT authorization locks the tax figure on its own — both per branch, both ON by default • A branch that never configures an authorized list is unaffected until it chooses to set one up — nothing changes on day one.

👥 One Authorized List: • The branch names the people trusted to sign these edits — pre-seeded from the register-view list, since at most branches that is already "the people trusted with the money side of the POS" • A listed manager editing the amount themselves passes without a prompt; a cashier is asked for a signature.

🛡️ A Real Gate, Not a Hidden Field: • Verification uses the same machinery as void authorization: disabled or deleted users are rejected, the authorizer must actually be on the list, and PIN or RFID applies wherever the branch enabled them • The check runs on the server for every save, on every order screen — hiding the fields is a courtesy, never the control.

Result: The three ways to quietly move a bill's total now carry a second person's signature — verified, journaled, and on by default.

Report Column Settings: Searchable, and Honest About What Works

Improvement

Aug 19, 2026  ·  v2.30.224

The screen that restricts which report columns a user may see was a wall of dropdowns — no search, no overview, and no hint that on some reports the setting did nothing at all.

🔎 Findable: • Search across report names, categories and every column name — searching "rate" surfaces the reports that expose a cost • Filters for restricted / takes effect / no effect yet, per-report counts, and a live total of how many reports are restricted.

🏷️ Honest: • Reports that do not yet enforce the setting carry a clear "no effect yet" badge instead of silently ignoring your work • Clearing a report's selection now warns that an empty selection leaves ALL columns visible — the opposite of what an admin would assume.

🧩 Complete: • Ten columns that reports actually check were missing from the settings catalogue, which made them impossible to grant back once a report was restricted — stock report sold quantities, rates and amounts among them • They are grantable again, and arrive unselected so nothing becomes visible on its own.

Result: What you restrict is findable, what you set takes effect — and the screen tells you plainly when it would not.

Register Summary vs Order Types: The Dashboard Cards Agree Again

Bug Fix

Aug 19, 2026  ·  v2.30.223

The dashboard's Register Summary could disagree with the Order Type card beside it for the very same day — one real branch read 148 orders / 245,095 on one card and 143 / 231,944 on the other. The cause: one card counted by when money hit the drawer, the other by when the order was placed — so an order billed a day or two after it was placed landed on different days on each card.

🧮 Same Question, Same Answer: • The sale side of the Register Summary is now built on each order's own date, under the same rules as the Order Type card — verified against production data, the two now match to the rupee.

🧾 The Drawer Stays Honest: • Drawer figures are deliberately NOT rewritten — you still count cash against what was actually taken • Instead, any gap is explained by two new lines: this window's orders paid later, and money taken here for another day's orders • The same two lines print on the register close slip under Sale Timing — and only when there is something to explain.

💰 The Full Drawer Picture: • The card now also shows the drawer breakdown it used to compute and discard: opening cash, credit recovered by method, cash refunds, expenses, handover, card slips and closing cash.

Result: Neither number has to be taken on trust any more — the cards agree, and any difference is spelled out in two lines.

Day Close History: Every Close, Readable After the Fact

New Feature

Aug 19, 2026  ·  v2.30.221

A new Day Close History page lists every close attempt for the branch, newest first — linked right from the day-close screen header.

🗂️ The Whole Story Per Row: • Status chips — completed, awaiting finalize, failed, blocked • The business-day window, the consumption outcome with an explicit "overridden" badge, register counts, and who authorized and who committed the close.

🔍 Expand for the Record: • Each row opens into the journaled detail: the pre-flight checklist exactly as it stood at submission, closed and skipped registers with their amounts, retry attempts, the real error behind a failed run, and any repair notes.

Result: "What happened with Tuesday's close?" is now a page you open — not a support ticket you raise.

The Day-Close Screen Comes Alive: Live Checks, Live Progress, Loud Failures

Improvement

Aug 19, 2026  ·  v2.30.220

The pre-flight checklist and the staged close introduced in v2.30.218 now run live on the screen (v2.30.220 & 222) — no refreshing, no guessing whether the background work is still moving.

The Submit Button Knows: • The checklist re-evaluates itself every 15 seconds and whenever the shift selection changes • Confirm & Submit is disabled while any blocker is red — with the blockers named right under the button — and re-enables the moment they clear, so serving the last pending order unlocks the close by itself • Shifts that are allowed to close with pending orders (a morning shift, say) see a warning instead of a block.

📊 Consumption Gets a Pulse: • The staged-close panel now shows a department-by-department progress bar and a live elapsed clock • A short beep and a browser notification announce success or failure even when the manager is on another tab.

📧 Failures Phone Home: • When a consumption run exhausts its retries, it emails the business's report recipients and the audit address with the window, the real error and what to do next — instead of waiting for tomorrow's close to run into the gate.

Result: The close tells you where it stands at every moment — and the failure nobody was watching for now announces itself.

The Closing Screen Shows the Day: Sales Strip, Drawer Math, Cash Variance Limit

New Feature

Aug 19, 2026  ·  v2.30.219

The day-close screen now opens with an at-a-glance strip of the day being closed — gross sales, orders, voids, discounts and the expected drawer cash for the business-day window — so the manager sees what they are signing off before touching a single register.

💵 Drawer Math in the Open: • Every open register shows its system-expected cash — the exact closing formula the system uses • As the cashier types the counted amount, the variance colors itself live, so a miscount is caught while the drawer is still open.

New Control — Max Cash Variance at Day Close: • Set a limit, and a register whose count is off by more than that cannot be closed until the drawer is recounted or corrected • The full numbers are journaled with the close attempt either way.

🙈 New Control — Blind Cash Count: • For businesses that want a true physical count, the closing screen hides expected cash and variance entirely — the cashier counts what is in the drawer, not toward a target • The variance limit still enforces on the server; the refusal simply names no figures.

Result: The drawer is proven before the day is closed — and a count that is too far off simply cannot slip through.

Day-Close Pre-Flight Checklist: Pass, Warn or Block

New Feature

Aug 19, 2026  ·  v2.30.218

Before a branch closes its day, the day-close screen now runs a pre-flight checklist — the way large chains gate their end-of-day — and shows every check as pass, warn or block.

Blocks: • Pending orders still open • A previous staged close that was never finalized — these must be resolved before the day can close.

⚠️ Warnings: • A skipped business day (the last close was over 30 hours ago) • Earlier closes with unfinished stock consumption • Unapproved vouchers • No wastage recorded this business day — and the wastage check only nags branches that actually record wastage, counting both wastage forms.

📒 On the Record: • The same checklist is re-checked at the moment of submission and journaled with every close — every closed day carries a durable record of the state it was closed under and which warnings were accepted.

Result: The loose ends are on the table before the day is committed — and there is a permanent record of what was accepted, every single close.

Staged Day Close: The Day Only Ends When the Stock Math Lands

New Feature

Aug 19, 2026  ·  v2.30.216

The day close now waits for stock consumption to finish before the day is finalized (v2.30.216–217). Previously the day was declared closed the moment you pressed the button — and if the consumption run died in the background, nobody knew.

📊 Watch It Land: • The day-close screen shows a live progress panel with per-department status while consumption runs • Everything irreversible — the new shift's cashier registers, the last-day-closed marker — happens only after consumption succeeds • By default a manager presses Finalize to commit the day; a per-business Auto-Commit setting finishes it automatically the moment consumption lands • Selling and register opening are never blocked while the close is pending.

🔁 When It Fails, It Fails Loudly (v2.30.217): • A failed run parks the day and blocks the next day close until it is resolved — a dead consumption run can never again pass silently • A Retry button safely clears the interrupted run and re-runs it fresh, with no double-consumption possible • After three failed retries, an authorized manager may commit the day without consumption — and that override is emailed to the audit address with who authorized it and exactly what to repair.

Result: A closed day now means the stock math really landed — and a failure is a visible, retryable event, never a silent gap in your inventory.