How to model generic prescribing while keeping brands as individual Drugs for billing?

How to model generic prescribing while keeping brands as individual Drugs for billing?

Context

We’re implementing a generic prescribing workflow in KenyaEMR (OpenMRS-based) and want to understand how the community has approached this before we design anything ourselves.

The requirement in one line: the clinician orders generically (e.g. “Paracetamol 500mg tablet”) without picking a brand, but at dispensing/billing time we need to know and bill the specific brand actually given to the patient, since brands differ in price and need separate stock/batch tracking.

Why this matters for us

In most public-sector and NHIF/SHA-funded facilities, a given generic can map to 3-10 different brands/manufacturers in stock at any time, and which one gets handed to the patient depends on what’s actually available on the shelf that day — not on clinician preference. But billing has to reflect the actual brand dispensed, since different brands can have different unit prices, and stock has to be decremented against the actual batch dispensed for traceability (we’re also layering GS1 EPCIS track-and-trace on top of this, so batch/lot accuracy matters a lot to us).

What we have currently

In our current KenyaEMR setup, the Paracetamol concept has dozens of Drug entries hanging off it — one per brand/formulation (e.g. “Paracetamol 500 mg Oral Tablet, Effervescent - Perfamol”, “… - Efferalgan”, “… - Fevastin ET”, “… - Gacet”, and so on). I have attached screenshots for understanding how this is currently presented in KenyaEMR

The problem: the order form itself is already drug brand-specific according to how we have added formularies as attached. When a clinician searches “Paracetamol 500mg” to place a drug order, what actually gets selected and shown on the order form will be brand specific (e.g. “Paracetamol 500 mg Oral Tablet, Effervescent - Perfamol”). So ordering today effectively is brand selection — the clinician is picking a specific manufacturer’s product, rather than ordering the generic and letting the pharmacist resolve the brand later.

This is the core thing we want to change: we want the clinician-facing order to be brand-agnostic, while still preserving brand-level Drug records for accurate billing and stock tracking downstream.

On the inventory side, we’re currently using the Stock Management module to manage stock, and it tracks items by drug_id — i.e. stock quantities, batches, and movements are all recorded against the specific brand-level Drug, not the generic Concept. This works fine for inventory accuracy, but it reinforces the same constraint: since stock is only ever known at the Drug (brand) level, anything downstream (dispensing, billing) that wants to resolve a brand from a generic order has to somehow bridge from Concept to the specific Drug/drug_id that’s actually in stock

cc @slubwama @mseaton @burke @akanter @ibacher

@kmakombe Introducing brand and manufacturer information at the stock-batch level makes sense because these details describe the specific product received and dispensed, rather than the underlying active drug ingredient.

I believe we should revisit and proceed with the approach explored in PR #37, while updating it to align with the current codebase.

Patient prescriptions should remain generic by default and focus on the active ingredient, strength, formulation, and dosage instructions. Brand information should only be captured at the prescription level in exceptional cases where the prescriber specifically requires a particular brand or prohibits substitution.

During dispensing, the prescription should be linked to the actual stock batch issued so that the brand, manufacturer, batch number, and expiry date remain traceable.

1 Like

@slubwama Regarding stock management, we are fine. My main concern is drug ordering, specifically how we have modelled and added drugs using the common concept.

we use a hyphen to denote a brand as we create drugs, and this is always displayed when searching for a drug during ordering. I would like to understand whether this is the correct way to model the drugs having more than one brand

At the Concept level, we should primarily represent the generic clinical medicine, usually identified by its active ingredient or combination of active ingredients. OpenMRS allows a Drug Order to be placed directly against such a generic Concept. A Drug object may then represent a specific formulary medication linked to that Concept, with details such as its name, strength, dosage form and ingredients.

Patient-specific details such as the prescribed dose, route, frequency, duration and quantity are captured on the DrugOrder rather than on the Drug object. OpenMRS also provides brandName and dispenseAsWritten fields on DrugOrder for situations where a particular brand must specifically be prescribed.

For example:

  • Panadol is a brand name. The active ingredient in standard Panadol 500 mg tablets is paracetamol. The generic Concept would therefore be Paracetamol, while the formulary Drug could be represented as Paracetamol 500 mg tablet.
  • Panadol Extra is a branded combination product containing Paracetamol 500 mg and Caffeine 65 mg per tablet. Its generic representation should therefore include both active ingredients rather than being modelled as paracetamol alone.

Using a hyphen in the Drug name to indicate a brand may be a useful naming convention, but the hyphen itself has no defined meaning in the OpenMRS data model. It is therefore not a reliable way of distinguishing generic medicines from brands.

The key question is whether clinicians are expected to prescribe a specific brand or prescribe the generic medicine and allow the pharmacy to dispense whichever approved brand is available.

My recommendation would be:

  • Prescribing should be generic by default.
  • Brand and manufacturer information should normally be captured against the stocked product or batch that is actually dispensed.
  • A specific brand should only be included in the prescription where there is a genuine clinical or regulatory reason, using the available brand and “dispense as written” functionality.

This would prevent multiple brands of the same medicine from unnecessarily cluttering the drug-ordering search results while still preserving brand and batch traceability during dispensing.

2 Likes

Totally agree with Sam. The concept (which can be a multi-ingredient concept) should be used for ordering with the drug entry being what actually gets dispensed (based on formulary, availability, etc.) Cross-walking between order/prescription and dispensing should be via concept_id plus additional metadata governing form and strength. CIEL is working on providing a more comprehensive drug table based on country EDLs and there is a project within the OHDSI community to do this across countries in Africa. That would at least provide a starting point for building out the DRUG table. It should also be noted that standard concepts (RxNORM+RxNORM extension or SNOMED) are provided at the CONCEPT level. The data model supports this at the DRUG table level but we have not really implemented yet.

The rare case where a specific drug formulation is required for ordering (such as a particular salt-form or brand, then it probably needs to be added as a CONCEPT. This is known for certain thyroid medications, for example. I also know there have been discussions about managing drug stock outside of OpenMRS via PCMT (another global good)