How to use this app

How to use the Stock Count app

M-KOPA Nigeria's end-of-month stock count. Stock controllers and the WH team scan device serials; admins reconcile the scans against the expected inventory (the manifest), explain or fix every difference, and sign each region off for audit.

Who uses it

Month-end checklist for regional admins

  1. Before the count: in Scanner access, check every stock controller in your region is mapped to the right location(s), including relief cover.
  2. After the count: open My actions to see what's left per location, then click Open on each one (or go to Reconciliation — it opens on your region).
  3. Work through the fix panels first (they explain many rows at once):
    • Found at a shop, still on the WH list → Count at shop, send to WH.
    • Scans saved under the wrong location → Propose move.
  4. Then give every remaining Missing and Unexpected row a reason code (click the Reason cell, or bulk / template).
  5. For real phones on no list, use U02 / U03 / U04 — they go to an auditor as floor additions.
  6. DSR re-codes: in My actions, click the purple DSR re-code number. Reconciliation opens on just those phones (each shows last month's DSR details). If they're still with the same DSR, click Carry forward M01. If something else happened (sold, stolen, back in the WH…), click the phone's Reason cell and give that code instead — any reason answers it, and the DSR custody case closes.
  7. Submit your region. It turns Ready to submit by itself in My actions → Region sign-off once the count window has closed, every Missing and Unexpected row has a reason, nothing is waiting for an auditor and no M01 is missing its DSR details. Click Submit for audit, review any warnings and confirm, as preparer, that the reasons reflect what was found. Your name, the time and your confirmation are recorded and go into the auditor's evidence pack.

Month-end checklist for auditors

  1. Open the Audit desk and pick the count month. The tiles show what's waiting for you.
  2. Decide the queues first — move batches and floor additions. A region can't be approved while it has any pending.
  3. In Region readiness, look at each submitted region: % explained, blockers and quality flags (Other reasons, M07 without a case reference, M01 without DSR details, M12, DSR cases stuck 3+ months, large bulk-applied reasons). Use Review to see the detail in Reconciliation and Serial search for any single phone.
  4. Draw sample to pick random explained variances, check them in the field, and fill in the result columns of the downloaded file.
  5. Approve the region, or Return it with a note saying what needs fixing.
  6. Download the region's Evidence pack for the audit file.

1. Scanning — Shop Controllers & Warehouse Team

Start a session

While scanning

What the badges mean

Good to know

2. Scanner access — who can scan where

Admin → Scanner access. The scan app only offers each person their assigned locations, and the server refuses scans anywhere else.

3. The Admin page

IMEI → model check (super admin)

Manifests & settings → IMEI → model check. The app learns which model each IMEI prefix (TAC) belongs to from MkNet — the September 2026 export plus every manifest you upload — and rebuilds automatically after each upload. A TAC is trusted with 20+ phones and 99%+ on one model; rarer ones only warn. Modes: Warn (pre-count testing) and Block (count days — switch it on before the window opens). From the same page: download saved scans with the wrong model, the scans the check stopped, and scans saved with an unknown IMEI prefix (with whether they're on any manifest), add a one-serial exception for a phone you've checked by hand, or pin a TAC to a model (e.g. a new model not yet in MkNet). Every change is logged. Manifest uploads also list rows whose MkNet model contradicts the IMEI, to send for correction. The master export has two new columns: imei_model_family and model_check.

4. Reconciliation numbers explained

The page is split into six numbered sections — 1 Sign-off · 2 Summary · 3 Breakdown · 4 Condition · 5 Fix variances · 6 Serial detail & reasons — with a jump bar at the top.

Pick a Count month and Manifest type (Shop or Warehouse), then Load reconciliation. Regional admins land on their own region; click any region row to view another.

Expected — items the manifest says should be there.
Scanned — items actually scanned (each phone once).
Matched — scanned at the location the manifest expects. Matching is location-strict.
Missing — expected there, not scanned there.
Unexpected — scanned there, not on that location's list. Either Misplaced (on another location's list — see "Belongs at") or not in any manifest.
Overall completion — Matched ÷ Expected.   Coverage — how many Missing / Unexpected rows have a reason.

5. Explaining variances — reason codes

Every reason comes from one fixed list, so everyone records the same thing the same way. Some codes need one extra detail; the note is always optional (except for Other).

Missing — on the list, not found here

CodeReasonDetail needed
M01With DSR: serial returned to shop due to unaccepted allocationDSR name + phone, or SE/FSM name + 9-digit Freshdesk ticket ID, or "Don't know who — CAT to look up" (the Central Allocation Team fills the details in later)
M02Returned to warehouse: transfer not postedWhich WH location
M03Dispatched to shop: transfer not postedUsually set automatically (section 6)
M04Vendor serial errorCorrect serial, if known
M05At shop: missed during count—
M06Held by an internal teamTeam (CC Team Leads / Fraud / Repair / Other)
M07Not found: stolen, lost or under Fraud investigationCase reference (or "pending")
M08Sold: system not yet updatedSale reference, if known
M09Used as swap replacement: swap not processed on MkNetCustomer / swap reference
M10At repair / serial repaired, not yet received backRepair centre
M11In transit between locationsFrom → to, or waybill no.
M12Not counted: no scannable barcode (serialisation in progress) — up to the Sep 2026 count onlySerialisation plan / target date
M99OtherNote of 15+ characters

Unexpected — scanned, on no list here

CodeReasonResult
U01Wrong serial / IMEI 2 scannedNot counted. Optionally add the IMEI 1 if the phone was checked.
U02Vendor serial error: correct serialFloor addition — add the wrong serial it replaces, if known
U03Real stock; but not captured in location manifestFloor addition — say where it came from
U04Swap/customer return process not completed on MkNetFloor addition — note required
U05Dispatched from WH: MkNet transfer not postedSet automatically by Count at shop, send to WH; counts at the shop
U99OtherNote of 15+ characters

Three ways to log reasons

Regional admins can only set reasons for locations in their regions; other regions show read-only.

6. Fixing variances

Three panels in Reconciliation fix whole groups at once — use them before logging reasons row by row.

Found at a shop, still on the WH list

The WH dispatched the phones but never transferred them on MkNet (e.g. phones at Ile-Ife 2 still listed under the main warehouse).

Scans saved under the wrong location

A controller forgot to switch location between safes (Ajah 1 → Ajah 2) or picked a location they don't serve.

Floor additions — real phones on no list

Misplaced phones (on another location's list) are never floor additions — they're already on the books. Use the move or WH-transfer panels instead.

7. Signing off

Sign-off runs region by region.

  1. Submit for audit — the region's own admin (as preparer) from My actions → Region sign-off once the region is Ready to submit, or the super admin at any time from Reconciliation.
  2. Approve or Return (Auditor or Super) — from the Audit desk, or the sign-off panel in Reconciliation. Approving freezes a snapshot of the region's numbers.

Approval is blocked while the region has:

Rows without a reason give a warning that the approver can knowingly override.

Submitted or approved regions are locked. Reasons, WH transfers, moves and floor additions for that region and month can't be changed (Reason cells show "Locked"). To correct something, the super admin clicks Reopen, the region fixes it, then it's resubmitted and approved again. Every reason change — who, when, before and after — is kept and shown under Reason change history in Serial search.

Statuses: reconciling → submitted → approved, or returned.

8. Exports

Tip: the reasons template, Transfers to post and MkNet corrections files protect serials from Excel turning them into "3.5E+14". For the other exports, widen the serial column or format it as a number with no decimals before saving — never re-import a file where the serials look like 3.5E+14.

9. DSR stock (sales)

DSRs count in the sales app. Their counts reach this app automatically and are compared with each DSR's allocated phones. Matching is per DSR, not per depot.

Who does what

Reasons for DSR stock

Missing: M07, M08, M13 (returned to depot), M14 (DSR did not take part), M15 (DSR exited), M99. Unexpected: U01, U03, U99. M16, U06 and U07 are set by the system.

Custody swaps

When a phone allocated to DSR A is counted by DSR B, the system pairs the two rows and gives them M16 and U07 (U06 if the phone is still on a shop's list). Either side's SE/FSM can confirm the pairing or dispute it with a note. A dispute withdraws the system reasons, so both rows need a reason from a manager, and the audit desk sees the dispute. A phone counted by both its owner and another DSR is not paired — it becomes an audit flag.

Audit flags (RSTL)

Clear each flag with a review note of at least 5 characters. A region cannot be approved while flags are open. Exports on the audit desk: Master export (every phone with status and reason), Flags export and Evidence pack (sign-off trail, flags with review notes, all stock).

Questions or something not working? Contact Ayodele.