Independent and not affiliated with the FDA, MHRA, ISPE, PDA, or any agency. Get the appgoutham@madhadi.com
madhadi.comData Integrity & GxP Quality
Browse all topics -> Articles Templates & Procedures Learning paths GlossaryScenariosToolsRegulatory ReferencesLearning PathsTopics About Start here
Form Plug-and-play starting point Quality Assurance

Worksheet: Recall Reconciliation Ledger

A plug-and-play lot-level and consignee-level recall reconciliation worksheet: the closing identity, a per-consignee breakdown, a residual-explanation table, and a multi-lot roll-up, with instructions and a fully worked specimen.

Document type: Form

Read and copy the template below into your own quality system. It is a generic starting point for your own internal use, provided as is, with no warranty; see the Terms and License. Adopting it does not by itself create compliance.

This is a ready-to-use worksheet for the arithmetic that proves a recall worked: accounting for every unit of an affected lot, from what was manufactured to what came back, was destroyed, was already used, or remains unaccounted for. It is the single most-cited weak point in recall execution, firms run the recall but cannot show where the units went, so this worksheet forces the ledger to close, or forces a documented explanation where it does not. Replace every <<FILL: ...>> placeholder with your own specifics. A fully worked specimen follows. This document is educational and general; confirm your own reconciliation tolerance and disposition rules with QA before relying on any figure here.

Use this worksheet with the recall and field action plan and, for a mock exercise rather than a real action, with the mock recall exercise protocol.

Document control header

FieldEntry
Worksheet titleRecall Reconciliation Ledger
Worksheet number<<FILL: FORM-ID, e.g. FRM-QA-041>>
Version<<FILL: version, e.g. 1.0>>
Governing plan/SOP<<FILL: recall plan/SOP-ID>>
Recall reference<<FILL: recall reference number>>
Completed by, date<<FILL>>

Instructions

  1. Complete one row of Part B for every lot within the recall’s scope. A recall covering a single lot has one row; a recall covering a campaign or all lots within expiry has one row per lot, rolled up in Part E.
  2. The identity that must close for each lot is: Distributed = Returned + Destroyed-in-place + Used/Dispensed + Unaccounted. Every category is supported by a record, a shipping log, a consignee response form, or a destruction certificate; a number with no supporting record is not a completed row.
  3. Where the recall depth reaches individual consignees (retail or consumer/user level), complete Part C, the consignee-level breakdown, for at least the lot or lots where the aggregate ledger in Part B does not close cleanly, or for every lot if your recall strategy calls for full consignee-level reconciliation.
  4. Complete Part D, the residual-explanation table, for every unaccounted quantity greater than zero. “Unaccounted” without an entry in Part D is exactly the gap an inspector asks about first.
  5. Complete Part E only where the recall covers more than one lot, to show the combined position across the whole action.
  6. Do not force the ledger to close by padding a category with a guess. A residual that does not close within tolerance is reported as open and investigated, not rounded away.

Part A: Recall and product identification

FieldEntry
Recall reference<<FILL>>
Product, strength, presentation<<FILL>>
Recall class<<FILL: I / II / III>>
Recall depth<<FILL: consumer/user, retail, or wholesale>>
Reconciliation tolerance in force<<FILL: e.g. residual within 2 percent of distributed quantity, or explained regardless of percentage>>

Part B: Per-lot reconciliation ledger

Complete one row per lot. The “Check” column is Returned + Destroyed-in-place + Used/Dispensed + Unaccounted; it must equal the Distributed figure in the same row.

LotManufacturedDistributedReturnedDestroyed in placeUsed/dispensedUnaccountedCheck (sum)Percent accountedWithin tolerance
<<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>>Yes / No
<<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>>Yes / No

Percent accounted formula: (Returned + Destroyed-in-place + Used/Dispensed) / Distributed x 100. Unaccounted is the residual, Distributed minus the sum of the other three categories, and is never itself counted as “accounted for.”

Part C: Consignee-level breakdown (for lots reaching retail or consumer/user depth)

Complete one row per direct consignee for the lot(s) named. This is the ledger a consignee-level effectiveness check draws on and the record that lets you answer, for a specific account, exactly what happened to the units they received.

LotConsigneeQuantity shipped to consigneeQuantity returned by consigneeQuantity destroyed by consignee (certificate ref)Quantity dispensed/used (per response form)Quantity unaccountedResponse form receivedNotes
<<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>>Yes / No<<FILL>>
<<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>>Yes / No<<FILL>>

The sum of “Quantity shipped to consignee” across all rows for a given lot should equal the “Distributed” figure for that lot in Part B; if it does not, the gap is a data reconciliation problem in its own right and is resolved before the lot’s Part B row is treated as final.

Part D: Residual (unaccounted) explanation

Complete one row for every unaccounted quantity greater than zero in Part B or Part C. A residual is not itself a failure; an unexplained residual is.

LotConsignee (if applicable)Unaccounted quantityExplanation categorySpecific basis / evidenceRisk assessment
<<FILL>><<FILL>><<FILL>><<FILL: administered/dispensed before notice arrived / normal patient consumption of dispensed product / lost at a closed account / in transit at cutoff / other>><<FILL: the specific record, response, or reasoning supporting this category, not a guess>><<FILL: whether the residual quantity, if actually still in circulation, changes the health hazard conclusion>>
<<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>>

“Explanation category” is not itself the explanation. “Administered before notice arrived” only counts as an explanation when it is tied to a specific basis, a response form stating so, a dispensing record with a date before the notification date, or an equivalent record, not simply the category label copied into every row.

Part E: Multi-lot roll-up (where the recall covers more than one lot)

FieldEntry
Total lots in scope<<FILL>>
Total manufactured, all lots<<FILL>>
Total distributed, all lots<<FILL>>
Total returned, all lots<<FILL>>
Total destroyed in place, all lots<<FILL>>
Total used/dispensed, all lots<<FILL>>
Total unaccounted, all lots<<FILL>>
Combined percent accounted<<FILL>>
Lots with a residual outside tolerance<<FILL: list lot numbers, or "none">>

Part F: Conclusion and sign-off

FieldEntry
Every lot’s ledger closes (Part B “Check” equals “Distributed”)Yes / No
Every residual greater than zero has a Part D entryYes / No
Every residual outside tolerance carries a documented risk assessmentYes / No
Consignee-level breakdown complete where required by depthYes / No / N/A
Overall reconciliation conclusion<<FILL: closes within tolerance / open items remain, listed below>>
Open items carried to recall closure<<FILL: list, or "none">>
Completed by (name, signature, date)<<FILL>>
Reviewed by QA (name, signature, date)<<FILL>>

Acceptance criteria

This worksheet is complete and defensible when all of the following are true:

  • Every lot in the recall’s scope has a completed row in Part B, and the Check column equals the Distributed figure for every row, or the gap is carried into Part D as an explained or investigated residual.
  • Every category (returned, destroyed in place, used/dispensed) is supported by a real record, a shipping log entry, a signed response form, or a destruction certificate, referenced by number, not asserted from memory.
  • Every unaccounted quantity greater than zero has a Part D entry with a specific basis, not a category label alone.
  • Where the recall reaches retail or consumer/user depth, the consignee-level breakdown in Part C reconciles to the lot-level totals in Part B.
  • Any residual outside the stated tolerance carries a documented risk assessment addressing whether it changes the health hazard conclusion, and is reported in the recall closure package rather than quietly closed out.

References

21 CFR Part 7 (FDA recall policy and procedures, including recall strategy and effectiveness-check elements this ledger supports). 21 CFR 211.150 through 211.208 (distribution procedures and records that this worksheet’s source data draws on). DSCSA (21 U.S.C. 360eee et seq.), for verification and traceability data supporting consignee-level tracing where product is package-level serialized. See DSCSA and serialization. ICH Q9(R1), Quality Risk Management, for the risk assessment applied to an unexplained or out-of-tolerance residual.

Confirm the current version and clause numbers of each reference before issue.


Filled specimen

The following expands the reconciliation example for a sterile injectable recall into a fully worked ledger. The company, product, and numbers are illustrative; replace them with your own. This specimen matches the reconciliation example used in the companion article for lots AB1234, AB1235, and AB1240.

Part A:

FieldEntry
Recall referenceREC-2026-004
ProductFictional Bio sterile injectable, 50 mg/mL
Recall classClass I
Recall depthConsumer/user (hospital pharmacy and clinic level)
Reconciliation tolerance in forceResidual within 3 percent of distributed quantity, explained regardless of percentage

Part B, per-lot ledger:

LotManufacturedDistributedReturnedDestroyed in placeUsed/dispensedUnaccountedCheck (sum)Percent accountedWithin tolerance
AB123410,0009,2006,1001,5001,4002009,20097.8%Yes
AB123512,00011,8009,0001,2001,50010011,80099.2%Yes
AB12408,0000 (stock recovery, never distributed)n/a0000100%Yes

Part C, consignee-level breakdown for lot AB1234 (9,200 units distributed to 4 direct consignees):

LotConsigneeQty shippedQty returnedQty destroyed (cert ref)Qty dispensed/usedQty unaccountedResponse formNotes
AB1234Regional Hospital Network A4,0002,900600 (DC-2026-0410)47030Yes30 units in a satellite pharmacy inventory count not yet reconciled at closure
AB1234Regional Hospital Network B2,8001,900500 (DC-2026-0411)38020YesExplained as dispensed prior to notification per pharmacy log
AB1234Wholesaler C (sub-recall to 6 accounts)1,6001,000300 (DC-2026-0412)25050YesOne of 6 sub-accounts (30 units) never responded despite 3 contact attempts
AB1234Clinic Group D800300100 (DC-2026-0413)300100NoNon-responder; escalated to registered notice, see effectiveness check log
Total9,2006,1001,5001,400200Matches Part B row for AB1234

Part D, residual explanation:

LotConsigneeUnaccounted qtyExplanation categorySpecific basis / evidenceRisk assessment
AB1234Regional Hospital Network A30In transit / count timingSatellite pharmacy physical count scheduled after closure date; hospital confirmed units are within its controlled pharmacy system, not in patient hands, count to be finalized within 5 business daysLow risk: product remains in a controlled pharmacy environment, not administered; tracked to final count before recall file closes
AB1234Wholesaler C, sub-account30Non-responderSub-account did not respond to 3 contact attempts (calls 14, 17, 21 July); wholesaler’s own delivery record confirms shipment but not receipt confirmationMedium risk: unconfirmed location of a Class I product; escalated to wholesaler for site visit, tracked as an open item in Part F
AB1234Clinic Group D100Non-responderClinic did not respond to letter, phone, or a certified-mail follow-up; clinic’s status (open/closed) unconfirmed as of ledger completionMedium-high risk: unconfirmed for a Class I sterile injectable; escalated per the effectiveness-check non-responder procedure, held open pending resolution before recall termination is requested
AB1235(aggregate, not consignee-level required at this depth)100Normal patient consumptionConsistent with expected utilization rate for lot age at time of recall; no specific record required at wholesale-plus-retail depth per approved recall strategyLow risk: consistent with routine dispensing pattern, no signal of a systemic tracing gap

Part E: Not applicable in this specimen at the aggregate level shown, since only three lots are in scope and each is shown individually in Part B; a multi-campaign recall spanning many more lots would roll these into Part E totals the same way.

Part F, conclusion and sign-off:

FieldEntry
Every lot’s ledger closesYes, all three lots’ Check column equals Distributed
Every residual has a Part D entryYes
Every residual outside tolerance carries a risk assessmentYes (two medium-risk non-responder items carry a documented assessment)
Consignee-level breakdown complete where requiredYes, for lot AB1234 at consumer/user depth; lot AB1235 handled at aggregate level per approved strategy
Overall reconciliation conclusionCloses within tolerance for all three lots (97.8%, 99.2%, 100%); two open non-responder items (Wholesaler C sub-account, Clinic Group D) carried forward
Open items carried to recall closureWholesaler C sub-account site visit pending; Clinic Group D status confirmation pending. Both tracked on the recall tracking log and referenced in the termination request as open until resolved.
Completed byM. Duarte, Recall Coordinator, 24 July 2026
Reviewed by QAK. Ofori, QA Manager, 25 July 2026

The value of this specimen is in the two open non-responder rows, not the clean percentages. A 97.8 percent accounted figure reads as strong, but the worksheet still shows exactly two named accounts with an unresolved status, each with a specific escalation already underway, which is what lets the recall termination request in the companion package state a defensible position instead of a vague “recall complete.”

Common inspection findings this worksheet prevents

  • A reconciliation summarized as a single percentage with no lot-level or consignee-level detail behind it, so the residual cannot be traced to a specific account or explained.
  • An unaccounted quantity recorded with no entry explaining it, or explained only with a category label and no supporting record.
  • The consignee-level total does not sum to the lot-level distributed figure, revealing a data gap between the distribution records and the recall tracking log that was never caught.
  • Non-responding consignees dropped from the ledger instead of carried forward as an open, risk-assessed item.
  • A residual rounded away or omitted because it is small, rather than assessed for whether it changes the health hazard conclusion regardless of size.
  • The reconciliation ledger completed after the recall was already reported as terminated, rather than being the evidence the termination request was built on.

How to adapt this worksheet

  1. Set your worksheet number, governing plan, and recall reference in the header to match your recall file.
  2. Set your own reconciliation tolerance in Part A; confirm it with QA and state the basis (a validated allowance for known routine handling loss, or zero tolerance with mandatory explanation for any residual).
  3. Add a row to Part B for every lot in scope; for a large multi-lot campaign, keep Part B as the master table and use Part E for the roll-up your closure package actually reports.
  4. Scale Part C to your recall depth: skip it for a wholesale-only recall where consignee-level tracing is not part of your approved strategy, and state that decision rather than leaving it silently blank.
  5. Keep Part D current as effectiveness-check non-responders are resolved; an item open at first completion should be updated, not re-created, when it closes.
  6. Confirm every regulation in the References section against the current published version before issue.
Use madhadi.com as an app Full screen, works offline, one tap from your home screen.