Free AuditEnterprise AIShelfSense
Back to Blog
PharmacyJan 202612 min read

FEFO Compliance for Schedule H Drugs: Avoid CDSCO Notices

Why standard inventory systems fail Schedule H compliance and how batch-level FEFO tracking prevents costly inspection penalties.

A ₹50,000 fine does not arrive with a warning

In August 2024, a Drug Inspector walked into a 350-square-foot pharmacy in Madurai and found 14 strips of a Schedule H antibiotic — Cefixime 200mg, batch CX2301A — sitting behind a row of newer stock with a later expiry date. The older batch had expired 11 days prior. The newer batch, same drug, same strength, different manufacturer, still had nine months of shelf life. The pharmacy had plenty of Cefixime to sell. What it did not have was a system that ensured the older batch moved first.

The Drug Inspector issued a show-cause notice under the Drugs and Cosmetics Act, 1940 (Section 18(c), read with Rule 65). The pharmacy owner ended up paying ₹50,000 after a hearing that took two months and three trips to the Drug Control office. The penalty was for stocking expired drugs — a strict liability offence. It did not matter that no patient received the expired batch. It was on his shelf, behind the counter, and the inspector found it. That was sufficient.

This pharmacy uses a billing system that tracks inventory by product name and quantity. It does not track batches. It follows FIFO — First In, First Out — as a general stocking principle. FIFO is adequate for a warehouse moving homogeneous goods. For a pharmacy carrying 3,200 Schedule H SKUs with varying shelf lives, mixed batch deliveries, and scheme-induced surplus stock, FIFO is the specific mechanism by which expired stock ends up on active shelves.

The distinction that matters is between FIFO and FEFO — First Expiry, First Out. For Schedule H drugs, that distinction is the difference between a clean inspection and a ₹50,000 penalty.

Free Tool

Not sure how much you're losing to expiry?

Run a free inventory waste audit — find your bleeding SKUs in 60 seconds. No sign-up required.

Run free audit

What CDSCO inspectors actually look for

Drug inspectors check shelves first, paperwork second. This ordering matters because it determines what kind of violations surface.

The standard inspection sequence, based on conversations with pharmacists who have been through multiple inspections:

Step 1: Walk the shelves. The inspector picks a category — usually Schedule H antibiotics or Schedule H1 psychotropics. They pull products from different shelf positions: front, middle, back. They check expiry dates on pulled items. They look for expired stock on active shelves (immediate violation), near-expiry stock behind newer stock (evidence of poor rotation), and mixed batches where the shorter-dated batch is not in the dispensing position.

Step 2: Check the registers. The Schedule H register (Rule 65(14)) should show every transaction with batch number, expiry date, patient name, prescriber name, and dispensing date. The inspector cross-references shelf findings with register entries. Discrepancies trigger further scrutiny.

Step 3: Check destruction records. For expired Schedule H drugs, Form 29 requires documentation of drug name, batch number, quantity, expiry date, and method of destruction, witnessed by a pharmacist. Missing destruction records is its own separate violation.

Step 4: Purchase invoice reconciliation. The inspector may ask for recent purchase invoices for a specific drug: you purchased X units of batch ABC, dispensed Y per the register, should have Z remaining. Physical count should match. It almost never does when pharmacies do not track batches.

The entire inspection takes 45 minutes to two hours. The shelf walk takes 15 minutes — enough to pull 20-30 products and check dates. If even one expired Schedule H item surfaces, the inspection shifts from routine to investigative.

The structural gap between FIFO and FEFO

FIFO says: dispense the stock you received first. FEFO says: dispense the stock that expires first. For a single-supplier, single-batch scenario, these produce identical results.

The real world is not a single-supplier, single-batch scenario.

On March 5, you receive 100 strips of Amoxicillin 500mg from Distributor A, batch AM2401, expiry March 2026. On March 18, you receive 80 strips from Distributor B (different manufacturer), batch AMX2318, expiry September 2025. Distributor B's stock was manufactured earlier and has a shorter remaining shelf life, even though you received it later.

Under FIFO, you dispense AM2401 first (received first). Meanwhile AMX2318, expiring six months sooner, sits behind it. By August 2025, you still have AMX2318 with one month remaining, while AM2401 with seven months remaining sits in the dispensing position. If demand slows — perhaps the prescribing doctor switches antibiotics — AMX2318 expires on your shelf.

Under FEFO, you dispense AMX2318 first regardless of when you received it, because it expires first. The short-dated stock moves through the pipeline before it becomes a problem.

This is not an edge case. Multi-source procurement is standard — most pharmacies buy from 3 to 7 distributors — and different manufacturers assign different expiry dates. On any given shelf in a typical Indian pharmacy, you will find 2 to 4 different batches of the same molecule with expiry dates spanning 6 to 18 months. FIFO cannot navigate this. It was never designed to.

Why most pharmacy software fails at FEFO

Most pharmacy billing software in India offers cosmetic batch tracking. During goods receipt, you can enter a batch number and expiry date. The software stores this information. It may display it in a report.

But the software does not enforce FEFO at dispensing. When a pharmacist bills Amoxicillin 500mg, the software deducts from total inventory. It does not ask which batch. It does not default to the earliest-expiring batch. The batch number field exists for data entry purposes — it does not drive operational decisions.

True FEFO-compliant tracking requires four capabilities:

Batch-level inventory visibility. Not "you have 180 strips of Amoxicillin" but "you have 100 strips of batch AM2401 expiring March 2026 and 80 strips of batch AMX2318 expiring September 2025."

Automatic FEFO sequencing. When a pharmacist selects a drug, the system defaults to the earliest-expiring batch. Overrides are allowed but logged.

Expiry alerts at meaningful intervals. Automated alerts at 9, 6, and 3 months before expiry, calibrated to the distributor return window. If your distributor accepts returns up to 4 months before expiry, the 6-month alert gives you a 2-month action window.

Audit trail for regulatory compliance. Every dispensing event records which batch was used, which batch the system recommended, and any overrides. During inspection, this trail demonstrates FEFO as routine practice.

At ShelfLifePro, we built batch-level FEFO tracking because our first client — Kavitha at Dharmik Supermarket in Coimbatore — had this problem with perishables, and when we spoke to pharmacy owners in the same city, the identical structural gap appeared everywhere. We are not yet widely deployed in pharmacies — we have one real client and a working system. But the gap is universal.

The arithmetic: getting caught vs. getting compliant

Cost of a first-time violation:

  • Show-cause notice processing: ₹5,000-10,000 in pharmacy consultant fees
  • Penalty: ₹25,000-50,000 for a first offence
  • Time cost: 3-5 visits to Drug Control office, roughly half a business day each
  • Second-order cost: compliance flag on licence renewal

Total first-offence cost: ₹40,000-80,000. A second offence roughly doubles the penalty and introduces licence suspension proceedings.

Cost of implementing FEFO:

  • Batch-level tracking software: ₹500-2,000/month
  • Initial batch capture: 15-20 hours of staff time (₹2,250-3,000 one-time)
  • Ongoing overhead: 10-15 seconds per item during goods receipt
  • Staff training: one 2-3 hour session

Total first-year cost: ₹12,000-30,000. The penalty for a single violation exceeds the annual cost of the system that prevents it. This is not a marginal calculation.

The operational shift

Implementing FEFO is a habits project, not a software project. Three operational changes matter:

Goods receipt. Every item gets batch number and expiry date recorded before it goes on the shelf. Not after. Not during next stock take. At receipt. Every downstream function depends on accurate batch data captured here.

Shelving. New stock goes behind existing stock. Shortest remaining shelf life always goes in the dispensing position. This is the physical manifestation of FEFO, enforced every time, without exception.

Dispensing. Pick from the front position (earliest-expiring if shelving was correct). Software confirms by defaulting to the earliest-expiring batch. Mismatches between physical pick and software default get corrected immediately.


Most pharmacies that receive CDSCO notices are not careless. They followed the standard model — FIFO stocking, periodic manual checks, batch numbers in a register but not operationally enforced — and found that this model produces violations as a natural byproduct.

FIFO applied to multi-batch pharmaceutical inventory mathematically guarantees that some earlier-expiring stock gets bypassed. It is a deterministic outcome. FEFO replaces that certainty with a system that routes nearest-expiry stock to the nearest sale.

The pharmacy that treats batch-level FEFO as optional is the pharmacy that treats ₹50,000 fines as a cost of doing business. Most cannot afford that interpretation for long. If you run a pharmacy in India, [pharmacy-specific compliance tools](/pharmacy) and [automated FEFO enforcement](/pharmacy-compliance) are no longer optional investments — they are the cost of staying licensed.

See what batch-level tracking actually looks like

ShelfLifePro tracks expiry by batch, automates FEFO rotation, and sends markdown alerts before stock expires. 14-day free trial, no credit card required.