Electronics Reports
Electronics Reports is a dedicated analytics screen with eight tabs covering everything specific to running a phone/electronics repair and resale counter — repair revenue and turnaround by technician, warranty expiries, IMEI stock movement and ageing, brand-level sales mix, and OEM warranty-claim tracking.
Overview
The page loads all of its data once on open — repairs, warranties and IMEI records — via three parallel API calls, and every tab then filters/aggregates that same in-memory data client-side, so switching tabs is instant with no extra network round-trips.
The eight tabs (labelled RP1–RP8 in the tab strip) are: Repair Revenue, Repair TAT, Warranty Expiry, IMEI Movement, Brand Sales, Stock Ageing, Technician (performance), and OEM Claims.
Most tabs offer a From/To date range filter (applied to `createdAt`) and every tab has a one-click Export CSV button that downloads exactly the rows currently shown, using the same labels as the on-screen table.
If any one of the three underlying data calls fails, the report still renders using whatever data did load successfully — a failed warranties fetch, for example, will not block the Repair Revenue or IMEI tabs from showing their data.
Before You Start
- Meaningful data on this page depends on having used the Repairs, Warranty and IMEI Registry pages already — an empty shop will simply show empty-state messages on each tab.
- Repair Revenue, Repair TAT and Technician tabs specifically need repairs with `assignedTo` set to show per-technician breakdowns (unassigned jobs are grouped under "Unassigned").
Step-by-Step Guide
1 RP1 — Review repair revenue by technician
- Open the Repair Revenue tab (default tab on page load).
- Set a From/To date range to filter which repairs (by creation date) are included.
- Review the Total Jobs, Labour Revenue, Parts Revenue and Total Revenue summary tiles, then the per-technician table below with an Avg/Job column and a Total row at the bottom.
- Click Export CSV to download exactly this breakdown.
2 RP2 — Check repair turnaround time (TAT)
- Open the Repair TAT tab and set a date range.
- Note that only DELIVERED repairs with a recorded completion date are included in this analysis — repairs still in progress are excluded entirely.
- Review the two side-by-side tables: TAT by Technician (jobs, average/min/max days) and TAT by Device Type, both sorted fastest-average first.
3 RP3 — Monitor upcoming warranty expiries
- Open the Warranty Expiry tab and choose a window using the "Expiring within" pill filter — 30, 60 (default) or 90 days.
- Review the table of active warranties expiring within that window, sorted soonest-first, with a Days Left badge colored red (≤7 days), amber (≤30 days) or blue (further out).
- Only warranties with Status = Active are ever shown here — expired or claimed warranties never appear regardless of date.
- Click Export CSV to download the customer/product/expiry list, e.g. to plan renewal outreach calls.
4 RP4 — Track IMEI stock movement
- Open the IMEI Movement tab and set a date range (filtered on the IMEI's creation/date-added).
- Review the Total, In Stock, Sold and Returned summary tiles, then the full table of individual IMEI entries with their status and linked customer/supplier.
5 RP5 — Compare brand-level sales performance
- Open the Brand Sales tab (no date filter — it covers all IMEI records ever entered).
- Review each brand's row: a proportional bar showing relative total unit volume, plus In Stock/Sold/Returned/Defective counts and a Sold % figure colored green (≥70%), yellow (≥40%) or grey (below).
6 RP6 — Find ageing IMEI stock
- Open the Stock Ageing tab and use the "Show stock older than" pill filter — All, 30d+, 60d+ or 90d+ — to focus on units that have sat In Stock the longest.
- Review each row's Days In Stock badge, colored grey (≤30d), yellow (31-60d), orange (61-90d) or red (>90d), sorted oldest-first.
7 RP7 — Review technician performance
- Open the Technician tab and set a date range.
- Review Total Jobs, Completed and Total Revenue summary tiles, then the per-technician table showing Jobs, Done, Active, Avg TAT (delivered jobs only), Labour, Parts and Total revenue, sorted highest-revenue technician first.
8 RP8 — Track OEM warranty claims
- Open the OEM Claims tab — only repairs that have an OEM Claim Number recorded are shown here, sorted most-recent claim date first.
- Use the All/Pending/Approved/Rejected pill filter (each showing a live count) to narrow the list by OEM Claim Status.
- Review each claim's Job #, Customer, Device, OEM Claim No, Claim Date, Claim Status and the underlying repair's own Status.
9 Export or refresh any tab
- Click Export CSV in the top-right of whichever tab is active to download that tab's current filtered view as a CSV file.
- Click Refresh in the page header to reload repairs, warranties and IMEI data from the server without leaving the current tab.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
Tab strip (RP1–RP8) | Switches between Repair Revenue, Repair TAT, Warranty Expiry, IMEI Movement, Brand Sales, Stock Ageing, Technician and OEM Claims. |
Refresh | Reloads all three underlying datasets (repairs, warranties, IMEI) from the server. |
From / To date range | Filters rows by creation date; present on Revenue, TAT, IMEI Movement and Technician tabs. |
Export CSV | Downloads the currently visible, currently filtered rows of the active tab as a CSV file with the same column labels shown on screen. |
Expiring within (30/60/90 days) | Warranty Expiry tab filter controlling how far ahead to look for active warranties nearing their expiry date; defaults to 60 days. |
Show stock older than (All/30d+/60d+/90d+) | Stock Ageing tab filter limiting the list to In Stock IMEI units at or above the selected age. |
OEM claim status filter (All/Pending/Approved/Rejected) | OEM Claims tab filter with a live count per option. |
Days Left badge (Warranty Expiry) | Red at 7 days or fewer, amber at 30 or fewer, blue otherwise. |
Days In Stock badge (Stock Ageing) | Grey ≤30 days, yellow 31-60, orange 61-90, red beyond 90. |
Sold % (Brand Sales) | Percentage of a brand's total IMEI units currently marked Sold; green ≥70%, yellow ≥40%, grey below. |
Avg TAT (Repair TAT / Technician) | Average days between repair creation and completion, computed only from DELIVERED jobs with a completion date. |
Total row (Repair Revenue) | A summary row at the bottom of the technician table totalling Jobs, Labour, Parts and Total Revenue across everyone. |
Tips & Best Practices
- Use the Warranty Expiry tab's 30-day window as a weekly routine to build a renewal call list before customers' cover actually lapses.
- Cross-check Repair TAT against Technician performance — a technician with high revenue but a poor Avg TAT may be taking on too many jobs at once.
- Run Stock Ageing at 60d+ or 90d+ periodically to spot dead refurbished/buy-back stock that needs a price cut or bundle offer to move.
- Export CSV from OEM Claims regularly if you deal with multiple OEMs, since this is the only place claim status is tracked centrally.
Troubleshooting & FAQ
A tab shows no data at all.
Repair TAT looks empty even though I have repairs.
One tab is missing but the others loaded fine.
The CSV I exported doesn't match what I see on screen.
🧑💻 Developer Notes
Source component(s):
frontend-app/pos-app-electronics/src/pages/electronics/ElectronicsReportsPage.jsxfrontend-app/packages/pos-react-lib/src/pages/electronics/ElectronicsReportsPage.jsx (actual implementation)
Backend endpoints used:
GET /electronics/repairsGET /electronics/warrantiesGET /electronics/imei
Related tables (db-core repositories):
ElectronicsRepairElectronicsWarrantyElectronicsIMEI
Feature flag key: billing
Thin re-export in pos-app-electronics; real component lives in shared pos-react-lib package. All three data sources are fetched once via `Promise.allSettled` on mount (not per-tab), and every one of the 8 tabs is a pure client-side filter/aggregation (`useMemo`) over that same in-memory data — there is no dedicated reports API, so this page will not scale gracefully to very large repair/IMEI histories since all rows are downloaded up front. Mounted at `/electronics/reports` behind `