Inventory practice
FEFO expiration tracking — what it is, why pharmacies need it, what to look for.
FEFO stands for First Expired, First Out. It's the inventory rotation principle that says you dispense (or pull, or use, or return) the package that expires soonest, regardless of when it arrived on your shelf. For pharmacies, FEFO is non-negotiable — and the tools that surface it cleanly are surprisingly hard to find.
FEFO vs FIFO
Most general inventory systems are built around FIFO (First In, First Out): the oldest received stock leaves first. That's fine for non-perishable goods, but it's wrong for pharmaceuticals. Two scenarios:
- You receive a 12-month-dated bottle in January. In March, you receive a 6-month-dated bottle from a different shipment. Under FIFO, the January bottle goes out first; under FEFO, the March bottle goes out first because it expires sooner.
- Your wholesaler ships short-dated stock at a discount (this is common — it's how they recover cost on inventory they can't sell at full margin). FIFO would have you using older stock first; FEFO correctly prioritizes the short-dated discount stock so you don't end up writing it off.
FIFO and FEFO produce the same answer when expiration dates correlate cleanly with arrival date, which they don't, especially in a pharmacy where you're juggling lot rotations, manufacturer back-orders, and wholesaler short-dated specials.
What good FEFO software looks like
The minimum bar for "FEFO-aware" software is a list of inventory sorted by expiration date ascending. Beyond that, the things that actually move the needle:
- Color-coded urgency badges at thresholds you control. Red for "act this week," yellow for "plan this month," green for "routine." Glanceable from across a counter.
- Per-bottle granularity, not lot-level. Two bottles from the same lot can have the same expiration date, but for DSCSA serialized stock you want to track them as distinct rows so you can pull one and keep the other.
- Filters for "what expires within N days." Sometimes you want to see everything; sometimes you want a focused worklist of what to pull this week.
- Configurable thresholds per pharmacy. A high-volume retail pharmacy with fast turnover wants different thresholds than a low-volume institutional pharmacy holding inventory for months. Defaults of 30/90 days are reasonable for retail; 90/180 days is closer to right for institutional.
- One-click action from the list. "Mark Pulled" should be a tap, not a 5-step navigation. The faster the path from "I see expiring stock" to "I've marked it pulled," the more often the workflow actually happens.
How RxRescue does FEFO
The dashboard sorts by expiration date ascending by default — the most urgent bottles are at the top. Each row shows the badge color, drug name (resolved from a products catalog), lot, serial, expiration date in days-to-expiry format, and a "Mark Pulled" action. Filter chips let you switch between "All," "Below PAR," "Narcotics," and "Refrigerated" instantly.
Thresholds are set in Settings → Display:
- Red threshold (default 30 days) — items expiring within this window show red.
- Yellow threshold (default 90 days) — items expiring between red and yellow show yellow.
- Items beyond yellow show green.
Both thresholds are validated (red < yellow, yellow ≤ 730 days) and persisted per-pharmacy. Bumping them to 90/180 for institutional use takes 5 seconds.
Auto-expiration sweep
Once a bottle's expiration date passes, it's no longer eligible for any wholesaler's saleable-return credit window — and depending on the medication, may be hazardous to keep on the active shelf. RxRescue runs a daily sweep at app startup that automatically transitions any bottle whose expiration date is in the past from "Active" to "Expired." Expired rows drop off the active dashboard but stay in the audit log forever, so the post-expiry waste-disposal report is generated from real data, not memory.
The sweep runs once per calendar day, debounced via a per-device flag so the same bottle isn't auto-expired twice. It respects the same license-gate read-only mode that blocks manual writes, so an expired-license install can't accidentally rewrite expiration history.
Where FEFO connects to credit recovery
FEFO is the visibility piece. The action piece is pulling expiring stock for wholesaler return before the credit window closes. The two are the same workflow viewed from different angles, and we cover the credit-window mechanics in detail in our pharmacy returns guide.