
What's New
SmartBI 360 release notes — current version 2026.3 Build 0315 Hotfix 0000
← Back to SmartBI 360
v2026.3 Build 03152026-11-04
Expenses: switching a company on, and who may see staff costs
New- Admins can now switch expenses on for a company in /admin → Companies & databases → Expenses, once its staff-cost accounts are saved. The first time, SmartBI asks who may see staff costs: only admins (the default), or every role that sees Accounts and staff in full today. The screen lists what each answer closes before anything changes.
- Once a company is switched on, Users and access has two more rows, Operating expenses and Staff costs, and What can I ask? names them. A role without the Finance permission cannot ask about either.
- A role below Full detail on Operating expenses or Staff costs can no longer ask the AI free-form questions about the accounts (the profit and loss, cash and bank, the trial balance), because such a question can reach salaries. The same goes for saved AI answers, raw SQL and Load all rows. The screen says so before you switch on.
- Nothing changes for anyone until an admin switches a company on. The Expenses table on the AI Analyst page comes in a later update.
- Before rolling back below this build, set Accounts and staff to Cannot ask in Users and access for the roles that must not see salaries: an older build drops the two areas, and with them this limit.
v2026.3 Build 03142026-11-04
Group CEO refusals on the Access log
New- The Access log in /admin now also lists a person refused the Group CEO page, its workbook or its email schedules because of a stock department limit, with the reason "Department limit". The page, the workbook and the schedules count as one place, so a person refused on all three in a day is listed once.
- A refusal on the Group CEO workbook or its email schedules for a data area is now listed there too.
- A scheduled Group CEO email skipped because of a department limit is not listed, because nobody asked for it at that moment. Its schedule still shows the reason.
v2026.3 Build 03132026-11-04
Company figures are held back from a department limit
New- For a person limited to some stock departments, figures that cover every department are no longer shown. In their place the page says: "This covers every stock department, and you see only some, so it is not shown." This covers the Dashboard's sales figures, invoiced revenue (on the B2B section too), the revenue trends (monthly, weekly and by day of the week), the forecast and its accuracy, Supplier performance, Membership, the CEO pages with their workbook and answers, and the Group CEO pages with their scheduled emails.
- The Dashboard keeps their Low Stock count, which already counts only their departments.
- Dashboard and named-dashboard cards, scheduled reports and the Gallery do the same: a card of a page above, or a saved SQL card or AI answer, shows the sentence, and the Gallery leaves those items out. Cards of the pages that follow the limit (Top Products, Stock on Hand and the others from Build 0312) keep working.
- In the Action Centre, six packs that cover every department are taken out of their list, with their alerts and missions: Supplier terms, Payables hygiene, Member fraud watch, Member win-back, Late PO exposure and Items sold below cost, and the CEO cash-cycle alert. Nothing is deleted.
- Saved AI Analyst answers are not shown to them, because a saved answer may cover every department. They are kept, and show again if the limit is lifted.
- The CEO Dashboard, Suppliers and Members are left out of their menu. Where the AI Analyst is off for them, the chat, the question list and the words box say so without asking the server.
- The receivables and payables pages, the receivables and payables figures on the B2B section, and the AR overdue pack stay as they are: a department limit does not cover the ledger.
- AI apps connected to SmartBI follow the same rule: where the AI Analyst is off for the person, SmartBI answers none of their tool requests, and no tool shows them a figure that covers every department.
- The Access log in /admin lists a refusal on a company page, card or report, or in the AI Analyst, with the reason "Department limit", at most once a day for each person, company and kind of place. Refusals on the Group CEO pages are not listed there yet.
- People with no department limit, and admins, see no change.
- Going back to an earlier build shows these figures to a department-limited person again.
v2026.3 Build 03122026-11-04
Stock pages follow a department limit
New- For a person limited to some stock departments, these now show only the items in those departments: Top Products, product trends, Stock on Hand, Inventory and its categories, Dead Stock, the ABCD analysis, Reorder Alerts and the Dashboard's Low Stock count, and Insights, and their Dashboard cards too. On these pages an item counts in the department of its main unit, so all its units are in or out together.
- The ABCD classes are worked out within the person's own departments, so an item's class can differ from the one shown to someone who sees every department.
- Insights for such a person name only items from their departments, and leave out the company's total revenue, its trend, the busiest day and the overall margin. When nothing in their departments sold in the last two months or is running low, Insights says there is nothing to report instead of writing cards.
- In the Action Centre, Slow movers, Replenishment risk and Dead stock show only the person's departments. What they accept, give as a mission or mark done there is their own, shared only with the person they give a mission to. Their earlier actions on these three start again once, and alerts on them may show once more as new.
- While SmartBI cannot read a company's department list, or when a person's limit names no department, they see no items on these pages, and nothing on these three is accepted, marked done or measured for them until it can be.
- Not limited by department yet: the sales, revenue and KPI figures, the CEO pages, the forecast, Membership, Supplier performance, saved AI Analyst answers, the Dashboard's sales, revenue and saved-question cards and the reports sent from them, the Gallery, and the other Action Centre packs. A later build handles them. The receivables and payables pages and the AR overdue pack stay as they are: a department limit does not cover the ledger.
- People with no department limit, and admins, see no change.
- Going back to an earlier build keeps a limited person's own actions and missions on these three but does not show or measure them; the person sees the shared ones again, and these pages go back to what they showed before this build.
v2026.3 Build 03112026-11-04
A Purchases race in the Gallery
New- A new Gallery race, Purchases race: see which suppliers you buy the most from, month by month over the last 12 months. Supplier credit notes and returns subtract.
- It is for people who see purchase figures and whose access includes stock and purchasing in full, because it names suppliers. Someone limited to certain salesmen or stock departments is not offered it.
v2026.3 Build 03102026-11-03
AI apps no longer show a blank "top product"
Fixed- When an AI app asks SmartBI for the sales trend, sales lines with no item code (for example a fee or a rental typed on an invoice) are no longer shown as a nameless top product. They stay in the sales figures, and the answer says how much they add up to.
v2026.3 Build 03092026-11-03
Expenses: which accounts are staff costs
New- Admins have a new Expenses screen in /admin → Companies & databases. It lists a company's expense accounts and ticks the ones that look like staff costs, such as salary, wages, allowances, EPF, SOCSO and directors' fees. The admin checks the ticks and saves. An expense account added later counts as a staff cost until an admin sorts it. Nothing here is shown to anyone else yet: switching expenses on comes in a later update.
v2026.3 Build 03082026-11-03
Group View transfer suggestions say what Send to ERP is
Fixed- Group View's stock transfer suggestions no longer say that SmartBI never writes to DynaMod, which stopped being true with Send to ERP. They now say that nothing on that page is sent to DynaMod and a transfer between companies is raised in DynaMod itself, and that SmartBI creates a DynaMod document only through Send to ERP: a Stock Transit between one company's own locations, from its Slow movers card, after an authorised person reviews and confirms it. The new wording shows from the group's next data refresh.
v2026.3 Build 03072026-11-03
Ring, bubble and Target fixes
Fixed- On the Target page, the second lap of a ring past 100% now shows on older iPhones too, a long percentage stays inside its ring, and a screen reader hears each outlet's figure.
- If you tap Bars while Rings cannot be shown for a month, Bars stays chosen when you move to a month with targets.
- Bubble race axes for small percentages now step by whole percents, so they no longer repeat "0%".
- The Target board's falling-margin warning now scores a month whose cost covers exactly 80% of its sales.
v2026.3 Build 03062026-11-03
AI apps can ask SmartBI for its own figures
New- AI apps connected to SmartBI 360 (such as Claude or ChatGPT) can now ask SmartBI itself for four things: the business summary from the CEO Dashboard, the sales trend, the transfer suggestions from the Slow movers card, and stock on hand per outlet. Each answer is worked out on this server as the person asking, with their own SmartBI access: their outlets, salesmen, stock departments, figures and data areas, as on their own screens.
- The person needs AI questions switched on in SmartBI and their own user, not a shared login. Someone whose access does not include the CEO Dashboard, the Action Centre or Inventory is told so for that tool; SmartBI never answers with a company-wide view instead.
- This needs the matching update of the Smart-Acc gateway; until then nothing changes. Admin → Updates shows whether this server is collecting requests.
v2026.3 Build 03052026-11-03
The State race map in Running total
Fixed- The State race now shows its map in Running total even when one state had more credit notes than sales in a month, as long as that state's total so far stays above zero. Before, one such month turned the map off for the whole race.
- In Each month the map still needs every month at zero or more. When it cannot be drawn, the Map button now says which state and month are below zero, and that Running total draws the map.
v2026.3 Build 03042026-11-03
Rings on the Target page
New- On the Target page, the outlet race can play as Rings: each outlet's ring fills toward its month target, day by day. Past 100% a second lap, in another shade of the same colour, runs over the first, and the figure in the middle of the ring is the outlet's percentage of its target. An outlet with no target has no ring and is named under the rings.
- Rings follow the month you are looking at, using that month's targets, and stay chosen as you change month or board. Rings are not offered on the Salesman race.
v2026.3 Build 03032026-11-02
Slow movers stays steady at the start of a month
Fixed- Slow movers no longer jumps at the start of each month. It worked out monthly sales as this month and the two before divided by 3, so on the 1st a month of sales dropped out while the divisor stayed 3, and many items looked slow. It now divides by the months that have actually passed, as Low stock already does. The transfer suggestion on the Slow movers card uses the same figure.
- At this update, Slow movers figures early in a month come down; on a month's last day they are the same as before. A Slow movers action accepted before this update is never shown as cleared by the new count: its later figures are shown on the card but not compared with the figure at accept, and they are left out of the results line. A mission given on it shows "Not measured yet" until it is closed, and such an action can no longer be given as a new mission: mark it Done, and give it when SmartBI finds it again. The Send to ERP window now says how sales per month are counted.
- The results line at the top of the Action Centre no longer shows a minus amount as cleared. A figure that grew is shown in red as "RM … more", for example "RM 1,922,369 more stock tied up than at accept".
v2026.3 Build 03022026-11-02
Users and access, and What can I ask?
New- Admins have a new page, Users and access, in the side menu before Admin. It sets what each role can ask about (sales, stock, members, receivables, payables, and accounts and staff) at Full detail, Totals only or Cannot ask. It also gives one person their own level for an area, or limits them to some outlets of a company. You can check a question as a role or as a person before anyone asks it, and read the access log.
- A new role, Marketing. It starts with stock at totals only, and cannot ask about receivables, payables, or accounts and staff, until an admin changes it.
- Everyone who signs in can open What can I ask? from the account menu or the AI Analyst page. It lists what you can ask about, what you see as totals only and what you cannot ask about, your outlets, and example questions: pressing one fills the question box. On the AI Analyst page the summary also appears in the conversation, in your chat language, and is never saved in your history.
v2026.3 Build 03012026-11-01
State race and bubble race fixes
Fixed- An outlet whose address has a phone, fax or lot number after its postcode is placed by its postcode, not by that number. An address with only such a number is listed as "No postcode".
- In a bubble race, a month whose cost covers exactly 80% of its sales now shows its margin.
- Bubble race axes now end on a labelled figure, and on a small tile the figures no longer crowd the ">300%" label.
- The State race map no longer offers a Top N choice or greys rows in its table, since it shows every state.
- Show table on a bubble race now lists the growth and margin of each product or outlet.
v2026.3 Build 03002026-11-01
Group mart stays compact
Fixed- Each night the group data mart clears out the rows it has already deleted, so it no longer keeps growing on disk.
v2026.3 Build 02992026-11-01
The State race opens from the Gallery
Fixed- The State race now opens in the Gallery and on My Dashboard. In Build 0298 its preview and its card said "Unknown endpoint" instead of playing.
v2026.3 Build 02982026-11-01
State race: sales on a map of Malaysia
New- A new race in the Gallery, State race. Each state on a map of Malaysia is coloured by its share of your sales, month by month, with the leading state named. It plays over the last 12 months or this year.
- Each outlet is placed by the postcode and the state in its address. Outlets that cannot be placed are listed under the map as "No postcode", with their sales.
- Tap a state to see its sales, its share and how many outlets it has. The list under the map shows the outlets in each state.
- The race is offered when your outlets are in two states or more.
v2026.3 Build 02972026-11-01
Actions shows each card as its check finishes
New- When the Action Centre reads a company's figures for the first time, each check's card now appears as soon as that check is done. The checks still running are named under the cards, so the quick ones show within seconds and a slow one, such as Dead stock, fills in later.
- An action accepted earlier stays off the list until its own check is done, so it is never shown as cleared too early. The menu count waits for the whole list.
v2026.3 Build 02962026-11-01
Actions keeps its last figures through an update
New- After SmartBI restarts or is updated, the Action Centre opens at once with the figures it last read, shows when they were read with "updating…", and fills in the new ones by itself. Before, it showed a waiting page until a full read finished, which can take minutes on a large company. The AI headlines come back with the new figures.
- The last figures are kept only in SmartBI's data folder on its own server. They are thrown away when the Action Packs or Members settings change, when a company's connection is edited, switched off or deleted, and once they are 14 days old.
- An action accepted after those figures were read is left off until the new figures are in, so older figures never show it as cleared.
v2026.3 Build 02952026-10-31
Dead stock after a cutover
Fixed- Unsold stock already held before a later receipt can now appear in Dead stock after a cutover without opening rows. An outward movement more than seven days before the receipt is the evidence: the item is aged from when its record was created, while a record recreated after that receipt keeps the receipt date. The CEO page, Insights, Actions and Group View use the same rule.
- Dead-stock alerts can fire once at the update, because some unsold items now count as dead stock. Most of them follow a cutover without opening rows; elsewhere only a few items are added. Outcome history records any increase as newly recognized dead stock, not stock cleared.
v2026.3 Build 02942026-10-31
AI questions follow data areas
New- When an administrator limits an area of your data, each AI question is checked before it is sent. A question about an area you cannot ask about, or one asking for names or documents in an area you see as totals only, gets a short reason in the language you asked in, and nothing is looked up. The question list and the suggested questions show only what you can ask.
- If you see sales as totals only, your questions are answered as a pivot table: open Pivot fields on the AI Analyst page and ask there.
- A question is saved in your chat history once its answer arrives. A refused question is not saved.
v2026.3 Build 02932026-10-31
Actions fills in faster after a restart
New- SmartBI now keeps its warnings and errors in the server.log file in its data folder, with each start of SmartBI and its build, so support can see what happened. When the Action Centre takes over a minute to read its figures, the time each check took is written there too. It leaves out the text of the questions people ask, the SQL worked out from them, and the contents of a request SmartBI could not read.
Fixed- After an update or restart, Actions could take several minutes to fill in, because its figures were read more than once at the same time while the CEO Dashboard figures were being worked out. They are now read once.
- Opening Actions while its figures are still being read now shows the page at once, with placeholder cards and the time the read began, instead of grey cards for up to 45 seconds.
- If SmartBI did not answer for a moment while Actions was reading its figures for the first time, the page said "No actions detected right now". It now keeps waiting, says it is asking again, and fills in when the figures come.
- After a restart, the number of open actions in the menu could stay empty until the next sign-in. It now appears once the figures are read, and follows the Action Centre each time it fills in.
v2026.3 Build 02912026-10-31
Bubble races: growth and margin, month by month
New- Two new races in the Gallery, Product bubble race and Outlet bubble race. Each product or outlet is a bubble: across, how much its sales grew on the same month last year; up, its gross margin; its size, that month's sales. They play over the last 12 full months, from till sales.
- A bubble is shown only where its figures can be trusted: a month whose cost covers less than 80% of its sales, or that has no full month a year before to compare with, is listed under the picture with the reason instead of drawn.
- A product that grew more than 300%, or a margin past 100% either way, sits in a shaded band at the end of its axis, and the line under the picture gives its figure.
- The races need the gross profit and cost figures; a user without them does not see them.
- Any race that has growth and margin can be switched to Bubbles on its look switch.
v2026.3 Build 02902026-10-31
A department limit covers everything under the granted department
New- A department limit now includes everything under the granted department. Grant "Grocery" and the person sees the items in Grocery and in every department below it, not only the items filed directly on Grocery. This applies to the pivot, the races and group health. The forecast, the insights and the Action Centre apply it only on databases whose SmartBI views include the department. The low-stock list and the dead-stock and below-cost packs are not limited by department yet; that comes in a later build. A mission judges whether a person is covered by looking at the whole tree under what they were granted.
- On a database from before DynaMod 2025.2, which has no department tree, a person with a department limit sees nothing in the limited figures, and the AI Analyst stays on there.
- Where the AI Analyst is off for a person with a department limit, AI apps such as Claude or ChatGPT and the platform's AI Analyst page are told so too, and do not answer their questions either.
- People with no department limit, and admins, see no change.
- For a person with a department limit, the AI Analyst is off on a database that has a stock department tree, and says why in one sentence: "The AI Analyst cannot apply stock department limits yet." It cannot carry a department limit down the tree yet, so it stays off for them rather than show figures outside their limit.
- A department limit can now be stored as a list of departments of its own. Nobody has one yet, because the screen to set it comes in a later build, so this build changes nothing that is stored. A department list typed in the existing access settings keeps working, and on a database with a department tree it now means the granted departments and everything under them.
- Going back to an earlier build lifts any limit stored in the new field. Nobody has such a field until the screen comes, so going back changes nothing stored today. What does change: a department limit goes back to matching the exact department only, and the AI Analyst is no longer turned off for limited people.
Fixed- A person whose limit names a department with sub-departments no longer misses the items filed under those sub-departments.
v2026.3 Build 02892026-10-31
AI apps follow each person's SmartBI access
New- SmartBI now tells the Smart AI Platform what each user may ask the AI Analyst: their outlets, salesmen and departments, the figures hidden from them, their data areas, and whether AI chat is on for them. Questions asked through an AI app such as Claude or ChatGPT, and on the platform's AI Analyst page, then follow the same limits as in SmartBI. For AI questions, an area at Totals only counts as hidden.
- This is sent a minute and a half after SmartBI starts, 15 seconds after an administrator saves users, access or a database profile, and every day. Admin → Updates shows when it was last sent and anything the platform did not accept.
v2026.3 Build 02882026-10-31
Actions fills every card after a restart
Fixed- After an update or restart, Actions on a large company could show "Some packs could not run: dead-stock, replenishment" for several minutes. The first read of the figures now has the same 10-minute limit as the updates behind the page, so Dead stock finishes. Replenishment waits for the low-stock check that starts with SmartBI, instead of giving up while it runs.
v2026.3 Build 02862026-10-30
Group mart clean-up keeps up
Fixed- After each refresh the group data mart clears out old copies of data in seconds, so the next refresh starts on time.
v2026.3 Build 02842026-10-30
Actions never times out on its first read
Fixed- The first time Actions was opened after an update or restart, a large company could show "Action Centre unavailable, HTTP 524": the first read of the figures took longer than the connection allowed. Actions now answers within 45 seconds, says "Reading the figures for the first time", and fills in by itself when the read ends.
v2026.3 Build 02832026-10-30
Actions opens at once
New- Actions opens straight away with the last figures, says when they are from ("Figures from 10:42"), and updates them behind the page ("· updating…"). It waits only when there are no figures yet for what you are looking at, for example the first time after SmartBI starts or after its Action Centre settings change.
- A card whose figures could not be updated keeps its last figures and says how old they are, instead of disappearing. If an update fails, the page says so ("could not update at 11:05") and tries again later.
Fixed- On a company with a very large till, Actions could take about two minutes to open, and Dead stock and Items sold below cost were then missing. The checks now run two at a time, and behind the page they may take up to 10 minutes.
- New CEO Dashboard figures no longer make Actions wait: only its CEO cards are read again.
- AI headlines stay on the cards while the figures update.
- Dead stock reads far less of the till: only the receipts in its window. The Insights card and the Operations list use the same check.
v2026.3 Build 02822026-10-30
Group mart stock checks stay fast
Fixed- The group data mart checks a company's stock and inventory in seconds, also right after a refresh has loaded them.
v2026.3 Build 02812026-10-29
Group mart stock health check stays fast
Fixed- The group data mart counts a company's negative stock in a second or two, also right after a refresh has loaded it.
v2026.3 Build 02802026-10-29
Races play as a donut or a stream
New- Two more race looks: Donut, where each player is a slice of the whole with the total in the middle, and Stream, where each player is a band stacked over time. Everyone outside the top places is one grey Others slice or band.
- Tap a small slice or band to see its name, figure and share under the picture. The look buttons wrap on a small tile, so all six looks stay one tap away.
v2026.3 Build 02792026-10-29
Pages and cards follow data areas
New- When an administrator limits a role's or a person's access to an area of your data (sales, stock, members, receivables, payables, or accounts and staff), every page, dashboard card, Action Centre pack and Group View page follows it. What is hidden says "Hidden for your role" and why. Nothing changes until limits are set; the screen for setting them comes in a later update.
- At Totals only, the totals stay and the names of customers, suppliers or members and their documents are hidden.
v2026.3 Build 02782026-10-29
Explain works on linked databases
Fixed- Explain Calculation and Show Assumptions answer again on a database linked to the Smart AI Platform. In Build 0272 to 0277 they said the database had no gateway settings, even when it did.
v2026.3 Build 02772026-10-28
Races play as a treemap
New- A fourth race look, Treemap: each player is a box sized by its share of the whole, with everyone outside the top places in one grey Others box. The boxes move as the race plays. Tap a small box to see its name, figure and share under the picture.
- A dashboard card keeps the Treemap look like the others.
v2026.3 Build 02762026-10-28
Send to ERP says why each route
New- In Send to ERP, each route now says why it was suggested, for example "Slow at Outlet A: 14 months of stock. Selling at Outlet B: under 1 month left." The list also says how routes and quantities are chosen, with the target cover your Action Centre is set to.
- The review shows, beside each item, what the From and To outlets hold, sell a month and have left. These figures are only shown: nothing about them is sent to DynaMod.
- The transfer proposal (XLSX) gains the sales per month at From and at To, at the end of the sheet.
v2026.3 Build 02752026-10-28
Group mart supplier check stays fast
Fixed- The group data mart checks a company's late purchase orders in about a second, also right after a refresh has loaded them.
v2026.3 Build 02742026-10-28
Group mart checks finish for companies with many purchase orders
Fixed- Group data mart refreshes no longer time out checking a company with many open purchase orders. The supplier figures they check are unchanged.
v2026.3 Build 02732026-10-28
Race captions say which figure fell
Fixed- A race's fall caption now names the figure that fell, for example "Mar 2026: Kepong's monthly figure falls 25% from Feb 2026." With Running total on, the bar can keep growing while that month falls, and the old words read as a contradiction.
- A figure that ends below zero now says it falls below zero, instead of a percentage over 100.
v2026.3 Build 02722026-10-28
Explain an answer
Fixed- Explain Calculation and Show Assumptions under an AI Analyst answer now explain that answer. They used to be sent as a new question, which was usually refused or answered with an unrelated table.
- Show Assumptions lists the stores, the date range and the filters the answer really used, and anything that could change the result. It answers in the language of your question.
- Compare Previous Month starts from the answer it sits under, keeping the same figure and filters and changing only the month.
- On an answer from before this update, the three buttons are greyed out; ask the question again to use them.
v2026.3 Build 02712026-10-28
Group mart refreshes publish through the afternoon
Fixed- Group data mart refreshes no longer time out checking a big month they have just stored.
- A group data mart refresh that resumes after an interruption keeps the checks it had already passed, so it can still publish during trading hours.
- New group data marts refresh their statistics in the background, so no step waits minutes for them.
v2026.3 Build 02702026-10-27
Races say what happened
New- While a race plays, a line under the date says what happened in that period: a new No. 1, the fastest climber, or the biggest fall, in figures the race itself shows. A month still in progress never shows a fall. It works in every look (Bars, Lines, Ranks).
- Under a race, What happened lists every such line. Running total and Each month can tell different stories; the list follows the one you are watching.
v2026.3 Build 02692026-10-28
The AI Analyst answers the period you asked for
New- Every AI Analyst answer now says which period it used, on the answer card or above the answer on the AI Analyst page. An answer to a retry says that the AI Analyst chose the dates, and which dates found nothing.
Fixed- A question that names its own period, such as "last year", "bulan lepas" or "去年", is now answered for that period even when a Period such as This month is chosen. The line under the question says so, for example: Period: "last year" as asked (This month not applied).
- Broaden Date Range, Use Latest Month and Ask Similar Question after an empty answer no longer repeat the dates that found nothing. Broaden Date Range now really looks wider, and says which dates it used.
- With the pivot table's fields open, a typed request that names its own period is no longer given the Period row's choice as well.
v2026.3 Build 02682026-10-28
Send to ERP routes name From and To
New- In Send to ERP, each route now reads "From <outlet> to <outlet>", and the review shows From and To apart, so it is plain which outlet the stock leaves and which receives it. The dialog also says how routes are chosen: slow-selling stock moves from an outlet that holds more than it sells to an outlet that sells it.
Fixed- Slow movers no longer suggests a route to or from the company's transit warehouse. Every Stock Transit already passes through that warehouse, so DynaMod refused such a route when it was sent.
v2026.3 Build 02642026-10-27
Pick the ERP user from DynaMod
New- In Admin → Users & access → Access, the ERP user for sending is now picked from a list of that company's active DynaMod users, shown by login and name, instead of typed. A company with more than 20 users gets a filter box.
Fixed- A saved ERP user who is no longer active in DynaMod stays shown and marked, so it can be changed. A company that cannot be reached says so, with Try again.
- SmartBI now checks, when Save is pressed, that the ERP user is an active DynaMod user of that company. Before, a mistyped ID was only found when a Stock Transit was sent.
v2026.3 Build 02632026-10-27
The chosen race look stands out
Fixed- On a race, the look you are watching (Bars, Lines or Ranks) and the figure (Running total or Each month) are now highlighted. Before, the pressed button looked the same as the others.
v2026.3 Build 02622026-10-27
Group mart loads big months in pieces
Fixed- Group data mart refreshes no longer time out while loading a big month on a busy day: a month of more than 100,000 rows is read in smaller pieces by date, all at the same moment.
v2026.3 Build 02612026-10-27
Groundwork for users and access
New- SmartBI can now keep, on your own server, which areas of your data each role may see: sales, stock, members, receivables, payables, and accounts and staff. Nothing changes until an administrator sets limits; the screen for it comes in a later update.
- An access log on your server records each refusal by data area or outlet and each change to access. It never records what anyone typed.
Fixed- Forecast accuracy on Sales Trends is shown only to people who can see the whole company; others see a short note instead of company-wide figures.
- Saving a person in Admin → Users & access no longer removes their company limit or the settings the dialog does not show.
- An account with a role this version does not know no longer stops SmartBI from starting. It cannot sign in until an administrator gives it a known role.
v2026.3 Build 02602026-10-27
Races as ranks
New- Every race can now be played as ranks: press Ranks on the race. Each player's place is drawn over time, one row per place, and the lines cross as places change. A player that enters the top climbs in from below the last place.
- In AI Analyst, asking for a "line race" or a "ranking race" (also "perlumbaan kedudukan", "排名竞赛") opens the race that way.
- After a race answer, typing "show it as a ranking race" or "show it as a line race" changes the race on screen straight away, with nothing asked again.
- A dashboard card can keep Ranks as its look, as it can Lines.
v2026.3 Build 02592026-10-26
Group mart refreshes resume cleanly
Fixed- When a group data mart refresh is interrupted while it reads a company and then resumes, it reads that company again in full, so its checks no longer fail on sales made in between.
v2026.3 Build 02582026-10-26
A salesman race on the Target page
New- On the Target page, the Salesmen board now plays a salesman race: each salesman's sales this month, day by day. Outlets plays the outlet race as before.
- The salesman race follows the month arrows, so you can replay a past month too. It counts the same sales as the board's Sales ranking.
v2026.3 Build 02572026-10-26
Race lines, tidied
New- On a shared company dashboard, switching a race card between Bars and Lines now says "Saved for everyone who sees this dashboard." once it is saved, because that look is everyone's.
Fixed- A line race with more players than its labels have room for labels the leaders and keeps every label inside the picture. A line without a label is still named in its tooltip and the table.
- A race played as lines draws its names faster, and a name now fits beside its figure even when a figure like RM 999 is wider than the race's top figure.
- A line that has left the race no longer shows its tooltip when you point at where it was.
- An AI Analyst answer switched to Lines no longer turns back into bars when its conversation is read again before the switch is saved.
v2026.3 Build 02562026-10-26
Send any dashboard, now or on a schedule
New- A card's menu has Send, and a dashboard's menu has Send dashboard: email it now or on a schedule, or share it on WhatsApp as a picture, a PDF or an Excel file.
- Each send is read as the person who set it up, with their rights when it is sent. The email says which period each card covers.
- A card that follows its dashboard is sent for the dashboard's own period, not the period you chose for yourself.
- The user guide now describes dashboards, their periods, how a card shows itself, department starters and Send.
Fixed- An email's subject no longer names something its owner can no longer see, when its name was filled in from a tile.
v2026.3 Build 02532026-10-25
Requests reach Smart-Acc
New- Analysis requests now go to Smart-Acc. Sending a request here passes it to Smart-Acc over two signed calls; if Smart-Acc cannot be reached, or this server is not yet activated, the request waits and is tried again within about 10 minutes, then less often, at most hourly, and never gives up.
- Open requests made on earlier builds are sent once, when this build first starts. Closed ones are never sent. A server whose licence was deactivated stops sending until its licence check confirms it again.
- My Requests says where each request stands: Sent to Smart-Acc, Waiting to reach Smart-Acc, Not sent, or Resend refused. Once sent it also shows Smart-Acc's status, any quote or invoice reference, and the Reply from Smart-Acc.
- Smart-Acc's status is checked every hour and whenever My Requests is opened (at most once a minute). Closed requests keep being checked for 30 days.
- The message after you submit a request says whether it reached Smart-Acc, and the file picker says the files stay on your server.
- Admin, Analysis requests: once Smart-Acc holds a request it is read-only here (a banner explains), and each row shows whether it was sent.
Fixed- A request now reaches Smart-Acc instead of staying on this server.
v2026.3 Build 02522026-10-25
Clearer CEO failure messages and Group figures
Fixed- If a CEO refresh fails, the page explains what happened in plain words and keeps the last figures when available. Technical details go to the server log; the cost-setting advice still appears on the page.
- A missing sales-view index now points to Test, then Repair in /admin → Companies & databases, or Smart-Acc support.
- Group CEO cards, Excel files and monthly emails explain withheld figures more clearly. Email change lines end with a full stop, and last-computed figures are described once. The Group figures sheet calls its month Group month.
- Related-company suggestions in /admin now say which of the company's own names matched.
v2026.3 Build 02512026-10-25
Group mart checks in trading hours, fixed
Fixed- Group data mart refreshes during trading hours no longer fail their checks with a timeout. One stock query sometimes took a slow way through the data right after a company's stock was loaded; it now always takes the fast one.
v2026.3 Build 02502026-10-25
Races as lines
New- Every race can now be played as lines: press Lines on the race. Each player's line grows as the race plays, with its name and figure at the end, in the same colour as its bar.
- An AI Analyst answer switched to Lines stays that way, and opens as lines when you pin it.
- A look chosen on a dashboard card is saved on the card. On a shared dashboard it is saved for its editors.
v2026.3 Build 02492026-10-25
Group mart checks during trading hours
Fixed- Group data mart refreshes during trading hours no longer fail their checks with a timeout: each company is checked as soon as it has loaded, instead of after every company has loaded.
- When one company's check fails, the other companies still load, so the next refresh carries on instead of reading them again.
v2026.3 Build 02482026-10-24
Department starter dashboards
New- + New dashboard can start from one of five department starters: Executive, Sales, Outlets, Purchasing and stock, and Finance. It fills in the name and the suggested roles, which you can change.
- What your database cannot show is left out and listed under Not in this dashboard, with the reason.
- After making a company dashboard you are told which of its roles will not see which cards, and why.
Fixed- A Reorder Alerts card on a dashboard says it is still checking stock while its first check runs, instead of showing an error.
v2026.3 Build 02472026-10-24
Stored stock totals reported to Smart-Acc
New- SmartBI's daily check with Smart-Acc now also says, for each company, how many DynaMod stock totals need a recalculation, so Smart-Acc sees it without signing in to this server. Only counts and check times are sent, never an item or a quantity.
- Admin, Licence: the note about the daily usage summary now mentions these counts.
v2026.3 Build 02462026-10-24
CEO Excel columns and clearer monthly emails
Fixed- CEO Excel files open with columns wide enough to read, including report files and email attachments. Long notes at the end of a row can run into the empty cells.
- The Group CEO monthly email gives every reason a figure is withheld, once. Figures without a number show the same word as the page, without a unit, and say “Change not available.” Last-computed explanations are no longer repeated.
- The page and Admin now say “Sent, with notes on what is missing or out of date — accepted by the mail service”.
v2026.3 Build 02452026-10-24
Dashboard cards as a Number, Bars or a Line
New- A dashboard card can show itself as a Number, Bars, a Line or a Table. Editors choose with Show in the card menu, and how many rows with Rows shown.
- A Number compares itself with the span just before, once its period has ended: for example "Sep 2026 is down 0.9% on Aug 2026, when it was 1,842,897.82." While its period is still running it says so.
- A Line and a Table with columns take two columns of the dashboard; in Customise any card can be made wide or narrow.
- Each card says what it shows, with Copy prompt to copy that sentence.
- + Add card takes a typed request, such as "top 10 items by revenue at KL": it shows the table, says any words it could not use, and adds the card. When nothing fits, it opens the AI Analyst with your words in the box. The words are not kept.
v2026.3 Build 02442026-10-23
Target names the month once; small race and chart fixes
New- Target: in full screen (Present) the page heading and its month show above the cards.
Fixed- Target: with the month arrows showing, the month is named once. The line under the heading now says how far the month is: Final, Data to 16 Oct, or Day 19 of 31.
- Target: a finished month with no targets says "No targets were set for August 2026.".
- Target: choosing the current month with the arrows races as many outlets as the page opens with.
- AI Analyst: after "Load all rows" on two answers, a typed "as a pie" decides on the rows of the answer it changes.
v2026.3 Build 02432026-10-23
Chart requests read more carefully
Fixed- AI Analyst: "show sales in a format such as a table" now asks for a table, while a list such as "items such as table, chair and sofa" or "slices in a pie that were sold" is no longer read as a chart request.
- AI Analyst: a chart request typed with a no-break space or another unusual space is read like one typed with a plain space, the same way as on the AI Analyst server.
v2026.3 Build 02422026-10-23
Security update: Node.js 24 everywhere, and safer add-on packages
New- Update now also moves a server whose Node.js is managed by nvm-windows to Node.js 24.22.1. The new release is unpacked beside the old one while SmartBI keeps running, and SmartBI is stopped only for the moment it takes to switch. If SmartBI does not answer on Node.js 24, the switch is undone and it starts again on the old release, which is never changed.
Fixed- Six add-on packages SmartBI uses were updated to releases with published security fixes, including the one that reads the address a request comes from, the file upload handler and the email sender.
- If stopping SmartBI for the Node.js step fails part-way, SmartBI is started again and checked, instead of being left stopped.
v2026.3 Build 02412026-10-23
Security update: Node.js 24
New- Update now also moves this server to Node.js 24.22.1, the release with the latest security fixes, once the new SmartBI is running. Node.js 20 and older no longer get security fixes. The installer is checked against the fingerprint Node.js publishes before it runs.
- If SmartBI does not answer on the new Node.js, the previous Node.js is put back and SmartBI starts again on it. The update history says what happened.
- A new server installed from this release gets Node.js 24.22.1 straight away.
v2026.3 Build 02402026-10-23
A nightly check of DynaMod's stored stock totals
New- Admin: each night SmartBI checks whether DynaMod's stored stock totals agree with its per-unit balances, database by database. A "Stock totals" badge on each profile in Companies & databases shows the answer; click it for the items with the largest gaps, Check now, and a fix script to copy. The script is DynaMod's own recalculation, run in SQL Server Management Studio outside trading hours. SmartBI never runs it.
v2026.3 Build 02392026-10-23
Access shows what each person gets
New- In /admin → Users & access → Access, every "Template default" now says Granted or Denied for the role picked, and changes when you change the role. AI Chat, Voice Input and Pivot transactions also follow what is ticked (all locations, all salesmen, the measures) and say why.
- Five new choices in Access: My Dashboards, Add from Gallery (on My Dashboards), Actions, Accept actions and Requests. A Viewer can be given them without changing role.
- Hints under CEO Dashboard (also needs Finance and All locations, with a warning when it would show nothing) and Target page (also needs the company's Target switch on).
Fixed- The Viewer role is now named for what it is: "Viewer (AI Analyst only: chat, pivot, export)". Existing Viewers keep exactly what they had.
v2026.3 Build 02382026-10-23
Moving a server Smart-Acc connected the earlier way
New- AI Analyst: the Setup Pack can now move a company database Smart-Acc connected the earlier way onto this server's own managed connection. It keeps its AI Analyst name and account, so DynaMod's AI button and saved questions carry on.
v2026.3 Build 02372026-10-23
Security update: compressed requests refused
New- The daily version report this server sends to Smart-Acc now also names the Node.js version it runs, so a server that needs a newer Node.js can be found and updated.
Fixed- Security: SmartBI now refuses a request whose body is compressed, before reading it. This closes a way to reach a flaw in Node.js's Brotli decoder, announced on 21 October 2026, without signing in. Browsers and SmartBI's own pages never send compressed requests, so nothing changes for users.
v2026.3 Build 02362026-10-23
Dashboard periods
New- A dashboard has a period: the bar under its name shows it with its dates, from the database's own clock, for example "Last 30 days (22 Sep – 21 Oct 2026)". Cards and pages set to "Same as dashboard" follow it.
- On a company dashboard, choosing a period sets your own; everyone else keeps the company default. "Use the company default" goes back, and editors can "Make this the company default". On your own dashboards the period is the dashboard's.
- Each card shows its period on a badge. Editors can give a card its own period from its menu ("Period for this card"); a page's bar has the same Period choice.
- Pin asks whether a pivot follows the dashboard's period or keeps its own.
- A table by day that follows a period longer than three months is read by month, and says so.
- People limited to some outlets see "Your outlets" on the bar.
- The side menu entry now reads "My Dashboards", as it holds every dashboard you can see.
v2026.3 Build 02352026-10-23
Races played are counted
New- Races: playing a race (its first Play, or the first move of its period) is now counted in the daily usage report this server sends to Smart-Acc. It is a number per person and day, with no figures and no names from the race. Opening a page or a tile with a race on it is not counted.
v2026.3 Build 02342026-10-22
CEO action cards fully in the chosen language
Fixed- CEO Actions: in Chinese and Malay, a CEO action card now also gives its review-row count, its supplier counts and purchase coverage, and its note about waiting for a newer measurement in the chosen language. The Done and Dismiss buttons keep their English names, so the note quotes them.
v2026.3 Build 02332026-10-22
ABCD: what Category D means, said in full
Fixed- Admin: the ABCD card now says that D is everything after C (the last 1% with the default thresholds), as well as stock with no sales or no sale for 365 days. Before, it named only the last two, so a D item that sold last week looked wrong. How items are classified does not change.
v2026.3 Build 02322026-10-22
Target looks back at a past month
New- Target: arrows beside the month open any past month, back to the first month with sales. The month goal shows the final result for the whole month, the outlet and salesman boards rank that month, and the outlet race plays that month day by day.
- Targets opens on the month you are looking at.
Fixed- Target: for a company whose sales stopped in an earlier month, the outlet race now plays that month instead of an empty one, and a goal or board that stopped on a month end still says how old its data is.
v2026.3 Build 02312026-10-22
CEO answers in the chosen language, with stable account lists
Fixed- Chinese and Malay CEO answers now carry their balance-check notes, table labels and heading in the answer's language. The two CEO Actions balance-check notes also follow the selected action language. Accounts with the same balance stay in account-code order, including at the displayed limit. No financial figure or calculation changes. Older saved summaries may omit comparison amounts they did not store.
v2026.3 Build 02302026-10-22
Chart follow-ups, tidied
Fixed- AI Analyst: "such as table lamps" or "slices in a pie" in a question is no longer read as a request for a chart. "Show sales in a table for each outlet" still gives a table.
- A one-row answer no longer offers a scatter of a single dot.
- Asking for a chart after an answer that found nothing now says "This answer has no rows to chart."; after one that has no chart, "This answer has no chart to change."
- After Load all rows, asking for a chart checks all the rows on screen, as the chart buttons do.
- Going from a race to another chart and back to Race brings the race's own chart back.
- A chart you switch to just before a message arrives from your other device is no longer lost.
v2026.3 Build 02292026-10-22
My Missions follows the company you open
Fixed- After opening a company with Login on Data Source, the menu now shows that company's items at once. Before, My Missions could stay hidden on a company with Target on, or stay in the menu on one with Target off, until the page was reloaded.
v2026.3 Build 02282026-10-22
Charts you can ask for
New- AI Analyst: under every chart, buttons switch it to bars, a line, an area, a pie, a scatter or a table at once, without asking again. A chart that does not fit the answer is greyed, and says why.
- Asking for a chart in your question works in English, Malay or Chinese ("as a line chart", "carta garis", "折线图"); if that chart does not fit the answer, it says why.
- "Show it as a line chart" after an answer changes only its chart. Pin the answer after switching, and the dashboard tile keeps that chart.
- Pie charts are now a ring, largest slice first, with the total in the middle and a legend that shows each slice's share.
v2026.3 Build 02272026-10-22
Pin an AI answer's pivot table, and click its figures
New- AI Analyst: in the pivot table of an answer, click any figure to see what is behind it: its figures, a breakdown by another of the answer's columns, and the answer's own rows that make it up.
- Pin on the pivot table of an answer puts it on My Dashboard. The tile asks the answer's question again each time it is opened and lays the rows out as you arranged them. Expand opens the whole table, row by row, and its figures can be clicked too.
- An email or a scheduled report of that tile sends the same table.
v2026.3 Build 02262026-10-21
Pivot an AI answer
New- AI Analyst: Pivot table above an answer now arranges that answer's own columns. Drag them to Rows, Columns, Values and Filters, with totals, sorting, heatmap, Undo and Export to Excel, as in the sales pivot table. The table starts from the answer's own layout, and works from the answer's rows without reading them again.
- The field column has a switch, This answer or Sales, to choose what the table arranges.
Fixed- The button above an answer for the table built from sales fields is now called Sales pivot, so it is no longer mistaken for the pivot of the answer.
v2026.3 Build 02252026-10-21
Dashboards get pages
New- Dashboards can now hold pages: pin a pivot table as a full page from the AI Analyst. It opens as its own tab beside the Overview, read as the person looking at it.
- On a page, add your own filters from your own field list; an editor can save them to the page.
- Edit a dashboard’s card or page in the AI Analyst, then Update it in place; or Extend in AI to make your own from it.
- The page menu renames, copies and removes a page, with Undo, and adds or removes its summary card on the Overview. + New page builds one in the AI Analyst or copies one from another dashboard.
v2026.3 Build 02242026-10-21
Target counts in the daily check
New- SmartBI's daily check with Smart-Acc now also says how Target is used in each company: whether it is on, how many outlets have a target set in SmartBI this month, and how many missions are open, overdue and done. Only counts are sent, never an amount, a name or a note.
- Admin, Licence: the note about the daily usage summary now mentions these Target counts.
v2026.3 Build 02232026-10-21
Target everywhere on screen
Fixed- Messages that still said Arena now say Target, as the menu and the page do since the last build: for example "Target is off for this company. An admin can switch it on in 🏆 Target → Targets." and "Missions are off for this company until an admin switches Target on."
- In /admin, the access right is called Target page and the card is called Target pilot export. Nothing else about them changes.
v2026.3 Build 02222026-10-21
Group View races load
Fixed- The race tiles in Group View (Company race, Group outlet race, Group best sellers) no longer fail with "The group operation failed. No partial group total is available." when they are installed, refreshed or previewed. Build 0220's Gallery items did not say which race and which period they show. A race tile already on My Dashboard starts working after Update now, with nothing to reinstall.
v2026.3 Build 02212026-10-21
Stock from each unit's balance
Fixed- Stock on every page is now worked out from DynaMod's balance of each unit, the way DynaMod adds it up itself (2 cartons of 12 and 5 pieces are 29 pieces). DynaMod's stored total of those balances can fall behind and show 0 for an item that is on the shelf; SmartBI no longer shows that 0.
- Group data: a company whose stored total had fallen behind kept its whole group's data from being published until the total was recalculated in DynaMod. The group's data now publishes.
v2026.3 Build 02202026-10-21
Bar chart races in Group View
New- Group View's Gallery has three bar chart races: the Company race (which company of the group is ahead), the Group outlet race (every outlet of the group on one track, each coloured by its company) and the Group best sellers (the items the whole group sells most). The company and outlet races come for this month by day, this year and the last 12 months; the best sellers for the last 12 months and this year, by month. Each is a top 10 and lands on My Dashboard like the other group tiles.
- The group races are read from the group data mart only, never from the company databases one by one. Without a published mart the tile says why. A company whose data in the mart is missing or incomplete stops the race with "The published data of this group is incomplete for this race. No figures are shown." It is never shown as a company that sold nothing.
- Sales are till sales and invoices, returns subtracting, as in the company races. Companies whose currencies differ get no group race, as with every group money figure. Two companies' outlets with the same code are two bars, named with their company ("HQ Outlet · Orchard").
- Items in the best sellers race are matched across the companies by item code and base unit. Sales that cannot be matched are left out and said under the tile; when they could change the top places, the race is not shown.
- A company whose sales stopped more than 3 days ago is named under the tile ("Valley: data ends 9 Oct 2026."), and the race plays on to the others' latest day.
- The races need every store of every company in the group, with no salesman or department limit: a user granted fewer does not see them. The best sellers need the group's item matching at grade A.
v2026.3 Build 02192026-10-21
The Target page lines up
Fixed- On the Target page, on a wide screen, the Outlet race now sits right under the Month goal, however long the outlet board is. Present (full screen) leaves room around the cards and scrolls, so a long board can be read to the end.
v2026.3 Build 02182026-10-20
The menu in groups, and Ask AI stays
New- The side menu is in three groups: Overview (My Dashboard, Insights, Dashboard, CEO Dashboard), Analyse (Sales, Inventory, Suppliers, Members, Target) and Act (AI Analyst, Actions, My Missions, Requests). Data Source is at the foot of the menu, with Admin for admins, which opens /admin. The phone menu has the same groups.
- New names on screen: Dashboards is My Dashboard again, Sales Trends is Sales, and the Arena is Target, on the menu, its page and its Gallery chip. Pin sidebar is Pin menu.
Fixed- Ask AI in the top bar no longer disappears once pressed. It is there on every page for anyone who may ask the AI Analyst, Data Source and a group included. Pressed on the AI Analyst page, it puts the cursor in the question box.
v2026.3 Build 02172026-10-20
The Arena reads as at your latest sales day
Fixed- When the whole company's latest sales in DynaMod are more than 3 days old, for example on a copy of the database or after a long closure, the Arena no longer shows every outlet as "Not scored". The board and the month goal are read as at the day after the last sale, last year is compared over the same days, and the heading, the goal card and the dashboard tiles say "Data to" that day. Data that ends on a month's last day shows that month as finished. An outlet that stopped selling while the others went on is still "Not scored".
v2026.3 Build 02162026-10-20
This server's own AI key
New- Smart-Acc AI Cloud now runs on this server's own key, which Smart-Acc sends with the daily licence check. No key is typed in or shared with any other server, and AI insights stop at once if the server is deactivated.
- A new server starts its AI insights as soon as it is activated. Until then they say "AI insights are available once this server is activated."
- Admin, AI Provider: choosing Smart-Acc AI Cloud needs no key. The card says when this server's own key was issued. A server on Smart-Acc AI Cloud or the built-in key moves to its own key by itself; a server set to your own Anthropic or OpenAI-compatible provider stays on it.
- An activated server whose own key has not arrived yet says "AI insights are being set up for this server and start within the hour." An admin can press Refresh now on the Licence card to start them sooner.
- Admin, Licence: a Copy code button next to the activation code, so it can be pasted where it is approved.
v2026.3 Build 02152026-10-20
Arena pilot export
New- Admins can download an Arena pilot export for one company from /admin → Companies & databases. The file holds SmartBI user names, sign-in and screen counts per person and day for the last 120 days, the Action Centre's findings, results and missions, and target attainment for the last three months, for Smart-Acc's pilot reports. It holds no passwords, email settings, questions, notes or ERP details.
v2026.3 Build 02142026-10-20
A closed finding comes back
New- A finding that was Done or Dismissed comes back to the Action Centre as New 30 days after it was closed, if SmartBI still finds the problem. The card says what happened last time; a closed card says from which day it can come back. Results already measured stay in the results line, in the month they closed.
- After this update, findings closed earlier that SmartBI still finds come back as New the first time the Action Centre is opened.
v2026.3 Build 02132026-10-20
Slow movers suggests transfers on large companies again
Fixed- Actions → Slow movers: on a company with a very large item list, the check that works out which outlet has too much and which too little took longer than SmartBI allows, so the card showed no transfer suggestion and Send to ERP had no route, unless the minimum stock value was raised. It now reads each outlet’s sales and stock once instead of once per slow-moving item: on a company of 128,000 items, from over 4 minutes to about 2 seconds, with the same suggestions. Send to ERP’s review, which runs the same check again, is as fast.
v2026.3 Build 02122026-10-19
Change password accepts what the installer accepts
Fixed- Change password no longer refuses a password as "too easy to guess". A password chosen during installation, such as the company name with a number, was accepted there and then refused here. Both now check the same things: at least 10 characters, a letter and a number, no space at the start or end, not your username, and different from your current password.
v2026.3 Build 02112026-10-19
Group outside figures, month by month
New- Group CEO: open “Month by month, outsiders only” under Between group companies to see outside receivables, payables, DSO, Credit DSO, DPO and the cash cycle for each month of the Group trend. Today's confirmed accounts, cost permissions and stock check apply throughout. A figure that cannot be given says why. Excel carries the same months on the Between group companies sheet.
- The monthly Group CEO email's Excel carries the same months.
v2026.3 Build 02102026-10-19
The Arena’s salesman board shows
Fixed- Arena: the salesman board always said "needs the semantic views upgrade", even on a database whose views carry the salesman column. SmartBI asked whether the column was there before it had opened the database, so the answer was always no. It now asks after. Nothing to do on the server: once this build is installed, the salesman board shows where "Our salesmen are people" is on.
v2026.3 Build 02082026-10-19
SmartBI can be installed on another port
New- The installer can put SmartBI on another port than 5001, for servers where 5001 is taken or blocked. The port is kept for later updates, and a port another program uses is refused rather than taken over.
v2026.3 Build 02072026-10-19
The Arena: a month goal, a fair scoreboard and a race
New- 🏆 Arena (ADR-0039 P5): the page the menu item opens once an admin has switched the Arena on for the company. The month goal shows how much of this month’s targets is reached and where the month ends at the current pace; the outlet board ranks your outlets by target % (or by growth against the same days last year, or by sales); the outlet race plays the month day by day; 🎯 Targets opens the Targets screen and ⛶ Present puts it all in full screen for the meeting room.
- The pace counts each day still to come at its weekday’s usual share of sales, learned from the last 8 full weeks, so a month with its weekends still ahead is not forecast as if every day were the same. With less history it uses a simple daily average and says so.
- Fair play, as decided: an outlet with no target is shown apart as "No target", never as 0% and never last; an outlet open less than 13 months is never ranked on growth; an outlet whose data is more than 3 days old is "Not scored"; outlets with the same figure share a place; an outlet that sold nothing in the month and has no target is set apart as "No sales this month". Where DynaMod has outlet sizes or regions, outlets can be compared within their own group. A sales win that came with a falling till margin is marked, where cost is reliable. SmartBI shows and measures; it never decides pay.
- Who sees it: a new "Arena page" right for admins, managers and branch managers (Admin → Users → access can give or take it per person). A branch manager sees the board for their own outlets. The salesman board is for managers, and only where "Our salesmen are people" is on.
- "Month goal" and "Outlet board · target %" as tiles for My Dashboard, in the Gallery under a new Arena chip while the company’s Arena is on.
v2026.3 Build 02052026-10-19
Dashboards follow your limits more closely
Fixed- Dashboards: a removed user’s name is taken out of company dashboard audiences, so a new account with the same name is not shown them.
- My Dashboard: when your outlets, salesmen or departments are narrowed after you pinned a pivot table, it no longer shows, emails or exports the choices you may no longer see. A tile left with nothing says why.
- Dashboards: the Hidden and Recently removed lists work by keyboard, tell two dashboards of the same name apart and ignore a second press. A card’s badge names its outlet, and a dashboard seen only by its editors says so.
v2026.3 Build 02042026-10-19
Repair finishes on a very large database
New- Repair (Admin → Database Profiles) and the semantic views upgrade have no time limit any more: on a database with hundreds of millions of sale lines an index can take more than an hour to build, and it now finishes instead of being cancelled and starting again.
- If Repair is cancelled by a deadlock with a sale being posted, it starts again by itself, up to three times, and keeps what it already built. The browser can be closed meanwhile.
Fixed- While Repair or the upgrade builds the views, a sale posted at the same moment can no longer cancel the build: SQL Server cancels the sale instead, and it is saved again. Run them after closing time.
- A view that a cancelled build left without its index is now found: its database row shows "Views: interrupted" and Repair builds it again. Before, the dashboards that read it failed while Repair said there was nothing to do.
v2026.3 Build 02032026-10-19
SmartBI on phones and tablets
New- SmartBI can now sit on a phone or tablet home screen like an app, with its own icon: the Smart New Retail logo on white. Opened from that icon on an https address, it fills the screen with no browser address bar, and on an iPhone the top bar starts below the clock.
- A new Get the app item in the account menu shows the steps for the phone in hand: Share, then Add to Home Screen on an iPhone or iPad; the browser menu on Android, in Chrome or Samsung Internet; or “open this page in your phone’s browser first” inside a chat app. Where Chrome offers it, an Install SmartBI button does it in one tap. The item is not shown when SmartBI is already open as an app.
- On the office Wi-Fi address (http), an Android phone adds SmartBI to its home screen but opens it in the browser: phones only make a full app from an https address. Get the app says so and gives the https address for the full app, read from SMARTBI_PUBLIC_URL in the server’s .env, or says to ask whoever set up SmartBI when that is not set.
- When SmartBI has been updated while it is open, a bar at the top says “SmartBI has been updated — tap to reload.” It reloads only when tapped, so nothing half-typed is lost.
Fixed- The app icons named since v1.3.0 were never shipped, and a phone could not read the app’s description before signing in, so adding SmartBI to a home screen gave a blank or generic icon. Both are fixed. A missing icon, or an old file that an update removed, is now “not found” instead of the SmartBI page.
v2026.3 Build 02012026-10-19
Missions follow the chosen store
New- The Action Centre follows the store chosen at the top of the page: with one store chosen it shows that store’s own findings, and its missions can be given to people who see that store, such as a salesperson at that outlet. A line says whose findings these are and how to see all of them again: All Stores for the whole company, or All my stores for someone with several outlets. Someone who works at a single outlet sees the Action Centre as before.
- Missions name their outlets by name (for example "Kajang Utama" rather than "KJ") in the bell, the reminder emails and My missions.
- A mission due within a week of being given is measured before its first reminder, so the reminder says how far it has gone.
Fixed- An action that is already someone’s mission can no longer be given to someone else; the second giver is told who has it, nothing is changed, and the card then shows that mission.
- A goal to bring the figure down to an amount must now be below the figure the action started from, and the message names that figure.
- A mission whose figure grew now says so ("RM 4,944 more than at the start (+12%)") instead of showing a negative amount cleared.
- A mission card now shows only a reminder that will still be sent, and none when none is left.
- The two reminder emails have their own subjects: "Mission due in 3 days" and "Mission due today".
- A reminder that waited for a mission’s first measure is no longer sent if the mission was marked Done or Dismissed in the meantime.
- The Action Centre no longer asks the AI for a headline nobody sees, so each wording request is a little smaller.
- The demo’s My missions page now shows missions a salesperson could really hold.
v2026.3 Build 02002026-10-18
SMii is the AI Analyst’s icon
New- The AI Analyst now shows SMii, the Smart AI Platform mascot, in the top bar, the menu and above its answers, in place of the robot.
v2026.3 Build 01992026-10-18
Each player keeps its own colour in a race
New- In a bar chart race with no grouping (outlets, salesmen, customers), each bar now keeps its own colour for the whole race, so you can follow one player as it overtakes. The final leader takes the first colour, and the seven colours repeat from the eighth player on. Races grouped by category, or by company in Group View, keep one colour per group and their legend.
v2026.3 Build 01982026-10-18
Missions on the Action Centre
New- A manager or branch manager can give an Action Centre finding to a named person as a mission: "Make it a mission" on the card, then Give to, a goal (clear 25%, 50% or 75%, or bring it down to an amount) and a due date. Only people who see all of that action’s outlets, salesmen and departments on that company are offered, and the box says so.
- A mission is measured every week with the same check and the same outlets, and its card shows the week, the change so far against the goal, and who it is for.
- Every figure of a mission, also the one taken when its person marks it Done, is measured as the person who accepted it sees the company, so it compares like with like with the starting figure.
- The weekly measure runs in the background with a longer time limit. The mission card and My missions say when it was last measured; when a newer try took too long or could not reach the database they say so, and it is tried again after 1 hour, 6 hours, then once a day.
- The person a mission is for is reminded three days before the due date and on the day, at 08:00, in the bell and by email, and nobody else is. Quiet hours apply, and nothing is sent to the alert webhook.
- A new My missions page lists your own missions with a Done button. Salespeople can open it and see their own reminders in the bell; the Action Centre stays closed to them.
- Two new permissions in Users and access: Give missions (admins, managers and branch managers) and Own missions (salespeople and everyone who sees the Action Centre).
- Missions appear when an admin switches the Arena on for the company. Until then nothing about missions is shown, given or sent there, and missions already given are kept for when it is switched on.
- The results line now sits at the top of the Action Centre and shows each kind of money on its own: cash collected, stock cleared, lost sales avoided, margin protected, members won back. It never adds them into one total. If the newest month only closed actions without a measure, it shows the last month that measured something. The old "Measured outcomes by month" strip at the bottom is gone.
Fixed- An alert email held back by quiet hours is no longer lost when it is queued while the queue is being sent.
v2026.3 Build 01972026-10-18
Group data mart checks finish on stock read outlet by outlet
Fixed- Group View: for a company on DynaMod’s Location cost setting, the group data mart’s check could run past its five-minute limit on the stock figures (Admin → Groups: “A database request timed out”), and that refresh was not published. The statements that read stock outlet by outlet may now take more query memory, up to a quarter (the limit SQL Server sets for any query). On a test copy, a two-company check that timed out every time now publishes in 11 to 15 minutes.
v2026.3 Build 01962026-10-18
Arena targets: read from DynaMod, or set in SmartBI
New- A new 🏆 Arena item holds the Targets screen: each outlet’s sales target for the month, and each salesman’s where the salesmen are people. Admins always see it; managers see it once an admin turns the Arena on for the company.
- Targets come from DynaMod’s monthly target tables first, and are changed there. Where DynaMod has none, a manager types them in, or pastes two columns from Excel, and can export the list to Excel.
- “Last year + 5%” fills in a suggestion from the same month last year. A suggestion is saved only after Use suggestions and Save.
- An outlet with no target shows “No target”, never 0.
- Two switches for admins on that screen, both off until turned on: Arena on for this company, and Our salesmen are people.
- A new permission, Manage targets, for admins and managers. An admin can give it to, or take it from, one person in Users and access.
v2026.3 Build 01952026-10-18
Dashboards for every department: tabs and the Overview
New- My Dashboard is now the first tab of a Dashboards page. Make more dashboards beside it: for yourself, or, with the Manage dashboards permission, for the whole company, shown to everyone or to chosen roles and people.
- Every card is read as the person looking at it: a store manager sees their own outlets, and a card someone may not see stays in its place and says why.
- Customise a dashboard: drag cards or move them with the buttons, rename them, and remove one with Undo. Add a card from the library, or copy one from another dashboard.
- Pin in the AI Analyst can now pin a pivot table as a card on any dashboard you can edit.
- Rename, copy, hide, remove and restore a dashboard. A removed dashboard can be restored for 30 days.
Fixed- A new user given the name of a removed one no longer finds the dashboards that earlier user left behind.
v2026.3 Build 01942026-10-17
The Licence card names your dealer as a reader of the usage summary
Fixed- Admin → Licence: the note about the daily usage summary now also says that, if a dealer looks after your licence, the dealer sees it too. Your dealer sees your SmartBI users, when they last signed in and which screens they used, for your company only.
v2026.3 Build 01932026-10-17
Monthly Group CEO email
New- Group CEO: email a group's figures once a month. On the Group CEO page, "Email monthly" sends the eight figures, each with its change from the month before, and the page's workbook, to up to 20 people, on the day and time you choose. SmartBI brings the figures up to date in the hour before; a figure that cannot be given says why. Nothing goes out when the group has no month yet. English only.
v2026.3 Build 01922026-10-17
Admin page in sections
New- Admin: the page is now in sections with a sidebar: Overview, Updates & maintenance, Companies & databases, Users & access, AI & features, Business rules, Alerts & schedules, Analysis requests and Licence. On a phone, the All sections button opens the same list. Every card works as before and is one click away; back, forward and reload keep your place.
- Admin → Overview: what needs attention (an update, the semantic views or the licence), then this installation at a glance: the licence, the version, the connected database and how many people can sign in. The sidebar marks any section that needs attention.
- Admin → Updates & maintenance: Updates and Semantic Views side by side, with HTTPS below. The update token, the update history and the gateway report line are under "Update settings and history", which opens by itself until the update channel is set up. Semantic Views has a Refresh status button.
- Admin: while the licence has ended, the sidebar shows only Overview, Updates & maintenance and Licence, and says the other sections come back when the licence is active again.
- The Admin links on the Data Source page, the company groups page and the CEO related-companies page now open the section they mean (Companies & databases, or Users & access).
Fixed- Admin: on a phone, the Scheduled emails table no longer makes the whole page scroll sideways; it scrolls inside its own card.
v2026.3 Build 01912026-10-17
Preparing dashboards for every department
New- Nothing new appears on screen yet: this build lays the ground for several named dashboards, personal and for the whole company, each with an Overview of cards and pages of their own. The screens come in the next builds.
- A new permission, Manage dashboards, is in Users and access. Only admins have it until an admin gives it to someone; it lets them make and change the company’s dashboards.
- A pivot table pinned to My Dashboard now opens for anyone who has My Dashboard, under their own outlets and permissions. Building or pinning one still needs the Pivot tables permission.
v2026.3 Build 01902026-10-17
Ready-made races in the Gallery
New- The Gallery has a Races chip with ready-made bar chart races: best sellers (last 12 months or this year), salesmen (this year, last 12 months or this month by day), outlets (this month by day, last 12 months or this year), categories, brands and top customers. Install one and it lands on My Dashboard within your outlets, with no AI call.
- Two more show where the database has what they need: best sellers by day (the days in the pivot add-on) and departments (DynaMod 2025.2 or later).
- A race tile says "Data ends …" when the data stops before today, and the race ends where the data ends. The figures are in sales.
- The Gallery now has chips: All, CEO, Sales, Stock and Races.
v2026.3 Build 01892026-10-17
Group day figures with outsiders only
New- Group CEO: under Between group companies, DSO, Credit DSO, DPO and the cash cycle are also shown with outsiders only, leaving out what the group's own companies owe, sell and buy between themselves. They use the accounts your administrator confirmed and the same month as the cards. Sales without a customer account, such as journals, count as sales to outsiders. Stock days are not restated, and the cards and the trend do not change. Excel shows the same figures on the Between group companies sheet.
v2026.3 Build 01882026-10-17
Group data mart no longer fills its disk
Fixed- Group View: a group data mart whose refreshes kept failing never removed its old copies of the data, and could grow until its disk was full (Admin → Groups: “The data mart database is full”). Every refresh now removes old copies, a failed one too, and a new or repaired mart keeps its log small. The figures shown were not affected.
- Admin → Groups: the “database is full” message now says what is full and what to do. It always said to move the mart to a Standard edition SQL Server, even when it was on one.
- Admin → Groups: editing a group, or restarting SmartBI, while a finished refresh was cleaning up could mark that refresh as failed. It no longer does.
v2026.3 Build 01862026-10-17
Group data mart clears its old refreshes again
Fixed- Group View: the group data mart’s clean-up of old refreshes could run past its five-minute limit after every refresh (Admin → Groups: “Published, but follow-up work failed … A database request timed out”). Records of old refreshes then piled up instead of being cleared. The clean-up now takes seconds. The figures shown were not affected.
v2026.3 Build 01852026-10-16
Bar chart races
New- A chart can now be a bar chart race: names overtake each other period by period. It plays in the answer card, where the chart tab is called Race, in Expand, and on a pinned tile with a Play button. Share to WhatsApp sends its final standings.
- The race has play and pause, a period slider, three speeds, running total or each period, top 5 to 20, a table of the period on screen, and full screen where the browser offers it. With the race itself selected, Space plays or pauses and the arrow keys step one period. With reduced motion turned on it steps one period at a time.
- A race is never drawn wrong. An answer cut short shows the table, and any other answer that cannot race, such as one whose periods are not dates, shows its ordinary chart, each with one line saying why.
- Demo mode: My Dashboard has an example race, Best Sellers Race (6 months).
- Ready-made races in the Gallery and races from AI Analyst questions follow in later builds; this build plays them.
v2026.3 Build 01842026-10-16
Days in the pivot can be brought up to date
New- Admin → Database Profiles → Repair: days in the pivot now carry a version. When a later SmartBI build changes how they are worked out, Repair offers to update them, behind the same tick box and warning as adding them. Until they are updated, Date and the periods in days are off on that database, and the pivot says why.
- Nothing changes on databases that already have days: this build ships the same days, and adding the version rebuilds nothing.
v2026.3 Build 01832026-10-16
Fix for a group data mart stuck at “Checks failed”
Fixed- Group View: a group data mart that stopped at “Checks failed” on a slow category’s stock days should publish again on its next refresh. The mart now multiplies stock and demand the same way as the check it is compared with, so the two agree.
v2026.3 Build 01822026-10-16
Clearer warning for adding days to the pivot
Fixed- Admin → Database Profiles → Repair: the warning for adding days to the pivot now names everything its second part blocks. Besides receipts, that is every other stock posting (invoices, delivery orders, goods received, transfers, stock adjustments) and re-costing past sales.
- The advice beside it now says what the option adds (the Date field and the periods in days) and what it costs afterwards: about 46% more database work for each till line saved, and about 63% more for each re-costed sale. It no longer says the Date field comes in a later update.
- A days build that waited too long for the tills now says nothing is lost and Repair finishes it. Finishing a build whose two parts are already built no longer warns of blocked postings, because that step is quick.
v2026.3 Build 01812026-10-16
Pivot table Date filter fixes
New- Pivot tables: the Date filter now takes its days from a date box (Add), whatever the period, instead of a list of days that could not open over more than three months.
- A typed request can now name a day as 14-08-2026, 14.08.2026, 14 Aug 2026, 14 Ogos 2026 or Aug 14, 2026, as well as 14/08/2026 and 2026-08-14.
Fixed- A Date filter can now hold days far apart (the same day last year and this year, say): its days are read as themselves, up to 92 of them, instead of being refused as a read longer than three months.
- A Date filter whose days all fall outside the table's period now says so under the table, instead of showing an empty table with nothing said.
- A table by Date over months before 1753 is now empty, as it should be, instead of failing with an error.
v2026.3 Build 01802026-10-16
Pivot table sorting fixes
New- A view-only pivot table now says when its columns are ordered by a value ("Columns by Revenue").
Fixed- Pivot tables sorted A to Z by name: a row whose name is blank, or has spaces around it, now sorts as the page shows it (by its code, or its name without the spaces) instead of first.
- Typing a change to a pivot table (for example "only POS") now keeps its rows A to Z by name and its columns ordered by a value, as it already kept a sort by a value.
- With two fields across the top, "Columns by" now orders the first field by its own totals and keeps the second (months, say) in its own order under each, instead of scattering them.
v2026.3 Build 01792026-10-16
Pivot table periods in days
New- Pivot tables: on a company database that has days in the pivot, the period can now be Yesterday, Last 7 days, Last 30 days or Last 90 days, or two dates you pick (Pick dates…), beside every month period.
- Yesterday and the last 7, 30 and 90 days end yesterday: today is left out because its sales are still coming in.
- A long period in days stays quick: the whole months in it are read from the monthly summary, and only the days at each end are read day by day.
- Clicking a figure in such a table says the days it covers, and typing a change to the table keeps its period.
- A pinned tile, a saved table and a scheduled report keep the period, worked out again on the day they are read.
v2026.3 Build 01782026-10-16
Group AI Analyst: top items for larger groups, and clearer answers when it cannot answer
New- Top items now answer for a group of up to about ten large companies (before, about five): each company’s items are added up as they arrive instead of all being held at once. The ranking is the same.
- When the group’s published data cannot be used, the answer says when it was last published.
- A company whose name the AI service cannot take (longer than 120 characters, or with a hidden character) is named, so an administrator can correct it. Before, every group question failed with no reason.
- Every refusal, and the “How this was calculated” panel, now follow the language chosen (English, 中文, Bahasa Malaysia).
Fixed- Cancel while an answer was arriving could leave the page on “Preparing answer” with Ask disabled.
- A saved answer that could not be deleted or cleared said nothing; it now says so and the list is read again.
- After signing out, the next person in the same browser tab could have the previous person’s last answer reopened (the server refused it, but the page showed a “not found”).
- The company picker now takes the question in the box; a question too long is tied to its message for screen readers; “1 second”, not “1 seconds”.
v2026.3 Build 01772026-10-16
Stock that adds up outlet by outlet
New- If your DynaMod costs by location, every stock value now adds up outlet by outlet: each outlet’s stock at its own cost, and a company’s stock is the sum of its outlets.
- Stock below zero at an outlet is shown apart and never subtracted from another outlet’s stock. The notes under the figures say how much.
- The CEO Dashboard’s negative-stock check now looks at each outlet. It may now hold back days of stock until those records are fixed.
- Companies that cost by company see no change.
v2026.3 Build 01762026-10-15
Sort a pivot table by its rows’ names, and its columns by a figure
New- Pivot tables: press the table’s top-left heading (the names of its row fields) to sort the rows by their own names, A to Z; press again for Z to A. Months, quarters, years and days come oldest first; items by their code. “(none)” is always last. Every level of a drill is sorted by its own names.
- A new choice beside Heatmap orders the columns: “Columns in order” (as before) or “Columns by” one of the table’s figures, largest first.
- A pinned tile, a saved table, Export to Excel and a scheduled report keep both orders.
v2026.3 Build 01752026-10-15
Date as a field of the pivot table
New- Pivot tables: a new field, Date, on a company database that has days in the pivot (Admin → Database Profiles → Repair, “Also add days to the pivot”, from Build 0170). Put it in the rows, across the top or in a filter. Revenue, quantity, cost and gross profit are all there by day.
- Year, then Quarter, then Month, then Date: opening a month shows its days, oldest first. A table that begins with Date, or has it across the top, covers at most three months; a longer period is refused with a sentence that says so.
- A figure under a day can be clicked like any other: the panel shows that day’s figures, its breakdown and its transactions.
- On a database without days, Date is not listed, and a saved or pinned table that uses it says what an admin can do.
v2026.3 Build 01742026-10-15
Saving settings on a busy server
Fixed- Setting up, removing or switching on a group data mart, and saving the HTTPS settings, could fail with “could not be saved” on a busy server. SmartBI now waits up to two minutes for Windows to protect the settings file before it saves.
v2026.3 Build 01732026-10-15
Group View values each company’s stock at its own cost setting
New- Group View: if a company’s DynaMod costs by location, its stock in Group Operations and in the group ABC analysis is now valued at its outlets’ own costs, as on the company’s own pages since Build 0161. Each company’s row says which cost it uses and, for a company that costs by location, how many items took the item master’s cost and how many have no cost.
- Companies that cost by company see no change.
- If SmartBI cannot read a company’s cost setting, its row says so and uses the item master’s cost for the moment.
- With the group data mart, a company that costs by location is rebuilt once, at its next refresh.
v2026.3 Build 01722026-10-15
Group AI Analyst: ask about the whole group
New- Group View: a new AI Analyst tab answers questions about the whole group from its published group data: sales (POS and invoices, including sales between group companies), POS gross profit and POS margin on sales with a recorded cost, and the top items by sales value. Ask for the group or company by company, for a period, against the period before, and for the highest, the lowest, or the biggest rise or fall.
- The AI only works out which figure, period and comparison you asked for. SmartBI then calculates every number itself from the group’s published data: no figure comes from the AI. “How this was calculated” shows the definition, the period, the published run the companies were read from and, when you may see SQL on every company, the statements.
- Answers are written in English, 中文 or Bahasa Malaysia, as you choose. A figure that cannot be given honestly is not given, and the answer says why: for example gross profit when recorded cost covers less than 80% of sales. A company whose records do not cover the whole period is listed apart, not ranked, and data older than the group’s freshness limit is said to be so.
- Your answers are saved for 30 days, for you only. Opening one reads it again with your access of that moment. “Open company” puts the question in that company’s own AI Analyst for you to review; it is not sent.
- It needs the Data, Group View and AI Analyst licence, and the AI Analyst on every company of the group with all its stores, salesmen and departments; gross profit and margin also need cost access on every trading company. Groups of 1 to 20 companies. Every company of the group with SAIP settings must share the same SAIP Client ID.
v2026.3 Build 01712026-10-15
Smart-Acc can see who uses SmartBI
New- This server now sends Smart-Acc a daily usage summary: for each user, when they last signed in, which day they were last active, and how many times each screen and key action was used. Counts only: never a question, a filter, a figure or a password.
- Only what people do is counted: background refreshes, such as the AI Analyst panel keeping its history up to date, are not. In the Action Centre, accept, done and dismiss all count as the same key action (action-updated).
- The summary rides the daily check-in this server already makes to the SAIP gateway. Nothing new to install, no new password, no new network opening.
- Sign-ins recorded in this server's audit file since Build 0077 (29 September 2026) are included once, so the history is there from the first check-in after this update.
- The Licence card on the Admin page says what is sent.
v2026.3 Build 01702026-10-14
Repair can prepare a company database for days in the pivot
New- Admin → Database Profiles → Repair has a third box, “Also add days to the pivot”. Ticked, it adds revenue, quantity, cost and gross profit by day to the company database, for the pivot table’s Date field.
- The Date field itself comes with a later update. Until then, adding days only prepares the database, and no page changes.
- Receipts cannot be saved while it builds (seconds to a minute or two on a mid-size company, longer on a large one), so run it outside trading hours. Afterwards, saving a receipt does a little more work. A script that comes with SmartBI removes it at once.
- Test on a profile now also records whether days are there, and the profile’s row offers Repair where they are not.
v2026.3 Build 01692026-10-14
One version report per customer
Fixed- Updates: a server with many company databases for one customer sent the SAIP gateway one version report per database, all at once. The gateway accepts six a minute per customer, so on the demo server 8 of 13 were refused. A server now sends one report per customer, with the database whose semantic views are oldest.
- Updates card: the line “Version reported to the gateway” now says when the gateway did not accept a report, for example “1 report not accepted: HTTP 429”. Before, a refused report was not shown.
v2026.3 Build 01682026-10-14
Click a figure in a pinned pivot table’s Expand view
New- My Dashboard: in the Expand view of a pinned pivot table, every figure can now be clicked to see what is behind it, as on the AI Analyst page: its figures, a breakdown by another field or by day, and the transactions.
- It is read within your own limits, from the tile’s own company database and outlet, like the rest of the view. Listing the transactions needs the “Pivot transactions” permission, as on the AI Analyst page.
- The view is still for looking: it has no “Add as next row level”. To change the table, use “Edit in AI Analyst” on the tile.
- Escape closes the panel first, then the view.
v2026.3 Build 01672026-10-14
Quarter as a field of the pivot table
New- Pivot tables: a new field, Quarter, between Month and Year. Put it in the rows, across the top or in a filter. A quarter reads as “2026 Q3” and is a quarter of the calendar year (January to March is Q1).
- A figure under a quarter can be clicked like any other: the panel names the quarter, and can break the figure down by month. When the table’s period covers only part of a quarter or of a year, the panel says which months.
- AI Analyst: you can also ask for a quarter in words, for example “revenue by quarter this year”, while the pivot table’s field list is open.
v2026.3 Build 01662026-10-14
The AI Analyst can be connected in one visit
New- Once this server is activated, the installer can connect a company database to the AI Analyst from the setup wizard, with nothing to type and no waiting for Smart-Acc. The server makes its own secure key, and your licence decides how many company databases can be connected.
- At the end the wizard checks that the AI Analyst can really read the database, and says so, or says what is in the way.
- Nothing changes for a server whose AI Analyst is already connected.
v2026.3 Build 01652026-10-14
Forecast, Members and Actions say when an AI result is old
Fixed- Trends (AI Sales Forecast), Members (the four AI cards) and the Action Centre (the AI headlines): when the AI could not be reached, these showed its last result as if it were new. A line now says the refresh failed, why, and when the result shown was made. The figures on these pages were never affected.
v2026.3 Build 01642026-10-13
AI Insights asks again when the AI’s answer cannot be read
Fixed- AI Insights: when the AI answered in a form SmartBI could not read, the page showed a technical message such as “Expected ',' or '}' after property value in JSON”, and Retry failed the same way every time. SmartBI now asks the AI once more and tells it how to write the answer. If the second answer cannot be read either, the page says so in plain words.
- AI Insights: when the cards on screen are from the last successful run, because a new run or a Refresh failed, a line above them now says so and why. Before, old cards looked new.
- AI Insights, Dead Stock Scan: the card no longer shows “Clear” for a moment before the scan has answered. A scan that fails now says so, with a Retry button, instead of disappearing.
v2026.3 Build 01632026-10-13
Click a figure in a pivot table to see what is behind it
New- Pivot tables: every figure can now be clicked. A panel opens beside the table with three parts: the figures for that cell, a breakdown by another field, and the transactions the figure is made of.
- Break down by: choose a field, such as Item or Salesman, to see the figure split by it. Click a row to narrow the panel to it. “Add as next row level” puts that field into the table itself and opens the row you clicked.
- Transactions: the sales documents behind the figure, largest first, with the date, the document number (with a copy button), the outlet, the item, the quantity and the revenue. Above the list the panel says how many lines there are and what all of them add up to, beside the figure. Cost, gross profit and customers are shown only to users who may see them.
- Break down by Day shows the same transactions added up by day.
- A figure made of more than 20,000 lines is not listed. The panel says how many lines it has and asks you to pick a row in the breakdown first.
- Listing transactions needs the “Pivot transactions” permission (Admin, Users, Access; added in Build 0162). A user without it still sees the figures and the breakdown.
v2026.3 Build 01622026-10-13
Groundwork for clicking a pivot figure to see what is behind it
New- Admin, Users, Access: a new permission, “Pivot transactions”. It decides who may list the sales documents behind a figure of a pivot table. It is on by default for an admin, and for a manager, finance or viewer user who has AI Chat, no limit set on them and every measure. For everyone else it is off until an admin grants it.
- The server can now answer what is behind a pivot figure: its figures with a breakdown, and the document lines the figure is made of. Nothing on the pivot page uses this yet. The panel that shows it comes in the next build.
v2026.3 Build 01612026-10-12
Stock valued at each outlet’s own cost, when DynaMod costs by location
New- If your DynaMod costs by location, stock on hand is now valued at its outlets’ own costs. Before, every outlet used the one cost on the item master. You will see it in Operations (stock value, and the cost in the stock list’s Excel export), dead stock, the ABC analysis and the CEO Dashboard. If your DynaMod costs by company, nothing changes.
- Where an outlet has no cost for an item yet, SmartBI uses the item master’s cost there. Operations and the dead stock card tell you how many items were valued that way, and how many have no cost anywhere and count as zero.
- If SmartBI cannot read the cost setting from DynaMod, Operations, dead stock and the ABC analysis say so and use the item master’s cost for the moment. The CEO Dashboard keeps the figures it had and offers Retry.
- Group View: the Group CEO page follows each company’s setting. The group’s Operations and Analyses pages still use the item master’s cost. That comes in a later update, so until then a group figure and the company’s own page can differ. The AI Analyst also still uses the item master’s cost for stock value.
Fixed- Dead stock: for up to five minutes, a user without cost access could be shown the cost figures another user had just loaded, and the other way round. Each user now gets their own.
v2026.3 Build 01602026-10-12
SmartBI says which cost it uses, and which day a below-cost loss came from
New- SmartBI now says which cost a figure uses. If your DynaMod costs by location, it is each outlet’s own cost. Otherwise it is the company’s cost. You can see it on the “Items sold below cost” card, in the Dashboard’s Gross Profit tooltip, and in the Members margin note.
- Action Centre, “Items sold below cost”: when one day carries half or more of the loss on the items listed, the card names that day, its share of the loss, and the promotions that ran on those sales.
- The card also says how the below-cost sales with no promotion were priced: under the outlet’s price today (the price was changed for a time), or at today’s price.
- If DynaMod still has items waiting to be re-costed, the card says so, because the cost on recent sales can still change.
v2026.3 Build 01592026-10-12
Demo Mode can be switched off
New- Admin: a new “Demo Mode (this install)” switch. When it is off, the Data Source page no longer offers “Demo Mode (Mock Data)” or “Continue with Demo Data”, nothing is pre-selected, and the top bar says “Not connected” until a company is opened. Customers sometimes opened Demo Mode by mistake and read its sample figures as their own.
- After this update the switch is OFF on every server. For a Smart-Acc sales demo, open /admin and turn it on once; it stays on through later updates.
v2026.3 Build 01582026-10-12
Send a suggested branch transfer to DynaMod as a Stock Transit
New- Action Centre, Slow movers: an administrator can now send one suggested branch-to-branch transfer to DynaMod as a Stock Transit. Accept the action, press Send to ERP, choose one route, and check every line before you confirm. The transit is posted when you confirm, and the receiving branch completes it in DynaMod with a Stock Transfer receive.
- What you review is exactly what is written. SmartBI 360 reads the stock again when you open the review, then sends that review and nothing else. The document carries the DynaMod user of the person who reviewed it, and DynaMod gives it its own number.
- Nothing is ever sent by itself. One confirm sends one route. If the result cannot be confirmed, SmartBI 360 says so and lets you retry the same send, which can only find or finish the same document. A document that was created but not posted keeps its number and can be posted again from the same screen.
- An item whose stock code or unit SmartBI 360 cannot be sure of is left out of the review and counted, so you can check it in DynaMod. The transfer proposal spreadsheet shows each item’s unit when SmartBI 360 could read it.
- A route you have already sent shows its last send, with the document number, the date, the units and who sent it, before you send it again.
- Setting up, for administrators: each company connection needs its ERP audience and signing key version from your Smart-Acc operator (Admin, Database Profiles), and each person who sends needs their DynaMod user ID linked for that company (Admin, Users & Access). Sending needs an activated licence, and works from a single company, not from a group.
- The note on the Action Centre now reads: “SmartBI 360 writes to your ERP only when an authorised user reviews and confirms exactly what will be sent — nothing is ever sent automatically.”
v2026.3 Build 01572026-10-11
The Updates card shows each update when it happens
Fixed- Admin → Updates: the Recent list now shows an update as soon as it has finished. On some servers every update appeared one update late, so the list did not show the update that had just run.
- If the connection drops while “Update now” is starting, the page no longer says “Update failed to start”. It says the connection was lost, keeps checking, and then shows what happened: updated, or the server’s own reason if the update did not go ahead.
- A card opened while a release is being fetched and checked says so, keeps checking, and does not offer “Update now” a second time. A reason left over from an earlier failed try is no longer shown under an update that is running.
v2026.3 Build 01562026-10-11
Group View keeps up when costs are posted late
Fixed- Group View: when a purchase is keyed late, the cost of sales already made in an earlier month changes. The group’s figures then stopped updating until that company was repaired, which could take hours on a busy group. SmartBI 360 now sees the changed cost at the next refresh and reads that month again straight away.
- On a group that often keys purchases late, a refresh reads more than before and can take longer. The group’s figures still show the time they were read.
v2026.3 Build 01552026-10-11
More fields in the pivot table: your own item groupings, and figures per unit
New- AI Analyst pivot table: you can now group by the ways your company files its items in DynaMod: Stock group, Brand, Colour, Size, Stock type, your UD groups and your extra groups. Only the ones your items actually use are listed, so the list follows your own database.
- An extra group that you named in DynaMod carries that name here.
- Items with no brand (or no stock group, and so on) are shown together as “(none)”, so every table adds up to the same total.
- Three new values: Average price (revenue divided by quantity sold) for everyone, and Cost per unit and Profit per unit for those who are allowed to see cost.
- The new fields work wherever the others do: filters, sorting, opening a row, Export to Excel, Copy prompt, pinning to My Dashboard, and typing what you want in your own words.
Fixed- A code that DynaMod’s own list writes slightly differently from the items (a space at the end, or capital letters) now shows its name instead of its code.
- In a pivot table with a field across the top, a figure is no longer left out of its column when DynaMod holds the same code written in two ways.
v2026.3 Build 01542026-10-11
Group View keeps itself up to date
Fixed- Group View: the group’s figures could stop updating for days, and Group analyses then showed “A member refresh is older than the freshness threshold”. It happened after a document in one company was moved to another month or deleted. SmartBI 360 now notices this at the next refresh and corrects the group’s figures by itself.
- If a company’s figures still do not match its own database, the next refresh checks that company in full and repairs what differs. Admin → Groups says so beside the run.
- A group of many companies now shows its checked figures as soon as they are ready. Before, a refresh that took longer than 30 minutes was never shown, and a shorter one was shown for a few minutes only.
- The time shown with the group’s figures is still the time they were read from each company.
v2026.3 Build 01532026-10-10
Update now unpacks the release itself and checks every file
Fixed- Admin → Updates: “Update now” no longer starts a separate Windows program to unpack the release. SmartBI 360 unpacks it itself, so that program can no longer stop an update before it begins. On one server it did, and the page could only say “Command failed”.
- Every unpacked file is checked against the release’s own list before anything is installed. If a file is damaged, cannot be written, or is emptied or removed by another program, the update stops and names the file. Before, such an update could carry on with a file missing.
- An update no longer fails with “Illegal characters in path” on a server whose “SmartBI Server” task has its program written in double quotes, as Windows writes it when someone browses to the file.
v2026.3 Build 01522026-10-10
A pinned pivot table keeps its levels
New- My Dashboard: “Expand” on a pinned pivot table now opens the whole pivot table. Open a row to see what is inside it, for example a category and then its items, as in AI Analyst.
- It is read fresh each time, within your own limits: your own outlets, and without the figures you are not allowed to see. The view says which figures it left out.
- The view is for looking only. To change the table, use “Edit in AI Analyst” on the tile, as before.
- The tile itself, its Export to Excel, Send and scheduled reports are unchanged: they show the table’s first level.
v2026.3 Build 01512026-10-10
See balances between group companies
New- Group CEO: Between group companies shows how much of the month-end receivables and payables is with the group’s own companies. Outside balances appear when the administrator has declared the account map complete.
- See what each company’s books report and the difference where both books are available. Missing books and accounts not read yet are explained; the cards and trend keep their existing figures.
- Excel adds a Between group companies sheet with the same balances, company list and explanations as the page. Refresh the page before exporting if its figures or account map have changed.
v2026.3 Build 01502026-10-10
A group that cannot be opened no longer locks you out
New- Admin → Database Profiles: before you switch off or delete a database that is a company in a group, SmartBI 360 asks first, names the group, and says the group cannot be opened meanwhile.
Fixed- If the group you had open cannot be opened, for example because one of its companies was switched off, SmartBI 360 now opens as usual and tells you why, in English, Malay and Chinese, naming the company. Before, the page did not load at all.
- From that message you can open one of your own companies and carry on. Nothing is chosen for you, and the group’s figures stay hidden until the group can be opened again.
- The same holds when the group was deleted, when its company roles are no longer confirmed, or when one of its companies is no longer assigned to you.
- Data Source: a group with a switched-off company stays in the list and says why it cannot be opened.
- Signing in no longer says your browser refused the sign-in cookie when the cause is something else.
v2026.3 Build 01492026-10-08
Type what you want and get the pivot table
New- AI Analyst: while the pivot table’s field list is open, type what you want to see, for example “revenue by outlet then category, last 3 months”, and the pivot table is built for you. Use Undo above the table to go back.
- When you name something, such as an outlet or “POS only”, it becomes a filter. If a name is not found, or matches more than one, the answer says so and you can pick it in Filters.
- A request the pivot table cannot show, such as customers or stock on hand, is answered by the AI Analyst as before.
v2026.3 Build 01482026-10-08
Pin a pivot table to My Dashboard
New- Pivot table: “Pin” puts the table you built on My Dashboard. The tile keeps how the table is laid out, not its figures, so it shows fresh figures each time it is opened.
- Everyone who opens a pinned pivot table sees it within their own limits: their own outlets, and without the figures they are not allowed to see. The tile says which figures it left out.
- On a pinned pivot table, “Edit in AI Analyst” opens the table again. Change it, then “Update tile” saves the change to the same tile, or “Pin as new” keeps both.
- A pinned pivot table can be expanded, exported, sent, and put in a scheduled report like any other table tile.
v2026.3 Build 01472026-10-08
Pivot table: reads you no longer need are stopped
New- Pivot table: a filter’s list shows a value’s code beside its name where the name does not already show it, for example “KL Sentral (KL01)”, so a value you found by typing its code is easy to recognise.
Fixed- Pivot table: when you change the table, keep typing in a filter’s search, or close its list, the read you no longer need is stopped on the database instead of running to its end.
- “Show the next” in a filter’s list says how many values come next.
v2026.3 Build 01462026-10-08
Group CEO trends by month
New- Group CEO: compare balances and days across the months held by every counted company. Charts show available figures; the expandable monthly table explains all eight figures, including withheld values and posting counts.
- Excel adds a Group trend sheet after the existing six. If an earlier month changes after the page loads, refresh the page before exporting.
Fixed- A withheld group figure now gives only the reasons that apply to that figure. A user without the cost right no longer sees cost reasons on company rows.
v2026.3 Build 01452026-10-08
One update channel
New- Updates come from the Smart Storage Platform only. If it cannot be reached, Check for updates and Update now say so in red, and nothing else is tried.
Fixed- An update check no longer falls back quietly to the retired Smart-Acc FTP when an older .env still holds its password. Those FTP lines and SMARTBI_UPDATE_SOURCE are ignored and can be deleted; SMARTBI_UPDATE_SOURCE=FTP earns one warning line at boot.
v2026.3 Build 01442026-10-07
Pivot filters find any value by name
New- Pivot table: the search box in a filter now looks through every value of that field, by its code or its name, not only the 200 listed first. Type part of an item’s name or code, tick what you want, and search again for more.
- The boxes you ticked stay ticked while you search, and the list says how many are chosen.
Fixed- Pivot table: “Try again” in a filter’s list appears only when trying again can help.
- The folded conversation strip now says “Conversation”. While you drag a field, a zone lights up only if it can take that field.
- Keyboard users: after switching between an answer and the pivot table, or closing a filter’s list, the focus is on the control that takes you back.
- Pivot table on the AI Analyst page: a chosen store is shown by its name.
v2026.3 Build 01432026-10-07
Group CEO for daily use
New- Five minutes after a restart, SmartBI prepares missing company summaries for confirmed groups whose CEO page was opened in the last 14 days. The first open after installing this build still prepares its summaries once. Admin can turn preparation off and see its progress and recent runs.
- Export the Group CEO page to Excel, including company comparisons, reasons for withheld figures, definitions and computation dates. The file follows your current access and licence. If figures or their status changed after the page loaded, refresh the page and export again.
Fixed- While summaries are preparing, each Group CEO card states how many counted companies are still missing. Permission-only cards explain the permission required.
v2026.3 Build 01422026-10-07
Pivot table on the AI Analyst page
New- AI Analyst: a pivot table you build yourself. Open “Pivot table” on the left, put fields into Rows, Columns, Values and Filters (drag them, or tap a field and then a zone), and the table is read from your sales by item. No AI is used, so it is quick and it costs nothing to change.
- Open a row to see what is inside it, sort by any value, switch on the heatmap, undo a change, copy the table’s description, and export what is on screen to Excel.
- Users limited to certain outlets, salesmen, departments or companies can use the pivot: it shows them only what they are allowed to see. Admins can switch it per user under Access (“Pivot tables”).
v2026.3 Build 01412026-10-06
Licence card and activation
New- A server that counts as an existing customer is recognised by itself and carries on as before, with no code to enter. Any other server shows an activation code, and keeps full use for its first days while the code is approved.
- Admin has a new Licence card. A new server shows a short activation code; when Smart-Acc or your dealer approves it, the card shows who the server is licensed to, the days left on a trial, the users and company databases in use, and your dealer.
- Administrators see a banner when the server needs activating, when a trial is in its last 7 days and when a renewal is due.
- When a free trial ends, AI, alerts and scheduled emails pause and a banner says so. Dashboards stay open for a few more days; after that the server shows a licence page until the trial is continued. A paid licence that is not renewed pauses AI, alerts and scheduled emails and keeps its dashboards.
- Nothing is deleted. Continuing or renewing brings everything back at the next refresh, with no reinstall.
- Adding a user or a company database beyond what the licence allows is refused. Nobody already using SmartBI is locked out.
v2026.3 Build 01402026-10-06
Group data marts publish again on larger groups
Fixed- On a group of many companies the group data mart could stop publishing. Every refresh ended with “Checks failed” and “A database request timed out”, Group View said a member refresh was older than the freshness threshold, and Group analyses were unavailable. The low-stock count that each refresh works out for a company ran longer than five minutes. It now takes a few seconds, with the same result.
- Nothing needs to be set up or repaired. After the update the mart refreshes on its usual schedule.
v2026.3 Build 01392026-10-06
Compare working capital across your group
New- Group View now has a CEO Dashboard: compare each company’s own figures for the group month, see which companies hold a figure back, and open a company’s CEO page for detail.
- Group balances and day counts use every counted trading and warehouse company’s underlying parts. A missing part or mixed or unknown currencies withholds the group figure with an explanation. Receivables and payables include balances between group companies; no balances are eliminated.
- Last computed figures stay visible with their dates while summaries refresh, with progress and a retry for failures. Services companies have their own rows; masters-only companies are not applicable.
Fixed- A Group CEO summary that could not enter the queue, waited too long, or lost access before starting can be requested normally again. A failed calculation still needs Retry.
- The Group CEO page shows why figures are withheld, how many companies are affected and their names, before the company comparison. Cards and company rows show the reasons without opening details.
- The company CEO export button is hidden inside a group drill, where export is unavailable.
- The CEO question language stays selected when you leave and return during the same signed-in session.
v2026.3 Build 01382026-10-06
Faster product reports for companies with many invoices
New- Admin, Database Profiles, Repair can build an invoice sales summary: ready-made monthly totals of invoices, debit notes, credit notes and refund notes. Product, category, salesman and gross profit reports, and the AI Analyst’s item sales answers, then read the summary instead of every document line. No figure changes.
- It is optional. Test on a profile counts the document lines. From 500,000 lines the profile row shows a Repair button and Repair offers the summary; from 1,000,000 it recommends it. Tick “Also build SmartBI’s invoice sales summary now” to build it.
- While it builds, invoices, then debit, credit and refund notes, cannot be saved, one document type at a time. Reports keep working. Run it outside trading hours. Repair lists any stored procedure, trigger or function that could stop saving documents once the summary exists, or says that it could not check.
- A company that has the summary keeps a Repair button on its row. Repair checks with the admin login that the summary is in use, reconnects it in a moment if a views upgrade left it unused, and removes it if it is damaged so that reports work again.
v2026.3 Build 01372026-10-05
Ask about CEO figures and review working capital
New- CEO Dashboard question buttons in English, Chinese and Malay open the AI Analyst page with an answer from the same prepared figures, with their source and dates. They follow your CEO and chat access and do not use a model to calculate numbers.
- Action Centre adds Supplier terms and Payables hygiene. Review supplier terms against selling time and reconcile current unapplied payable balances. The age of unapplied credits is unknown; measured outcomes are changes, not promised savings.
- Create a CEO cash cycle alert for a change of at least your chosen number of days, longer or shorter, between consecutive closed months. The suggested rule is 5 days at 09:00 daily, with one notice per qualifying month pair and no repeat reminders.
v2026.3 Build 01362026-10-05
The AI Analyst gets its own full page
New- AI Analyst is now a page in the side menu. The answer fills the centre of the screen as a table, pivot or chart at full size, with every loaded row. The conversation sits in a column on the right.
- The question box grows from one line to six. Enter sends; Shift and Enter starts a new line.
- Focus folds the conversation so the answer takes the whole window. The column can be dragged wider or narrower, and the choice is remembered. On a phone or tablet a switch shows either the result or the conversation, and the result scrolls as one page.
- All questions opens a list of the questions the AI Analyst has been taught for your company, grouped by topic, with a search box, and the questions you asked recently. Press a question to ask it, or the pencil to change it first. The full list appears once the Smart-Acc AI platform has been updated; until then the page offers starter questions.
- Copy question copies the question behind the answer on screen.
Fixed- Dashboard, Inventory, Members and the other pages now use the full width. The AI Analyst side panel no longer sits beside them; "Ask the AI Analyst" buttons and Ask AI in the top bar open the AI Analyst page.
- Confirming Chinese text in an input method no longer sends the question early.
v2026.3 Build 01342026-10-05
Repair no longer reports a sign-in failure on a busy server
Fixed- After a successful Repair on a slow or busy SQL Server, the last step could say “the profile’s own login still cannot sign in” although the login had signed in and the repair was complete. That step now waits up to a minute. If the server still does not answer, Repair says so and asks you to press Test, without calling it a sign-in failure.
v2026.3 Build 01302026-10-04
Gross profit counts each sale’s stock cost once
Fixed- A cash sale made from a delivery order had its stock cost counted twice, so gross profit read too low on the Dashboard, in Insights, on the CEO stock pages and in AI Analyst answers. Only companies that make such sales were affected. For every other company no figure changes.
- The correction needs a one-time database upgrade (semantic views v6): Admin → Database Profiles → Repair, or Admin → Semantic Views → Upgrade to v6. Run it after closing. While it runs, sales and stock postings cannot be saved, and product pages and gross profit are unavailable.
- Members → promotion margin and Action Centre → below-cost sales counted those same sales twice. Both are correct as soon as this update is installed, with no database upgrade.
- Group View: upgrade every company of a group in the same after-hours window. While some companies are upgraded and others are not, group gross profit and the group analyses are withheld.
v2026.3 Build 01272026-10-04
Updates recover stranded server processes
Fixed- A failed update or rollback re-enables the server task, including when the old server cannot be stopped and keeps serving. The update still reports failure.
- Updates and rollback stop every server process belonging to this install, including copies that are no longer listening. Other installs and other programs are left alone.
- The watchdog gives the server at least ten minutes to start and leaves an update in progress alone. Recovery failures are logged; a deliberately disabled task remains stopped.
- Server cleanup logs failure reasons and checks every candidate. An update stops if its server cannot be stopped; the watchdog recognizes only this installation's updater. A Ready task can still start after a failed cleanup check.
- SmartUpdater launches the correct PowerShell on 64-bit Windows, and hidden elevated updates keep their output in the update log.
- A server that cannot bind its port now records the reason in crash.log and exits immediately.
v2026.3 Build 01262026-10-04
Promotion and regular line sales across the group
New- Group analyses → Promotions compares promotion and regular line sales, promotion share and recorded-cost margins for each company, the group and the most promoted items. The Members promotion window and cost-coverage setting are reused; margins below the coverage threshold state why they are unavailable.
- Promotion margins and cost coverage use the existing group cost and gross-profit access rule. Sales remain visible without those grants. Batch names and mechanics remain a later phase; the existing Members batch cards describe a different population.
Fixed- Promotion coverage measures the promotion window. Invalid promotion rows make only Promotions unavailable, preserving other mart pages. The item count uses promotion wording. Group Members now points to the available RFM, win-back and line-level promotion analyses.
v2026.3 Build 01252026-10-04
CEO Dashboard: cash-only buyers keep their cycle
Fixed- A company that pays its suppliers in cash, with no payables and no supplier invoices, shows days payable as 0 and keeps its cash conversion cycle. Since Build 0122 the cycle was withheld for such a company.
- When a month’s supplier credit notes reach or exceed its invoices, Data health says so, instead of “no supplier invoices posted”.
- Cost of sales also leaves out supplier debit note lines for NON-STOCK and SERVICE items that post to purchase accounts, the same documents days payable count.
v2026.3 Build 01232026-10-04
Data Source waits for your account details
Fixed- When your account details did not load, the Data Source page showed every database, the Login button and the admin link to everyone, and a user who is not an administrator then got "Access denied — capability profile.switch required." when pressing Login. The page now says "Your account details did not load" with a Retry button, and offers no database until they load. After a successful Retry, a user who is not an administrator goes straight to the database an administrator has connected.
- While the account details are still loading, the page shows "Checking your account…" instead of controls that may not apply to you.
v2026.3 Build 01222026-10-04
Days of stock on stocked cost of sales, days payable on credit purchases
Fixed- Days payable (DPO) now divide average payables by credit purchases (supplier invoices and debit notes less credit notes) instead of cost of sales, so every company’s DPO changes, most where stock is building up or running down. Days payable no longer wait for sound stock records.
- Days of stock (DIO) and cost of sales leave out supplier lines for items DynaMod types NON-STOCK or SERVICE that post to purchase accounts. Data health says how much was left out over the 12 months.
v2026.3 Build 01182026-10-03
Clearer AI Analyst query failures
Fixed- When an AI Analyst query fails, the chat now says there is no live result and suggests rephrasing or Rerun. Database diagnostics, including those appended to access or safety guidance, stay in collapsed Technical details for users who can already see SQL. The guidance itself stays visible in plain language.
v2026.3 Build 01172026-10-03
CEO figures on your dashboard and in Excel
New- Five company-wide CEO tiles in the Gallery and My Dashboard: cash conversion cycle, receivables aging, payables aging, supplier payment gap, and slow and dead stock. Each keeps the CEO Dashboard’s access rules, source dates and data-health qualifications.
- Export the CEO Dashboard to one Excel workbook with fourteen sheets, including Data health and Formulas. Page downloads and WhatsApp Excel keep every eligible row; CEO email attachments keep up to 5,000 rows per table and state any omitted rows.
- CEO tiles work with existing email now, scheduled email, and WhatsApp picture, PDF and Excel preparation. Demo Mode uses the computed sample. Preparing or failed figures are labelled clearly.
Fixed- CEO definitions keep the stocked-items rule in the page and every export. Unchanged background polls reuse the prepared WhatsApp picture, whose time comes from the oldest displayed computation.
- CEO export notes distinguish access, unavailable figures and empty results. Email row-limit notes keep the original caveats. CEO page downloads share the existing one-active-file and 30-per-hour allowance.
v2026.3 Build 01162026-10-03
CEO Dashboard counts stocked items only
Fixed- The CEO Dashboard measures stock the way DynaMod's stock closing does. Items typed NON-STOCK or SERVICE, such as a delivery fee sold but never received, no longer count as negative stock, and are left out of the month-end stock rebuilt from the stock card, the stock turn, dead stock, cover days and the supplier gap. Data health says how many such items were left out.
v2026.3 Build 01112026-10-03
Older company departments and a clear DynaMod minimum
New- Group data health and Check first explain when a company does not record stock departments. Stock departments need DynaMod 2025.2 or later; department-scoped figures contain no rows for an older company. These notices stay in data health and Check first, outside Insights and tile notes.
Fixed- The group mart accepts a missing stock-department column as not recorded. This optional-column change keeps existing extraction behavior for companies with departments; the companion low-stock update refreshes only its changed datasets and reuses other history.
- Semantic-view installation and Admin Repair require DynaMod 2024.3 or later. An older database gets a plain message showing its version before any users or views are changed. Check first and Setup Pack also refuse unsupported databases. Failed version queries are reported separately from missing versions.
v2026.3 Build 01102026-10-03
Group data mart runs explain their outcome
New- Admin → Groups now explains the latest mart run and shows the same reason beside each recent run, with an action to take. On small screens, each run uses labelled fields.
- A loaded snapshot held back by freshness or missing company refreshes keeps its reason after a restart. SQL errors get plain explanations; raw SQL error text is never displayed or saved.
Fixed- An older mart remains readable in the status panel while its next refresh adds the new reason field. Runs that published before follow-up work failed say both what succeeded and what needs attention.
- Mart builds can prepare low-stock counts again, using the same rule and cover-days setting as company pages. The upgrade rereads only the invoice and credit-note datasets that gained columns and loads the new debit/refund datasets; unchanged sales history keeps its normal reuse. Run history identifies a dataset or member reload when one is required. Expected dataset reloads do not inflate nightly repair counts.
v2026.3 Build 01092026-10-03
Safer dashboard sending and sharing
Fixed- Pictures refresh up to eight displayed tiles, three at a time, and show the oldest data fetch time. Refresh failures and access refusals are labelled accurately. Prepared pictures are reused regardless of PDF language.
- File preparation allows one active request and 30 attempts per person per rolling hour. Format and language wait until preparation finishes. Cancelling frees the active slot immediately while the old build stops at its next checkpoint. File refusals are audited. Oversized Excel sheets are refused clearly.
- Email now shows per-tile reasons even if every tile fails, with a friendly message for database connection or login failures. It prevents an accidental repeat until recipients or the note change. Saved-schedule Send now shares the 20-email hourly allowance; busy refusals use no slot.
- Sending or sharing dashboard tiles also requires the My Dashboard access permission. Picture refusals show the correct reason; unexpected email failures are audited without private error details.
- Older phones can prepare WhatsApp messages. Pictures decode insight text correctly, midnight SQL dates use calendar dates while other times keep full ISO timestamps, including scheduled-email bodies and attachments. Invisible PDF controls no longer refuse a report.
v2026.3 Build 01032026-10-02
Group Overview keeps sales while low stock is checked
Fixed- Live Group Overview keeps company figures and group sales totals when a low-stock check is still being worked out or fails. Only the affected low-stock count is unavailable, with its reason beside the figures. The group low-stock total appears once every retail company has a count.
v2026.3 Build 00992026-10-02
Repair offers the members index on healthy databases
Fixed- Admin → Database Profiles: a database that needs nothing else now shows a plain Repair button when SmartBI's members index is missing, so the "Also add SmartBI's members index now" tick in the Repair dialog can be reached. Press Test on the profile once after updating so SmartBI notices the missing index.
v2026.3 Build 00982026-10-02
Sales by salesman by product now includes invoice sales
New- Semantic views v5: product sales from invoices, debit notes, credit notes and refunds now carry the salesman on the bill, as till sales always have. SmartBI's sales by salesman by product, brand or category now include invoice sales for companies that sell on invoice. The AI Analyst already answered these questions from the invoices themselves, so its answers do not change.
Fixed- A salesman who can see only their own sales now sees their invoice sales in ABCD and in the product parts of Forecast and Insights; before, only their till sales showed. Their revenue cards and revenue trend still count till sales only, so on a company that sells on invoice their revenue total will not yet equal the sum of their product revenue.
- Admin → Repair offers "Upgrade to v5" on a database already on v4. It takes seconds and does not affect sales posting.
v2026.3 Build 00972026-10-02
Faster member scoring on large databases
New- Repair in /admin can now add an index that makes member scoring fast on large sales databases. Tick it in the Repair dialog and run it outside trading hours: receipts cannot be saved while it builds.
v2026.3 Build 00932026-10-01
Tidier user rows: a More menu in Users & Access
Fixed- Admin → Users & Access: each user's row now shows Access and Reset password…; Require new password, Sign out everywhere, Shared login and Delete are under More ▾, with Delete last and set apart. The alert-email box keeps its full width, "Save Email" stays on one line, and on a phone nothing runs off the edge of the card.
v2026.3 Build 00902026-10-01
True last-sale dates on the ABCD page
New- Inventory → ABCD shows the real number of days since each item last sold. Before, it counted from the 1st of the month of the last sale, so on 30 September everything sold that month showed 29.
- Admin → Semantic Views upgrades a database to v4, which adds the daily sales views these dates come from. Sales posting pauses while the new index builds (about 4 minutes on a 10-million-receipt database, measured in a simulation; confirm before upgrading a large database), so run it outside trading hours.
Fixed- A database that is not upgraded yet shows the month of the last sale ("Sep 2026") instead of a day count that looked exact but was not, with a note saying how to get exact dates.
- Group View keeps showing group gross profit and group analyses while some companies are on the new views and some are not. Group ABCD stays month-level.
v2026.3 Build 00892026-09-30
My Dashboard shows which outlet each tile covers
New- Every tile on My Dashboard now shows the outlet it covers (📍 All outlets, or the outlet it was pinned for). A pinned tile keeps that outlet: choosing another outlet at the top does not change it.
- While an outlet is chosen, My Dashboard says so: pinned tiles keep their own outlet, tiles added from the Gallery cover all outlets, and the chosen outlet applies to the AI Analyst, Dashboard, Inventory, Sales Trends and Insights. Before, switching outlets on My Dashboard changed nothing on screen and nothing said why.
v2026.3 Build 00882026-09-30
CEO Dashboard waits for the month to end
Fixed- On the last day of a month, the CEO Dashboard treated that month as finished while its sales, receipts and bills were still being posted, so its figures moved during the day. The headline now stays on the month before until the last day is over, as the dashboard was designed to; the new month appears the next morning. A restored copy of a database whose data ends on a month-end still shows that month.
v2026.3 Build 00872026-09-30
One low-stock rule: the count, Reorder Alerts and the Action Centre agree
New- Tap the Low Stock count on the Dashboard to see exactly the items it counted. The list opens and shows every one of them; "Show all" does the same.
Fixed- Reorder Alerts lists the items that are really running low: the next 7 days of sales are more than the stock left, or the stock is at or below the reorder level set in DynaMod. It showed the 4 fastest sellers that had a reorder level, low or not, so an item with 434 in stock against a reorder level of 20 was marked CRITICAL.
- The count and the list use the same rule and the same outlet filter. The count had a rule of its own and ignored the outlet you picked, so it could say 1 while the list showed something else.
- Each card says how many days of stock are left, "Out of stock", or "At or below your reorder level", with the real daily sales. The daily figure used to divide two months of sales by 30, doubling it.
- Invoice sales count too: wholesale companies now get restock alerts, and items sold mostly on invoices are no longer missed.
- The Action Centre's Replenishment risk check uses the same rule and no longer needs a reorder level in DynaMod (many databases set none, so it never raised an alert there).
- Items with negative stock are left out and counted separately, with a note to check their stock records. A slow item that sold a few units and ran out is no longer flagged CRITICAL.
- The stock check runs in the background. On a large database the first one can take up to a minute; the card says "Checking stock…" meanwhile, and a pinned Reorder Alerts tile says it is still checking instead of showing an empty table.
v2026.3 Build 00862026-09-30
Action Centre loads again; no demo data on your Inventory page
Fixed- The Action Centre no longer stays on its grey loading cards. The "Items sold below cost" check read far more stock history than it needed, so on a large database it never finished and the page waited on it every time. It now finishes in seconds and finds the same items.
- Inventory → Inventory Value by Category never shows sample data on a live database. When the category figures could not be loaded, the page showed the demo shop's Bakery, Beverages, Health Foods and Dairy cards, which looked like another business's stock. It now says the figures are unavailable, with a Retry button, or that there is no stock to group.
v2026.3 Build 00842026-09-30
Whole-month revenue charts; faster, complete stock pages
Fixed- Stock pages are fast again. Build 0079 picked each item's base unit with a check that ran once per item, so ABCD took three to six times longer on some databases and timed out on one. It now reads the base units once, for Inventory, ABCD, Dead Stock, reorder and low-stock alerts and the Action Centre.
- Company-wide stock now comes from DynaMod's own company balance. On a few databases DynaMod's per-branch table is missing items its company balance has, so adding up the branches came out short (81 items at one customer). Choosing a branch still shows that branch's stock.
- The Monthly Revenue charts on the Dashboard and Trends pages now cover six calendar months: this month so far and the five full months before it. They used to start exactly six months back to the day, so the first bar held only the last few days of its month. On 30 September that was a "March" made of 30 and 31 March, which looked like sales had collapsed, under a "6 Months" title with seven bars.
- The month-on-month growth figures on the Trends page no longer start from that part month, which showed a very large jump for the month after it.
- The same correction reaches the Revenue Trend tile on My Dashboard and the monthly chart in Group View, which read the same figures.
v2026.3 Build 00792026-09-30
Stock counted in each item's own unit; dead stock follows the CEO rule
Fixed- Stock on hand is now DynaMod's own balance in each item's base unit. DynaMod keeps a separate running total for every unit an item moves in (PACK, BAG, PCS). SmartBI read only one of them, and the Dead Stock card added up only the positive ones, so an item bought in bags and sold in packs could show 172,800 on hand while it had none. Inventory, categories, stock on hand, reorder and low-stock alerts, the Action Centre, ABCD, Group View and the CEO Dashboard now all read that balance.
- Dead Stock follows the CEO Dashboard's rule: goods with stock, no sale on the till, an invoice or a delivery order in 3 months (the card shows the date), and first stocked more than 90 days ago. It read the till only, so items sold by invoice or online were listed as dead. Fees, charges and service items are left out.
- The Dead Stock card counts and values every flagged item, not only the 20 it can list, and says what the value is: capital at cost for users who may see cost, otherwise stock at selling price. It said "Capital tied up" but multiplied by the selling price.
- Sales speeds on Inventory, Reorder Alerts and the Action Centre now add up sales in every selling unit (one bag of 50 counts as 50 packs).
- The CEO Dashboard values stock at the cost of each item's base unit. An item also sold by the metre was valued at the cost of one metre.
- Group View: a group that reads from its data mart shows dead stock as unavailable for now. The new rule needs delivery orders and stock-card receipts, which the mart does not hold yet; each company's Insights shows its dead stock. Group dead stock stays valued at selling price.
v2026.3 Build 00772026-09-29
Change your own password
New- Everyone can change their own password: tap your name (or the menu on a phone) and choose Change password. New passwords need at least 10 characters with a letter and a number.
- New and reset logins now get a temporary password: it works once, expires after 7 days, and SmartBI asks the person to choose their own password at first sign-in. The admin page shows a Copy message button with a ready-to-send private handover text.
- Admin levers per user: Require new password, Sign out everywhere, and a Shared login switch for demo counters (their password is managed by the admin).
Fixed- Resetting a password now signs that person out on every device — before, an old sign-in kept working for up to 7 days after a reset.
- Sign-ins and every password change or reset are now recorded in the audit log (never any password text), and passwords typed by an admin are no longer shown back on screen or accepted from the admin page — SmartBI generates them.
- Usernames no longer fail to sign in over capital letters: a phone that auto-capitalises first.surname still matches, as long as only one user fits.
v2026.3 Build 00762026-09-29
Counts shown as numbers, a fair weekday basket
Fixed- Transaction counts now show as numbers with thousands separators (11,477), like revenue: in pinned AI Analyst tiles, the Day-of-Week Pattern tile, report emails, PDF and Excel. They showed as plain text (11477), and Excel saved them as text cells.
- The Day-of-Week Pattern's average basket is now each weekday's revenue divided by its transactions, counting days up to today. On Smart Retail Mart, two invoices dated tomorrow made a one-day "Wednesday" with a RM 2,980 basket, and Wednesday showed 243.96 against about 15 for the other days. It now shows about 16, like the rest of the week.
v2026.3 Build 00742026-09-29
Share to WhatsApp
New- My Dashboard: the Send dialog can share a tile, or the whole dashboard, to your own WhatsApp: as a picture of what you see (chart included), a PDF with up to 20,000 rows in total, or an Excel file with every row. Larger PDFs are refused with a message pointing to Excel.
- On a phone, pictures and PDFs open the share list; Excel is saved for attaching in WhatsApp. On a PC, SmartBI copies the picture or saves the file to Downloads and opens WhatsApp with your message typed in; the dialog shows where to attach it (+ → Document).
- Sharing to WhatsApp needs the Export data permission. Every file and picture shared is recorded in the audit log, never with a phone number.
Fixed- Failed-tile Excel sheets use the selected language: English, Chinese or Malay.
v2026.3 Build 00732026-09-29
Email a dashboard now
New- My Dashboard: 📤 on a tile and 📤 Send dashboard open one Send dialog. Choose Now to email the tile, or the whole dashboard, straight away with an optional note, or On a schedule to set up a scheduled email as before.
- An email sent now is the same email a schedule sends: the tables, and the Excel file when you may export data. Nothing is saved as a schedule. Each person can send up to 20 such emails an hour.
- In Admin → Users the permission is now called "Send & Schedule Emails".
Fixed- The Excel file attached to a report email no longer shows the technical error of a tile that could not be loaded. It says the tile could not be loaded, like the email itself.
v2026.3 Build 00722026-09-29
Outlets selling now come first
New- The outlet picker lists the outlets that sold in the last 90 days first, under "Selling now". The rest follow under "No recent sales", each with the date of its last sale ("last sale 23 Jul 2025", or "no sales on record"). Nothing is hidden.
Fixed- With an outlet selected, an empty chart now speaks about that outlet ("OUTLET ROMANTIKA BANGI has had no sales since 23 Jul 2025. Other outlets are trading."). It used to say the whole database was most likely a stale copy.
v2026.3 Build 00712026-09-29
SmartBI runs on Windows Server 2016
Fixed- On Windows Server 2016 SmartBI now starts by itself, at boot and after an update. Its tasks were launched through a console option that only exists from Windows 10 1809 / Server 2019, so on Server 2016 SmartBI only ran from a window started by hand, and an update could not apply. Such a server now runs SmartBI and its helper tasks directly, with no window; newer Windows is unchanged.
- An update on such a server moves the SmartBI Server task to the direct launch before it starts SmartBI again, so the first update after this one repairs an existing install.
v2026.3 Build 00682026-09-29
CEO Dashboard: clearer limits and receipt-based stock age
Fixed- Dead stock uses the first inward movement only when it is more than seven days after the company stock card starts. Opening rows and missing history use the item creation date, so a recent cutover cannot hide old dead stock. Data health and Formulas explain the dates.
- The AI summary understands stock and supplier findings, refuses excess-stock claims when excess is not measured even with only a stock-turn finding, and rejects more payment-delay paraphrases on CASH-term invoices. Contract 3 refreshes cached summaries.
- Capped tables show how many rows are visible out of the full total. Single accounts and days read correctly, rounded zero-day gaps lose their minus sign, and negative amounts use the same minus sign throughout.
- Stock and supplier errors show the reason and offer Retry. A missing grouping table asks for another grouping; a missing sales-view index directs the admin to Smart-Acc support.
- CEO Dashboard settings has a clearer title and credit wording in its preview. Saving supplier exclusions includes a code still in the input box and deduplicates ignoring case. Damaged settings files and failed saves are logged; failed saves are also audited.
- Insight sentences describe net credits correctly and identify whole-book unapplied amounts. A malformed section leaves the other insight sections available.
v2026.3 Build 00672026-09-28
Group View: no group change from a single company
Fixed- A group card no longer shows a change in net sales, transactions or gross profit when only one company of several has both periods to compare. That figure was one company's change, not the group's; the card now says how many companies have both periods.
- A single comparable company is now written as "1 comparable company".
v2026.3 Build 00662026-09-28
Total Revenue includes invoices
Fixed- The Dashboard's Total Revenue card now includes invoices, not only till (POS) sales. A company that also bills by invoice, for example online marketplace orders or dealer sales, saw a much smaller total there than the AI Analyst gave for the same 30 days. The card now shows the full total and names both parts: "POS RM … · Invoices RM …".
- On such a company the Transactions card says "POS receipts" and the monthly chart is titled "Monthly Revenue Trend (POS)", since both count till sales only.
- If the invoice figure cannot be read, the card is labelled "POS Sales" rather than showing the till alone as the total, says "invoices could not be read" and offers Retry. Companies with no invoices see the card as before.
- Switching store while a card was still loading could briefly show the new store's figures mixed with the previous store's. Cards now wait for the new store's answer.
v2026.3 Build 00652026-09-28
Group analyses: goods only, and real outlets only
Fixed- Supplier cost variance and Price consistency no longer compare lines that are not goods. Items DynaMod types NON-STOCK or SERVICE, such as the discount line on purchase invoices, are left out, and the page says how many lines it left out.
- Like-for-like no longer lists locations that have never sold anything, such as stock-in-transit locations, and no longer counts them as outlets. Closed outlets are still shown and explained.
- A group data mart set up by an earlier build keeps refreshing after an update that adds a column to its tables: the update now adds the column itself.
v2026.3 Build 00632026-09-28
SmartBI's views install on older DynaMod versions
Fixed- Installing SmartBI's semantic views, from the installer or /admin → Repair, no longer fails on older DynaMod versions whose stock has no department. Before, the install stopped at the product sales view, so such a company had no product figures and the CEO Dashboard asked for Repair. The product sales view now carries an empty department there, and every other figure is as before.
- Where DynaMod has departments, the product sales view returns exactly what it did before, and a company that already has the views needs nothing. A company whose install stopped on this runs Repair in /admin once this build is installed. On such a company a user limited to certain departments sees no product figures, since no item has a department.
- If DynaMod is later upgraded to a version with departments, /admin shows the company's views as "v3-stale" and offers Repair, which brings the departments in. Until then the views keep an empty department.
v2026.3 Build 00622026-09-28
Group data mart: the first build publishes on large groups
Fixed- A group data mart now switches on after its first build even when a full build takes longer than 30 minutes. Before, the first companies were out of date by the time the last one loaded, so the build was held back ("Awaiting checks") and the next cycle started another full build that ended the same way; mart reads never switched on and Group analyses stayed unavailable.
- Once a full build has loaded, the next cycles are quick updates that bring every company up to date together; the first one that finishes inside 30 minutes publishes and switches mart reads on by itself.
v2026.3 Build 00612026-09-28
CEO Dashboard: supplier payment gap
New- The CEO Dashboard shows, for each main supplier, whether its credit terms cover the time its goods take to sell: sell days, the gap against the terms, the cash the gap ties up, and how long you actually take to pay. Suppliers are ranked by cash tied up, largest first, and read either "You pay before it sells" or "The supplier funds the stock".
- The suppliers that count make up 80% of your 12-month purchases, after suppliers on consignment terms and an exclusion list (transport, services) set on /admin → CEO Dashboard are left out. Purchases are supplier invoice lines less credit notes; the main supplier of an item is the one with the largest purchase value of it.
- Sell days count only the items whose sales the stock card costs, as stock turn does: a supplier whose goods sell mostly by invoice, or who mostly supplies another supplier's items, reads "Not measurable" rather than a figure its costs cannot support. Only suppliers that bought stock items count, and pay days need the finance measure.
- A new insight says how much cash is tied up at the suppliers you pay before their goods sell, naming the two largest. It joins the AI summary's cards. The section follows the same checks as stock turn and needs the purchase measure.
v2026.3 Build 00602026-09-28
CEO Dashboard: stock turn
New- The CEO Dashboard shows how fast stock sells: the company's stock turn and days of stock over the last 12 months, cover days by category, and the slow items with a next step each — clear or return, transfer to the warehouse or promote, or keep. Dead stock (no sale in 3 months, stocked more than 90 days ago) is listed on its own.
- The only line is your own: an excess line in days of cover, 91 by default, set on /admin → CEO Dashboard together with the field that groups items (category, group, department or brand). Bands are plain time spans with no good or bad colours, and there are no industry benchmarks.
- When negative stock is too large to measure, nothing stock-based is shown; instead the 20 negative items worth the most are listed so they can be fixed first. Item figures need SmartBI's semantic views; without them the page says to run Repair in /admin. An item's cover counts only when the stock card costs at least 95% of its sales, so an item sold partly or wholly by invoice is counted as sold but not costed, never as dead or slow. Cover and dead stock use the last 3 complete months and the month to date.
- Two new insights, worded from your own figures: the stock turn, and the value of slow and dead stock with the categories holding the most of it. They join the AI summary's cards, which wait for the stock figures so they are written once.
v2026.3 Build 00592026-09-27
CEO Dashboard: related companies from /admin
New- A new admin page, CEO Dashboard → Related companies, sets which customers and suppliers are related companies of the connected company. Nobody needs to edit a settings file any more.
- SmartBI suggests candidates from DynaMod's subsidiary registry, the company's own name (as DynaMod records it and as its SmartBI profile is named) and the other companies on this install. Customers that are also suppliers are listed apart, collapsed, because they are usually trade partners. Each suggestion shows its reason and open balance, and nothing is applied until an admin ticks it and saves.
- Before saving, a preview lists every customer and supplier the rules match, with balances and the totals for related companies and trade, and each rule says how many parties it matches.
- With supplier rules, the payables card splits into All, Trade and Related like receivables. Its insight says how much is owed to related companies, overdue payables name trade suppliers only, and the written summary can pick the related-supplier line.
v2026.3 Build 00582026-09-27
CEO Dashboard: a written summary at the top
New- The CEO Dashboard now opens with a short summary: up to three cards on the findings that matter most, and a one-line verdict. The AI provider set in /admin writes each card's title and what to do; the figures on every card are the page's own sentence for that finding, word for word.
- The AI never writes a number and is never sent a customer or supplier name. A card that fails SmartBI's checks is left out and counted, never shown weakened, and the figures page is the same whether the AI is off, failing or slow.
- Without an AI provider, admins see how to set one up and everyone else sees the page as before. Demo Mode shows the sample's cards without AI wording.
v2026.3 Build 00572026-09-27
CEO Dashboard: insights from your own figures
New- The CEO Dashboard now explains what it shows. Under the cycle, an insight says how it changed over the year and against last month, what drove the change, and what a day of the cycle is worth, and compares the company with its own best, worst and average month.
- The receivables and payables cards say how much is more than 30 and 90 days past due, which accounts are largest, and how much related companies owe. Every figure comes from your own DynaMod data and matches the page.
- Insights follow the data-health checks. When most invoices carry CASH terms they count from the invoice date, unapplied credits and general-ledger differences are called out, and nothing is said about the cycle when stock figures are withheld.
- A Formulas & definitions section explains how each figure is calculated.
v2026.3 Build 00562026-09-26
The AI Analyst panel holds still while you type
Fixed- Typing a question, or waiting for an answer, no longer redraws every earlier question, answer and chart in the AI Analyst panel. Typing is much faster with many answers on screen, and text selected in an answer stays selected.
- A new answer no longer disappears for up to 30 seconds and then comes back. This happened when the panel refreshed its saved history at the moment the answer was being saved, for example on returning to the browser window.
- A question asked before the saved history had finished loading is no longer lost when the history arrives.
- The panel no longer jumps to the bottom while you read an earlier answer. Once the history holds 100 messages, each new question used to move the view about 30 seconds later.
v2026.3 Build 00552026-09-26
Safer sign-in behind a proxy
Fixed- The sign-in limit can no longer be dodged with forged proxy headers: SmartBI trusts X-Forwarded-* only from a proxy on the same machine (IIS, the Cloudflare tunnel), and behind IIS it now counts each client once instead of once per connection.
- Signing in on the plain-http address no longer loops back to the sign-in page after someone signed in over https in the same browser: each address now has its own sign-in cookie, and existing https sign-ins carry over.
- The sign-in page explains when the browser refused the sign-in cookie, instead of returning to itself.
v2026.3 Build 00542026-09-26
The installer keeps the first admin password private
Fixed- Re-running the installer no longer prints the first install's admin password when auth-initial-password.txt is still on disk; it only reminds you to delete that file. The password is shown once, on the install that created it.
v2026.3 Build 00532026-09-26
HTTPS with your own certificate
New- HTTPS with your own certificate, for customers who open SmartBI over the internet by public IP or a DDNS name without Cloudflare. In /admin, HTTPS (this install) takes a .pfx file and its password, or PEM certificate and key files, and serves SmartBI over HTTPS on its own port, 5443 by default. The usual http:// address keeps working on the server and the LAN, and for the Cloudflare connector. HTTPS is off until an admin turns it on.
- The HTTPS card shows who the certificate is for, who issued it and when it expires. It warns 30 days ahead, and also when a certificate is self-signed or does not cover the name in the address bar. A wrong password, a key from another certificate or an old .pfx that SmartBI cannot read is refused with the reason, and the certificate already in use keeps working.
- Certificates renewed by a tool such as win-acme can be used where the tool writes them. SmartBI checks the files every 6 hours and switches to the renewed certificate without a restart.
- Optional: send visitors from outside the server who open http:// to the https:// address. It is off by default and never applies on the server itself.
v2026.3 Build 00522026-09-26
Suppliers on older company databases, and Update now on headless servers
Fixed- The Suppliers page no longer fails with "Incorrect syntax near ','" on a company database at SQL Server compatibility level 100: the P90 lead time is now computed in a way every compatibility level accepts, with the same figures.
- The optional indexed-views repair script works on the database it is run against and never replaces a current sales view with an older shape.
- "Update now" works again on a server whose SmartBI console had gone away, where it failed at once with an empty log; a launcher that cannot start is now reported with its exit status.
v2026.3 Build 00512026-09-25
Group data mart: the first build is a full build
Fixed- A new group data mart's first build now runs as a full build and checks every company, also when setup had to start the refresh worker; setup says whether the build started or starts within a minute. A refresh never runs for a mart whose setup did not finish.
v2026.3 Build 00502026-09-25
CEO Dashboard opens while Members scoring runs
Fixed- The CEO Dashboard could fail with “operation timed out for an unknown reason” when it was opened while Members scoring was running, for example straight after connecting a database. Members scoring now leaves one database connection free for the CEO Dashboard, and a background job waits for a free connection instead of giving up after 30 seconds.
v2026.3 Build 00492026-09-25
Faster “Items sold below cost” action
Fixed- The “Items sold below cost” action reads the last 30 days of sales once instead of twice. It lists the same items with the same totals, with about half the database reads, so it is far less likely to run past the two-minute limit on a large database.
v2026.3 Build 00482026-09-25
Sales forecast: a bill dated ahead no longer ends the month early
New- A vs baseline column in the sales forecast table gives each month’s change against the baseline, worked out from the forecast figures. Group View shows the same change under Forecast assumptions and history.
Fixed- A bill dated ahead, such as a month-end invoice raised early, no longer makes the month in progress count as a complete month. The forecast reads sales dated up to today, so the current month stays month to date and the baseline uses complete months only.
- The AI now explains its adjustment in words instead of quoting a percentage, which it once gave as -0.052% for figures 5.1% below the baseline.
v2026.3 Build 00472026-09-25
Repair database access from the admin page
New- Repair on a database profile sets up SmartBI’s read-only access and the semantic views after a restore, or for a new company database, with a one-time admin SQL login (sa, or another sysadmin login) that is never stored or logged.
- Repair shows the company, sales documents and date range first, and changes nothing until you confirm it is the right data. An existing login’s password is never changed, and a login is never created without a password.
- Repair refuses a profile login that has write or admin rights in the database, and reports a database that is missing, offline or read-only as such instead of as a failed admin sign-in.
- Profiles show a Views badge from their last Test, and Add Profile tests the connection straight away.
v2026.3 Build 00462026-09-25
Set up a group data mart from Admin
New- Admin → Groups can now create a group data mart when a group needs one: choose Set up group data mart, check the server with a one-time SQL admin login, then create and build. The login is used once, sent only over an encrypted connection, and never stored. The mart is created on the same SQL Server as the companies, named smartbi_group_…, and switches on after its first build.
- On SQL Server Express, setup estimates the mart’s size first and refuses one that would not fit in 10 GB. The mart panel shows how full the database is and warns at 80%.
- Set up again repairs a mart, and Remove group data mart deletes it and its logins after you type its name. Company databases are never changed.
- Check first refuses a SQL Server older than 2017 or a compatibility level below 130.
- A mart’s first build now continues after a restart. A setup that did not finish is never built or switched on until Set up again finishes it.
Fixed- The group data mart now upgrades its own tables when SmartBI is updated, so no script has to be run after an update.
- A mart set up with the retired Windows script needs Set up again once.
v2026.3 Build 00452026-09-25
CEO Dashboard: the cash conversion cycle
New- A new 🎯 CEO Dashboard tab shows how many days cash is tied up in the business: the days customers take to pay, the days stock sits and the days we take to pay suppliers. Each comes with its change against last month and a year ago, and with what a day of the cycle is worth in ringgit.
- A 12-month trend compares the days cash is tied up with the days of supplier credit, and a bridge shows how the latest month adds up.
- Receivables and payables by age, customer by customer and supplier by supplier. Related companies can be shown apart from trade.
- A data-health list is checked before anything is shown. Receivables and payables are compared with the general ledger, and stock figures are withheld with a reason when negative stock is worth more than 2% of the stock value.
- The headline uses the last closed month, chosen from the data. A restored copy of a database is dated at its last posting, so aging does not creep up day by day.
- The first calculation runs in the background and is kept for six hours, including across restarts; an update recalculates it. If a later refresh fails, the page keeps the last figures, says when they are from, and offers Retry.
v2026.3 Build 00442026-09-24
Clearer group Insights
Fixed- Group Insights no longer repeat themselves. Each card covers a different finding, such as negative stock, stale bills, missing cost, a change against the previous period or a company’s gap to the group average, and shows that finding’s exact figures.
- A card’s colour now matches what it found: green only for a strength, red or orange only for a problem. Titles match the figures under them, a card about one company stays with that company, and the Verdict sums up the whole group.
- Group Insights show up to four cards: fewer when there are fewer distinct findings, or when the AI still cannot word a card to pass the accuracy checks after two corrections. A card left out is never replaced with generic text, and the page says how many were left out.
v2026.3 Build 00432026-09-23
Fast group snapshots and cross-company analysis
New- Admin → Groups can enable a dedicated group data mart, start a full build or refresh, and inspect progress. Background refreshes keep company databases read-only and recover after a server restart.
- Refreshes work while companies are trading: each company is copied and checked at one consistent moment, and a sale after that moment simply appears in the next refresh. History, stock snapshots and run records stay within set limits.
- Deeper daily history checks are queued across refreshes so current data keeps moving. Admin shows the remaining checks, and each company’s health panel shows when its whole-month comparison last completed.
- Group pages and dashboard tiles show their snapshot time and source. Fresh, checked mart results load quickly; an older or unavailable mart sends the whole existing page back to live company reads. Data health shows refresh attempts, reconciliation and overnight repairs.
- At matching grade A, Group analyses compares weighted selling prices and supplier costs, suggests stock transfers, checks like-for-like outlets, and shows group ABCD and RFM with win-back candidates. Coverage, identity and permission limits remain visible; suggestions never write to DynaMod or send messages.
- Prepared forecasts retain the company estimates used in the group total and company drill. AI provider configuration and existing validation still apply to Forecast and Insights. As on the live pages, a prepared forecast or Insights answer is reused for up to six hours unless the figures it rests on change materially; Insights show when they were generated.
v2026.3 Build 00422026-09-22
Gross profit shows its period and matching sales
Fixed- The Dashboard gross-profit card now says which period it covers: all of last month and this month so far, for example "1 Aug – 23 Sep 2026 (Sep to date)". It also shows the item sales the margin is worked out on, before bill-level discounts, for users who may see costs. The revenue card still shows the last 30 days, and every existing figure stays the same.
- On Group Overview the gross-profit tile shows the same period and item sales, and the same "no stock cost" warning as a company card. Its change figure now compares the last two complete months with the two before them, and names them, instead of setting a month in progress against whole months.
- AI Insights are told which period each figure covers, so a two-month margin is no longer described as a 30-day one.
- Pinned group overview tiles carry the gross-profit period and its item sales.
v2026.3 Build 00412026-09-22
See your companies together with Group View
New- Admin → Groups brings selected company databases into one view. Confirm each company’s role, review registered outlets and internal customer/supplier accounts, check shared item/member/supplier codes, and choose who can open the group.
- Choose a group on Data Source to compare company sales, profit, baskets and member share, with monthly and weekly trends. Open any company and its stores, then return to the same group and period.
- Compare purchasing, stock, suppliers and membership across companies. Internal sales and purchases stay separate, their difference remains visible, and external totals wait for a confirmed complete account map. Forecasts add the companies’ own estimates with their assumptions visible.
- Four group Insights compare named companies using checked figures and show their source qualifications. Group requests record the company concerned, and group Gallery tiles stay attached to that group on My Dashboard.
- Every group page shows data health and incomplete periods. Missing companies fail visibly; incompatible currencies, cost bases and shared codes have clear limits. Group access and cost/profit permissions are checked across every member.
v2026.3 Build 00402026-09-22
Email a My Dashboard tile, or the whole dashboard, on a schedule; send email through Postmark
New- My Dashboard: “📧 Email dashboard” sends every tile on your dashboard for this database, and the ✉ button on a tile sends just that tile — daily, weekly on a chosen day, or monthly on day 1-28, at a time you pick, to any email addresses (up to 20). The email shows each tile as a table, with every row in an attached Excel file, in English, 中文 or Bahasa Melayu.
- Each email shows what its owner can see at that moment: store, salesman and department access and cost/profit visibility are checked again every time it sends, and it stops (and says why) if the owner loses access. Recipients do not see each other’s addresses.
- A list of your scheduled emails on My Dashboard shows when each last went out, or why it failed. “Send now” sends one straight away without changing the schedule. A failed send is retried twice, 30 minutes apart.
- Admin → Scheduled emails lists every schedule on the install with its owner, recipients and last run, and can pause, resume or delete any of them.
- Admin → Alert Channels can send email through Postmark instead of an SMTP server (a Postmark Server API token and a confirmed sender address). Alerts and scheduled emails both use it.
- New permission “reports.schedule”, on for admins and managers; grant it to other users from Admin → Users → Access.
v2026.3 Build 00392026-09-21
Click a member segment to see its members, choose how many rows a list shows, and load every row of a long AI answer
New- Members: clicking a segment in the RFM Segments table (Champions, Loyal, At Risk and the rest) opens that segment’s member list right on the page, with the same columns as the win-back list: member no., name, segment, last purchase, days silent, visits, sales and points. The numbers match the segment table exactly, because both come from the same scoring run. An "Ask AI about this segment" button still sends it to the AI Analyst for follow-up questions.
- Members: the win-back list, the Champions list and every segment list now have a Show 50 / 100 / 200 / All picker, and say how much of the list you are seeing ("Top 50 of 990 by sales"). They start at the table size set in Admin → Members. Very large lists keep their 1,000 highest spenders, and say so.
- Members: Export to Excel on each list downloads every member the list holds, not just the rows on screen. Member numbers stay text, so long card numbers are not rounded.
- AI Analyst: when an answer stops at 500 rows, a "Load all rows (up to 5,000)" link runs the same query again for all of its rows. It asks the AI nothing new, so the answer cannot change, only get longer. It works for an hour, and only while your access is unchanged; after that, ask the question again.
Fixed- Clicking Champions or Loyal on the Members page used to ask the AI Analyst to list them, and it often came back with the members’ 1-5 scores. Every Champion scores 5 / 5 / 5 by definition, so the list said nothing. The click now opens the member list itself.
- A pivot or an Excel export built on an answer that stopped at 500 rows looked complete while its totals were too low. The answer now says "Only the first 500 rows came back", and the pivot says its totals are incomplete, until all rows are loaded.
v2026.3 Build 00382026-09-21
Two people on the same login no longer wipe each other’s AI Analyst chat history
New- The AI Analyst panel picks up questions asked from another browser on the same login: when you come back to the tab, and every 30 seconds while it is open.
Fixed- When two people were signed in with the same username at the same time, each browser saved its own copy of the chat and the last one to save replaced the other, so one person’s questions and answers disappeared. The server now merges the two instead of replacing, so both people’s questions are kept.
- Clearing the chat on one browser is no longer undone by another browser that still had the old messages open; that browser drops them and keeps only the questions it asked afterwards.
v2026.3 Build 00372026-09-21
The server keeps running when its console goes away
New- If the server loses its console output, it now writes its log to src/server/data/server.log instead (rotated at 10 MB), starting with a line saying when the console was lost.
Fixed- Connecting or testing a data source could kill the whole SmartBI server on some machines: under the headless scheduled task the console went away after startup, and the next log line (the "connected pool" message written during the connect) failed with "write EPIPE" and ended the process. The setup wizard then stopped at step 6 with "the underlying connection was closed". A lost console is now logged once and the server carries on.
- Times in crash.log are now the server's local time with its UTC offset (for example +08:00) instead of UTC.
v2026.3 Build 00362026-09-20
Pick the period for an AI Analyst question instead of typing the month
New- A period row above the question box: Any period, This month, Last month, Last 3 months, This year, or Pick dates for an exact range. The choice is turned into real calendar dates and asked for explicitly, and the dates used are shown under your question so there is no doubt which period was answered. It stays put between questions, like the store scope.
- When a question finds no rows, a "Use Latest Month" button asks the same question again for the most recent month that does have data, and the answer says which month that was.
Fixed- Asking the AI Analyst for "date range selection" (or any other way of saying "let me choose the dates") could produce an answer built on a year it made up — usually one with no data, so the reply came back as "no rows" and looked exactly like a genuinely empty result. Invented dates are now rejected before the query runs, and the reply asks for the period you want or points at the new period row.
- An empty answer to a question about a date range now says how recent the data actually is: "the most recent transaction in this database is dated ...". Previously a database that simply stopped before the period asked about was indistinguishable from a question with no matching rows.
- Questions about the current month, the current week or today ran far slower than they needed to on large databases — on a 10-million-row cash-sales table, 29 seconds for "this month" and 35 seconds for "today", against a 30-second limit, so the slowest ones were timing out. They now take under a second.
v2026.3 Build 00352026-09-20
The AI sales forecast no longer mistakes a month in progress for a collapse in sales
New- The Revenue Forecast chart labels the current month "MTD" (month to date) and the caption under the table says what the forecast rests on: the latest transaction date, how many days of the current month are in, its full-month pace, and the baseline (the average of the last complete months).
Fixed- The three-month revenue forecast could come out at a fifth of the real run rate. The AI was handed the current month and week with no indication that they were still in progress, read a 19-day September as a "severe revenue collapse" and forecast the next quarter from that. It is now told the as-of date, how many days each period covers, and a baseline computed from complete months only, and asked to forecast relative to that baseline.
- A plausibility check now rejects any monthly forecast outside 50%–150% of the baseline (or for the wrong months). The AI gets one retry with the reasons; if that also fails the card shows an error instead of an implausible figure. Rejections are logged on the server.
- The 12-month history the forecast is built from now starts on the first day of a month, so its oldest month is no longer a partial one either.
v2026.3 Build 00342026-09-20
The server survives a SQL connection that fails after the pool is open
New- A crash log: if the server process ever dies on an unexpected error, the reason is written to src/server/data/crash.log before it exits (the scheduled task runs it headless, so until now nothing captured it). The watchdog restarts the server as before.
Fixed- Connecting a data source could kill the whole SmartBI server when SQL Server cut one of the extra connections the Members scoring opens right after connect (the setup wizard then reported "Post /api/connect failed: the underlying connection was closed" and, on a re-run, "Unable to connect to the remote server"). The failed connection is now logged and the affected Members section is skipped; the connect itself, and everything else, carries on.
v2026.3 Build 00332026-09-20
Dashboard KPI figures stay inside their cards
Fixed- Total Revenue and Gross Profit no longer run past the edge of their cards once they reach seven digits: the size of the figure now steps down with its length (RM 1,305,555 is shown a little smaller than RM 35,013), on every KPI card across the Dashboard, B2B, Members, Suppliers and ABCD screens.
- KPI money figures are whole ringgit. Total Revenue read "RM 1,305,554.7" and Gross Profit "RM 597,639.902" — cent fragments that the other cards never showed and that made the figures wider still. The monthly revenue chart tooltip and the Net AR sub-line use the same formatter and round the same way.
v2026.3 Build 00322026-09-19
Offer the v3 upgrade again when the stock-card cost index goes missing
Fixed- A database whose stock-card cost index went missing (a killed or timed-out v3 upgrade leaves the view behind with no index) is offered "Upgrade to v3" again — the run rebuilds the index. Previously /admin said "Already on v3 — nothing to upgrade" (no button) while the Gross Profit card said "till cost — the cost view's index is missing; re-run the v3 upgrade", a dead end.
- The repair script (restore-recovery.ps1), the DB verification script (verify_semantic_views.sql check 14) and the setup pack's repair tool (SmartAI-SqlOps.ps1) now use the same clustered-index rule the app does, so an index-less database no longer gets skipped as "already v3" by any of them either.
- The Gross Profit basis note now reads "till cost — the cost view's index is missing; press Upgrade to v3 below to rebuild it" (pointing at the button that is now actually offered), and the same note appears on the "Semantic views v3 · marker installed …" line itself, so both places on the card agree.
v2026.3 Build 00312026-09-19
Which cost basis gross profit uses, and why a top-margin list can come back empty
New- The /admin Semantic Views card now shows which cost basis gross profit is actually using on the connected database — stock-card cost, till cost, or (on a v3 database where the cost index has not finished building) till cost with a note to re-run the v3 upgrade.
- Insights now explains an empty top-margin ranking instead of leaving it silent or implying nothing was profitable: it says plainly that not enough products had stock-card cost recorded in the window, so the ranking is withheld — missing cost data, not zero profit. The AI Analyst gives the same explanation for a "top profitable items" question with no rows.
v2026.3 Build 00302026-09-19
Action Centre: items sold below cost
New- A new Action Centre pack, "Items sold below cost", lists the items sold below their stock-card cost in the last window — how many lines, units, revenue, cost and the resulting loss per item, what share of those lines carried a promotion, how many of the item's lines had no recorded cost, and when it was last sold below cost. It uses exactly the same definition of "below cost" as the Members tab's promotion table (Build 0026) and the Dashboard/Insights gross-profit figures (Build 0029): the line's own stock-card cost, counted only when recorded and at most 5 times the list price.
- A promotion sold below cost is not automatically a problem — it can be a deliberate loss leader. The card reports the promotion share so a manager can tell a planned loss leader apart from a wrong price or a wrong cost; it does not judge either one.
- You can build alert rules on it exactly like every other pack — total RM lost, number of below-cost lines, number of lines with no recorded cost, or the promotion share — using the same Alert Rules screen and notification channels, with no changes to that machinery.
- This pack requires both the "cost" and "gross profit" measure grants — either alone is not enough, matching how the Dashboard already gates the same figures. Unlike some other packs it is not company-wide-only: a location-scoped account sees its own stores' below-cost sales.
- Admin config (Action Packs card): the lookback window (default 30 days), the minimum RM loss per item before it is listed (default 50), and how many items to list (default 20).
Fixed- Upgrade note (expected one-time effect, not a bug): adding a pack changes the alert-partition key for every user who holds both the cost and gross-profit measures (location-scoped or company-wide — this pack is not company-wide-only), 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/2.12.0 upgrades behaved.
v2026.3 Build 00292026-09-18
Gross profit from stock-card cost on the Dashboard, in Insights and in the Action Centre
New- On a database upgraded to semantic views v3, the Dashboard gross profit and margin now use the stock-card cost DynaMod recorded for each sale — the same cost the Members tab already uses — so both pages agree on the same sales. The card says what share of sales had no stock cost; those sales count as zero cost, matching DynaMod's own gross-profit report.
- Insights rank the top-margin products by stock-card cost, only among products whose cost is recorded for at least 90% of their sales, and the AI is told how much of the sales had no cost so it says "cost not recorded" instead of claiming a high margin.
- The Action Centre's replenishment "Potential GP impact" uses each item's stock-card cost per unit over its costed sales in the last 3 months; items with no costed sales contribute zero. "How we calculated this" names the cost basis.
- A database still on v2 keeps every figure exactly as before; the Gross Profit card says "till cost", and an admin sees a hint to upgrade in /admin.
- Chat tiles that select the stock-card cost need the same cost and gross-profit permissions as till cost.
v2026.3 Build 00282026-09-17
Semantic views v3: the database upgrade that prepares gross profit from stock-card cost
New- A new database upgrade, semantic views v3, adds the stock-card cost DynaMod records for each till sale to SmartBI's sales views. It prepares SmartBI to show gross profit from stock-card cost in a later build. This build changes no figure on any page.
- /admin -> Semantic Views now offers "Upgrade to v3". It builds a new sales cost index: about 6 minutes on a 10-million-receipt database, and sales posting is blocked while it runs, so run it outside trading hours. A database still on v1 is taken through v2 and then v3 in the same run.
- A database that has not been upgraded keeps working exactly as it does today.
- The "Add version marker" button now appears only on a database already on v3. A v2 database gets its marker from the v3 upgrade.
- The post-restore repair script brings a restored database all the way to v3.
v2026.3 Build 00272026-09-17
Deactivating or deleting a data source now closes its database connections safely
New- Members scoring log lines now name which pool they came from, so the request-time connections and the Members background job are no longer both plain "[pools]" in the log.
Fixed- Turning a data source off in /admin left its database connections open in the background (both the normal one and the Members scoring one). Deactivating now closes both. Turning it back on connects again the next time it is used.
- Deactivating or deleting the data source currently in use closed its connections in the wrong order behind the scenes, which could leave a Members scoring run in progress querying a connection that had just been closed. Both now finish that background work first.
v2026.3 Build 00262026-09-15
Members: see which promotions made money, not just which ones members like
New- Users allowed to see cost and gross profit now get four more columns in the Members tab promotion table: gross profit, margin, cost coverage, and the margin of whole bills that carried the promotion compared with bills that carried none.
- The table opens on the promotions that lost the most gross profit, with switches for the biggest earners and for the original member-share ranking. Each view is picked from every ranked promotion, so a loss-making promotion can no longer drop off the list.
- Cost is the stock-card cost DynaMod posted for each sale. A promotion with too little recorded cost says "cost not recorded" instead of showing a misleading margin; the threshold (default 80%) is a new Members setting in /admin. Costs above 5 times the list price are treated as not recorded.
- Users without both the cost and gross-profit measures see the promotion table exactly as before, with no cost data in what the server sends.
- The whole-bill comparison (the "Bill margin vs no promo" column) is off by default and switched on per install in /admin -> Members: it is a costly query on a large database — about 1.5 minutes on a 10-million-receipt database, a few seconds on a single-store one.
- The stock-card cost lookup is now limited to the reporting window, so a database with years of stock-card history is no longer scanned in full on every promotion gross-profit query.
v2026.3 Build 00252026-09-14
Background tasks start reliably when SmartBI is installed in a folder with spaces
Fixed- The server watchdog, the alert backstop and the demo SSH tunnel are scheduled tasks that ran their script through a quoted path. A console host that drops those quotes (seen on the first customer install) would leave them silently doing nothing whenever SmartBI is installed in a folder with a space, such as under Program Files. They now launch the same quote-free way the update step has since Build 0024. The default install folder has no spaces and was never affected. Updating to this build also rewrites any of these tasks still registered the old way, and records each one in the update log.
v2026.3 Build 00242026-09-14
Updates: the elevated apply step works on every console host, and the admin page works again
Fixed- In-app update failed on the first customer install with "the 'SmartBI Apply' task did not start within 60 s" — the box's console host dropped the quotes around the staging folder path, so the elevated worker never reached the script. The worker is now launched with an encoded command that carries no quotes, a task that starts and exits at once is reported as exactly that, and the log records the Windows build. Boxes on any earlier build pick this up automatically: "Update now" always runs the new release's own updater.
- The admin page did nothing on Builds 0019-0023: every panel sat on "Loading…" and no button responded. One text escape in the page's own script reached the browser as a real line break, which made the whole script unreadable to it — so none of the page's code ran and no error could be shown. The page works again, and a test now parses every page script on every build. An install still on 0019-0023 gets its working Updates card back as soon as this build is applied.
v2026.3 Build 00232026-09-14
B2B: the AR card says it is net, and names the unapplied credits
New- The B2B "AR Outstanding" card is now "Net AR Outstanding" and its sub-line names the unapplied credits (receipts, credit notes and advances not yet matched to an invoice), e.g. "91 customers owe us · net of RM 218,232 unapplied credits".
- The "Overdue AR" card sub-line now reads "Past due, gross (before unapplied credits)".
- Why: Net AR can legitimately read below Overdue AR. Overdue is the gross value of past-due invoices; Net AR is after every credit. They reconcile as Net AR = open documents + unapplied credits, so the credits are shown, not hidden — matching them in DynaMod is what closes the gap.
v2026.3 Build 00222026-09-14
Members: scoring runs in the background, so big databases and slow links never time out
New- The Members tab now starts scoring in the background and shows progress (elapsed time and queries done) instead of holding one long request open — a large database behind a web proxy no longer ends in HTTP 524.
- Scoring runs on its own small database connection pool with a 10-minute per-query limit; a section that still cannot finish is shown as "not computed in time" while the rest of the page is complete.
- The analysis is warmed when a database connects and every 2 hours, and kept for 6 hours (Members config changes still refresh it at once), so the first person in the morning gets an instant page.
- Member win-back reuses the Members tab's fresh scoring instead of re-running it.
Fixed- Monthly retention no longer carries members whose last purchase is about five years old as "lost" every month; the page says which date the retention base starts from.
v2026.3 Build 00212026-09-14
Action Centre: hand the win-back list to the floor
New- Member win-back now has two drafts on the card: a Win-back list (XLSX) and a Copy call list — the listed members with segment, last purchase, days silent, trailing spend and points. Built on your PC from the card itself; nothing is sent anywhere.
- SmartBI holds no member phone numbers or addresses — the list carries the member number so staff look the member up in DynaMod.
v2026.3 Build 00202026-09-14
Alerts: company-wide packs computed once per run
Fixed- The alert engine no longer recomputes Member win-back, Member fraud watch and Late-PO exposure once per user scope — one run per company database per sweep, the same result shared by every scope that can see the pack. Faster "Run now" on installs with several scoped users; findings unchanged.
v2026.3 Build 00192026-09-13
Paste the update token on the Updates card
New- The Updates card on the admin page has a token box. If the card says the update channel is not set up, paste the SSP read-only token from Smart-Acc and press Save token: SmartBI 360 checks the token against the update server first, keeps it only if it works, and the card turns green straight away with no file editing and no restart.
- A token saved this way is kept across updates and is never shown again; the card only says that the token was saved on this page, and when. Forget, use .env removes it and goes back to whatever the server configuration file holds.
v2026.3 Build 00182026-09-13
Action Centre: Member win-back — quiet high-value members, RM at stake, and whether they came back
New- A new Action Centre pack, Member win-back: the high-value members the Members tab already marks at risk, as one company-wide card with the trailing spend at stake and the top members to call.
- Same rule, same thresholds as the Members tab (RFM window and lapse days from Members config) — the card and the tab can never disagree about who is at risk.
- Accept it, work the list, mark it done: SmartBI re-measures with the same rule at Done and again 30 days later and shows how much of that RM is no longer at risk — a change measured, not causation claimed.
- Alerts: rules on members at risk, trailing spend at risk and average days silent, with email / WhatsApp digests like every other pack.
v2026.3 Build 00172026-09-13
Members: open periods marked, refunds never count as visits, promotions indexed like for like
New- Members: every table now marks its open period — the current week on the trend, the current month on the points ledger and card sales — the same way retention already did.
- Members: a refund receipt is never counted as a visit or in any receipt count or bill average (sales totals still net refunds), and the disclosure line says how many refund receipts fell in the window.
- Members: promotion batches are indexed against the member share of promotion-window line sales (90 days), like for like, instead of the 12-month receipt share.
- Members: the gender caveat appears only when enrolment gender is actually skewed (one gender ≥ 70 % of known, or ≥ 30 % unknown) and shows the split.
- Admin → Members config: the minimum receipts a promotion batch needs to be ranked (default 50).
v2026.3 Build 00162026-09-13
Members: see who your loyalty members are worth, who is slipping, and what they respond to
New- A new 👥 Members tab beside Suppliers. It reads your DynaMod member and receipt tables live and scores every active member on Recency, Frequency and Monetary value — the same quintile scoring as DynaMod B.I Plus — then rolls them into eight named segments (Champions, Loyal, New, Need Attention, At Risk, About to Sleep, Can't Lose, Hibernating).
- A win-back list: high-value members who have gone quiet past a configurable number of days, with the ringgit at stake, plus a Champions list.
- Programme health: activation rate (members who bought vs enrolled), monthly retention using DynaMod's own (start − lost) ÷ start identity, join-month cohorts, points issued and redeemed per month, and member cards sold per month.
- Trends and shopping patterns: weekly active members and member sales against walk-in sales, member bill size with the promotion-receipt share on the same chart, receipts by hour of day, and how often members come back.
- Promotions members respond to: every promotion batch ranked by its member share of sales against your company baseline, with buyers, sales and discount given; promo penetration and the bill uplift with vs without a promotion.
- Products members prefer: category affinity index (member share ÷ company baseline), top member products with buyer counts, and the categories walk-in customers dominate.
- An AI Member Insight: four short cards written from aggregate figures only — member names never reach the AI.
- Admin → Members config: RFM window, lapse days, win-back days, table size, expiry window and the category sales floor.
v2026.3 Build 00152026-09-09
The sign-in page shows the new name too
Fixed- Build 0014 renamed the product to SmartBI 360 everywhere except the one place every user sees first: the sign-in page still showed the old name above the username box. It now reads SmartBI 360 like the rest of the product.
v2026.3 Build 00142026-09-09
The product is now called SmartBI 360
New- SmartBI is now SmartBI 360. The new name appears on the sign-in page, the top bar, the browser tab, the admin pages, this release-notes page, alert test emails and the installed-app name if you have added SmartBI 360 to a home screen. Nothing about how the product works has changed.
- Your installation folder, your database and your update settings all keep their existing names, so this release installs and updates exactly like any other and nothing on your server needs renaming.
v2026.3 Build 00132026-09-09
Monthly Revenue Trend no longer reports a quiet period as a failure
Fixed- Monthly Revenue Trend showed "Live data unavailable · Retry" — the message it shows when a query fails — whenever the last six months held no sales at all. It now says so plainly and keeps its green LIVE badge, because the query did run against your database and succeeded. This is the same correction Build 0011 made to Top Revenue Products; the two cards differed only in how far back they look.
- When a card reports an empty period, it used to tell you that cards with wider windows still show earlier activity. On a database whose records stop far enough back that was untrue — every sales card was empty — and it sent you looking for figures that were not there. That sentence now appears only when a wider card really does have data; otherwise the card tells you the database looks like an out-of-date copy and points you at the Data Source screen.
v2026.3 Build 00122026-09-09
Pinned AI answers can be opened in full and exported again
Fixed- A question pinned to My Dashboard showed only its first 8 rows, with no way to open the rest or download it — the Expand and Export to Excel buttons that sit on the same answer in the AI Analyst panel were missing from the tile. Both are back on the tile, and Expand opens the same full-screen view the chat panel uses. Export to Excel still appears only for people whose access includes exporting data, exactly as it does in the chat panel.
v2026.3 Build 00112026-09-09
Top Revenue Products says when there are simply no recent sales
Fixed- When the last 30 days held no sales, the Top Revenue Products card showed "Live data unavailable · Retry" — word for word what it shows when a query fails — so a quiet month was indistinguishable from a broken dashboard. It now says "No sales in the last 30 days", explains that cards with wider windows still show earlier activity, and keeps its green LIVE badge: the query did run against your database and succeeded, it simply had nothing to rank.
v2026.3 Build 00092026-09-08
The "SmartBI Apply" helper task now starts
Fixed- Build 0008 introduced a helper task that performs the update outside the SmartBI service, but on the demo server Windows never started it, so Update now stopped early with "the SmartBI Apply task did not start" and nothing was changed. The helper is now registered exactly like the other SmartBI tasks the installer creates, which are known to start on every server.
- If an update swaps the files and restarts SmartBI but the helper never gets to report, the Updates card now recognises the new version running and records a success, instead of a failure half an hour later.
v2026.3 Build 00082026-09-08
Update now restarts SmartBI itself instead of waiting for the watchdog
Fixed- After swapping the files, the update script asked Windows to start SmartBI again, but Windows ignored the request because the script itself still counted as part of the running SmartBI task. SmartBI only came back when the watchdog started it up to five minutes later, by which time the script had given up. The script now hands the update to a separate one-off task named "SmartBI Apply" (you will see it in Task Scheduler; that is expected), so the restart happens within seconds.
v2026.3 Build 00072026-09-08
Update script: waits longer for the restart, and rollback can find its backup
Fixed- After swapping the files, the update script gave SmartBI 60 seconds to come back. On a small server that was not enough: the update had in fact succeeded, but the card reported a failure. It now waits up to 3 minutes and records how long the restart took.
- When an update is rolled back, the script could not find the backup it had just made (its path carried a stray leading space), so the rollback itself failed. Fixed; the backup zips in Online Updates were always intact.
- The "log" link on the Updates card answered "file must be an apply-*.log name" for every real log. It opens the log now.
v2026.3 Build 00062026-09-07
First release delivered by Update now from the Smart Storage Platform
Fixed- No functional change. This build exists to prove the update path end to end after the Build 0005 launcher fix: an install on Build 0005 sees it under Admin → Updates (served from SSP), presses Update now, and comes back on Build 0006 with its profiles, users and settings intact. If you are reading this on Build 0006, that path worked.
v2026.3 Build 00052026-09-07
"Update now" actually runs the update
Fixed- On Builds 0002 to 0004, pressing Update now downloaded and verified the release but the update script never started, so SmartBI stayed on the old build with the card stuck on "Starting update…". The way the script was launched gave it no console, which Windows PowerShell cannot run without. Fixed; this build has to be installed once by hand (extract the zip, run install.ps1) — every later release updates from the admin page.
- An update marker left behind by such a failed attempt is now cleared automatically half an hour later, with a "failed" line in the card, instead of blocking every future update.
v2026.3 Build 00042026-09-07
Updates come from the Smart Storage Platform; a stuck "Starting update…" now resolves itself
New- Releases are now fetched from the Smart Storage Platform (SSP) first, with the Smart-Acc FTP kept as the fallback when SSP cannot be reached. The Updates card shows which one served the last check. A read-only key for SSP is added to this install's settings by the update itself; nothing needs to be typed.
Fixed- If the update script failed before it stopped SmartBI (or died without reporting), the Updates card stayed on "Starting update…" until someone restarted SmartBI. It now notices within seconds, shows the reason with a link to the log, and lets you try again.
v2026.3 Build 00032026-09-05
First release delivered through the in-app updater
Fixed- No functional change. This build exists to prove the update path end to end: an install on Build 0002 sees it under Admin → Updates, presses Update now, and comes back on Build 0003 with its profiles, users and settings intact. If you are reading this on Build 0003, that path worked.
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.