Pharmacy Reference Public

Daily Operations

Counter SOPs for the ERPat Pharmacy module: start a pharmacist duty session, capture and validate a prescription, dispense with FEFO stock issue and the correct Senior/PWD statutory discount, print the BIR receipt, and run the controlled-register and cold-chain routines.

Guide version: r1 Module version: 1.0.0 Updated: 2026-07-23 Estimated time: 8 min
ERPat · Pharmacy Guide

Daily Operations

The step-by-step routines for working the counter: sign a pharmacist on duty, capture and validate a prescription, dispense against it with a FEFO stock issue and the correct Senior/PWD statutory discount, print the label and BIR-shaped receipt, and — where enabled — keep the controlled register and cold-chain log up to date.

Each routine below is a short SOP you can follow at the counter. The two safety routines at the end (controlled register, cold chain) only appear when their sub-toggle is enabled.

Opening the branch

A quick start-of-day check keeps you inspection-ready and unblocked for the day's dispensing:

  1. Open Pharmacy → Overview. Confirm the compliance readiness looks healthy and note anything expiring soon (licenses, credentials) or any overdue renewal task.
  2. Check whether a pharmacist is already on duty. If not, start a session (below) before any prescription work.
  3. If you have Warehouse installed, glance at Near-Expiry & Lots for stock expiring in the next buckets so you can pull or prioritize it.

Start a pharmacist duty session

A credentialed pharmacist must be on duty before any regulated activity — validating a prescription or recording a fill both check this gate. Needs pharmacy_duty.

  1. Open Compliance Center → Pharmacist Duty and choose Start duty.
  2. Select the pharmacist, optionally the branch and counter, add a note if useful, and save.
  3. If the pharmacist has no non-expired PRC/PIC credential on file, the start is blocked with a "no valid credential" message — record or renew their credential in Pharmacist Credentials first.
  4. At the end of the shift, return to the tab and choose End duty on the active session.
Every start and end is written to the audit trail as a duty status event. The Overview and Compliance Center always show who is currently on duty.

Capture a prescription

Prescriptions are captured by transcription into an Rx header plus its prescribed items. Capturing needs pharmacy_prescription_create.

  1. Open Prescriptions and choose Capture. Pick the patient and (optionally) the prescriber, set the prescription date, and save. The Rx is created as a draft and gets an Rx number.
  2. On the Rx detail page, add each prescribed item: description, generic name, strength, dosage form, quantity prescribed, and the directions (Sig). Link it to a catalog product where possible so the fill can issue stock.
  3. When the items are complete, choose Submit. Submit requires at least one item; the Rx moves from draft to submitted, ready for a pharmacist to validate.

Items can be edited or removed only while the Rx is draft or submitted — once validated, the item list is locked.

Validate or reject (pharmacist)

Validation is the pharmacist's professional check and is the point the on-duty gate is enforced. Needs pharmacy_prescription_validate.

  1. Open the submitted Rx. Choose Validate to approve it or Reject (with a reason) to send it back.
  2. Validate is blocked unless a pharmacist is on duty at the branch — if you see a "pharmacist required" message, start a duty session first.
  3. A validated Rx records who validated it and when. Only a validated (or partially filled) Rx can be dispensed.
The status flow is a guarded, one-way sequence: draft → submitted → validated → partially_filled → completed, with rejected and cancelled as exits. Illegal jumps are refused, so two staff can't drive the same Rx into an inconsistent state.

Dispense against a prescription (FEFO + statutory discount)

Recording a fill is where stock leaves the shelf and the statutory discount is computed. Needs pharmacy_dispense, and a pharmacist must be on duty.

  1. On a validated Rx, choose Dispense. For each item, enter the quantity to fill (you may do a partial fill — up to the remaining quantity) and the selling price (VAT-inclusive).
  2. Choose the benefit typenone, Senior, or PWD — and, when a discount applies, the beneficiary name, ID type/number, and representative if someone is collecting on the patient's behalf.
  3. Save. Pharmacy records the dispense and, for each catalog-linked item with Warehouse present, issues stock FEFO (earliest-expiry active batch first), blocking expired batches and appending a batch-aware stock movement. The chosen batch is stamped on the dispensing item.
  4. The Rx status updates automatically: partially filled if anything remains, or completed when every item is fully dispensed.

How the Senior/PWD discount is calculated

For a covered transaction the lawful order (RA 9994 for seniors, RA 10754 for PWDs) is applied per line: first treat the sale as VAT-exempt by stripping the 12% VAT to a base, then apply the 20% discount to that VAT-exclusive base.

StepOn a ₱112.00 covered item
Gross (VAT-inclusive) selling price₱112.00
Strip 12% VAT → VAT-exempt base₱112.00 ÷ 1.12 = ₱100.00
Apply 20% statutory discount to the base₱100.00 × 20% = ₱20.00
Amount due₱80.00
Two rules to remember. Senior and PWD are mutually exclusive — a line never gets both. And a line that is not eligible for the benefit pays the VAT-inclusive gross. Every dispense stores the benefit decision, the per-line evidence, and an auditable decision trace.
If stock runs short on a fill, Pharmacy issues what is on hand and flags the rest (a shortfall warning) rather than blocking the whole dispense. A non-catalog item, or a branch without the Warehouse module, is dispensed for the record without a stock movement.

Print the label and BIR receipt

Two print views are available from a dispensing record:

  • Dispensing label — patient, medicine, directions (Sig), quantity, dispense number, pharmacist and date, in a print-ready page to attach to the medicine.
  • Official Receipt (BIR-shaped) — the statutory breakdown: gross, less-VAT / VAT-exempt sales, statutory discount, and amount due, numbered with an OR reference. It is labelled "configured, not certified" — it presents the correct breakdown but does not replace your accredited BIR receipt series.

Over-the-counter sales & patient records

Not every sale needs a prescription. For OTC medicines you sell through the POS register as usual; Pharmacy's role is the drug catalog (classification, storage, Senior/PWD eligibility, price ceiling) and, where a Senior/PWD discount applies, the same statutory math.

Keep your regular customers as patients so their benefit type and medication history are on file:

  • Open Patients & Prescribers → Patients and add a patient — name, benefit type (Senior/PWD/none), ID type and number. The ID is encrypted at rest and shown only as a masked last-4 in lists.
  • On the patient's detail page you can add authorized representatives (who may collect on their behalf) and see their medication profile — the prescriptions captured for them.
  • To read a full ID number you need pharmacy_patient_view_sensitive; unmasking is a deliberate, audited action recorded against your user.

Controlled register (when enabled)

If the Controlled Drugs sub-toggle is on, keep the dangerous-drug register current. It is an append-only ledger — entries are never edited or deleted; a mistake is fixed with a reversing correction. Posting needs pharmacy_controlled_post; corrections need pharmacy_controlled_correct.

  1. Open Controlled Drugs and choose New entry. Pick the product and the entry type — opening or receipt adds to the balance; dispense, return or destruction removes from it — and the quantity. The running balance is recomputed from the product's previous entry.
  2. To fix an error, open the entry and choose Correct. Pharmacy posts a linked reversing entry that restores the pre-error balance and points back at the original. The original stays in the ledger — nothing is erased.
  3. Periodically run a physical count reconciliation: choose the product, enter the counted quantity, and Pharmacy records the system balance, your physical count, and the variance for the record.
This register is designed for your PDEA / DDB record-keeping. It is "configured for the tenant's registered setup," not a certified submission — the exact forms and any electronic transmission remain a separate step outside the module.

Recalls, adverse events & cold chain (when enabled)

If the Quality & Safety sub-toggle is on, the Quality workspace covers three routines. Creating records needs pharmacy_quality_create; activating/closing a recall needs pharmacy_recall_manage.

Product recall / stop-sale

Log a recall (FDA, supplier or internal source) with the product and batch number. When you activate it, Pharmacy quarantines the matching Warehouse batch(es) — blocking them from being dispensed — and records how many were quarantined.

Adverse events / medication errors

Report an event with its type, severity and any FDA report reference, and track it to closure. Useful for pharmacovigilance record-keeping.

Cold-chain temperature log

Log a temperature reading for a storage zone (e.g. the 2–8 °C fridge). Readings are marked normal or excursion so out-of-range events stand out.

Closing the branch

At end of day:

  • End the duty session for each pharmacist who has clocked off.
  • Finish any partially filled prescriptions or leave them for the next fill — the running dispensed quantity is preserved.
  • If the sub-toggles are on, make sure any controlled-drug movements and a closing cold-chain reading are logged.
  • Glance at the Overview once more for anything expiring or overdue to action tomorrow.

Next: Administration → — the settings, permissions, sub-toggles, APIs and cron jobs behind these routines.

Was this guide helpful?

Report a content problem