Home
NextSaaS
NextSaaSNextSaaS
  • Home
  • Features
    • Patient Registration & IC Scanning
    • Online Appointment Booking
    • Billing & LHDN e-Invoicing
    • Inventory & Medication
    • EMR & Consultations
    • MCs, Documents & Labels
    • Queue Management
    • Analytics & Reports
    • Staff Management
    • Multi-Branch Management
    • Cloud & Security
    • WhatsApp Reminders
    • View All Features →
  • Pricing
  • FAQs
  • Blog
  • Contact Us
  • Clinic Tools
    • BMI Calculator
    • Blood Pressure Checker
    • Calorie Counter
    • eGFR Calculator
    • Ideal Body Weight Calculator
    • Medication Dosage Calculator
    • Pregnancy Due Date Calculator
Get started
Home
NextSaaSNextSaaS
  • Home
  • Features
    • Patient Registration & IC Scanning
    • Online Appointment Booking
    • Billing & LHDN e-Invoicing
    • Inventory & Medication
    • EMR & Consultations
    • MCs, Documents & Labels
    • Queue Management
    • Analytics & Reports
    • Staff Management
    • Multi-Branch Management
    • Cloud & Security
    • WhatsApp Reminders
    • View All Features →
  • Pricing
  • FAQs
  • Blog
  • Contact Us
  • Clinic Tools
    • BMI Calculator
    • Blood Pressure Checker
    • Calorie Counter
    • eGFR Calculator
    • Ideal Body Weight Calculator
    • Medication Dosage Calculator
    • Pregnancy Due Date Calculator

All guides

  • Getting Started
  • Consultations
  • Appointments
  • Patients
  • Billing & Payments
  • E-Invoicing (LHDN)
  • Inventory (Medications)
  • Services
  • Queue & Display
  • Staff
  • Settings
  • Dashboard & Reports
Home-User Guide-Inventory (Medications)

Inventory (Medications)

Manage medication stock — what to enter for each medication, how stock units and dispense quantity work, and exactly how stock is deducted when a bill is paid.

The Inventory module is your clinic's medication list. Everything here is available to prescribe during a consultation, with the dosage and dispensing details ready to go. Inventory is managed per branch, so each location keeps its own stock.

How stock is stored: the mental model

Every medication is stored in two layers. Get these right and everything else follows.

  • The stock unit — the whole thing that sits on your shelf and that you count: a strip, a bottle, or a vial. You track how many of these you have.
  • The content inside — how much usable medicine is inside one stock unit: e.g. 10 tablets per strip, 90 mL per bottle. This is what a prescription actually consumes.

Three fields carry this model, and the whole deduction engine runs on them:

  • Unit of Measurement — the name of the stock unit ("strip", "bottle", "vial"). Display only.
  • Stock Quantity — how many whole stock units you have. A whole number. This is the only field the system writes back after a sale.
  • Dispense Quantity — how many dosage units are inside one stock unit (tablets per strip, mL per bottle).

The golden rule. You count stock in one unit (strips, bottles, vials) but the doctor prescribes in a different unit (tablets, mL). Dispense Quantity is the bridge — it says how many dosage units are inside one stock unit. The unit inside Dispense Quantity must match the prescription's dose unit: prescribe in tablets → Dispense Quantity is tablets/strip; prescribe in mL → Dispense Quantity is mL/bottle. The system subtracts the dose directly with no unit conversion, so mixing units produces nonsense stock numbers. Put the dose unit in Dosage Unit so staff never mix tablets with mL or mg.

Adding a medication

From the Inventory list, click Add Item and fill in the details. Required fields are marked below.

FieldWhat to enterExampleRequired?
NameMedication name. Unique within the branch — re-using a name updates that record.Panadol 500Required
GroupDrug group / class, for grouping and search.AnalgesicRequired
Unit of MeasurementName of the countable stock unit.strip · bottle · vialRequired
Stock QuantityHow many whole stock units you currently hold. Whole number.20Required
Dispense QuantityHow many dosage units are inside one stock unit. Its unit must match the dose unit you prescribe in.10 (tablets/strip)Required
Non-Panel PriceSelling price to a cash / non-panel patient.15.00Required
DosageDefault amount per intake (pre-fills the prescription). Same unit as Dispense Quantity.2Optional
Dosage UnitLabel of the dose unit — for clarity on the prescription.tablet · mL · mgOptional
FrequencyDefault times per day.3Optional
DurationDefault number of days.5Optional
InstructionFree-text dosing instruction.After mealOptional
Associated SymptomsSymptoms this medicine treats, for quick suggestion while prescribing.Fever, CoughOptional
Stock CostYour purchase cost per stock unit (for margin reporting).5.25Optional
Panel PriceSelling price to a panel / insurance patient.12.00Optional
Price TiersNamed custom price tiers (name + price).Staff → 9.00Optional
Low Stock ThresholdAlert level — flags low stock when Stock Quantity reaches this.10Optional
DescriptionFree-text notes.Fever & mild painOptional

Price tiers let you charge the right amount depending on the patient's plan or panel. See Settings → Pricing Tiers.

Defaults vs. actuals: Dosage, Frequency, and Duration on the medication record are defaults that pre-fill a new prescription. The deduction always uses the values the doctor actually entered on that prescription — so the same medicine can deduct different amounts on different visits.

How stock is deducted

This is the exact calculation the system performs on each prescribed medicine. Nothing else touches stock.

# from the prescription:
consumed = dosage × frequency × duration      (dosage = amount per intake, frequency = times/day, duration = days)

# from the medication record:
totalContent = stockQuantity × dispenseQuantity

remainingContent = max(0, totalContent − consumed)
newStockQuantity = floor(remainingContent ÷ dispenseQuantity)   ← only this whole number is saved back

The two moments

  1. At prescribing — a stock check. When a medicine is added to a prescription, the system checks that stockQuantity × dispenseQuantity covers dosage × frequency × duration. If it doesn't, it blocks with "Insufficient stock for [name]" and nothing is prescribed. This check is a guard, not a hold — it doesn't reserve stock.
  2. At payment — the actual deduction. Stock is only reduced when the patient's bill is marked Paid, and only on that transition (a bill that's already paid won't deduct twice). At that moment every prescribed medicine runs through the formula above.

Why the count rounds down

Stock is stored as a whole number of stock units. After each sale the remaining content is divided back by Dispense Quantity and rounded down. So the moment any content is drawn from a unit, that whole unit drops off the count and the leftover inside it is not carried forward — the next sale recalculates from the whole-number stock again. This is clean when what's consumed is an exact multiple of Dispense Quantity (dispensing whole strips or whole bottles). For part-used strips, liquids, and vials, expect the count to fall by a full unit as soon as a unit is opened.

Worked examples

Same formula every time — what changes is how you model the stock unit and its content.

Tablets, stocked in strips

Panadol comes in strips of 10 tablets. You count strips; the doctor prescribes in tablets, so Dispense Quantity = 10 (tablets per strip).

  • Inventory: Unit of Measurement = strip · Dispense Quantity = 10 tab/strip · Stock Quantity = 20 strips
  • Prescription: dosage 2 tablets · frequency 3/day · duration 5 days
  • Math: consumed = 2 × 3 × 5 = 30 tablets · totalContent = 20 × 10 = 200 · remaining = 200 − 30 = 170 · newStock = floor(170 ÷ 10) = 17 strips
  • Result: 20 → 17 strips. Clean here — 30 tablets is exactly 3 strips.

If the tablets consumed don't divide evenly by 10, the leftover in the opened strip is dropped from the count (e.g. 24 tablets → floor(176 ÷ 10) = 17 strips, and the 4 loose tablets are no longer tracked). Reconcile with a periodic physical count.

Liquid, stocked in bottles

Cough syrup comes in 90 mL bottles. You count bottles; the doctor prescribes in mL, so Dispense Quantity = 90 (mL per bottle).

  • Inventory: Unit of Measurement = bottle · Dispense Quantity = 90 mL/bottle · Stock Quantity = 20 bottles
  • Prescription: dosage 5 mL · frequency 3/day · duration 3 days
  • Math: consumed = 5 × 3 × 3 = 45 mL · totalContent = 20 × 90 = 1800 · remaining = 1800 − 45 = 1755 · newStock = floor(1755 ÷ 90) = floor(19.5) = 19 bottles
  • Result: 20 → 19 bottles. Only 45 mL was dispensed, but the count fell by a whole bottle — the other 45 mL in the opened bottle is not carried forward. For liquids, treat Stock Quantity as "sealed bottles remaining."

Injection, stocked in vials

An injectable in 10 mL vials. A single shot draws 2 mL. You count vials; the doctor prescribes in mL, so Dispense Quantity = 10 (mL per vial).

  • Inventory: Unit of Measurement = vial · Dispense Quantity = 10 mL/vial · Stock Quantity = 50 vials
  • Prescription: dosage 2 mL · frequency 1/day · duration 1 day
  • Math: consumed = 2 × 1 × 1 = 2 mL · totalContent = 50 × 10 = 500 · remaining = 500 − 2 = 498 · newStock = floor(498 ÷ 10) = floor(49.8) = 49 vials
  • Result: 50 → 49 vials.

Blocked by insufficient stock

Prescribe 60 mL (dosage 10 × 1/day × 6 days) when only 5 vials remain (5 × 10 = 50 mL available). Because 50 < 60, the system rejects it with "Insufficient stock for [name]" — restock before the medicine can be added.

Keeping your stock accurate

  • Match the units. Set Dispense Quantity as dosage units per stock unit, and make sure that unit matches what you prescribe in. Put that unit in Dosage Unit so staff never mix tablets with mL or mg.
  • Remainder loss is unavoidable once a unit is opened. Whenever what's consumed isn't an exact multiple of Dispense Quantity, the opened strip/bottle's leftover drops from the count. Accept it and reconcile with a periodic physical count, correcting Stock Quantity via the edit action.
  • For liquids and vials, read Stock Quantity as "unopened units on shelf" and set Low Stock Threshold a little higher to compensate for the rounding.
  • Do a periodic physical count and correct Stock Quantity — because opened-unit remainders aren't tracked, the running count drifts optimistic over time for liquids and vials.
  • Deduction only fires on payment. Prescriptions on bills that are never marked Paid never reduce stock; the check at prescribing time is a guard, not a hold.

Managing your inventory

  • Add / edit one medication — save a single item. If the name already exists in the branch, it updates that record instead of creating a duplicate.
  • Update specific fields — edit one field, e.g. correct Stock Quantity after a manual count, or update a price.
  • Bulk upload — see below.
  • Search — list and search inventory (filter by name, group, or symptoms).
  • Remove — removing a medication is a soft delete: the record is kept for history and hidden from lists.

Bulk upload

If you're setting up your inventory for the first time or making lots of changes at once, use bulk upload instead of adding items one by one.

  1. Request the inventory template from the EazyClinic team.
  2. Fill it in — do not change the column names (they match the fields in the table above), and make sure every field is completed.
  3. Upload the file. Supported formats are CSV and Excel (.xlsx / .xls).

Upload one file at a time. The file is validated and rejected with per-row errors if anything is malformed. EazyClinic confirms when the file has been processed.

Related guides

  • Consultations — prescribing from your inventory.
  • Services — managing non-medication charges.
  • Settings — setting up price tiers.

Related features & reading

  • Feature: Inventory Management
  • Blog: How Small Clinics Automate Registration, Billing & Inventory · Clinic Management Software vs WhatsApp & Excel: The Real Cost
PreviousE-Invoicing (LHDN)
NextServices

Guide assistant

Ask me anything about these guides

Ask about the EazyClinic guides

Describe how your clinic works and I'll point you to the parts that cover it.

See how EazyClinic works for your clinic

Book a short walkthrough to see how EazyClinic simplifies patient registration, consultations, billing, and documentation for your clinic.

Schedule a Demo
[object Object] icon
Chat on WhatsApp

Free data migration · Guided setup · No lock-in

NextSassNextSass

EazyClinic is a clinic management software platform designed for private clinics in Malaysia.

Business addressJalan Jelatek, Kementah, 54200, Kuala Lumpur, Malaysia
Facebook
Instagram
Youtube
LinkedIn

Company

  • Contact Us

User Guide

  • Getting Started
  • Consultations
  • Appointments
  • Patients
  • Billing & Payments
  • All Guides

Support

  • FAQ
  • Clinic Tools

Legal Policies

  • Terms & Conditions
  • Privacy Policy
  • Refund Policy

Copyright ©EazyTech Labs – Solutions for Modern Clinics. All Rights Reserved.