Pharmacy Software That Controls the Whole Sale Lifecycle

From ordered to paid to dispensed, Maduuka gives pharmacies a controlled workflow with stronger identity rules, FEFO batch suggestions, controlled-drug approvals, and reporting based on medicines actually served.

`ordered -> paid -> dispensed | partially_dispensed` Prescription validation before acceptance FEFO batch suggestions and atomic stock moves Refund, return, and audit paths built in

Workflow Map

See the full dispensing workflow in one view

The pharmacy flow separates validation, cashiering, dispensing, batch control, exceptions, and reporting so stock, cash, medicine handover, and audit history stay aligned.

Pharmacy dispensing workflow infographic showing the Maduuka flow from order validation to payment, dispensing, exceptions, and reporting

Why It Matters

A pharmacy sale should not be one blind till event.

In many generic POS systems, the cashier records the sale, stock drops immediately, and the audit story ends there. That is weak control for a pharmacy, especially when prescriptions, controlled medicines, partial dispensing, customer credit, or batch-level returns are involved.

Maduuka splits the work into permissioned steps so the business can see what was requested, what was paid for, what was physically dispensed, what remains pending, and what was refunded or returned later.

Pharmacist reviewing shelves and medicine stock inside a controlled pharmacy workflow

How the Pharmacy Workflow Works in Maduuka

Every important action is separated, timestamped, and traceable so stock, dispensing, and finance stay coherent.

1. Order Capture and Validation

  • A clerk selects medicines, links them to a patient profile or a walk-in name, and can attach a prescription reference.
  • Prescription orders enforce stronger rules: walk-ins cannot carry prescriptions, the patient must have a phone number, and controlled medicines cannot be sold without a prescription.
  • Before the order is accepted, Maduuka validates branch context, confirms the branch has a warehouse, and blocks the sale if branch stock is insufficient.

2. Cashier Review and Payment

  • The order is created with invoice items, but the pharmacy order stays in `ordered` state and no stock is deducted yet.
  • Cashiers review patient, branch, prescription reference, item preview, and available customer credit before taking payment.
  • Payment can be cash, mobile money, bank transfer, card, credit, or split tender, and Maduuka validates that the tender total exactly matches the invoice total.

3. Dispensing and Batch Control

  • After payment, the order moves to `paid`, Maduuka stamps who took payment and when, and writes a `payment_taken` event to the audit trail.
  • Paid orders enter the dispenser queue by payment time, where Maduuka calculates pending quantity, dispensed quantity, and FEFO batch suggestions from approved non-expired batches.
  • Controlled medicines require a second-person approval with a pharmacist PIN-backed token tied to the exact dispense action.

4. Exceptions, Returns, and Reporting

  • Stock is deducted only when the dispenser confirms. Invoice records and affected batches are locked, quantities move atomically, and failures roll back completely.
  • Orders can end as `dispensed` or `partially_dispensed`, with pending balance left visible for any unserved quantity.
  • Maduuka supports voids, refunds, flags back to cashier, partial close with refund, and full returns to the original source batch. Revenue reports count only dispensed or partially dispensed orders.
Wide pharmacy counter and medicine display suited to featured sections and blog content

Accountability

The workflow is built to stop leakage, not just record sales.

Role separation: order entry, cashiering, dispensing, controlled-drug approval, refunds, and returns are permissioned separately.

No silent stock leakage: stock is reduced only at dispense, not at order creation or payment time.

Batch traceability: each dispensed line is tied to the exact source batch used to fulfil it.

Cash accountability: payments are mapped to payment methods, posted to the right ledger account, and credit sales create debt records.

Complete event trail: creation, payment, dispense, cancellation, flagging, refund, partial close, and return all land in the pharmacy audit log.

Supervisor control: controlled substances require a different approving user, not self-approval by the dispenser.

Cleaner reconciliation: pharmacy revenue reflects fulfilled medicine sales, not money collected before dispensing.

Branch accountability: queues and actions are branch-scoped so staff cannot casually process another branch's orders.

Module Gallery

Pharmacy module gallery

Read the full workflow article
Pharmacist using a tablet to review medicine records and stock information

Pharmacist using a tablet to review medicine records and stock information

Pharmacy counter interaction showing medicine handover and guided customer service

Pharmacy counter interaction showing medicine handover and guided customer service

Pharmacist explaining treatment and dosage guidance to a patient

Pharmacist explaining treatment and dosage guidance to a patient

Questions Pharmacies Ask Before Switching

The workflow is strict on purpose: it protects stock, cash, patient records, and compliance.

Maduuka does not treat pharmacy sales as a single till action. It separates ordered, paid, dispensed, partially dispensed, refund, return, and cancellation paths so stock, cash, and audit history stay aligned.
Only at confirmed dispense. Creating the order and taking payment do not reduce stock. That prevents paper sales, silent stock leakage, and batch traceability gaps.
Yes. Maduuka calculates FEFO suggestions from approved, non-expired batches and still allows the dispenser to override with another approved batch when necessary.
Controlled dispenses require a second-person control. A supervising pharmacist verifies with a PIN, and Maduuka issues a short-lived approval token tied to that exact dispense action.
Yes. Undispensed quantity remains pending, the order stays visible in the dispenser queue, and the already-served history is preserved for later completion or refund handling.
No. Pharmacy revenue reporting counts only orders that reached dispensed or partially dispensed state. That keeps sales, stock movement, and cash reconciliation more accurate.

Ready to run a pharmacy on tighter operational controls?

Maduuka gives your clerks, cashiers, dispensers, supervising pharmacists, and finance team a cleaner workflow from order capture to batch-level return. Also explore the related restaurant module if your business operates both counters and kitchens. The same inventory engine powers batch, expiry, FEFO, stock count, and recall controls across the wider platform.