Skip to content
Concept · Tier 1Platform

Pharmacy Retail and Dispensing Platform

A community pharmacy or small chain selling prescription and over-the-counter medicines alongside general goods, buying from several distributors at varying prices, holding stock in batches with different expiry dates, and dispensing against prescriptions from many prescribers.

The problem

A pharmacy is a retail business with clinical and regulatory obligations attached. Generic retail software handles the retail and none of the obligation: no batch, no expiry, no prescription record, no controlled register, no recall trace.

In scope

  • Product and formulary
  • Batch stock with expiry
  • Point of sale
  • Prescription dispensing
  • Patient records
  • Controlled items register
  • Purchasing and receiving
  • Pricing
  • Reorder
  • Multi-branch
  • Reporting
  • Access control

Out of scope

  • Clinical prescribing
  • Laboratory
  • Insurance claim adjudication beyond recording the scheme and amount
  • Wholesale and van sales — that is the Wholesale Distribution and Van Sales concept
  • Drug interaction checking against a licensed clinical database — integrable, not built.

What this would cover

Grouped by module — open the ones you want to read.

Formulary and products
  • Generic and brand name, strength, form, pack size, therapeutic class, prescription-only flag, controlled schedule flag, with explicit conversion between purchase pack and dispensing unit
Batch stock
  • Quantity by batch with expiry and supplier, per branch; stock is never held at product level in the underlying record
Point of sale
  • Over-the-counter sale, mixed baskets of medicines and general goods, cash, transfer, card and POS, split payment, receipt
Prescription dispensing
  • Prescriber and prescription recorded, patient identified, item and quantity dispensed against the prescription, partial dispensing with the balance owed tracked, refusal recorded with a reason
Patient records
  • Dispensing history by patient, allergy notes, chronic medication for refill prompting; light identity, since a pharmacy is not a clinic
Controlled items
  • Separate register with tighter access, full movement audit, running balance that must reconcile, and a physical-count reconciliation workflow
Picking rules
  • First-expiry-first-out suggested at dispensing and at sale, with an override that is logged
Purchasing
  • Purchase orders, receiving with batch and expiry captured at intake, distributor price history exposing which supplier is cheapest over time, returns and credits
Pricing
  • Cost-plus or fixed price per item, price by branch, price change history
Reorder
  • Levels and consumption-based suggestion, low-stock and out-of-stock reporting
Expiry management
  • Alerts at configurable horizons, expiry exposure valued in money, quarantine state, write-off workflow with reason and authorisation
Multi-branch
  • Stock per branch, transfers with goods in transit, branch-level reporting
Reporting
  • Sales by item, class and branch; margin by item using actual batch cost; dispensing volume by prescriber; expiry write-off; controlled item movement; stock valuation
Access control
  • Pharmacist, dispenser, cashier, stock controller, manager; controlled items and write-off authorisation restricted

What it would look like

Concept mockup — an illustrative interface, not a built system.

6

Low stock items

₦94,000

Expiring in 30 days

Reconciled

Controlled register

ProductBatchExpiryStatus
Amoxicillin 500mgB22014Nov 2026
Paracetamol SyrupB21987Oct 2026
Insulin VialB21654Sep 2026

Data model

  • Product → Batch → StockMovement
  • Sale → SaleLine
  • Prescription → Prescriber → DispenseRecord
  • Patient
  • ControlledRegisterEntry
  • PurchaseOrder → GoodsReceipt
  • Supplier
  • Branch → Transfer
  • WriteOff → Authorisation
  • User → Role

Invariants

  • Stock is held and moved at batch level, always.
  • Nothing leaves without a movement recorded against a sale, a dispense, a transfer, or a write-off with a reason and a person.
  • A batch past expiry cannot be sold or dispensed without a logged override.
  • The controlled register balance is derived from movements and must reconcile to a physical count; a discrepancy is a recorded event requiring authorisation, never a silent adjustment.
  • Selling price is captured on the sale line at the moment of sale; batch cost is captured from the specific batch dispensed, so margin is real rather than averaged.

Offline behavior

Point of sale must survive a network outage with queued local capture — a pharmacy cannot stop serving. Controlled items and stock transfers require connectivity, because a register that reconciles is worth more than uninterrupted convenience.

Hard trade-offs

The difficult decisions, stated plainly — not trimmed for length.

Batch capture at receiving is slower than counting boxes, and it is the foundation everything else stands on.

First-expiry-first-out, expiry forecasting, recall tracing, true margin and the controlled register all fail without it. A pharmacy unwilling to change its receiving process should be told plainly that it is buying a till.

Regulatory obligations here are specific and enforced — registration, record retention, controlled substance handling and inspection requirements.

Afivox builds to the obligations the pharmacy states and to its professional body's guidance; Afivox does not interpret the regulations on the pharmacy's behalf. [FILL: confirm PCN and NAFDAC record-keeping and controlled-substance requirements with the client's superintendent pharmacist before scoping. Do not publish specific regulatory claims on the website until verified.]

End state

What would be true about their day once this is running.

  • Every unit in the pharmacy has a batch, an expiry and a real cost.
  • Nothing leaves without a recorded movement and a name.
  • Expiry is a forecast with a money value, not a discovery on the shelf.
  • The controlled register reconciles and its discrepancies are events with authorisations.
  • A recall can be traced to the batches received and to where they went.
  • Margin is computed from what that batch actually cost.

Let's map how your operation actually runs.

One session. We look at what's breaking, and what we'd build around it — whether or not you hire us afterward.

Start the operations review