Operations Dashboard
Welcome back, Admin — here's your live overview for
Export Orders — Live Status
Financials
| Item | Category | Rate (₹) | Remaining Qty | Stock Value (₹) | Status |
|---|---|---|---|---|---|
| Symphony Tower 80L | Air Cooler | 10,500 | 42 | 4,41,000 | Healthy |
| Crompton Aura 1200MM | Fan | 2,800 | 78 | 2,18,400 | Healthy |
| Bajaj Edge 900MM | Fan | 1,350 | 12 | 16,200 | Low Stock |
| Voltas 1.5T 3-Star | AC Unit | 34,000 | 19 | 6,46,000 | Healthy |
| AO Smith 25L Geyser | Geyser | 8,500 | 4 | 34,000 | Critical |
| Kent Grand 8L RO | Water Purifier | 14,200 | 31 | 4,40,200 | Healthy |
Implementation Requirement Summary
As an Admin / authorised user of the DEXPO application, I need a single-screen operations dashboard that aggregates key business metrics in real time — covering export order lifecycle, financials, and inventory health — so I can monitor business performance without navigating to individual reports.
Status values in the KPIs below correspond to the LogisticStatusMaster Static Entity. Use its identifiers (e.g. Entities.LogisticStatusMaster.InTransit) in aggregate queries — never hardcode numeric IDs.
Actor: Admin / Authorised User
Story: As an admin and user of the application, I should see the dashboard cards showing Export Order Live Status. I need to immediately see how many export orders are at each stage of the fulfilment lifecycle — from creation through to delivery — so I can spot bottlenecks and take corrective action without drilling into individual reports.
Acceptance Criteria
- Six KPI cards displayed in a row: Total Created, In-Process, Sent to Facility, In-Transit, Delayed, Delivered.
- Total Created: COUNT of all SO records.
- In-Process: COUNT of SO_Logistic where Status IN (New, In-Process).
- Sent to Facility: COUNT of SO_Logistic where Status = Sent to Logistic Facility.
- In-Transit: COUNT where LogisticStatusMaster =
Entities.LogisticStatusMaster.InTransit. - Delayed: COUNT of SO_Logistic where Status NOT IN (Delivered, FailedToDeliver) AND ExpectedDeliveryDate < TODAY().
- Delivered: COUNT where LogisticStatusMaster =
Entities.LogisticStatusMaster.Delivered. - Cards refresh each time the page loads. No percentage delta or comparison lines are shown on these cards.
Developer Test Cases
| TC# | Scenario | Expected Result |
|---|---|---|
| TC21-01 | New SO created | Total Created KPI increments by 1 on next page load |
| TC21-02 | SO_Logistic status moves from In-Process to In-Transit | In-Process -1; In-Transit +1 |
| TC21-03 | EDD has passed for 2 orders that aren't Delivered or Failed | Delayed card shows 2 |
| TC21-04 | No SOs exist | All cards show 0; no errors |
Actor: Admin / Authorised User
Story: As an admin and user of the application, I should see financial KPI cards on the dashboard. I need a quick view of today's revenue, recent 3-month export performance, import spend, and discounts given — all in one glance — so I can assess financial health without opening a report.
Acceptance Criteria
- Four financial KPI cards: Export Revenue Today, Export Revenue (3 Months), Import Spend (30 Days), Total Discounts Today.
- Export Revenue Today: SUM(SO.FinalPayable) where SO.Date = TODAY().
- Export Revenue (3 Months): SUM(SO.FinalPayable) where SO.Date >= ADDMONTHS(TODAY(), -3). Displayed as "₹XL" shorthand for large values.
- Import Spend (30 Days): SUM(PO.FinalPayable) where PO.Date >= ADDDAYS(TODAY(), -30).
- Total Discounts Today: SUM(SO.Discount) where SO.Date = TODAY().
- Cards show the value only — no delta / percentage comparison lines are displayed.
Developer Test Cases
| TC# | Scenario | Expected Result |
|---|---|---|
| TC22-01 | New SO of ₹10,000 with ₹500 discount created today | Export Revenue Today +₹9,500; Discounts Today +₹500 |
| TC22-02 | New PO of ₹50,000 raised today | Import Spend (30 Days) increases by ₹50,000 |
| TC22-03 | No SOs today | Export Revenue Today shows ₹0; no errors |
| TC22-04 | Card layout check | No delta/percentage lines visible on any financial card |
Actor: Admin / Authorised User
Story: As an admin and user of the application, I should see the Export Orders by Status chart. I need a visual breakdown of how all export orders are distributed across their current statuses — so I can instantly identify where orders are piling up and where the flow is healthy.
Acceptance Criteria
- A doughnut chart displays one segment per status (New, In-Process, Sent to Facility, Received at Facility, Packed, Shipped, In-Transit, Hold, Delivered, Failed to Deliver).
- Each segment is colour-coded to match the LogisticStatusMaster ColorCode (use the same hex values defined in the Static Entity).
- A legend alongside the chart shows each status label and its count.
- Data is derived from a COUNT(SO_Logistic) GROUP BY Status query.
- Statuses with zero orders are still shown with a zero count (not omitted) so the chart remains consistent.
Developer Test Cases
| TC# | Scenario | Expected Result |
|---|---|---|
| TC23-01 | 5 In-Transit orders, 2 Delivered | In-Transit segment is largest; Delivered segment shows 2 |
| TC23-02 | Status with 0 orders | Status still appears in legend with count 0 |
| TC23-03 | Status changes for an order | Chart reflects updated counts on next page load |
Actor: Admin / Authorised User
Story: As an admin and user of the application, I should see the Inventory by Category chart. I need to see the stock value distribution across product categories so I can understand where capital is tied up and which categories need restocking attention.
Acceptance Criteria
- A doughnut chart shows the top 5 categories by total stock value (SUM(Item.Rate × Item.RemainingQTY) GROUP BY Category).
- Alongside the chart, horizontal progress bars display each category's relative weight as a percentage of total stock value.
- Each bar row shows: category name, total stock value (₹), and percentage of total.
- If fewer than 5 categories exist, all available categories are shown.
- Data is live — reflects current stock values from the Item entity on every page load.
Developer Test Cases
| TC# | Scenario | Expected Result |
|---|---|---|
| TC24-01 | 7 categories exist | Only top 5 by stock value shown; others excluded |
| TC24-02 | Category "Fans" has ₹2L of 5L total | Fans progress bar shows 40% |
| TC24-03 | Item RemainingQTY updated | Chart and progress bars reflect new stock value on next load |
| TC24-04 | No items in stock | Chart shows empty state gracefully; no divide-by-zero errors |
Actor: Admin / Authorised User
Story: As an admin and user of the application, I should see the Inventory Item Summary table. I need a detailed item-level view of current stock sorted by value — so I can immediately see which items are highest-value and which are running critically low, and prioritise purchasing decisions.
Acceptance Criteria
- Table columns: Item Name, Category, Rate (₹), Remaining Qty, Stock Value (₹), Status.
- Sorted by Stock Value (Rate × RemainingQTY) descending.
- Status badge logic: RemainingQTY < 5 → Critical (red); RemainingQTY < 15 → Low Stock (yellow); otherwise → Healthy (green).
- Stock thresholds (Critical = 5, Low = 15) must be configurable via a System Setting — not hardcoded — so they can be changed without a deployment.
- Table reflects current Item entity data on every page load.
Developer Test Cases
| TC# | Scenario | Expected Result |
|---|---|---|
| TC25-01 | Item RemainingQTY = 3 | Status badge shows "Critical" in red |
| TC25-02 | Item RemainingQTY = 10 | Status badge shows "Low Stock" in yellow |
| TC25-03 | Item RemainingQTY = 50 | Status badge shows "Healthy" in green |
| TC25-04 | 5 items; sorted by Stock Value | Highest value item appears first; correct descending order |
| TC25-05 | Admin changes Critical threshold via System Setting from 5 to 10 | Items with RemainingQTY between 5 and 10 now show Critical |