CodeBold
Commerce
000
Trades / Pharmacy

Batch and expiry
on every line.
Read the limits first.

A chemist counts stock the way a grocer does — by batch, with a date on it — and this plugin does that properly. It is not, and does not pretend to be, a prescription system. Which half of your counter that leaves uncovered is the first thing to work out, so it is the first thing this page says.

01 / The day as it is

Two dates
on every box.

The same medicine sits on the shelf in three batches with three expiry dates, and the one that must go first is not the one at the front. Near-dated stock is money you have already spent and are about to throw away, and the only reliable way anyone finds it is by picking boxes up and reading them.

What stops happening

  • The same product in several batches, each with its own date
  • Near-dated stock discovered by hand, one shelf at a time
  • Returns to the supplier with no record of which batch went back
  • Stock counts that reconcile as a total but not as batches
  • Cost prices visible to whoever happens to be on the till
02 / At setup

Grocery &
convenience.

Not because a pharmacy is a grocery, but because it needs the same two things a grocery needs and no other profile turns them on: everything is barcoded, and some of it goes off.

You choose · Grocery & convenience

Switches on

Batches, as a real dimension of stock

Stock is held per product, per outlet, per batch — not as one number with a note. Two batches of the same medicine are two separate figures that add up to what is on the shelf.

Switches on

Expiry dates carried from receiving

The date goes on when the delivery is booked in, travels with the batch, and is there when you go looking for what is about to date out.

Switches on

Fast scanning at the counter

Barcode in, line on the sale, next customer. The profile assumes a queue rather than a browse.

Anything the choice leaves out is hidden, not removed. You are not locked out of a thing by picking wrong at setup — a clothes shop simply is not shown expiry dates it will never use, and a grocery is not shown a size matrix. Change your mind and it is all still there.

03 / What matters here

What actually
helps here.

01

Near-dated stock you can find

Because expiry is data rather than a sticker, the stock that is about to expire can be listed instead of discovered. That is the difference between returning it to the supplier and skipping it.

02

Cost prices off the shop floor

Twenty-six separate permissions mean a counter assistant can sell, refund and take stock without ever seeing what you paid. In a trade where margin varies enormously by line, that matters more than in most.

03

A ledger behind every movement

Nothing changes stock without recording who, when and why. When a count does not match, there is a trail rather than a shrug — and in a trade that gets inspected, a trail is worth having.

Batches, expiry and the ledger are in the free plugin. Stock valuation, which is what tells you the money sitting in near-dated stock, is in the paid one.

04 / What we do not do

What we
do not do.

This is the most important section on this page, and it is why the trade list points at it. A pharmacy has legal obligations this plugin does not meet. It is a shop system that happens to suit a chemist's stockroom, not a pharmacy system.

Not this

No prescriptions, and no drug schedules

There is no prescription record, no dispensing log, no Schedule H or H1 register, no prescriber details and no substitution checking. Nothing in this plugin knows that one product is prescription-only and another is not. Whatever you are legally required to keep, you must keep it somewhere else.

Not this

No pack-splitting

A strip of ten sold as four is not modelled. Stock moves in the unit you bought it in. Shops that routinely break packs will find the count drifts away from the shelf.

Not this

No expiry alerts

Expiry is recorded and can be reported on, but nothing emails you or blocks a sale when a date has passed. It will not stop somebody selling expired stock. That check stays human.

Not this

No wholesaler ordering integration

Purchase orders are raised and received here, but they are not sent electronically to a distributor and no catalogue is pulled in. Ordering happens the way it happens today.

We would rather lose the sale here than in week one.

05 / Questions

For this trade.

Can I use this as my pharmacy software?
No. Use it for the retail half — stock, counting, purchasing, the till — and keep your dispensing and register obligations in whatever system you use for them today. If you only run one system, this should not be it.
Does it really track batches, or is that a note field?
Really. Stock is keyed on product, outlet and batch together, so two batches of one medicine are two stock records. Counts, receiving and stock takes all work at that level.
Can it tell me what is about to expire?
It holds the dates, so the information is there to report on. What it will not do is chase you about it — there are no alerts.
Is the data on my own server?
Yes. It is a WordPress plugin writing to your own database. Nothing about your stock or your customers leaves your hosting, which for this trade is usually the point.
Can staff be stopped from seeing cost prices?
Yes, and that is a separate permission from selling, refunding or counting. A role can do all three without ever seeing margin.

Good for the stockroom.
Not for the dispensary.

If that division works for you, the free plugin will run your retail counter today. If it does not, we would rather you knew now.