Haji Omer Sheno
Haji Omer ShenoHaji Omer Sheno
Back to blog
September 14, 20267 min read

Pharmacy Is Not Just Inventory: Why Generic POS Systems Fall Short

Pharmacy ManagementDigital HealthHealthcare ITSoftware ArchitectureInventory ManagementHealth_Tech

Introduction

One of the common assumptions I encounter when discussing pharmacy software is:

Why not just use a normal inventory management or POS system for a pharmacy?

At first glance, the idea seems reasonable.

A pharmacy purchases medicines, stores them, sells them, and needs to know how much stock remains. A typical inventory system can already handle products, purchases, sales, stock quantities, suppliers, and receipts.

So why build a specialized pharmacy management system?

After more than four years of working with pharmacy and healthcare systems, I have learned that inventory is only one component of pharmacy operations.

A pharmacy does not simply sell products.

It manages prescriptions, dispensing, medicines, patients, batches, expiry dates, dosage instructions, stock locations, payments, insurance processes, and traceability.

That difference becomes extremely important when the system moves from a simple demonstration to a real pharmacy environment.


1. The Mental Model of a Generic Inventory System

A traditional inventory or POS system often follows a relatively simple model:

Product → Stock → Sale → Receipt

For example:

Amoxicillin 500 mg
Quantity: 500
Unit price: 5 ETB

A customer purchases 10 units.

The system records:

Stock: 500 → 490

The transaction is completed and a receipt is generated.

For many businesses, this is perfectly reasonable.

But pharmacy operations introduce another layer of complexity.

The question is no longer simply:

“How many medicines do we have?”

Instead, we need to ask:

“What medicine was prescribed, what was approved, what was dispensed, from which batch, from which location, and under whose responsibility?”

That changes the entire design.


2. A Pharmacy Transaction Is Not Just a Sale

A pharmacy transaction can begin before any money changes hands.

A typical workflow may look like:

Prescription → Payment → Approval → Dispensing → Stock Movement → Prescription History

This distinction is fundamental.

For example, a pharmacist may create a prescription containing:

The prescription is then processed through the appropriate payment or insurance workflow.

Only after the required approval can the medicine proceed to dispensing.

The system therefore needs to understand the state of the prescription, rather than simply recording a sale.


3. Prescription Management

This is one of the biggest differences between a generic POS and a pharmacy system.

A POS generally asks:

What did the customer buy?

A pharmacy system needs to understand:

What was prescribed?

Those are not necessarily the same thing.

A prescription can contain multiple medicines, different doses, different frequencies, and different durations.

For example:

Prescription

Medicine Dose Frequency Duration Quantity Eg:- Medicine A500 mg 3 times/day5 days Medicine B20 mg Once/day10 days

The prescription itself becomes an important clinical and operational record.

The receipt is only one part of the transaction.


4. Payment Approval and Dispensing

Another important distinction is the separation between payment processing and dispensing.

In the workflow I work with, the process can be represented as:

Pharmacist creates prescription

Prescription sent to cashier

Payment / insurance process

Payment approved

Prescription becomes available for dispensing

Pharmacist dispenses medicine

Inventory is updated

This creates a controlled workflow.

The pharmacist should not simply select a product from inventory and press “Sell.”

The system needs to know whether the prescription is:

This is a workflow problem, not simply an inventory problem.


5. Batch and Expiry Management

Medicine inventory also has a major characteristic that ordinary inventory systems often don't model deeply enough:

The same medicine can exist in multiple batches with different expiry dates.

Imagine a pharmacy has:

Paracetamol 500 mg

BatchQuantityExpiryBATCH-A100March 2027BATCH-B200December 2027BATCH-C150June 2028

A basic inventory system might simply show:

Paracetamol 500 mg — 450 units

But that number alone is not enough.

The pharmacy needs to know which batch should be dispensed first.


6. FEFO: First Expiry, First Out

This is where FEFO — First Expiry, First Out becomes important.

The system should prioritize medicines based on expiry rather than simply the date they entered the warehouse.

For example:

BATCH-A expires first.

Therefore, when dispensing, the system should preferentially select BATCH-A where appropriate.

This reduces the risk of medicines remaining in stock until they expire.

So the inventory logic becomes something closer to:

Medicine → Batch → Expiry → Available Quantity → Dispensing

rather than simply:

Product → Quantity

That is a significant architectural difference.


7. Bin and Stock Location Management

Another area that is easy to underestimate is physical stock location.

A pharmacy may organize medicines using shelves, bins, cabinets, rooms, or other storage locations.

The system therefore needs to answer:

Where is this medicine physically located?

For example:

Medicine: Amoxicillin 500 mg
Batch: AMX-2026-04
Expiry: April 2028
Location: BIN-A-03

This becomes particularly important when pharmacies have large inventories.

A good pharmacy system connects the digital inventory record with the physical stock organization.


8. Dose and Frequency Are Not Inventory Fields

Consider these two prescriptions:

Take 1 tablet twice daily for 5 days.

and:

Take 2 tablets once daily for 5 days.

Both could involve the same medicine.

But they represent different clinical instructions.

Therefore, a pharmacy system needs to model concepts such as:

These are not merely attributes of a product.

They belong to the prescription and dispensing workflow.

This is another reason why simply adding a dose column to a generic inventory table does not turn an inventory system into a pharmacy management system.


9. The Inventory Ledger Is More Important Than the Stock Number

Another architectural principle I consider important is that the system should not treat the current stock quantity as the entire truth.

Instead, the system should maintain a history of stock movements.

For example:

Opening Stock

Purchase Receipt

Transfer

Dispensing

Return

Adjustment

Damage / Expiry

The current quantity is essentially the result of these movements.

This provides better traceability.

If someone asks:

Why does the system say there are 73 units remaining?

the system should be able to explain the movements that produced that balance.


10. Prescription History Is Different From a Receipt

This is another important distinction.

A receipt tells us about a financial transaction.

A prescription record tells us about the medicine-related workflow.

A pharmacy system should therefore preserve meaningful history around:

This creates a much richer operational history than a simple POS receipt.


11. Why “Just Add Pharmacy Features” Can Become a Problem

A common development approach is:

Build a generic inventory system first, then add pharmacy features later.

Sometimes this works for a small application.

But there is an architectural risk.

If the original system was designed around:

Product → Sale → Receipt

then later introducing:

Prescription → Approval → Dispensing → Batch → FEFO → Patient → Stock Ledger

can create a lot of complexity.

You may end up fighting the original data model rather than designing the correct domain model.

That's why I believe the better approach is:

Start with the pharmacy workflow, then design the inventory around it.


12. The Architecture Should Follow the Domain

The important lesson isn't that generic inventory software is useless.

It isn't.

Generic inventory software is useful for many businesses and can manage basic pharmacy stock.

The problem comes when we expect it to fully represent pharmacy operations without modeling the pharmacy domain.

A more appropriate conceptual model is:

                    Pharmacy System
                          │
          ┌───────────────┼───────────────┐
          │               │               │
     Prescription      Payment        Inventory
          │               │               │
          │           Approval        Batch / Lot
          │               │               │
          └───────────────┼───────────────┘
                          │
                      Dispensing
                          │
                   Stock Movement
                          │
                   Patient History

The inventory component is therefore part of the pharmacy system, not the pharmacy system itself.


Conclusion

After working with pharmacy and healthcare systems for more than four years, one lesson has become clear to me:

Medicine is inventory, but pharmacy is much more than inventory.

A generic inventory system can answer:

“How much stock do we have?”

A pharmacy management system should be able to answer much more:

These aren't simply additional features.

They represent a different domain model and workflow.

The best pharmacy software isn't the one with the most buttons.

It's the one that correctly models how a pharmacy actually works.

Real Problems. Practical Solutions. Lasting Impact.