
What's New
SmartBI release notes — current version 2026.3 Build 0002 Hotfix 0000
← Back to SmartBI
v2026.3 Build 00022026-09-04
SmartBI reports its version to the Smart-Acc gateway
New- Each install now tells the Smart-Acc gateway which SmartBI and semantic-views version it runs, 90 seconds after it starts and once a day after that, so support can see every customer's version in one place. Nothing else is sent — no data, no keys.
v2026.3 Build 00012026-09-04
Semantic views carry a version marker
New- Admin → Semantic Views now shows which views version each connected database has and when it was installed. Databases upgraded to v2 before this marker existed get an "Add version marker" button next to the status line — click it to stamp them, same one-time SQL login as the v2 upgrade. Both SQL scripts (create_semantic_views.sql and upgrade_semantic_views_v2.sql) create the marker view automatically from here on.
v2026.3 Build 00002026-09-03
Updates from the admin page, and a new version numbering
New- Admin → "Updates (this install)": press Check for updates to see whether Smart-Acc has published a newer SmartBI, and Update now to install it. SmartBI downloads the release, checks it, backs up the current files, swaps them in, restarts itself and confirms the new version — about a minute, with no zip to copy and nobody needing to log in to the server. If anything goes wrong it puts the previous version back and tells you what happened.
- SmartBI checks once a day on its own and shows admins a small dot on the version link when something new is available. It never installs anything by itself.
Fixed- Version numbers now follow the same form as DynaMod and the other Smart-Acc products: "2026.3 Build 0000 Hotfix 0000" instead of "v2.13.0". The footer, the login page and this page all show the new form. Nothing else changed in this release — it is the 2.13.0 feature set with the updater added.
v2.13.02026-09-02
Smart-Acc AI Cloud — one key, no server details
New- The AI Provider screen in Admin now offers "Smart-Acc AI Cloud — recommended". Pick it, paste the service key from your Smart-Acc onboarding, press Test, and Save — that is the whole setup. The server address and model are managed by Smart-Acc and no longer appear on the screen, so there is nothing to copy correctly and nothing to update when the platform infrastructure moves.
Fixed- The old "Use Smart-Acc DGX (LiteLLM)" button filled in an internal server address and the wrong model name (smart-text instead of smart-text-fast), and exposed platform internals no customer needs to see. It is gone, replaced by the managed option above. Installs that already saved a working provider are unaffected; the advanced "OpenAI-compatible server" choice remains for anyone pointing SmartBI at their own server.
- The "Platform default" provider choice is gone from the dropdown too — it never said which key it actually used (a key file on the server), which made it impossible to tell what an install was running on. An install still on it keeps working exactly as before, and the screen now says so plainly and asks for a Smart-Acc service key to standardize. New installs are set up on Smart-Acc AI Cloud from the start.
v2.12.22026-08-19
Insights opens in a moment instead of ten seconds
Fixed- The Insights tab took about eleven seconds to fill in, every single time you opened it — and for most of that you were looking at four empty grey cards with nothing to read. Every other screen in SmartBI remembers its last answer for a few minutes and comes back instantly; the dead-stock scan behind Insights was the one that had been left out, so it re-read a full year of sales history on every visit. It now remembers its answer like the rest, and the tab fills in as quickly as the others. The figures are still your live figures — a remembered answer is at most five minutes old, on a card whose whole subject is stock that has not moved in thirty days.
- What you see is scoped to you, as before: if your account is limited to certain branches, the remembered answer is remembered separately for your branches, never shared with someone who can see different ones. And if an administrator repoints a connection at a different database, the remembered answers for that connection are dropped immediately rather than lingering.
- The AI Analyst suggestion "Suggest 3 actions this week" has been removed. Clicking it never produced an answer — the Analyst reads your database and writes queries against it, so it can tell you what is happening, but it has no way to weigh up what you ought to do about it, and it said so instead of answering. The ⚡ Action Centre is the part of SmartBI that answers that question properly, and it puts a ringgit figure against each suggestion. The other suggestions are unchanged.
v2.12.12026-08-17
Collapsible sidebar navigation + live alert bell
Fixed- Two of the nine sections could become unreachable. The section tabs used to sit in a single horizontal strip across the top bar, which quietly ran out of room — with the AI Analyst panel open on a normal laptop screen the strip cut off mid-word at "Sales Tre…", leaving Insights and 🚚 Suppliers scrolled out of sight with nothing on screen to suggest there was more. Navigation has moved to a collapsible sidebar down the left edge, which has no width limit to run out of: every section you have access to is always visible and one click away.
- The sidebar starts as a narrow icon strip. Hovering it slides the full labels out over the page (the page itself does not move), and a "Pin sidebar" button at the bottom keeps it open for good — your choice is remembered the next time you sign in. The section you are on is marked with an accent bar and a tinted background, and the Actions count still rides its own row (as a number when the sidebar is open, a dot when it is collapsed).
- The alert bell only updated when you reloaded the page. If an alert fired while you had SmartBI open, the bell sat there showing the old count until you pressed refresh. It now re-checks every 60 seconds, and immediately when you switch back to the SmartBI tab — so an alert that fires during a meeting is on the bell when you look up. Checking pauses while the tab is in the background, and acknowledging an alert can no longer be undone by a check that was already in flight (the badge stays down instead of briefly bouncing back).
- Everything else in the top bar is exactly where it was: the connection badge, the store picker, the alert bell, the theme toggle and your account menu have not moved. On phones and small tablets nothing changes at all — the existing menu button and slide-out drawer behave as before.
- The "AI POWERED" badge beside the SmartBI logo is visible again on mid-sized screens; it used to hide itself between roughly 960 and 1536 pixels wide to donate its space to the old tab strip, which no longer exists.
v2.12.02026-08-16
Late PO exposure action pack
New- A new Action Centre pack, "Late PO exposure", lists the suppliers holding open (short-received) purchase orders already past their promised delivery date — with the RM value at stake per supplier, how many POs are late, the oldest missed promise date, and how many days the worst one is overdue — so purchasing can expedite the right suppliers first. It uses exactly the same definition of "late exposure" as the Suppliers tab's open-PO column (each PO counts its header amount once, no matter how many lines are short), so the card and the scorecard always agree.
- You can build alert rules on it exactly like every other pack — total RM of late-PO exposure (e.g. "above RM 4,000,000"), number of suppliers with late POs, or number of late POs — using the same Alert Rules screen and notification channels, with no changes to that machinery.
- This pack requires the "purchase" measure grant AND a company-wide (all-locations) account — the same pair of requirements as the Suppliers tab. A branch-restricted account, or a role without the purchase measure (branch-manager, by default), does not see the pack at all rather than seeing a narrowed version.
- Admin config (Action Packs card): the PO lookback window (default 365 days), a days-past-promise grace period (default 0), a minimum RM of late exposure per supplier (default 0), and how many suppliers to list (default 20). The zero defaults keep the pack's total exactly equal to the Suppliers tab's open-PO sum; setting either above zero narrows the pack to a subset, and the card's methodology line says so.
Fixed- Upgrade note (expected one-time effect, not a bug): adding a pack changes the alert-partition key for company-wide users who hold the purchase measure, so any of their alert rules that were firing before the upgrade will re-announce once and acknowledgements reset — acknowledge them once and they stay quiet, same as the v2.10.0 upgrade behaved.
v2.11.02026-08-15
Supplier performance module (procurement)
New- A new "🚚 Suppliers" tab shows a per-supplier scorecard built from your Purchase Orders and Goods Receive Notes: average and P90 lead time (days from PO to GRN), on-time rate against the PO's promised delivery date, and count of late GRNs — over a configurable trailing window (default 365 days), with a floor on the minimum number of GRNs a supplier needs before it is scored, so a supplier with only 1-2 receipts does not appear with a misleadingly perfect or terrible rate.
- The same screen shows open PO exposure (the RM value of purchase orders not yet fully received, past their promised delivery date), goods-return notes and value per supplier, a monthly HQ-transfer strip (cost + count of stock moved to your configured HQ/warehouse locations), and a stock write-off breakdown by reason code.
- Two figures are disclosed rather than guessed: what share of GRNs in the window link back to a Purchase Order at all (many GRNs on this data are not PO-matched), and how many PO-to-GRN pairs measured a negative lead time (goods received before the PO was even raised — a data-quality signal, not a performance one). Neither one is shown as a fabricated zero when there is nothing to measure.
- This tab is company-wide only: it requires the "purchase" measure grant, and it is gated on an all-locations grant (not narrowed by location) because purchasing documents in this data carry no location-level attribution that would make a scoped view meaningful. A caller without the purchase measure or with a location-scoped account does not see the tab at all, rather than seeing one that always errors.
- A new admin config card (Data Source screen) lets an admin tune the trailing window, the target lead-time reference line, the minimum-GRNs floor, the max supplier rows returned, and the comma-separated list of HQ/warehouse location ids — the same numeric-config-card pattern already used by ABCD and Action Centre packs, with per-field type validation (a non-numeric edit is refused, never silently clamped to the old value).
v2.10.12026-08-14
Accurate money-vs-count wording in AI headlines
Fixed- Action Centre headlines could describe an RM amount as if it were a count — the live demo box showed "620 suspicious transactions" where RM 620.00 was the flagged VALUE, not a transaction count. The AI headline writer now receives an explicit money-vs-count marker for every figure it is given, across all packs, so currency amounts are always written as RM amounts.
v2.10.02026-08-13
Member fraud watch pack
New- A new Action Centre pack, "Member fraud watch", flags members whose receipts on the same day either span 2 or more different locations or exceed 5 transactions — a common card-sharing/fraud signal — over a trailing 7-day window. All four numbers (locations, transaction count, lookback days, and how many members to list) are configurable. Only registered members are scanned; the CASH walk-in aggregate is excluded.
- This pack only ever shows company-wide — it never appears for anyone restricted to a single location, because its whole signal is "this member also transacted somewhere else," which a one-location view can never see. Being restricted to certain salesmen or departments does not currently narrow this pack (there is no salesman/department column on the underlying data to filter by).
- You can build alert rules on it exactly like every other pack — number of flagged members, how many crossed the multi-location signal, how many crossed the transaction-count signal, or the total value flagged — using the same Alert Rules screen and notification channels from v2.8.0, with no changes needed to that machinery.
v2.9.02026-08-13
Salesmen scope now works like Location scope
New- If you're restricted to specific salesmen, the /admin access screen now gives you the same checkbox picker Locations already has — search, select all, clear, and a live count — instead of the old free-text box. It loads the real list of salesmen from your database, and if that list can't load (or this database is too old to support it), it shows exactly what is already saved as read-only, so nothing you didn't mean to change ever gets changed by accident.
- Being restricted to certain salesmen now actually narrows more of what you see: the gross-profit figure, overdue AR, your biggest debtors, AR aging, the reorder-alerts list, and the ABCD inventory ranking all now show only your own salesmen's numbers. Wherever the underlying data genuinely has no way to tell which salesman a row belongs to (revenue and transaction totals, AP, stock balances, and a few product screens) it is left company-wide on purpose — never a guess — and every one of those is written down in the new operations doc so nobody has to rediscover it by testing.
- You can no longer refresh a saved company-wide SQL tile while restricted to specific salesmen (the same rule Locations already enforces) — a saved tile's query is fixed text, so there is no safe way to narrow it for you.
Fixed- Figures on the Insights page could previously ignore your Location, Salesmen, or Department restriction for the current month — a scoping bug meant only the PRIOR month was actually being filtered, so this month's numbers leaked in unrestricted. This is now fixed for all three restriction types; if you are scoped to a location, salesman or department, expect Insights numbers to look different (smaller, and correct) after this update.
- The same bug, independently, affected the gross-profit figure on the main dashboard and the reorder-alerts list for anyone restricted to a Location — even with no salesman restriction in play. Both are fixed the same way and their figures may also change.
- "Unapplied credits" on the AR Aging screen used to show RM0 when you were restricted to specific salesmen, which looked like a real answer but wasn't — credits aren't tracked per salesman anywhere, so the true figure is unknown at that scope, not zero. It now shows as "—" instead of a fabricated RM0.
- A caller restricted to specific salesmen but not restricted by location could previously see company-wide AR totals instead of their own — a routing gap that let the salesman restriction get skipped. Overdue AR and your biggest debtors now always apply the salesman restriction when one is set.
v2.8.02026-08-12
Threshold alerts and scheduled refresh (NG P7a)
New- You can now set your own thresholds on the same figures the Action Centre already tracks — overdue AR, dead stock, replenishment, slow movers — and be told, automatically, the moment one crosses the line, instead of finding out only when you happen to open SmartBI. Build a rule under Action Centre → Alert Rules: pick a pack and a figure, above/below and a number, and how often to check (hourly, every N hours, daily or weekly at a time you choose). This is gated behind a new "Manage Alert Rules" permission an admin grants per user.
- A bell in the navbar shows how many alerts are unacknowledged and lists each one — the figure against your threshold, when it fired, and a one-tap acknowledge. If a check itself can't run properly — a query error, an unreachable database, a reading that doesn't make sense — the alert freezes and is shown as "stale" rather than guessing at an answer; it is never silently reported as cleared. The bell speaks your saved language (English, 中文 or Bahasa Melayu), and demo mode shows realistic sample alerts with zero live calls.
- Alerts can also reach you off-screen: an admin configures email (SMTP) and/or a webhook on the new /admin "Alert Channels" card, with an optional quiet-hours window that queues anything due overnight and sends it once the window ends — nothing is dropped, and nothing is ever double-sent. A "Send test email" button proves the settings work before you rely on them. Email delivery hides every other recipient from each other (bcc).
- A new /admin "Scheduler" card shows whether the checker is running, when it last ran, and the outcome of every rule (OK / needs an admin / retrying) — with a "Run now" button to check immediately instead of waiting for the next tick. The checker runs inside the SmartBI server itself every 60 seconds; the demo-server installer now also registers a 5-minute backstop scheduled task so a schedule missed while the machine was off still catches up once it is back on.
- Every install-wide user's own figures stay their own: two people with different location/department clamps evaluating the same rule are checked and alerted against their own numbers, never each other's — the alert engine never has access to the unscoped "sees everything" grant a machine caller uses.
Fixed- The Action Centre's "SmartBI never sends or posts anything" caption is reworded to the true boundary now that alert emails and webhooks exist: SmartBI still never sends a business document or writes to your ERP — drafts stay drafts — but an alert notification to your own staff now can go out, and only to a channel an admin explicitly configured.
v2.7.12026-08-11
Spoken Chinese answers now say the figure and the label in Chinese
Fixed- A one-figure zh answer used to read the number DIGIT-BY-DIGIT ("一四五五五二" for 145552) rather than as a quantity, with an English column name in front of it ("Total revenue 145552"). It is now read as a proper Chinese numeral with a Chinese label — "总营业额 十四万五千五百五十二" — for the common analyst figures (revenue, sales, outstanding amount, transaction count, cost, tax, profit and more), and for any other total/amount/count-shaped column even without a name we recognise.
- RM amounts and percentages spoken inside a Chinese answer's own sentence (not just a one-figure result) now read the same way — "十四万五千五百五十二 令吉" and "百分之十二" instead of the bare digits.
- An id, code, barcode or other non-measure column is unaffected and still reads its digits one by one — converting those to a Chinese quantity would be a fabrication, not a translation.
- Screen rendering is unchanged: this is spoken text only. English and Malay answers are unaffected; Malay gains the same localised LABELS (values stay ordinary digits, which its voice already reads correctly).
v2.7.02026-08-11
The AI Analyst now answers in the question's language
New- Ask a question in 中文 or Bahasa Melayu and the AI Analyst's written answer now comes back in that language too — not just the voice. SmartBI works out the question's language (Chinese characters are decisive; between English and Malay it falls back to your saved dictation-language preference) and sends it to the engine as a hint, and the engine declares back which language it actually answered in.
- Spoken answers now use the right words for that declared language, not always English: currency reads as "ringgit" in English and Malay, and 令吉 in Chinese; percentages as "peratus" or "百分之" (correctly placed before the number in Chinese — 百分之12, not 12百分之); and a missing value as "tiada nilai" or "无数值".
- This needs an AI Analyst engine and sidecar from the same release to answer in the asked language — against an older engine, SmartBI falls back to reading the language the answer text actually turns out to be in, exactly as before.
Fixed- "The full table is on screen." is reworded to "The complete results are shown on screen." — a real Android device read it aloud as "the four tables on screen" (full/four sound alike once synthesised). Nothing about when it is shown changed, only the words.
v2.6.22026-08-10
Spoken answers now find the right voice on Android
Fixed- On Android, spoken answers could not find a voice at all — asking in 中文 reported "No voice is installed for this language" even with a Chinese voice installed, and the same was true for English and Malay. Android names its voices slightly differently from other browsers (zh_MY rather than zh-CN), and SmartBI was comparing the two forms literally. It now reads them as the same thing. If you had worked around this by picking a voice by hand, you can set it back to "Automatic".
- The "Compare Previous Month" answer is now read out with its figures. That answer carries four values — this month, last month, the change and the change percentage — and SmartBI only read a one-figure answer of up to three, so it said "Found 1 row" and left the numbers on screen. Four values are now read; anything wider is still left on screen as a table.
v2.6.12026-08-09
Spoken answers now work on Android — and say the figure
Fixed- On Android the "▶ Listen" button was permanently greyed out. Android reports the list of installed voices later than other browsers — sometimes only after something has been spoken once — and SmartBI gave up waiting after two seconds and treated "I do not know yet" as "this device has no voices". It now keeps listening for that list, and never lets a slow answer disable the button.
- Reading now starts the instant you press the button. Previously, on a device that had not yet reported its voices, SmartBI waited up to two seconds before speaking — long enough that some phones refused to speak at all, because the reading no longer counted as something you had asked for.
- A one-figure answer is now read out in full. Asking "how much sales for this month so far" used to be read as "Found 1 row", with the actual number left on screen unsaid; it is now read as "Total sales 4705562.85 ringgit". This applies only to a single-row answer of up to four columns — a real table of results is still never read out, and you are still told it is on screen.
- SmartBI no longer claims "the full table is on screen" when it has just read you the whole answer.
- Dates in a one-figure answer are read the way they are shown on screen, rather than as the full timestamp.
- Dictating a question with auto-send and automatic reading both switched on now reads the answer back. Previously that combination stayed silent, because a question sent by the auto-send timer was not treated as one you had asked for — which disabled exactly the ask-by-voice, hear-the-answer loop the feature exists for. If a phone still refuses to speak, it now says "Tap ▶ to hear this answer" instead of doing nothing.
- Your saved voice is no longer reported as missing on a phone. Voice settings are remembered per person, not per device, so a voice you picked on your PC is the normal case on your phone — and while the phone was still working out which voices it has, the picker said "Saved voice — not on this device". It now says simply "Saved voice" until it actually knows, and only tells you a voice is missing once it has seen the full list.
- When an answer has a table in its text and a single-figure result beside it, you are told the table is on screen again. Reading the figure had been treated as having read everything, so a three-row customer list could sit on screen unmentioned.
v2.6.02026-08-08
The AI Analyst can now read its answers aloud
New- Every AI Analyst answer now carries a "▶ Listen" button. Press it and the answer is read to you; press "■ Stop" to stop. Useful when you are driving, walking the floor, or simply want the figures without staring at the screen.
- Only the written explanation is ever read out — never the SQL, never a table of rows. When an answer includes a table, SmartBI reads the explanation and then tells you "the full table is on screen" instead of reading customer names and balances aloud one by one. Long answers are shortened to roughly the first 600 characters, and you are told when that happens; the complete answer always stays on screen.
- Voice settings (the button beside the mic) gains a "Spoken answers" section: switch on "Read answers aloud automatically" so every answer to a question you asked is read without pressing anything, pick which voice to use, and set the speaking speed between 0.5× and 2×. Automatic reading is OFF until you turn it on, and your choices are remembered per user.
- The voice follows the answer, not your dictation setting — ask in 中文 and the answer is read in a Chinese voice.
- Asking a new question, or opening the mic to dictate, always stops whatever is being read. Switching to a different database connection stops it too, so you never hear one company's figures while looking at another's.
- Spoken answers are supported on browsers that have never supported dictation, Firefox among them — on those the voice-settings button now appears on its own, without a mic beside it.
- Administrators get a second switch on the /admin "Voice (this install)" card to turn spoken answers off for the whole install, independently of dictation. Both remain covered by the same per-user voice permission.
Fixed- The one-time voice notice has been rewritten and will be shown to everyone once more, because it now covers something the old wording did not. Reading uses your browser's own speech engine and no audio passes through the SmartBI server — but SmartBI can only prefer a voice installed on your machine. If the only voice available for that language is an online one, or you choose an online voice yourself, the answer text — customer names and figures included — is sent to your browser vendor (Microsoft or Google) to be spoken. The notice now says exactly that, and voices marked "online" in the picker are labelled as such.
- Cancelling that notice is now respected: nothing is spoken, you are told why, and you will not be nagged with the same card again in that session. Pressing "▶ Listen" or the mic deliberately brings it back, because that is you asking for the feature. Your saved settings are never quietly changed on your behalf.
- Screen-reader users are told when reading starts, stops and finishes, and hear any failure — for example a phone refusing to play audio that was not started by a tap — instead of getting silence.
- In Demo Mode nothing ever leaves the machine: only voices installed on the device are offered, and if none is installed the Listen button is shown as unavailable with the reason, rather than failing when you press it.
v2.5.12026-08-08
ABCD analysis now tells you when negative stock is bending the numbers
New- The ABCD Inventory Analysis section now flags stocks with a negative on-hand quantity — a return, a posting not yet matched, or an item your system does not stock-track. Those rows are shown in red in the stock table, and a note above the table says how many there are and how much value they are netting out of your Inventory Value figure, along with the value of stock actually on your shelves.
- Why it matters: negative on-hand quietly reduces the headline inventory value. On our demo data that is 197 stocks and about RM 149,000 — enough to make you doubt the number if you ever cross-checked it. Nothing about the calculation changed; it now simply shows its working, and the "How we classified this" note explains it.
v2.5.02026-08-07
ABCD Inventory Analysis — your stock classified the way you already do it in Excel
New- The Inventory tab gains a full ABCD Inventory Analysis section: every stock is classified A/B/C/D by its share of annual usage value (12-month sales quantity × unit cost, the classic ABC method), with a category summary, usage-value pie, top-20 stock chart, and a sortable stock-level table with per-row value bars — computed live from your own figures, per branch when your access is branch-scoped.
- Click a pie slice, a summary row, or a chart bar to filter the stock table to that category — with a clear filter chip to get back. Category D — stock with zero sales or no sale in over a year — is your standing clear/return/stop-reordering worklist: the analysis shows exactly how much cash it is holding.
- The Dashboard gets a compact ABCD summary card (category counts, the Category-D cash figure, a mini pie) that opens the full analysis in one click.
- Classification thresholds (A ≤ 80% · B ≤ 95% · C ≤ 99% · 365-day inactivity override) ship with the standard defaults and are adjustable by your administrator — the "How we classified this" note in the section always shows the live values.
- Export the classified table (or just one category) to Excel — stock IDs stay plain text, so long codes never get mangled.
- Ask the AI Analyst the same question — "Show ABC analysis by stock" is now a suggestion chip, chat answers link straight into the module, and the module can hand the question to the analyst. Chat and module use the same classification policy, in English and 中文.
v2.2.02026-08-06
Practical action-pack artifacts — internal AR follow-up + real stock transfer proposals
New- The Overdue Payments action no longer drafts one bulk email that lists every overdue customer's balance to a single recipient. Instead: "Copy list" and a "Follow-up list (XLSX)" button give your team an internal working list (customer, overdue amount, oldest days, aging bucket, and salesman where your data has it) to chase down together — never sent or shown to a customer.
- Each customer row in that action now also gets its own "Draft reminder" button — a proper one-to-one email addressed to that customer, showing only their own balance, never anyone else's.
- The Slow-Moving Stock action can now propose an actual stock transfer between your locations: which branch has the surplus, which branch needs it, how much to move, and what it's worth — computed from your real per-location stock and sales figures, downloadable as XLSX. Two new settings under Slow-Moving Stock let you tune it: target months of cover after a transfer, and the minimum transfer value worth listing.
- A transfer proposal only appears when there is a genuine cross-branch picture to compute from (company-wide location access and more than one location with data). Where it can't be computed — restricted location access, only one location, or a data hiccup — the card says exactly why instead of showing a stale or misleading button.
- Every downloadable action list (follow-up list, promo candidates, transfer proposal) now keeps ID-style columns (customer, stock, location codes) as plain text in Excel, so long codes never get silently mangled into scientific notation or lose leading zeros.
v2.1.12026-08-06
Auth roster hardening — a full disk can no longer wipe your users
Fixed- On the demo laptop, a full disk during a Users & Access save truncated the credential file to zero bytes, deleting every user account. Saves now write to a temporary file and swap it in only once it has landed completely, so an interrupted save (disk full or otherwise) can no longer damage the real file.
- A verified backup of the last good credential file is now kept automatically and updated every time it changes. If the main file is ever found missing or unreadable at startup, SmartBI restores it from that backup and logs exactly what happened, instead of either refusing to start or silently starting with an empty roster.
v2.1.02026-08-05
Engine-enforced chat scopes — restricted users unlock automatically
New- Every AI Analyst chat request now carries your real access scopes (locations, salesmen, departments, and any blocked figures) signed alongside the existing request signature.
- When the connected AI Analyst engine confirms it already enforces those scopes on its own side, chat turns on automatically for users with restricted access and the "restricted access" warning by their name disappears — there is nothing an admin needs to switch on.
- This unlock only takes effect once BOTH the sidecar and the AI Analyst engine behind a connection have been upgraded to support it. Against any connection that hasn't been upgraded yet, chat access for restricted users behaves exactly as it did in 2.0.0 (off by default, with the warning shown if an admin overrides it).
- Admin: each connection's status panel on the Data Source screen now shows whether its engine is enforcing scopes ("Scopes: Enforced" / "Scopes: —").
Fixed- A corrupted or hand-edited user database-assignment record can no longer widen that user's access to the whole install-wide connection — it now denies access outright instead, the same fail-closed behavior every other unassigned case already had.
- The Admin Users list now reflects each user's own assigned database when checking whether the engine enforces scopes, instead of always checking the install's currently-active one.
- The engine-enforced unlock above is chat-only, as intended: a restricted user whose chat access turned back on still cannot run hand-typed SQL through the raw query tool — that stays admin-only / full-access-only, same as before this release. (One narrow exception closes here too: a user with every location/department/salesman unrestricted but some figures blocked, who an admin had separately switched chat on for by hand, could previously still reach the raw query tool — that path is now closed as well.)
v2.0.02026-08-05
Analysis Request desk — ask us for the analysis self-serve can't reach
New- A new request form lets you ask SmartAcc's analysts for the deeper analysis self-serve reports can't cover — attach up to 3 supporting files (CSV, Excel, PDF, images, Word, or text) and describe what you need.
- My Requests tracks every request you've sent through its full pipeline — Submitted, Triaged, Quoted, Approved, In-Progress, Published, Closed — so you always know where it stands.
- When a question comes back empty or fails, a "Request an analysis" button hands it straight to the desk, prefilled, so you never have to retype anything.
- Administrators get a fulfilment board on the /admin panel to walk every request through the pipeline, with quote/invoice reference fields and a staff note.
v1.9.42026-08-04
AI Analyst chat — more room for your answers
Fixed- The suggested-question chips no longer take up four rows of the chat panel: once a conversation starts, they collapse into one slim row you can swipe or scroll sideways — every suggestion is still there, but your answers get the space. A fresh chat still shows the full set.
- When an answer arrives, the chat now shows you the TOP of the result — the figures — instead of landing at the bottom of a tall card where only the follow-up buttons were visible.
v1.9.32026-08-04
Voice input — the real fix for repeated words on mobile
Fixed- Dictation on Android no longer repeats what you said. Field testing showed the previous fix (1.9.1) missed the real cause: some phones re-send the same words under a new internal id, so they slipped past the duplicate check. SmartBI now compares the words themselves — a repeated or extended phrase replaces the earlier one instead of piling up. Works for Chinese and English alike.
- A quirk on the same phones could silently drop the last words of a sentence; those are now recovered.
- Auto-send keeps working when the phone re-sends a finished sentence as "in progress" — the 2-second sending notice still appears and can still be cancelled.
v1.9.22026-08-03
Outcome tracking — measured results on your actions
New- Accepted actions now get an honest follow-up: when you mark one Done, SmartBI re-measures the same figure it showed you at accept and prints the before/after — for example "RM 198,300 collected of RM 386,200 overdue at accept".
- A second check lands automatically about 30 days after accept (measured the next time the Actions tab is opened) and shows as a "+30d" chip on the card.
- A new "Measured outcomes by month" strip on the Actions tab totals what your closed actions actually moved, month by month. Numbers are computed from your ledger; the AI writes the one-line summary only.
- Every outcome carries the plain-language caveat that SmartBI measured a change, not causation.
Fixed- An accepted action whose situation fully cleared no longer disappears from the Actions tab — it stays visible so you can mark it Done and record the win.
v1.9.12026-08-03
Voice input — mobile fixes from live field testing
New- Auto-send now waits 2 seconds after you stop speaking, with a visible "Sending in 2s — tap to edit" notice — tap the notice or the input box, edit the text, press the mic again, or hit Escape to cancel and review first. Review-before-send (auto-send off) is unchanged.
- The dictation-language menu now notes that dictation follows the selected language — mixed-language questions work best typed.
Fixed- Android Chrome dictation no longer garbles the question with repeated words (e.g. "sales sales sales in sales in June…"): Android re-emits recognition results, and each one is now consumed exactly once instead of being appended again.
v1.9.02026-08-02
Action Centre — four ready-made action packs
New- Action Centre v1 — four ready-made action packs (AR overdue chase, dead stock, replenishment risk, slow movers) with disclosed RM impact formulas, admin pack configuration, audited action lifecycle, and on-device drafts (reminder text, transfer/promo XLSX). The AI writes wording only — never numbers.
v1.8.12026-08-02
Voice input — speak your question
New- Mic button in AI Chat: hold to talk or tap to toggle; your words stream into the input box so you can review and correct before sending — the question then goes through the exact same governed chat pipeline as typing.
- Dictation languages: English, Malay, and Chinese — your choice (and the optional auto-send toggle) is remembered per user.
- Privacy honesty: dictation uses your browser vendor's speech service (Edge→Azure, Chrome→Google) — audio is processed by the browser, never uploaded to the SmartBI server. A one-time notice explains this before first use.
- Admin controls: a per-install Voice Input kill-switch (new /admin card) and a per-user Voice Input grant in the Access dialog. No mic ever appears for users without chat access.
- Browsers without speech support (e.g. Firefox) simply don't show the mic — typing is unchanged.
Fixed- All pages now send explicit microphone/security headers (Permissions-Policy, baseline CSP).
v1.8.02026-08-01
My Dashboard — pin AI answers, start from the Gallery
New- Pin this answer: keep any AI answer as a live personal dashboard tile — it refreshes deterministically from the saved query, on the exact database it was pinned from.
- My Dashboard tab: rename, reorder, remove; per-tile freshness stamp and manual refresh; multi-database users can show tiles from all their assigned databases side by side.
- Ready-made Gallery: curated dashboards filtered to your industry template, your database's views, and your access — install with one click.
- Honest tile states: permission, database-not-assigned, and database-unreachable cards — a tile never shows stale or another database's data.
- Admins can hide gallery items per install (new /admin card).
Fixed- Deleting a user now clears their saved dashboard and chat history — a later user created with the same name starts clean.
v1.7.02026-07-31
Your own database — per-user database assignment
New- Per-user database assignment: each user can be bound to their own company database(s) and is served concurrently — different users on different databases at the same time.
- Multi-database users get a switcher listing exactly their assigned databases, with a per-user default.
- Access rights are now per-database: a user’s store/department scopes can differ on each database they can reach.
- Admin: a new "Database access" section in the user Access dialog (assign databases, pick the default, edit per-database scopes).
- Honest failure: if your assigned database is unreachable you get a clear error — never another company’s numbers.
Fixed- Long "optimize views" runs no longer die silently behind Cloudflare — heartbeats and reconnect-proof progress (same fix the views upgrade got in 1.6.6).
- AI chat answer caching is now isolated per database (identical questions on two databases can no longer share a cached answer).
v1.6.62026-07-31
Views upgrade survives tunnels and interruptions
New- If an earlier views upgrade was interrupted mid-run, the Admin page now detects it and offers a "Resume upgrade" button instead of hiding the action.
Fixed- Long view rebuilds no longer die with a "network error" behind a Cloudflare tunnel — the progress stream now sends keepalive heartbeats, and even if the browser does disconnect, the upgrade keeps running to completion on the server with honest guidance shown instead of a bare error.
v1.6.52026-07-31
One-time admin login for the views upgrade
New- The semantic views upgrade now asks for a one-time database admin login (db_owner/sa) in its dialog — used only for that run and never stored. No more editing the connection profile back and forth: your day-to-day connection stays on its least-privilege login throughout.
v1.6.42026-07-31
Semantic views upgrade — keep the run log on screen
Fixed- The Admin page's semantic views upgrade wiped its own progress log the moment a run ended, so a failed run (e.g. the connected SQL login lacking permission) looked like a silent flash. The log now stays on screen with the failure reason and what to do next.
v1.6.32026-07-31
Admin page hotfix
Fixed- The Admin page failed to load its cards (profiles, users, semantic views stuck on "Loading…") on v1.6.2 installs — a script error in the new Semantic Views panel. Fixed; no other changes.
v1.6.22026-07-31
Semantic views v2 upgrade from Admin
New- Upgrade the connected database's analytics views to v2 straight from the Admin page — enables salesman/department scoping without SQL tools; progress and verification shown live.
v1.6.12026-07-31
Access editor & chat polish
New- Admin store picker now shows each store as "Name (ID)" so you can tell duplicate store names apart, plus a search box and Select all / Clear links with a live selected-count for picking stores faster.
- Expanding an AI Analyst chat result now keeps its Chart and Pivot tabs — previously the full-screen view showed the table only.
- Category value cards now show a retail value for users without cost access, instead of a dash.
v1.6.02026-07-30
SmartBI knows who you are — per-user foundation + access rights (RBAC)
New- Your AI Analyst chat history now follows your login, not the browser: it is stored per user on the server, survives restarts and browser changes, and "Clear chat" really clears it everywhere.
- AI questions are now signed with your own username, so platform-side usage and audit records finally show who asked — instead of every user appearing as "smartbi".
- Staying signed in: a server restart no longer logs everyone out (sessions are kept on disk, in src/server/data/).
- Roles and per-user access rights, managed in Admin — Manager, Branch Manager, Finance, Purchasing, and Salesperson, alongside Admin and Viewer.
- Store-level data scopes — a user with a store assigned sees only their store everywhere they look, including AR/AP aging, top debtors/creditors, and deposits.
- Measure permissions — cost, gross-profit, finance, and purchase figures can be granted (or withheld) per user, enforced by the server, not just hidden in the browser.
- AI Analyst chat honesty rule — chat is off by default for a user whose view is scoped or measure-limited, until an admin explicitly turns it on; when it is turned on for such a user, an amber notice makes clear the AI's answers are not scope-enforced yet.
- Connection switching (choosing which company database SmartBI talks to) is now admin-only.
Fixed- The local chat audit log (chat_audit.jsonl) no longer records question or SQL text — it keeps only metadata (who, which engine, how long, outcome). Governed question capture remains platform-side under its existing safeguards.
- AR/AP aging, top debtors/creditors, and deposits now honor the selected store — previously they showed company-wide figures regardless of the store filter.
v1.5.12026-07-17
Theme toggle + table polish
New- Light/dark theme toggle in the navigation bar (and the mobile menu) - your choice is remembered on this browser and overrides the operating-system preference. Light stays the default.
Fixed- Sales Trends - Forecast vs Actual: the Forecast, Actual and Variance column headers now sit right-aligned over their figures instead of floating at the far left.
v1.5.02026-07-17
Smart New Retail enterprise theme
New- The whole portal now wears the Smart New Retail brand: royal-blue accent, navy surfaces, brand orange highlights, and the Be Vietnam Pro typeface - matching the Smarties AI portal, the knowledge base, and the AI Analyst/Assistant panels for one consistent product family.
v1.4.22026-07-17
Error details survive the Cloudflare tunnel
Fixed- AI chat and AI-provider test errors now reach the browser with their full reason when SmartBI is served through a Cloudflare tunnel. They were returned as HTTP 502, which Cloudflare replaces with its own error page — hiding the real cause (e.g. "invalid identity signature" showed as a bare "HTTP 502"). Errors are now HTTP 500 with the JSON detail intact.
v1.4.12026-07-16
Reasoning-model support + honest errors in live mode
Fixed- Reasoning models (e.g. the DGX smart-text family) no longer fail with "returned an empty response" — the AI token budgets now leave room for the model's thinking phase (connectivity test 16→1024; Insights/Forecast/SQL-repair up to 4096).
- Live connections never show demo data on an AI failure any more. The Insights page and the AI Analyst chat now show an honest error with a Retry action instead of fabricated numbers; demo answers remain only in Demo Mode.
- The AI Analyst side panel stays pinned to the window on desktop — the chat input no longer drifts below a long dashboard, so you don't have to scroll to type.
- B2B dashboard: the 6-month revenue-by-channel chart now spans the full row, with AR and AP aging side by side beneath it (no more empty grid cell).
- Gateway/engine error messages are readable — an upstream HTML error page (e.g. an nginx "504 Gateway Time-out") is reduced to its title instead of raw tags spilling into the chat error card.
v1.4.02026-07-14
Bring your own AI key + accounting visibility
New- AI Provider (BYOK) in Admin — run the Insights cards and the Sales Trends AI forecast on your own Anthropic key or any OpenAI-compatible server (e.g. the Smart-Acc DGX gateway), with a one-click DGX preset and a Test button. Platform default (.env key) still works unchanged.
- Accounting indicator per connection — Admin now shows whether confidential financial statements (net profit, GL) are enabled for that company on the AI Analyst. Read-only: the gate itself is controlled by Smart-Acc on the engine.
v1.3.02026-07-13
Mobile navigation + install as an app
New- Install SmartBI as an app — from Chrome/Edge use "Install app", on iPhone/iPad use Share → "Add to Home Screen". Opens full-screen with its own icon.
- Mobile navigation menu — on phones the section tabs open from a slide-in menu (with connection status, store picker, and sign out) instead of a cramped top bar.
Fixed- Section tabs (Data Source / Dashboard / Inventory / Sales Trends / Insights) were squeezed out of reach on mobile screens.
- Choosing "Desktop site" in a mobile browser now renders the full desktop layout.
v1.2.02026-07-12
AI Analyst answers as charts and pivot tables
New- AI-chosen charts in analyst answers — bar, line, area, pie, scatter, and stat tiles, picked by the engine from your question and rendered live (Chart / Pivot / Table tabs).
- Interactive pivot tables — the AI proposes the grouping; change rows, columns, value, and aggregation without re-asking. Row/column/grand totals included.
- Export any pivot view to Excel.
- Ask for a view in plain words — "show it as a pie chart" is honored.
v1.1.02026-07-11
Internet-ready demo: authentication, branding, user management
New- Authentication — login sessions (browser) + Bearer tokens (DynaMod panel). Admin password generated on first run.
- User management in /admin (Users & Access) — add, reset password, change role, delete; live, no restart.
- Sign out button + "signed in as" in the top bar.
- Company branding — Smart-Acc logo + copyright across the login page, /admin, the dashboards, and the AI Analyst.
- AI Analyst industry-mode badge — Retail / B2B Trading / Hybrid for the connected tenant.
- Session-expiry redirect — an expired session returns to the login page instead of showing stale panels.
- Cloudflare tunnel tooling — publish SmartBI at a public hostname safely.
- This What’s New page + the version shown in every footer.
Fixed- Installer scripts are ASCII-only — fixes a parse error on Windows PowerShell 5.1.
- CSRF check compares host, not full origin — fixes "Cross-origin request blocked" behind the tunnel.
v1.0.02026-07-10
Multi-industry BI portal
New- Retail / B2B Trading / Hybrid dashboards over the DynaMod semantic views (revenue, AR/AP outstanding + aging, funnel, deposits).
- AI insight endpoints + AI Analyst chat.
- /admin database-profile management; one-command demo-server installer.