# Pharmacy Formulary Management ## Introduction HMIS implements a structured pharmaceutical formulary based on the SNOMED dm+d (Dictionary of Medicines and Devices) hierarchy. This model cleanly separates the **active ingredient**, the **generic formulation**, and the **branded product** — enabling generic/brand substitution at the point of dispensing, standardised prescribing by clinicians, and accurate formulary control by pharmacy administrators. ## Navigation | Function | Menu Path | |---|---| | Virtual Therapeutic Moiety (VTM) | Main Menu → Pharmacy → Admin → VTM | | Virtual Medicinal Product (VMP) | Main Menu → Pharmacy → Admin → VMP | | Actual Medicinal Product (AMP) | Main Menu → Pharmacy → Admin → AMP | | Item Master (Dispensable Items) | Main Menu → Pharmacy → Admin → Items | | Dosage Forms | Main Menu → Pharmacy → Admin → Dosage Forms | | Routes of Administration | Main Menu → Pharmacy → Admin → Routes | | Measurement Units | Main Menu → Pharmacy → Admin → Measurement Units | | Frequency Units | Main Menu → Pharmacy → Admin → Frequency Units | ## Formulary Hierarchy ``` VTM (Virtual Therapeutic Moiety) └── Active ingredient, e.g. "Amoxicillin" └── VMP (Virtual Medicinal Product) └── Generic formulation, e.g. "Amoxicillin 500 mg Capsule" └── AMP (Actual Medicinal Product) └── Branded product, e.g. "Amoxil 500 mg Capsule (GSK)" ``` ### VTM — Virtual Therapeutic Moiety The VTM represents the active substance independent of formulation or brand. Clinicians prescribe at VTM or VMP level for generic prescribing. Pharmacists dispense an available AMP. **Fields:** Name, code, description, therapeutic class, retired flag. ### VMP — Virtual Medicinal Product The VMP defines the generic formulation: active ingredient + strength + dosage form + route. A VTM may have multiple VMPs (e.g., Amoxicillin 250 mg Capsule, Amoxicillin 500 mg Capsule, Amoxicillin 125 mg/5 ml Suspension). **Fields:** Name, VTM link, dosage form, strength, route of administration, unit of measure. ### AMP — Actual Medicinal Product The AMP is the dispensable branded product. Each AMP links to a VMP. Multiple AMPs may exist for a single VMP (competing brands). The AMP is the level at which stock is held, batches are tracked, and pricing is set. **Fields:** Name, VMP link, manufacturer, supplier, barcode (GS1/HIBC), formulary status, controlled substance flag, retail price, purchase price. ### AMPP / VMPP — Packaged Variants AMPP (Actual Medicinal Product Pack) and VMPP (Virtual Medicinal Product Pack) capture pack-size variants of AMPs and VMPs respectively — e.g., a 30-capsule pack vs a 100-capsule pack of the same AMP. Pricing, stock, and GRN tracking can be maintained at pack level. ## Generic / Brand Substitution At the point of dispensing, if the prescribed AMP is out of stock, the pharmacist can substitute with a therapeutically equivalent AMP under the same VMP: 1. The dispense screen shows available AMPs linked to the same VMP as the prescribed drug. 2. The pharmacist selects the substitute AMP. 3. The substitution is recorded against the dispense transaction for audit. 4. The prescription is fulfilled and marked dispensed. This ensures formulary compliance while accommodating real-world stock availability. ## Controlled Substance Tracking AMPs classified as controlled substances (scheduled drugs, narcotics, psychotropics) are flagged in the item master (`controlledSubstance` flag on the AMP). For controlled items: - Dispense requires additional authorisation / dual-check in the workflow. - All transactions (issue, return, adjustment, disposal) are logged in the controlled substance register. - Reports are available to satisfy regulatory requirements for scheduled drug accounting. ## Drug Master Maintenance ### Adding a New Drug 1. Navigate to **AMP** (Main Menu → Pharmacy → Admin → AMP). 2. Click **New AMP**. 3. Select or create the parent **VMP** (which in turn links to the **VTM**). 4. Enter: Name, manufacturer, dosage form, strength, route, barcode, purchase price, retail price, formulary status. 5. Set **Controlled Substance** flag if applicable. 6. Save. The drug is now available for purchase orders, GRN, and dispensing. ### Updating Prices Price changes are applied at the AMP level. Historical pricing is preserved in purchase and sale records; the new price applies to future transactions. ### Retiring Items Items that are discontinued or no longer stocked are marked **retired** (not deleted). Retired items remain visible in historical reports and bills but are excluded from active formulary searches. ## Compound Formulations For compounded preparations, the `VirtualProductIngredient` entity captures the ingredient list (each ingredient is a VTM or VMP with quantity). The compound AMP can then be dispensed, stocked, and billed like any other pharmacy item. ## Technical Reference | Item | Detail | |---|---| | VTM controller | `VtmController` | | VMP controller | `VmpController` | | AMP controller | `AmpController` | | AMPP controller | `AmppController` | | VMPP controller | `VmppController` | | Dosage forms controller | `DosageFormController` | | Compound ingredient entity | `VirtualProductIngredient` | | Item master entity | `com.divudi.core.entity.Item` (DTYPE = PharmacyItem) | | Related | [Pharmacy Dispensing Workflows](Pharmacy-Dispensing-Workflows.md), [Pharmacy Batch Management](Pharmacy-Batch-Management.md) |