ADMFm, Affordable Diagnostic and Medicines Facility for Malaria. Test, treat, track.

Module 9 of 13

Counterfeit and recall

An alert is raised by the verification platform itself, at the moment a client or a provider checks a pack. From there it becomes a case with an investigation trail, a NAFDAC reference and an outcome, and a recall becomes a notice pushed against a serial range rather than a bulletin about a lot number. Every case on this screen resolves back to the individual pack that triggered it.

SN 58, number of counterfeit commodity alerts detected and resolved

100.0%

Pass: On targetPilot target 100%

6 of 6 alerts closed with a NAFDAC reference and an outcome. None left open at the window end

SN 59, percentage of affected batches recalled within approved timeline

100.0%

Pass: On targetPilot target 100%

11 days against an approved 14 day timeline, 3 days inside it

Alerts investigated, layer A

6

No target set

Each with a 6 step trail. Detected between 2026-05-21 and 2026-07-09, median 13.5 days to resolution, range 9 to 17

Alerts raised, layer B

20

No target set

Alert volume at programme scale across 400 outlets and 24 LGAs. The 6 cases below are the sampled ledger, where the investigation trail can be read case by case

Three outcomes, not one

Reported with equal weight. An alert stream that returned counterfeit every time it fired would not be a credible detection system.

Of 6 cases, 3 were confirmed counterfeit. 2 were genuine product that had leaked out of the subsidised channel, which is a different problem needing a different response, and 1 was a false alarm cleared by laboratory screening. All three are shown below because all three are what a working alert stream looks like.

Fail: Confirmed counterfeit50% of cases

3of 6

Laboratory screening confirmed the pack was not genuine product. The serial was cloned or fabricated.

Response. Enforcement. The batch is quarantined, NAFDAC enforcement is notified and the supplying party is delisted.

Median 11 days to resolution.

Attention: Diverted genuine stock33% of cases

2of 6

The product was genuine, but the serials had left the subsidised channel and re-entered outside it. This is leakage, not falsification.

Response. Commercial and contractual. Serials are traced to the non-programme channel and the wholesaler contract is reviewed.

Median 15 days to resolution.

Pass: No product defect found17% of cases

1of 6

No fault in the product. The alert came from a mis-keyed code at verification, which the platform correctly treated as suspicious until cleared.

Response. Guidance. Verification instructions are re-sent to the outlet and the case is closed without enforcement.

Median 16 days to resolution.

Where the alerts came from

An alert is a by-product of verification, so the trigger, the channel and the location are already on the event. Nothing separate has to be reported by hand.

Trigger at verification

  • Verification returned a code already used3
  • Verification returned an unrecognised code3

Verification channel

  • Sproxil app scan3
  • SMS to shortcode1
  • USSD1
  • Web check1

Severity at triage

  • High3
  • Medium3

State and LGA

  • Abia, Isiala Ngwa North1
  • Borno, Jere1
  • Borno, Konduga1
  • Lagos, Alimosho1
  • Lagos, Ikorodu1
  • Lagos, Mushin1

A code already used and an unrecognised code are different failures. The first says a genuine serial has been cloned or re-labelled after a legitimate check; the second says the code was never issued against a released batch. Both arrive through the same four channels module 2 reports coverage on, which is why alert detection costs the programme no separate reporting burden.

Serialisation and authentication, module 2

Every alert, layer A

6 cases, 6 closed, 0 open

Open the trail on any row to see the six investigation steps, or the serial to open the pack in the trace timeline.

Layer A granular ledger, 6 COUNTERFEIT_ALERT events. Every case carries a serial, so a NAFDAC reference resolves to an individual pack.

  • 2026-05-21
    Outlet and location
    Yerima Medicine StoreOUT-0254, Jere, Borno
    Serial that triggered it
    RDT08-031671Malaria rapid diagnostic test, batch BAT-08
    Trigger and channel
    Verification returned a code already usedSproxil app scan
    Severity
    Fail: High
    Outcome
    Fail: Confirmed counterfeit
    NAFDAC reference
    NAFDAC-INV-2026-0700
    Closed
    2026-05-30
    Days to resolution
    9
    Investigation
  • 2026-05-29
    Outlet and location
    Al-Amin Patent and Proprietary Medicine StoreOUT-0261, Konduga, Borno
    Serial that triggered it
    AL212-013953Artemether-lumefantrine 20/120, batch BAT-12
    Trigger and channel
    Verification returned an unrecognised codeSproxil app scan
    Severity
    Attention: Medium
    Outcome
    Attention: Diverted genuine stock
    NAFDAC reference
    NAFDAC-INV-2026-0704
    Closed
    2026-06-11
    Days to resolution
    13
    Investigation
  • 2026-06-05
    Outlet and location
    Hope Drug StoreOUT-0078, Ikorodu, Lagos
    Serial that triggered it
    RDT08-001618Malaria rapid diagnostic test, batch BAT-08
    Trigger and channel
    Verification returned an unrecognised codeWeb check
    Severity
    Fail: High
    Outcome
    Fail: Confirmed counterfeit
    NAFDAC reference
    NAFDAC-INV-2026-0701
    Closed
    2026-06-16
    Days to resolution
    11
    Investigation
  • 2026-06-25
    Outlet and location
    Nkemdi Patent Medicine StoreOUT-0004, Alimosho, Lagos
    Serial that triggered it
    RDT05-033001Malaria rapid diagnostic test, batch BAT-05
    Trigger and channel
    Verification returned a code already usedSMS to shortcode
    Severity
    Attention: Medium
    Outcome
    Attention: Diverted genuine stock
    NAFDAC reference
    NAFDAC-INV-2026-0703
    Closed
    2026-07-12
    Days to resolution
    17
    Investigation
  • 2026-06-26
    Outlet and location
    Grace Patent Medicine StoreOUT-0201, Isiala Ngwa North, Abia
    Serial that triggered it
    RDT02-041511Malaria rapid diagnostic test, batch BAT-02
    Trigger and channel
    Verification returned a code already usedSproxil app scan
    Severity
    Fail: High
    Outcome
    Fail: Confirmed counterfeit
    NAFDAC reference
    NAFDAC-INV-2026-0702
    Closed
    2026-07-10
    Days to resolution
    14
    Investigation
  • 2026-07-09
    Outlet and location
    Emeka ChemistOUT-0052, Mushin, Lagos
    Serial that triggered it
    AL110-023119Artemether-lumefantrine 20/120, batch BAT-10
    Trigger and channel
    Verification returned an unrecognised codeUSSD
    Severity
    Attention: Medium
    Outcome
    Pass: No product defect found
    NAFDAC reference
    NAFDAC-INV-2026-0705
    Closed
    2026-07-25
    Days to resolution
    16
    Investigation

NAFDAC-INV-2026-0700, confirmed counterfeit

Raised at Yerima Medicine Store, Jere, Borno, and closed 9 days later.

Serial that triggered it
RDT08-031671
Commodity and batch
Malaria rapid diagnostic test, BAT-08
Trigger
Verification returned a code already used
Channel
Sproxil app scan
Detected
2026-05-21
Closed
2026-05-30
Alert event
E012447
Action taken
Batch quarantined, NAFDAC enforcement notified, supplier delisted
  1. Step 1 of 6

    Alert raised automatically by the verification platform

    Sproxil platform

    2026-05-21
  2. Step 2 of 6

    Outlet contacted and pack photographs collected

    Sproxil field team

    2026-05-22
  3. Step 3 of 6

    Case referred to NAFDAC investigation and enforcement

    Sproxil compliance

    2026-05-23
  4. Step 4 of 6

    Physical sample collected from the outlet

    NAFDAC state office

    2026-05-25
  5. Step 5 of 6

    Laboratory screening completed

    NAFDAC Central Drug Control Laboratory

    2026-05-30
  6. Step 6 of 6

    Case closed, confirmed counterfeit

    NAFDAC and NMEP

    2026-05-30

LOT-CDX2604-01, Class II, precautionary

Post market quality surveillance flagged reduced test line intensity in a sampled pack

NAFDAC reference
NAFDAC-RECALL-2026-0113
Batch
BAT-01, LOT-CDX2604-01
Commodity
Malaria rapid diagnostic test, Codix Bio
Notice raised
2026-07-09
Batch released
2026-04-13
Expiry
2028-04-05

The affected serial range

RDT01-000001throughRDT01-046000

Serial level recall notice pushed to every outlet holding stock from the affected serial range

That is the capability, stated precisely. The notice was not a circular naming a lot code and asking outlets to check their shelves. It named 46,000 individual serials, and the platform already knew which outlets held which slice of them, because every custody hop was recorded against a serial range on the way down.

Custody hops behind the range, module 3

Completed in

11days

No target set

Against an approved timeline of 14 days, 3 days inside it. This is the reading behind SN 59

Units recovered

96.8%

No target set

44,528 of 46,000 units returned or accounted for. 1,472 units remain unaccounted for and the case closed with that stated

Outlets acknowledged

97.8%

No target set

391 of 400 notified outlets confirmed receipt of the notice

9 of 400 notified outlets never acknowledged the notice

Shown rather than netted off. This is the operationally interesting number on the whole recall, and the only figure on it that asks for an action.

A recall closes on recovery, not on notification. The 391 outlets that acknowledged the notice can be shown to have received it, read it and confirmed it. The remaining 9 cannot, and they sit alongside 1,472 units of the affected range that were never returned. Those two numbers are almost certainly related, and a supervision visit to those 9 outlets is the obvious next action.

A dashboard that reported only 97.8% acknowledgement and 96.8% recovery would look better and be less useful. The point of holding notification and acknowledgement as two separate events is precisely that the difference between them is actionable.

Recorded on the recall event: outlets notified, outlets acknowledged, units affected, units recovered. The demonstration ledger carries these as programme totals across all 400 outlets and does not name the 9 individually, since only the 20 sampled outlets carry granular events. In deployment acknowledgement is a per outlet event like every other, so that list is a filter on this table rather than a new report.

Notified, not acknowledged

9

No target set

2.2% of notified outlets. Escalates to a supervision visit, module 12

Units unaccounted for

1,472

No target set

Of 46,000 units in the affected range. The residual after 96.8% recovery

20 sampled outlets recorded as holding the affected range

The notice went to all 400 enrolled outlets. These are the ones in the granular ledger whose custody records name serials inside RDT01-000001 to RDT01-046000, with the consignments and the exact slices each of them received.

Layer A granular ledger, SHIPMENT_RECEIVED events against batch BAT-01 at a sampled outlet. Any serial opens the full custody chain.

From a NAFDAC reference to an individual pack, and back

An alert is not a separate register. It is one more event against a serial that already has a history.

Take any NAFDAC reference on this screen, open the serial beside it, and the trace timeline shows the same pack from the commodity side: the batch it was released in, every custody hop it took, the outlet that held it, and the alert as the point where the chain broke. The recall works the same way in the other direction, from a batch to the serial range to the outlets holding it. That is what makes a recall executable rather than announced.