Skip to content
EHI Playground

The Patient Safety Triad: Medications, Allergies, and Immunizations

Purpose: To master Epic’s approach to three safety-critical datasets that work together to prevent adverse events: what medications a patient is on, what they are allergic to, and what protections they have from immunizations.

These three clinical domains form the foundation of preventive care and clinical decision support. Medications must be checked against allergies to prevent adverse reactions, and immunizations are tracked to prevent disease. Together, they create a safety net for every patient.

Overview of safety-critical data volumes

View SQL Query
SELECT 
    'Medication Orders' as data_type, COUNT(*) as records FROM ORDER_MED
UNION ALL
SELECT 'Allergies', COUNT(*) FROM PAT_ALLERGIES
UNION ALL
SELECT 'Immunizations', COUNT(*) FROM PAT_IMMUNIZATIONS
ORDER BY records DESC;
data_typerecords
Immunizations16
Allergies5
Medication Orders4

Medication management starts with an order in ORDER_MED and follows a complex lifecycle from prescription to pharmacy and potentially to discontinuation.

View current medication orders with status

View SQL Query
SELECT 
    ORDER_MED_ID,
    DESCRIPTION as Medication,
    ORDER_STATUS_C_NAME as Status,
    SUBSTR(ORDERING_DATE, 1, 10) as Order_Date,
    QUANTITY,
    REFILLS
FROM ORDER_MED
WHERE PAT_ID = 'Z7004242'
  AND ORDER_STATUS_C_NAME IN ('Sent', 'Active')
ORDER BY ORDERING_DATE DESC
LIMIT 10;
ORDER_MED_IDMedicationStatusOrder_DateQUANTITYREFILLS
772179261LISINOPRIL 10 MG PO TABSSent8/29/2022 90 tablet1
772179269NORTRIPTYLINE HCL 10 MG PO CAPSSent2/20/2023 180 capsule3
945468373NORTRIPTYLINE HCL 10 MG PO CAPSSent12/22/2023270 capsule3
772179266NORTRIPTYLINE HCL 10 MG PO CAPSSent12/1/2022 90 capsule1

The patient’s instructions, or “sig,” are stored in a separate table.

Get patient sig instructions for a medication

View SQL Query
SELECT 
    om.DESCRIPTION as Medication,
    oms.SIG_TEXT as Instructions
FROM ORDER_MED om
JOIN ORDER_MED_SIG oms ON om.ORDER_MED_ID = oms.ORDER_ID
WHERE om.PAT_ID = 'Z7004242'
ORDER BY om.ORDERING_DATE DESC
LIMIT 5;
MedicationInstructions
LISINOPRIL 10 MG PO TABSTake 1 (one) tablet by mouth daily.
NORTRIPTYLINE HCL 10 MG PO CAPSTAKE 1 CAPSULE BY MOUTH EVERY NIGHT. START WITH 1 CAPSULE AT NIGHT; CAN. INCREASE TO 2 CAPSULES AFTER 1-2 WEEKS IF NO SIDE EFFECTS
NORTRIPTYLINE HCL 10 MG PO CAPSTake 3 (three) capsules by mouth nightly.
NORTRIPTYLINE HCL 10 MG PO CAPSTake 1 (one) capsule by mouth nightly. Start with 10 mg at night; can increase to 20 mg after 1-2 weeks if no side effects

The Missing MAR: A critical point is the absence of Medication Administration Records (MAR) in this EHI export. We can see what was ordered, but we cannot verify what was administered.

Epic’s allergy model is robust, tracking not just allergens but also specific reactions and their severity.

View a patient's active allergies and their severity

View SQL Query
SELECT 
    a.ALLERGEN_ID_ALLERGEN_NAME,
    a.REACTION as Reaction,
    a.SEVERITY_C_NAME as Severity,
    SUBSTR(a.DATE_NOTED, 1, 10) as Date_Noted
FROM PAT_ALLERGIES pa
JOIN ALLERGY a ON pa.ALLERGY_RECORD_ID = a.ALLERGY_ID
WHERE pa.PAT_ID = 'Z7004242'
  AND a.ALRGY_STATUS_C_NAME = 'Active'
ORDER BY a.SEVERITY_C_NAME, a.ALLERGEN_ID_ALLERGEN_NAME;
ALLERGEN_ID_ALLERGEN_NAMEReactionSeverityDate_Noted
PEANUT (DIAGNOSTIC)Allergy7/14/2020
PENICILLINSAllergy8/9/2018 1
SULFA ANTIBIOTICSAllergy8/9/2018 1
TREE NUTAllergy8/9/2018 1

For each allergy, multiple specific reactions can be documented.

See detailed reactions for a specific allergy

View SQL Query
SELECT 
    a.ALLERGEN_ID_ALLERGEN_NAME,
    ar.REACTION_C_NAME as Specific_Reaction
FROM PAT_ALLERGIES pa
JOIN ALLERGY a ON pa.ALLERGY_RECORD_ID = a.ALLERGY_ID
JOIN ALLERGY_REACTIONS ar ON a.ALLERGY_ID = ar.ALLERGY_ID
WHERE pa.PAT_ID = 'Z7004242' AND UPPER(a.ALLERGEN_ID_ALLERGEN_NAME) LIKE '%PENICILLIN%'
ORDER BY a.ALLERGEN_ID_ALLERGEN_NAME, ar.LINE;
ALLERGEN_ID_ALLERGEN_NAMESpecific_Reaction
PENICILLINSHives

Immunization records track a patient’s vaccination history, including the vaccine, date, dose, and source.

View a patient's immunization history

View SQL Query
SELECT 
    i.IMMUNZATN_ID_NAME as Vaccine,
    SUBSTR(i.IMMUNE_DATE, 1, 10) as Date_Given,
    i.DOSE,
    i.ROUTE_C_NAME as Route
FROM PAT_IMMUNIZATIONS pi
JOIN IMMUNE i ON pi.IMMUNE_ID = i.IMMUNE_ID
WHERE pi.PAT_ID = 'Z7004242'
ORDER BY i.IMMUNE_DATE DESC;
VaccineDate_GivenDOSERoute
INFLUENZA (FLUARIX) IIV49/28/2023 0.5 mLIntramuscular
COVID-19 (PFIZER-BIVALENT) MRNA AGES 12+9/25/2022 Intramuscular
COVID-19 (MODERNA) MRNA5/16/2021 Intramuscular
COVID-19 (MODERNA) MRNA4/18/2021 Intramuscular
TYPHOID INACTIVATED (TYPHIM VI)2/5/2019 1Intramuscular
TDAP2/5/2019 1Intramuscular
HEPATITIS A (HAVRIX) HEPA ADULT2/5/2019 1Intramuscular
COVID-19 (MODERNA) MRNA12/3/2021 Intramuscular
INFLUENZA (FLUCELVAX) CCIIV4, PREFILLED SYRINGE11/13/2019Intramuscular
INFLUENZA, UNSPECIFIED FORMULATION10/8/2018 Intramuscular
INFLUENZA, INACTIVATED, QUADRIVALENT, ALL AGES 6 MONTHS AND OLDER, SINGLE DOSE SYRINGE/VIAL10/8/2018 Intramuscular
INFLUENZA, INACTIVATED, QUADRIVALENT, ALL AGES 6 MONTHS AND OLDER, SINGLE DOSE SYRINGE/VIAL10/26/2022Intramuscular
INFLUENZA (FLUCELVAX) CCIIV4, PREFILLED SYRINGE10/25/2017Intramuscular
INFLUENZA, INACTIVATED, QUADRIVALENT, ALL AGES 6 MONTHS AND OLDER, SINGLE DOSE SYRINGE/VIAL10/24/2021Intramuscular

Epic distinguishes between vaccines administered at the facility (Given) and those reported by the patient or another provider (Historical).

View complete vaccine administration details including lot number

View SQL Query
SELECT 
    IMMUNZATN_ID_NAME as vaccine,
    IMMUNE_DATE,
    MFG_C_NAME as manufacturer,
    LOT as lot_number,
    EXP_DATE as expiration
FROM IMMUNE
WHERE LOT IS NOT NULL
ORDER BY IMMUNE_DATE DESC
LIMIT 5;
vaccineIMMUNE_DATEmanufacturerlot_numberexpiration
INFLUENZA (FLUARIX) IIV49/28/2023 12:00:00 AMGLAXO SMITH KLINE5ME77
COVID-19 (PFIZER-BIVALENT) MRNA AGES 12+9/25/2022 12:00:00 AM
COVID-19 (MODERNA) MRNA5/16/2021 12:00:00 AM
COVID-19 (MODERNA) MRNA4/18/2021 12:00:00 AM
HEPATITIS A (HAVRIX) HEPA ADULT2/5/2019 12:00:00 AM

Lot number tracking is crucial for safety recalls.


  • The Safety Triad: Medications (ORDER_MED), Allergies (PAT_ALLERGIES, ALLERGY), and Immunizations (PAT_IMMUNIZATIONS, IMMUNE) work together to ensure patient safety.
  • Medication Lifecycle: ORDER_MED tracks prescriptions, but this EHI export lacks Medication Administration Records (MAR) to confirm if they were taken.
  • Allergy Details: The allergy model captures not just the allergen but also specific reactions and severity, providing crucial detail for clinical decisions.
  • Immunization Source: The IMMNZTN_STATUS_C_NAME field is vital for distinguishing between vaccines given on-site and historical records.
  • Critical Missing Data: Key safety features like MAR, drug-drug interaction checks, and standardized CVX vaccine codes are not present in this EHI export.