Reports & analytics
Nine reports, and one definition of every number in them
Reporting fails in a particular way: two screens quietly disagree, someone notices, and from then on nobody trusts either. Akkad ships nine reports, and most of the engineering behind them is not the charts — it is making sure the same question asked in two places returns the same answer.
Every report sits behind its own permission, so what a team member can see is a deliberate decision rather than a side effect of them having a login. A warehouse lead can hold the stock reports without ever seeing profit margin. A bookkeeper can hold the financial report without seeing the team leaderboard. Nothing is bundled into a single “can see reports” switch.
Every date range is evaluated in your organisation's own timezone, so “today” means the day your shop actually had, and a seven-day window ends at your local midnight rather than at some server's.
01
Nine reports, nine permissions
Each row is a separate grant. Give someone one of these and they get exactly that report, nothing adjacent.
| Report | The question it answers | Permission |
|---|---|---|
| Dashboard / Today | How is today going, and how does it compare with the week behind it? | viewDashboardStatistics |
| Sales Performance | For any date range: how much did we sell, what did it cost, what did we keep, and at what hours? | viewSalesPerformance |
| Inventory Performance | Which items actually move, and what is left on the shelf? | viewInventoryPerformance |
| Categories Performance | Which parts of the catalogue carry the business, and what is tied up in each? | viewCategoriesPerformance |
| Users Performance | Who on the team is writing orders, and in what state do those orders end up? | viewUsersPerformance |
| Expiry & Stock | What is about to expire, and how much money is standing behind it? | viewExpiryReport |
| Stock Health | What am I about to run out of, and what am I sitting on that will not sell? | viewStockHealth |
| Cities Performance | Which governorates buy, and which of them cancel? | viewCitiesPerformance |
| Financial Report | Where did the money go, and did the year make a profit? | viewFinancialReport |
Cities Performance is available to organisations in Iraq and is enabled for the inventory and pharmacy apps. Expiry & Stock is vertical-agnostic — an organisation that does not track batches simply reads zeros rather than an error.
02
Today, and the seven days behind it
The dashboard answers the question people actually open the app to ask. Orders today, items sold today, revenue today, the size of the catalogue, and lifetime orders — five figures, no configuration.
Underneath sits a seven-day revenue sparkline with per-day boundaries drawn at your local midnight, so each column is a real trading day rather than a rolling twenty-four hours. Only orders in processing, shipped or delivered are counted, which means a pending order that never gets confirmed and a cancelled one never appear as revenue that later evaporates.
03
What Sales Performance actually measures
One report over any date range you choose, defaulting to today. It returns the trading picture and the profit picture side by side.
| Group | What you get |
|---|---|
| Volume | Number of orders, total items sold, average order value |
| Money in | Total amount, total shipping cost, total tax, total discount |
| Profit | Cost of goods sold, gross profit, net profit, profit margin as a percentage |
| Overheads | Expenses and incomes for the window, each with an itemised breakdown rather than a single lump |
| Timing | Hourly metrics across all twenty-four hours — order count and revenue per hour, adjusted to your local clock |
The hourly breakdown is there for one specific decision: when to staff. A shop that reads 40% of its orders arriving between 7pm and 10pm schedules differently from one whose curve peaks at lunch, and neither can see that from a daily total.
Cancelled orders can never inflate revenue
Sales Performance carries an order-status filter, and it will only ever accept processing, shipped and delivered. Pending, cancelled and returned are not options — not hidden defaults, not unchecked boxes, simply not accepted by the report. Revenue itself is defined as the order total less tax and less shipping, because tax is a liability you are holding on someone else's behalf rather than money you earned. Shipping can be added back if you treat delivery as revenue; tax never can. Your chosen filter is remembered per person, so the report opens the way you left it.
04
Three ways to slice the same period
Once a window is chosen, the same trading period can be read by item, by category, or by the person who wrote the order.
Inventory Performance
Items ranked by quantity sold, with an optional category filter and paging up to a hundred rows at a time. Each row carries name, SKU, image, quantity, sales value, current stock and whether stock is managed at all — so “our best seller” and “our best seller that is now empty” are one glance apart. Variants can be combined into their parent, with a per-variant breakdown ordered numerically, then by clothing-size ladder, then alphabetically.
Categories Performance
Per category: quantity, sales, cost of goods sold, shipping, gross and net profit and margin — alongside the standing position, meaning how many items sit in that category, how many units, what they cost you and what they are worth. Expenses scoped to the category appear with a per-expense breakdown and each one's share.
Users Performance
A team leaderboard: orders per person, split into the stock-reducing block (count, amount, items) and the non-stock-reducing block, plus a full status breakdown per person. It shows who is writing orders and what happens to those orders afterwards, which is a different and more useful question than raw volume.
05
Numbers that reconcile
Four specific decisions exist purely so that two reports open side by side never contradict each other.
Category revenue is distributed proportionally
An order's revenue is not assigned wholesale to one category. It is spread across the categories in the order in proportion to each one's share of the item revenue. That is why the categories report always sums back to Sales Performance for the same window — no residue, no “other” line absorbing the difference.
The team leaderboard respects who you are allowed to see
If a member is restricted to particular order creators, Users Performance shows them only those creators. The report does not quietly become a way around the restriction that governs the orders list.
Overheads are computed once, used twice
Expenses and incomes are prorated by day across the window when they are fixed, or multiplied by the window's order count when they are per-order. Sales Performance and the financial report call the same function to do it, so the two screens cannot drift apart.
One definition of “money moved”
The financial report and the cashbox are driven by a single shared function. There is not a reporting version of cash flow and an accounting version of it — there is one, and both screens read it.
06
The showpiece
Stock Health
Most inventory reports tell you what your stock level is. That is a number you already have. The question worth answering is how long that number will last at the rate the item is actually selling — because “forty units” is a crisis on one item and dead capital on another. Stock Health sorts your entire catalogue into five mutually exclusive buckets on exactly that basis, and it is tunable to how your purchasing actually works.
Velocity is capped at the item's age
Sales in the window divided by the days the item was available — not by the length of the window. An item added four days ago that sold twelve units is moving at three a day, not at zero point four. Without that cap, everything new looks slow and nothing new ever gets reordered.
It sums in base units on purpose
Selling one box of twelve is twelve units of movement, not one. Items sold at multiple pack granularities would otherwise read as barely moving, which is exactly the item you least want to misjudge.
You set the window, the target and the lead time
The lookback window runs 7 to 365 days and defaults to 30. Target cover runs 1 to 365 days and defaults to 14. Supplier lead time runs 0 to 365 days and defaults to 3. The overstock line sits at 90 days of cover. Change the lead time and the whole report re-sorts around how long your suppliers actually take.
It describes, it does not prescribe
The report surfaces lost revenue per day for the shelves standing empty, and the capital tied up in overstock. It deliberately stops there. It will not tell you how many to order or how much to spend, because that depends on cash position, supplier minimums and season — things it cannot see. Presenting a confident order quantity built on data this partial would be worse than presenting nothing.
07
The five buckets
Every stock-managed item lands in exactly one. Only real sales count toward velocity.
| Bucket | Rule | What it means for you |
|---|---|---|
| Out of stock | Stock at or below zero | The shelf is empty and every day carries a measurable lost-revenue figure |
| Reorder now | Days of cover at or below your lead time | It will run out before a new order can arrive |
| Reorder soon | Days of cover at or below your target days | Still selling, inside the window where you would normally act |
| Overstock | Cover above 90 days — or stock on hand with no movement at all | Dead capital. Items that sold nothing in the window but still hold stock land here rather than looking healthy |
| Healthy | Everything else | No action needed, and worth being told so explicitly |
Items with stock management switched off are excluded entirely — a restaurant dish assembled to order has no meaningful days of cover, and including it would only add noise.
08
Expiry and value at risk
For anyone tracking batches, the question is not only what expires but what it is worth. Four mutually exclusive tiers, measured from today.
| Tier | Window | Reported per tier |
|---|---|---|
| Expired | Already past its date | Distinct items affected, units, and value at risk |
| This week | 0 to 7 days | Distinct items affected, units, and value at risk |
| This month | 8 to 30 days | Distinct items affected, units, and value at risk |
| This quarter | 31 to 90 days | Distinct items affected, units, and value at risk |
Value at risk uses the batch's own recorded cost, falling back to the item cost when a batch does not carry one. Drilling in gives a row per item or variant with units, value, earliest expiry date, days remaining and batch count, soonest first.
09
Where your orders come from
Cities Performance groups the free-text city on each order into Iraq's eighteen governorates using the same fuzzy matcher that prices per-city delivery — so “الحلة”, “حله” and “Hilla” count as one place rather than three. Per governorate you get orders, revenue, the split between stock-reducing and non-stock-reducing orders, a full status breakdown, average order value and share of revenue, ranked by revenue.
Two details matter more than the ranking. Each row keeps the raw spellings that were actually seen, so you can tell when the matcher grouped something you would not have grouped. And an “Other” bucket always sits last, holding whatever did not match — unmatched data stays on the screen instead of quietly disappearing into a total. The report also tells you how many orders had no city at all, which is the normal state for counter and dine-in sales.
A business outside Iraq is told the report is not available rather than being shown an error or an empty chart with no explanation. The distinction matters: “this does not apply to you” and “this is broken” should never look the same.
10
The financial report's two rulebooks
Run for a whole year or a single month. It deliberately answers two different questions with two different sets of rules, because conflating them is how businesses end up believing a profitable year was a cash-flush one.
| Section | Rulebook | Contents |
|---|---|---|
| Money in | Cashbox rules — money that physically moved | Sales collected, other incomes, deposits, and the total |
| Money out | Cashbox rules — money that physically moved | Expenses paid, purchases on paid purchase orders, withdrawals, and the total |
| Net flow | Cashbox rules | Money in less money out. Transfers between cash, card and bank are excluded because they net to zero |
| Where the money went | Cashbox rules | Paid expenses grouped and sorted largest first. Per-order expenses contribute their rate times the paid-order count, so the breakdown always sums back to the total |
| Profit | Analytics rules — matching Sales Performance for the same period | Orders, revenue, cost, gross profit, expenses, incomes, net profit and margin |
Cash flow and profit are not the same thing and the report refuses to pretend otherwise. An installment collected in March lands in March's money-in even though the sale was booked last year; the profit block still books that sale where it belongs. Results are cached briefly — five minutes for a period still in progress, an hour for one that has closed — so a year view is fast without ever serving a stale live month.
11
Expenses and incomes
Overheads are first-class records, not a note in a spreadsheet, because every profit figure on the platform depends on them being right.
| Field | Options | Why it is there |
|---|---|---|
| Type | Fixed, or per order | Rent is a fixed monthly figure. Packaging is a cost per order. Reports prorate the first by day across the window and multiply the second by the window's order count |
| Date span | Start date, optional end date | An expense is a period, not a moment. A twelve-month lease reported over one week contributes one week of itself |
| Category scope | Specific categories, or organisation-wide | Scoping an expense to categories is what lets Categories Performance report a real net profit per category rather than a gross one |
| Status | Pending, paid or overdue for expenses; pending, received or overdue for incomes | The financial report's money-out section counts what was actually paid, which is a different question from what was accrued |
| Grouping | Free-text expense group | Drives the “where did the money go” breakdown and the group roll-up in the list |
Incomes mirror expenses field for field, with an income source and name instead of an expense group — for the revenue that does not arrive as an order.
12
Questions
Why does my revenue figure not match my order totals?
Revenue is defined as the order total less tax and less shipping. Tax is always excluded because it is a pass-through liability rather than money you earned. Shipping is excluded by default and can be added back if you treat delivery as revenue. Order totals include both, which is why the two numbers differ and should.
Can a team member see sales without seeing profit?
The reports are separately permissioned, and cost price is its own grant on top. Someone can hold Inventory Performance to see what moves without holding the reports that expose margin.
Does Stock Health tell me how much to order?
No, and that is deliberate. It tells you which items will run out before your lead time is up, what an empty shelf is costing you per day, and how much capital is idling in overstock. The order quantity depends on your cash position, supplier minimums and the season — none of which the report can see, so it does not pretend to.
Do the categories in Categories Performance add up to my sales total?
Yes. Order revenue is distributed across categories in proportion to each category's share of item revenue, specifically so the two reports reconcile for the same window.
What happens to the reports for a business outside Iraq?
Cities Performance is built on Iraq's eighteen governorates, so it reports as unavailable rather than failing. Every other report is country-agnostic.
How do pack-sold items appear in the reports?
Inventory Performance counts them the way you sell them — in packs. Stock Health sums in base units, because days of cover computed on pack counts would badly misread an item sold as both a box and a single. Each report uses the unit that makes its own answer correct.
Related
Stock & batches
Batches, expiry-first deduction and real weighted-average costing — where the cost figures in these reports come from.
Team & permissions
The grants that gate each report, and the visibility restrictions the team leaderboard honours.
Counter & cashbox
Drawer sessions and the annual cashbox — the money-moved side of the financial report.
इसे अपने ही कैटलॉग पर परखें
अपने हिसाब का प्लान चुनें, स्प्रेडशीट से प्रोडक्ट इम्पोर्ट करें, और उसी दिन चलता हुआ स्टोर, काउंटर और ऑर्डर बुक पाएँ।
फ़्री प्लान उपलब्ध है। आज़माने के लिए कार्ड की ज़रूरत नहीं। इम्पोर्ट आपका मौजूदा कैटलॉग साथ ले आता है।