Pharmacy management system
batches, expiry dates and stock you can trust

Every purchase recorded with its batch and expiry date, sales that take the batch expiring first, a near-expiry list and low-stock alerts. Start from a working stock app and describe how your store runs.

What it starts from

This page starts the Inventory starting point: products, stock in and out with a full history, suppliers, several locations and low-stock alerts. Pharmacy needs on top of that, batches, expiry and counter sales, are what the pre-filled request adds.

See the Inventory starting point

Already in the starting point

  • Products with SKU, category, unit, cost, sale price, reorder level, supplier and a searchable barcode field.
  • A stock ledger: stock in with the supplier and delivery reference, stock out, counts and transfers. Mistakes are reversed, never edited.
  • Several locations, such as the counter and the back store, with stock per location.
  • Low-stock badges, a to-reorder list and the stock value at cost and at sale price.
  • Import from Excel or CSV, export to CSV, and roles for owner, manager, staff and a view-only accountant.

What the first request asks Refinar to add

  • Generic name, strength, pack size and a prescription-needed flag on every medicine.
  • A batch number and expiry date on every purchase, with stock kept per batch.
  • Counter sales that take the batch expiring first, and a printable bill.
  • A near-expiry list for the next 90 days, and expired batches blocked from sale.
  • Returns of expired stock to the distributor.

What a medical store gets

Every batch, every expiry date

Purchases from a distributor are recorded batch by batch, so the app knows how many strips of each batch are on the shelf and when each one expires.

First expiry, first out

A sale takes the batch that expires soonest, and an expired batch cannot be sold. Nobody has to check dates at the counter.

The near-expiry list

Everything expiring in the next 90 days, by batch and value, so it is sold, moved or returned to the distributor in time.

Low stock before it runs out

A reorder level per medicine and a to-reorder list grouped by distributor, from the stock that is actually there.

A history you cannot quietly change

Every purchase, sale, count and return is a ledger row with who and when. A mistake is reversed by a new row, and the count difference is recorded.

Staff with the right access

Counter staff sell and receive stock, the manager runs counts and prices, and an accountant can read and export without changing anything.

The tables behind it

Real Postgres tables you own. The solid ones come with the starting point; the dashed ones are what the pre-filled request adds.

products

In the starting point
  • id, sku, name (brand)
  • category, unit, barcode
  • cost, price, reorder_level
  • supplier_id → suppliers
  • generic_name, strength, pack_size (added)
  • prescription_required (added)

stock_movements

In the starting point
  • id, product_id → products
  • type: in | out | count | transfer
  • quantity, location_id → locations
  • supplier_id, reference
  • occurred_on, reverses_id
  • batch_id → batches (added)

suppliers · locations

In the starting point
  • distributors with contact and phone
  • the counter, the back store, a second branch

batches

Added by your first request
  • id
  • product_id → products
  • batch_no
  • expires_on
  • cost, mrp

sales

Added by your first request
  • id, number
  • sold_on, sold_by
  • customer_name, doctor_name
  • total

sale_lines

Added by your first request
  • sale_id → sales
  • batch_id → batches
  • quantity, price

How it works in 3 steps

  1. 01

    Start from this page

    Press Start your pharmacy app. The Inventory starting point is picked and the batch, expiry and sales rules are in your first request, ready to edit.

  2. 02

    Your app runs in about a minute

    Refinar creates the stock app with sign-in and a real database, then adds batches, expiry and counter sales in a live preview you can click through.

  3. 03

    Import your stock, then launch

    Bring your current list in from Excel, ask for anything else in plain sentences, and press Go live. The code and the database are yours.

What it is not

It is not a clinical system. There is no drug database, no interaction check, no e-prescription and no insurance claim. The app records what your staff enter about each medicine.

It does not keep any register your regulator may require for scheduled or controlled medicines unless you ask for one, and it does not check that register against the law. If your country has such rules, describe them and verify the result yourself.

Questions

What is a pharmacy management system?

Software that runs a pharmacy's stock and sales: medicines and their batches, purchases from distributors, expiry dates, counter bills, reorders and reports. Hospital and chain systems add prescriptions, insurance and clinical checks.

Can it track expiry dates by batch?

Yes, with the pre-filled request: every purchase is entered with its batch number and expiry date, stock is kept per batch, and sales take the batch that expires first.

Does it print a GST bill?

The request asks for a sale bill. Tax lines, your registration number and the bill format are one more sentence each; describe them as your accountant needs them.

Can I scan barcodes?

Barcodes are a searchable field, so a USB scanner that types the code into the search box works. There is no camera scanning in the starting point.

Building a pharmacy system as a college project?

See the pharmacy management system project page: features, an ER diagram and a viva checklist.

How much does it cost?

Building the app and changing it use credits from your Refinar plan, and hosting is part of going live. The details are on the pricing page.

More starting points