diff --git a/data/medication-interaction-index.json b/data/medication-interaction-index.json index 57aa26aa5a..0013838aef 100644 --- a/data/medication-interaction-index.json +++ b/data/medication-interaction-index.json @@ -1,12 +1,12 @@ { "version": 1, "generatedFrom": "data/medications-snapshot.json", - "sourceRowCount": 523, + "sourceRowCount": 525, "stats": { - "resolvedRows": 362, - "unresolvedRows": 161, - "rowsWithCatalogueTarget": 423, - "medicationsWithUnresolvedRows": 142 + "resolvedRows": 392, + "unresolvedRows": 133, + "rowsWithCatalogueTarget": 440, + "medicationsWithUnresolvedRows": 118 }, "names": { "acamprosate": "Acamprosate", @@ -624,9 +624,16 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "caution", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": [ + "nicotine-gum", + "nicotine-inhalator", + "nicotine-lozenge", + "nicotine-mouth-spray", + "nicotine-patch", + "nicotine-sublingual-tablet" + ], + "termIds": ["nrt"], + "resolved": true, "note": "CAUTION — Transdermal NRT co-administration increased adverse effects in study data. Avoid routine combination unless there is a clear plan to monitor nausea, headache, vomiting, dizziness, dyspepsia, fatigue, and overall tolerability." }, { @@ -639,7 +646,7 @@ "note": "LOW — Varenicline has minimal clinically meaningful CYP450 interaction burden and is largely renally excreted unchanged; renal function matters more than CYP-mediated interactions." } ], - "unresolvedRowCount": 2 + "unresolvedRowCount": 1 }, "adrenaline-epinephrine": { "rows": [ @@ -1398,6 +1405,7 @@ "amiloride", "aspirin", "candesartan", + "celecoxib", "diclofenac", "eplerenone", "frusemide", @@ -1406,6 +1414,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "perindopril", "spironolactone" ], @@ -1503,6 +1512,7 @@ "amiloride", "aspirin", "candesartan", + "celecoxib", "diclofenac", "eplerenone", "frusemide", @@ -1511,6 +1521,7 @@ "indapamide", "ketorolac", "naproxen", + "parecoxib", "perindopril", "spironolactone" ], @@ -1562,6 +1573,7 @@ "amiloride", "aspirin", "candesartan", + "celecoxib", "diclofenac", "eplerenone", "frusemide", @@ -1570,6 +1582,7 @@ "indapamide", "ketorolac", "meloxicam", + "parecoxib", "perindopril", "spironolactone" ], @@ -1673,7 +1686,7 @@ "rowIndex": 0, "severity": "critical", "counterparties": ["lidocaine-patch"], - "termIds": [], + "termIds": ["anaesthetics"], "resolved": true, "note": "CRITICAL — Additive toxicity with other local anaesthetics. You must calculate the TOTAL cumulative dose if the patient has had a Lidocaine block and a Bupivacaine epidural." } @@ -1715,7 +1728,7 @@ "rowIndex": 0, "severity": "high", "counterparties": ["bupivacaine", "flecainide"], - "termIds": [], + "termIds": ["anaesthetics"], "resolved": true, "note": "HIGH — Additive toxicity with Class I antiarrhythmics (e.g., Flecainide) or other local anaesthetics (e.g., concurrent bupivacaine infusions)." } @@ -1762,15 +1775,20 @@ "rowIndex": 1, "severity": "high", "counterparties": [ + "amlodipine", "atenolol", "bisoprolol", "carvedilol", + "diltiazem", + "felodipine", "labetalol", "metoprolol", + "nifedipine-xr", "propranolol", - "sotalol" + "sotalol", + "verapamil" ], - "termIds": ["beta-blockers", "qtc-prolonging"], + "termIds": ["beta-blockers", "calcium-channel-blockers", "qtc-prolonging"], "resolved": false, "note": "HIGH — Beta-blockers, CCBs, and other QTc prolonging drugs." } @@ -1821,15 +1839,20 @@ "rowIndex": 0, "severity": "critical", "counterparties": [ + "amlodipine", "atenolol", "bisoprolol", "carvedilol", + "diltiazem", + "felodipine", "labetalol", "metoprolol", + "nifedipine-xr", "propranolol", - "sotalol" + "sotalol", + "verapamil" ], - "termIds": ["beta-blockers"], + "termIds": ["beta-blockers", "calcium-channel-blockers"], "resolved": true, "note": "CRITICAL — Beta-blockers/CCBs (additive negative inotropy and bradycardia)." }, @@ -1897,8 +1920,8 @@ "rowKey": "Pharmacodynamic", "rowIndex": 1, "severity": "critical", - "counterparties": ["verapamil"], - "termIds": [], + "counterparties": ["amlodipine", "diltiazem", "felodipine", "nifedipine-xr", "verapamil"], + "termIds": ["calcium-channel-blockers"], "resolved": true, "note": "CRITICAL — Non-DHP CCBs (Verapamil) risk asystole." } @@ -1978,6 +2001,7 @@ "counterparties": [ "amiloride", "aspirin", + "celecoxib", "diclofenac", "eplerenone", "frusemide", @@ -1987,6 +2011,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "spironolactone" ], "termIds": ["arbs", "diuretics", "nsaids"], @@ -2091,6 +2116,7 @@ "counterparties": [ "amiloride", "aspirin", + "celecoxib", "diclofenac", "eplerenone", "frusemide", @@ -2100,6 +2126,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "spironolactone" ], "termIds": ["acei", "diuretics", "nsaids"], @@ -2185,8 +2212,8 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "critical", - "counterparties": ["diltiazem", "verapamil"], - "termIds": [], + "counterparties": ["amlodipine", "diltiazem", "felodipine", "nifedipine-xr", "verapamil"], + "termIds": ["calcium-channel-blockers"], "resolved": true, "note": "CRITICAL — Non-DHP CCBs (Verapamil, Diltiazem) due to profound AV node blockade." }, @@ -2231,13 +2258,13 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "high", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": ["amlodipine", "diltiazem", "felodipine", "nifedipine-xr", "verapamil"], + "termIds": ["anaesthetics", "calcium-channel-blockers"], + "resolved": true, "note": "HIGH — Additive hypotension with halothane/anaesthetics. Bradycardia with non-DHP CCBs." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "metoprolol": { "rows": [ @@ -2277,7 +2304,16 @@ "rowKey": "Pharmacodynamic", "rowIndex": 1, "severity": "high", - "counterparties": ["aspirin", "diclofenac", "ibuprofen", "ketorolac", "meloxicam", "naproxen"], + "counterparties": [ + "aspirin", + "celecoxib", + "diclofenac", + "ibuprofen", + "ketorolac", + "meloxicam", + "naproxen", + "parecoxib" + ], "termIds": ["nsaids"], "resolved": true, "note": "HIGH — NSAIDs (exacerbate renal failure and hyperkalemia)." @@ -2317,11 +2353,13 @@ "counterparties": [ "aspirin", "candesartan", + "celecoxib", "diclofenac", "ibuprofen", "ketorolac", "meloxicam", "naproxen", + "parecoxib", "perindopril" ], "termIds": ["acei", "arbs", "nsaids"], @@ -2357,12 +2395,14 @@ "severity": "critical", "counterparties": [ "aspirin", + "celecoxib", "diclofenac", "ibuprofen", "indapamide", "ketorolac", "meloxicam", "naproxen", + "parecoxib", "perindopril" ], "termIds": ["acei", "nsaids", "thiazide-diuretics"], @@ -2387,7 +2427,17 @@ "rowKey": "Triple Whammy", "rowIndex": 1, "severity": "critical", - "counterparties": ["aspirin", "diclofenac", "ibuprofen", "ketorolac", "meloxicam", "naproxen", "perindopril"], + "counterparties": [ + "aspirin", + "celecoxib", + "diclofenac", + "ibuprofen", + "ketorolac", + "meloxicam", + "naproxen", + "parecoxib", + "perindopril" + ], "termIds": ["acei", "nsaids"], "resolved": true, "note": "CRITICAL — NSAIDs + ACEi + Indapamide." @@ -2433,8 +2483,8 @@ "rowKey": "Pharmacokinetic", "rowIndex": 1, "severity": "high", - "counterparties": ["rosuvastatin"], - "termIds": ["statins"], + "counterparties": ["fenofibrate", "rosuvastatin"], + "termIds": ["fibrates", "statins"], "resolved": true, "note": "HIGH — Gemfibrozil (Fibrate) blocks statin uptake, drastically increasing blood levels. Avoid combo." } @@ -2448,21 +2498,21 @@ "rowIndex": 0, "severity": "caution", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["bile-acid-sequestrants"], + "resolved": true, "note": "CAUTION — Bile acid sequestrants (Cholestyramine) bind to Ezetimibe in the gut. Must be taken 2 hours before or 4 hours after." }, { "rowKey": "Pharmacodynamic", "rowIndex": 1, "severity": "caution", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": ["fenofibrate"], + "termIds": ["fibrates"], + "resolved": true, "note": "CAUTION — Fibrates (increases risk of gallstones/cholelithiasis)." } ], - "unresolvedRowCount": 2 + "unresolvedRowCount": 0 }, "fenofibrate": { "rows": [ @@ -2583,8 +2633,8 @@ "rowIndex": 0, "severity": "high", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["anaesthetics"], + "resolved": true, "note": "HIGH — Additive hypotension with other vasodilators and anaesthetics." }, { @@ -2611,7 +2661,7 @@ "note": "BENEFICIAL — Beta-blockers (blunt reflex tachycardia) and Diuretics (blunt fluid retention)." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "prazosin": { "rows": [ @@ -2778,7 +2828,7 @@ "rowIndex": 0, "severity": "moderate", "counterparties": [], - "termIds": [], + "termIds": ["oral-absorption"], "resolved": false, "note": "MODERATE — Delayed gastric emptying can slightly delay the absorption of concomitant oral medications." } @@ -2791,8 +2841,47 @@ "rowKey": "Pharmacokinetic", "rowIndex": 0, "severity": "high", - "counterparties": ["paracetamol"], - "termIds": [], + "counterparties": [ + "amikacin", + "amoxicillin", + "amoxicillin-clavulanate", + "azithromycin", + "aztreonam", + "benzathine-benzylpenicillin", + "cefazolin", + "cefepime", + "ceftriaxone", + "cefuroxime", + "cephalexin", + "ciprofloxacin", + "clarithromycin", + "clindamycin", + "co-trimoxazole", + "colistin", + "dicloxacillin", + "doxycycline", + "ertapenem", + "erythromycin", + "ethinylestradiol", + "flucloxacillin", + "fosfomycin", + "gentamicin", + "levonorgestrel", + "medroxyprogesterone", + "meropenem", + "metronidazole", + "minocycline", + "moxifloxacin", + "nitrofurantoin", + "norfloxacin", + "paracetamol", + "phenoxymethylpenicillin", + "piperacillin-tazobactam", + "roxithromycin", + "trimethoprim", + "vancomycin" + ], + "termIds": ["antibiotics", "oral-contraceptives"], "resolved": true, "note": "HIGH — Because it paralyzes the stomach (slows gastric emptying), it can severely delay the absorption of oral drugs that require rapid peak levels (e.g., Paracetamol, oral contraceptives, antibiotics)." } @@ -3097,7 +3186,7 @@ "rowIndex": 0, "severity": "moderate", "counterparties": [], - "termIds": [], + "termIds": ["oral-absorption"], "resolved": false, "note": "MODERATE — Delays the absorption of rapidly acting oral medications due to gastric stasis." } @@ -3256,7 +3345,16 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "critical", - "counterparties": ["aspirin", "diclofenac", "ibuprofen", "ketorolac", "meloxicam", "naproxen"], + "counterparties": [ + "aspirin", + "celecoxib", + "diclofenac", + "ibuprofen", + "ketorolac", + "meloxicam", + "naproxen", + "parecoxib" + ], "termIds": ["nsaids"], "resolved": true, "note": "CRITICAL — NSAIDs (Massive risk of bleeding gastric ulcers)." @@ -3302,13 +3400,15 @@ "severity": "high", "counterparties": [ "aspirin", + "celecoxib", "diclofenac", "hydrochlorothiazide", "ibuprofen", "indapamide", "ketorolac", "meloxicam", - "naproxen" + "naproxen", + "parecoxib" ], "termIds": ["nsaids", "thiazide-diuretics"], "resolved": true, @@ -3339,13 +3439,15 @@ "severity": "critical", "counterparties": [ "aspirin", + "celecoxib", "diclofenac", "esomeprazole", "ibuprofen", "ketorolac", "meloxicam", "naproxen", - "pantoprazole" + "pantoprazole", + "parecoxib" ], "termIds": ["nsaids", "ppis"], "resolved": true, @@ -3371,13 +3473,15 @@ "severity": "critical", "counterparties": [ "aspirin", + "celecoxib", "diclofenac", "esomeprazole", "ibuprofen", "ketorolac", "meloxicam", "naproxen", - "pantoprazole" + "pantoprazole", + "parecoxib" ], "termIds": ["nsaids", "ppis"], "resolved": true, @@ -3429,13 +3533,13 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "high", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": ["methotrexate"], + "termIds": ["immunosuppressants"], + "resolved": true, "note": "HIGH — Immunosuppressants (additive risk of severe infections)." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "levothyroxine": { "rows": [ @@ -4006,7 +4110,16 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "caution", - "counterparties": ["aspirin", "diclofenac", "ibuprofen", "ketorolac", "meloxicam", "naproxen"], + "counterparties": [ + "aspirin", + "celecoxib", + "diclofenac", + "ibuprofen", + "ketorolac", + "meloxicam", + "naproxen", + "parecoxib" + ], "termIds": ["nsaids"], "resolved": true, "note": "CAUTION — Concurrent use with other nephrotoxic drugs (NSAIDs) increases the risk of renal failure." @@ -4038,8 +4151,8 @@ "rowKey": "Pharmacodynamic", "rowIndex": 1, "severity": "moderate", - "counterparties": ["gliclazide"], - "termIds": [], + "counterparties": ["gliclazide", "glipizide"], + "termIds": ["sulfonylureas"], "resolved": true, "note": "MODERATE — Can enhance the hypoglycemic effect of sulfonylureas (e.g., Gliclazide)." } @@ -4067,12 +4180,12 @@ "rowIndex": 0, "severity": "high", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["liquid-paraffin"], + "resolved": true, "note": "HIGH — Liquid paraffin (mineral oil laxatives). Docusate increases the systemic absorption of mineral oil, leading to lipoid pneumonia and hepatic granulomas. Never combine them." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "fortrans-peg": { "rows": [ @@ -4080,13 +4193,13 @@ "rowKey": "Pharmacokinetic", "rowIndex": 0, "severity": "critical", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": ["ethinylestradiol", "levonorgestrel", "medroxyprogesterone"], + "termIds": ["oral-contraceptives"], + "resolved": true, "note": "CRITICAL — Flushes EVERYTHING out. Any oral medication (e.g., blood pressure pills, oral contraceptives) taken within 2-3 hours of the prep will be flushed out completely unabsorbed." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "glycerol-suppository": { "rows": [ @@ -4122,13 +4235,48 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "low", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": [ + "amikacin", + "amoxicillin", + "amoxicillin-clavulanate", + "azithromycin", + "aztreonam", + "benzathine-benzylpenicillin", + "cefazolin", + "cefepime", + "ceftriaxone", + "cefuroxime", + "cephalexin", + "ciprofloxacin", + "clarithromycin", + "clindamycin", + "co-trimoxazole", + "colistin", + "dicloxacillin", + "doxycycline", + "ertapenem", + "erythromycin", + "flucloxacillin", + "fosfomycin", + "gentamicin", + "meropenem", + "metronidazole", + "minocycline", + "moxifloxacin", + "nitrofurantoin", + "norfloxacin", + "phenoxymethylpenicillin", + "piperacillin-tazobactam", + "roxithromycin", + "trimethoprim", + "vancomycin" + ], + "termIds": ["antibiotics"], + "resolved": true, "note": "LOW — Theoretically, oral antibiotics (like Neomycin) can kill the colonic bacteria needed to ferment lactulose, reducing its efficacy, but in practice, they are often used together successfully for encephalopathy." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "movicol-macrogol": { "rows": [ @@ -4194,10 +4342,14 @@ "severity": "high", "counterparties": [ "amiloride", + "amlodipine", "aspirin", "candesartan", + "celecoxib", "diclofenac", + "diltiazem", "eplerenone", + "felodipine", "frusemide", "hydrochlorothiazide", "ibuprofen", @@ -4205,10 +4357,13 @@ "ketorolac", "meloxicam", "naproxen", + "nifedipine-xr", + "parecoxib", "perindopril", - "spironolactone" + "spironolactone", + "verapamil" ], - "termIds": ["acei", "arbs", "diuretics", "nsaids"], + "termIds": ["acei", "arbs", "calcium-channel-blockers", "diuretics", "nsaids"], "resolved": true, "note": "HIGH — ACE inhibitors, ARBs, NSAIDs, diuretics, calcium channel blockers, and other drugs affecting renal perfusion/electrolytes increase AKI or electrolyte-risk context; avoid unless medically reviewed." } @@ -4221,13 +4376,48 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "low", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": [ + "amikacin", + "amoxicillin", + "amoxicillin-clavulanate", + "azithromycin", + "aztreonam", + "benzathine-benzylpenicillin", + "cefazolin", + "cefepime", + "ceftriaxone", + "cefuroxime", + "cephalexin", + "ciprofloxacin", + "clarithromycin", + "clindamycin", + "co-trimoxazole", + "colistin", + "dicloxacillin", + "doxycycline", + "ertapenem", + "erythromycin", + "flucloxacillin", + "fosfomycin", + "gentamicin", + "meropenem", + "metronidazole", + "minocycline", + "moxifloxacin", + "nitrofurantoin", + "norfloxacin", + "phenoxymethylpenicillin", + "piperacillin-tazobactam", + "roxithromycin", + "trimethoprim", + "vancomycin" + ], + "termIds": ["antibiotics"], + "resolved": true, "note": "LOW — Broad-spectrum antibiotics may theoretically reduce the colonic bacteria needed to activate the drug, but rarely clinically significant." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "apixaban": { "rows": [ @@ -4246,6 +4436,7 @@ "severity": "high", "counterparties": [ "aspirin", + "celecoxib", "citalopram", "diclofenac", "escitalopram", @@ -4255,6 +4446,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "paroxetine", "sertraline" ], @@ -4282,6 +4474,7 @@ "severity": "critical", "counterparties": [ "aspirin", + "celecoxib", "citalopram", "diclofenac", "escitalopram", @@ -4291,6 +4484,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "paroxetine", "sertraline" ], @@ -4310,6 +4504,7 @@ "counterparties": [ "apixaban", "aspirin", + "celecoxib", "clopidogrel", "dabigatran", "diclofenac", @@ -4321,6 +4516,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "rivaroxaban", "ticagrelor", "warfarin-anticoagulant", @@ -4357,6 +4553,7 @@ "severity": "critical", "counterparties": [ "aspirin", + "celecoxib", "citalopram", "diclofenac", "escitalopram", @@ -4366,6 +4563,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "paroxetine", "sertraline" ], @@ -4385,6 +4583,7 @@ "counterparties": [ "apixaban", "aspirin", + "celecoxib", "clopidogrel", "dabigatran", "dalteparin", @@ -4396,6 +4595,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "rivaroxaban", "ticagrelor", "warfarin-anticoagulant", @@ -4417,6 +4617,7 @@ "counterparties": [ "apixaban", "aspirin", + "celecoxib", "clopidogrel", "dabigatran", "dalteparin", @@ -4428,6 +4629,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "rivaroxaban", "ticagrelor", "warfarin-anticoagulant", @@ -4457,6 +4659,7 @@ "severity": "high", "counterparties": [ "aspirin", + "celecoxib", "citalopram", "diclofenac", "escitalopram", @@ -4466,6 +4669,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "paroxetine", "sertraline" ], @@ -4482,13 +4686,13 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "high", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": ["ethinylestradiol", "levonorgestrel", "medroxyprogesterone"], + "termIds": ["oral-contraceptives"], + "resolved": true, "note": "HIGH — Combined Oral Contraceptive Pill (COCP). Using TXA and estrogen together synergistically increases the risk of a fatal DVT or PE." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "warfarin-vka": { "rows": [ @@ -4496,28 +4700,52 @@ "rowKey": "Pharmacokinetic", "rowIndex": 0, "severity": "critical", - "counterparties": ["amiodarone", "fluconazole", "metronidazole", "warfarin-anticoagulant"], + "counterparties": ["amiodarone", "fluconazole", "metronidazole"], "termIds": ["cotrimoxazole"], "resolved": true, - "note": "CRITICAL — **CYP2C9** Inhibitors (Fluconazole, Metronidazole, Amiodarone, Bactrim). These will massively spike Warfarin levels, shooting the INR to 8+ and causing fatal bleeding. Dose must be halved preemptively." + "note": "CRITICAL — **CYP2C9** inhibitors (Amiodarone, Metronidazole, Fluconazole, Bactrim) massively spike INR and cause bleeding. You MUST halve the warfarin dose if starting these." }, { "rowKey": "Pharmacokinetic", "rowIndex": 1, "severity": "critical", - "counterparties": ["carbamazepine", "warfarin-anticoagulant"], + "counterparties": ["carbamazepine"], "termIds": ["st-johns-wort"], "resolved": true, - "note": "CRITICAL — **CYP2C9** Inducers (Carbamazepine, Rifampicin, St John's Wort). These destroy Warfarin, dropping the INR to 1.0 and causing massive strokes." + "note": "CRITICAL — **CYP2C9** inducers (Carbamazepine, Rifampicin, St John's Wort). These destroy Warfarin, dropping the INR to 1.0 and causing massive strokes." }, { - "rowKey": "Dietary", + "rowKey": "Pharmacodynamic", "rowIndex": 2, "severity": "high", - "counterparties": ["vitamin-k", "warfarin-anticoagulant"], + "counterparties": [ + "aspirin", + "celecoxib", + "citalopram", + "diclofenac", + "escitalopram", + "fluoxetine", + "fluvoxamine", + "ibuprofen", + "ketorolac", + "meloxicam", + "naproxen", + "parecoxib", + "paroxetine", + "sertraline" + ], + "termIds": ["nsaids", "ssris"], + "resolved": true, + "note": "HIGH — NSAIDs, Aspirin, SSRIs (increase bleeding risk without changing INR)." + }, + { + "rowKey": "Dietary", + "rowIndex": 3, + "severity": "high", + "counterparties": ["vitamin-k"], "termIds": [], "resolved": true, - "note": "HIGH — Leafy green vegetables (Spinach, Broccoli) contain high Vitamin K, directly canceling out Warfarin. Patients must maintain a consistent, unchanging diet." + "note": "HIGH — Leafy greens (broccoli, spinach) contain high Vitamin K and reverse the drug's effect. Diet must be consistent." } ], "unresolvedRowCount": 0 @@ -4528,17 +4756,27 @@ "rowKey": "Pharmacokinetic", "rowIndex": 0, "severity": "critical", - "counterparties": ["amiodarone", "fluconazole", "metronidazole", "warfarin-vka"], + "counterparties": ["amiodarone", "fluconazole", "metronidazole"], "termIds": ["cotrimoxazole"], "resolved": true, "note": "CRITICAL — **CYP2C9** inhibitors (Amiodarone, Metronidazole, Fluconazole, Bactrim) massively spike INR and cause bleeding. You MUST halve the warfarin dose if starting these." }, { - "rowKey": "Pharmacodynamic", + "rowKey": "Pharmacokinetic", "rowIndex": 1, + "severity": "critical", + "counterparties": ["carbamazepine"], + "termIds": ["st-johns-wort"], + "resolved": true, + "note": "CRITICAL — **CYP2C9** inducers (Carbamazepine, Rifampicin, St John's Wort). These destroy Warfarin, dropping the INR to 1.0 and causing massive strokes." + }, + { + "rowKey": "Pharmacodynamic", + "rowIndex": 2, "severity": "high", "counterparties": [ "aspirin", + "celecoxib", "citalopram", "diclofenac", "escitalopram", @@ -4548,6 +4786,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "paroxetine", "sertraline" ], @@ -4557,7 +4796,7 @@ }, { "rowKey": "Dietary", - "rowIndex": 2, + "rowIndex": 3, "severity": "high", "counterparties": ["vitamin-k"], "termIds": [], @@ -4575,6 +4814,7 @@ "severity": "critical", "counterparties": [ "apixaban", + "celecoxib", "clopidogrel", "dabigatran", "dalteparin", @@ -4587,6 +4827,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "rivaroxaban", "ticagrelor", "warfarin-anticoagulant", @@ -4626,6 +4867,7 @@ "counterparties": [ "apixaban", "aspirin", + "celecoxib", "citalopram", "dabigatran", "dalteparin", @@ -4641,6 +4883,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "paroxetine", "rivaroxaban", "sertraline", @@ -4729,12 +4972,14 @@ "severity": "critical", "counterparties": [ "aspirin", + "celecoxib", "diclofenac", "frusemide", "ibuprofen", "ketorolac", "meloxicam", "naproxen", + "parecoxib", "vancomycin" ], "termIds": ["loop-diuretics", "nsaids"], @@ -4806,12 +5051,14 @@ "counterparties": [ "amikacin", "aspirin", + "celecoxib", "diclofenac", "gentamicin", "ibuprofen", "ketorolac", "meloxicam", - "naproxen" + "naproxen", + "parecoxib" ], "termIds": ["aminoglycosides", "nsaids"], "resolved": true, @@ -4827,12 +5074,12 @@ "rowIndex": 0, "severity": "high", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["laiv"], + "resolved": true, "note": "HIGH — Live Attenuated Influenza Vaccine (LAIV). Oseltamivir will kill the live vaccine. Do not give LAIV within 2 weeks of taking Oseltamivir. (Note: Standard Australian flu shots are INACTIVATED and do not interact)." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "valaciclovir": { "rows": [ @@ -4843,6 +5090,7 @@ "counterparties": [ "amiloride", "aspirin", + "celecoxib", "diclofenac", "eplerenone", "frusemide", @@ -4852,6 +5100,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "perindopril", "spironolactone" ], @@ -4869,12 +5118,12 @@ "rowIndex": 0, "severity": "low", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["barrier-contraception"], + "resolved": true, "note": "LOW — Vaginal creams/pessaries contain oils that can degrade latex condoms and diaphragms, causing them to break. Warn patients to use alternative contraception methods." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "cefazolin": { "rows": [ @@ -4883,12 +5132,12 @@ "rowIndex": 0, "severity": "low", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["anaesthetics"], + "resolved": true, "note": "LOW — Exceptionally clean drug interaction profile. Highly safe to use with anaesthetic agents." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "cefepime": { "rows": [ @@ -4911,12 +5160,12 @@ "rowIndex": 0, "severity": "critical", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["iv-calcium-solutions"], + "resolved": true, "note": "CRITICAL — IV Calcium solutions (Hartmann's, Plasmalyte). Wait 48 hours or use distinct, deeply flushed lines." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "cefuroxime": { "rows": [ @@ -4966,6 +5215,7 @@ "beclometasone", "betamethasone", "budesonide", + "celecoxib", "ciclesonide", "clobetasol", "dexamethasone", @@ -4980,6 +5230,7 @@ "methylprednisolone", "mometasone", "naproxen", + "parecoxib", "prednisolone", "prednisone", "triamcinolone" @@ -5000,13 +5251,15 @@ "counterparties": [ "amikacin", "aspirin", + "celecoxib", "diclofenac", "frusemide", "gentamicin", "ibuprofen", "ketorolac", "meloxicam", - "naproxen" + "naproxen", + "parecoxib" ], "termIds": ["aminoglycosides", "loop-diuretics", "nsaids"], "resolved": true, @@ -5019,13 +5272,15 @@ "counterparties": [ "amikacin", "aspirin", + "celecoxib", "diclofenac", "frusemide", "gentamicin", "ibuprofen", "ketorolac", "meloxicam", - "naproxen" + "naproxen", + "parecoxib" ], "termIds": ["aminoglycosides", "loop-diuretics", "nsaids"], "resolved": true, @@ -5127,12 +5382,12 @@ "rowIndex": 1, "severity": "critical", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["retinoids"], + "resolved": true, "note": "CRITICAL — Oral Retinoids (Isotretinoin/Roaccutane). Fatal interaction causing pseudotumor cerebri." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "roxithromycin": { "rows": [ @@ -5200,12 +5455,12 @@ "rowIndex": 0, "severity": "high", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["anaesthetics"], + "resolved": true, "note": "HIGH — Neuromuscular blocking agents (Anaesthetics). Clindamycin has intrinsic neuromuscular blocking properties and will dangerously prolong the paralysis of surgical muscle relaxants." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "co-trimoxazole": { "rows": [ @@ -5246,7 +5501,7 @@ "rowIndex": 0, "severity": "critical", "counterparties": ["amikacin", "gentamicin"], - "termIds": ["aminoglycosides"], + "termIds": ["aminoglycosides", "anaesthetics"], "resolved": true, "note": "CRITICAL — Neuromuscular blocking agents (Rocuronium) and Aminoglycosides. The combination causes prolonged, fatal respiratory muscle paralysis." }, @@ -5254,7 +5509,17 @@ "rowKey": "Pharmacodynamic", "rowIndex": 1, "severity": "high", - "counterparties": ["aspirin", "diclofenac", "ibuprofen", "ketorolac", "meloxicam", "naproxen", "vancomycin"], + "counterparties": [ + "aspirin", + "celecoxib", + "diclofenac", + "ibuprofen", + "ketorolac", + "meloxicam", + "naproxen", + "parecoxib", + "vancomycin" + ], "termIds": ["nsaids"], "resolved": true, "note": "HIGH — Nephrotoxins (NSAIDs, Vancomycin). Synergistic kidney destruction." @@ -5282,8 +5547,43 @@ "rowKey": "Pharmacokinetic", "rowIndex": 0, "severity": "critical", - "counterparties": ["sodium-valproate-oral-iv"], - "termIds": [], + "counterparties": [ + "amikacin", + "amoxicillin", + "amoxicillin-clavulanate", + "azithromycin", + "aztreonam", + "benzathine-benzylpenicillin", + "cefazolin", + "cefepime", + "ceftriaxone", + "cefuroxime", + "cephalexin", + "ciprofloxacin", + "clarithromycin", + "clindamycin", + "co-trimoxazole", + "colistin", + "dicloxacillin", + "doxycycline", + "ertapenem", + "erythromycin", + "flucloxacillin", + "fosfomycin", + "gentamicin", + "metronidazole", + "minocycline", + "moxifloxacin", + "nitrofurantoin", + "norfloxacin", + "phenoxymethylpenicillin", + "piperacillin-tazobactam", + "roxithromycin", + "sodium-valproate-oral-iv", + "trimethoprim", + "vancomycin" + ], + "termIds": ["antibiotics"], "resolved": true, "note": "CRITICAL — Sodium Valproate (Epilim). Meropenem rapidly accelerates the hepatic breakdown of Valproate. Blood levels drop to zero within 24 hours. The interaction cannot be overcome by increasing Valproate dose. Use alternative antibiotic or antiepileptic." } @@ -5374,8 +5674,16 @@ "rowKey": "Pharmacokinetic", "rowIndex": 1, "severity": "high", - "counterparties": ["methotrexate"], - "termIds": [], + "counterparties": [ + "amoxicillin-clavulanate", + "benzathine-benzylpenicillin", + "dicloxacillin", + "flucloxacillin", + "methotrexate", + "phenoxymethylpenicillin", + "piperacillin-tazobactam" + ], + "termIds": ["penicillins"], "resolved": true, "note": "HIGH — Methotrexate (Penicillins reduce renal clearance of MTX, risking fatal bone marrow toxicity)." } @@ -5591,9 +5899,9 @@ "rowKey": "Pharmacokinetic", "rowIndex": 0, "severity": "critical", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": ["methotrexate"], + "termIds": ["immunosuppressants"], + "resolved": true, "note": "CRITICAL — Azathioprine and 6-Mercaptopurine. Xanthine oxidase breaks down these immunosuppressants. Allopurinol blocks this, causing 1000x fatal bone marrow toxicity. Do NOT combine without oncology oversight." }, { @@ -5606,7 +5914,7 @@ "note": "HIGH — Amoxicillin/Ampicillin (massive increase in non-allergic maculopapular rash)." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "baclofen": { "rows": [ @@ -5708,13 +6016,13 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "critical", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": ["amlodipine", "diltiazem", "felodipine", "nifedipine-xr", "verapamil"], + "termIds": ["calcium-channel-blockers"], + "resolved": true, "note": "CRITICAL — Avoid calcium channel blockers with IV dantrolene because severe hyperkalaemia and cardiovascular collapse have been reported." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "hydroxychloroquine": { "rows": [ @@ -5755,16 +6063,25 @@ "rowIndex": 1, "severity": "high", "counterparties": [ + "amoxicillin", + "amoxicillin-clavulanate", "aspirin", + "benzathine-benzylpenicillin", + "celecoxib", "diclofenac", + "dicloxacillin", "esomeprazole", + "flucloxacillin", "ibuprofen", "ketorolac", "meloxicam", "naproxen", - "pantoprazole" + "pantoprazole", + "parecoxib", + "phenoxymethylpenicillin", + "piperacillin-tazobactam" ], - "termIds": ["nsaids", "ppis"], + "termIds": ["nsaids", "penicillins", "ppis"], "resolved": true, "note": "HIGH — NSAIDs, Penicillins, PPIs (Reduce renal clearance of methotrexate, spiking toxicity)." } @@ -5871,9 +6188,22 @@ "rowKey": "Pharmacokinetic", "rowIndex": 1, "severity": "high", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": [ + "amoxicillin", + "amoxicillin-clavulanate", + "benzathine-benzylpenicillin", + "cefazolin", + "cefepime", + "ceftriaxone", + "cefuroxime", + "cephalexin", + "dicloxacillin", + "flucloxacillin", + "phenoxymethylpenicillin", + "piperacillin-tazobactam" + ], + "termIds": ["cephalosporins", "penicillins"], + "resolved": true, "note": "HIGH — Penicillins and Cephalosporins (massively increases their blood levels and half-life)." }, { @@ -5886,7 +6216,7 @@ "note": "HIGH — Methotrexate (reduces MTX clearance, spiking fatal toxicity)." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "armodafinil": { "rows": [ @@ -5894,8 +6224,8 @@ "rowKey": "Endocrine", "rowIndex": 0, "severity": "critical", - "counterparties": ["copper"], - "termIds": [], + "counterparties": ["copper", "ethinylestradiol", "levonorgestrel", "medroxyprogesterone"], + "termIds": ["oral-contraceptives"], "resolved": true, "note": "CRITICAL — Strong inducer of **CYP3A4**. It rapidly destroys the estrogen/progesterone in the Combined Oral Contraceptive Pill. Women MUST use alternative non-hormonal contraception (Copper IUD) while on the drug and for 1 month after stopping." }, @@ -6037,7 +6367,10 @@ "edoxaban", "enoxaparin", "erythromycin", + "ethinylestradiol", "heparin-iv-sc", + "levonorgestrel", + "medroxyprogesterone", "quetiapine", "rivaroxaban", "roxithromycin", @@ -6045,7 +6378,7 @@ "warfarin-anticoagulant", "warfarin-vka" ], - "termIds": ["anticoagulants", "macrolides"], + "termIds": ["anticoagulants", "macrolides", "oral-contraceptives"], "resolved": true, "note": "CRITICAL — Massively induces CYP3A4, CYP1A2, and CYP2C9. Destroys efficacy of DOACs (Apixaban/Rivaroxaban), Warfarin, Oral Contraceptives, Clozapine, Quetiapine, and Macrolides. A nightmare for polypharmacy." }, @@ -6123,13 +6456,13 @@ "rowKey": "Endocrine", "rowIndex": 2, "severity": "high", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": ["ethinylestradiol", "levonorgestrel", "medroxyprogesterone"], + "termIds": ["oral-contraceptives"], + "resolved": true, "note": "HIGH — The combined oral contraceptive pill (COCP) halves lamotrigine blood levels. If the woman stops the pill for the placebo week, lamotrigine levels spike, causing acute neurotoxicity (ataxia/double vision)." } ], - "unresolvedRowCount": 2 + "unresolvedRowCount": 1 }, "levetiracetam": { "rows": [ @@ -6145,13 +6478,16 @@ "dipyridamole", "edoxaban", "enoxaparin", + "ethinylestradiol", "heparin-iv-sc", + "levonorgestrel", + "medroxyprogesterone", "rivaroxaban", "ticagrelor", "warfarin-anticoagulant", "warfarin-vka" ], - "termIds": ["anticoagulants"], + "termIds": ["anticoagulants", "oral-contraceptives"], "resolved": true, "note": "LOW — Essentially zero drug-drug interactions. Safe to mix with all other anticonvulsants, OCPs, and DOACs." } @@ -6172,14 +6508,17 @@ "dipyridamole", "edoxaban", "enoxaparin", + "ethinylestradiol", "heparin-iv-sc", + "levonorgestrel", + "medroxyprogesterone", "quetiapine", "rivaroxaban", "ticagrelor", "warfarin-anticoagulant", "warfarin-vka" ], - "termIds": ["anticoagulants"], + "termIds": ["anticoagulants", "oral-contraceptives"], "resolved": true, "note": "CRITICAL — Broad-spectrum enzyme INDUCER (CYP3A4, CYP2C9). Obliterates blood levels of OCPs, DOACs, Warfarin, and Quetiapine." }, @@ -6261,13 +6600,13 @@ "rowKey": "Endocrine", "rowIndex": 0, "severity": "high", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": ["ethinylestradiol", "levonorgestrel", "medroxyprogesterone"], + "termIds": ["oral-contraceptives"], + "resolved": true, "note": "HIGH — Doses > 200mg/day induce CYP3A4, accelerating the clearance of oral contraceptives (OCPs), rendering them ineffective and leading to unplanned pregnancies." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "sumatriptan": { "rows": [ @@ -7162,8 +7501,8 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "critical", - "counterparties": ["diltiazem", "verapamil"], - "termIds": [], + "counterparties": ["amlodipine", "diltiazem", "felodipine", "nifedipine-xr", "verapamil"], + "termIds": ["calcium-channel-blockers"], "resolved": true, "note": "CRITICAL — Non-DHP CCBs (Verapamil, Diltiazem) cause fatal heart block/asystole." }, @@ -7493,7 +7832,16 @@ "rowKey": "Pharmacodynamic", "rowIndex": 2, "severity": "high", - "counterparties": ["aspirin", "diclofenac", "ibuprofen", "ketorolac", "meloxicam", "naproxen"], + "counterparties": [ + "aspirin", + "celecoxib", + "diclofenac", + "ibuprofen", + "ketorolac", + "meloxicam", + "naproxen", + "parecoxib" + ], "termIds": ["nsaids"], "resolved": true, "note": "HIGH — NSAIDs (Bleeding risk)." @@ -7528,7 +7876,16 @@ "rowKey": "Pharmacodynamic", "rowIndex": 1, "severity": "high", - "counterparties": ["aspirin", "diclofenac", "ibuprofen", "ketorolac", "meloxicam", "naproxen"], + "counterparties": [ + "aspirin", + "celecoxib", + "diclofenac", + "ibuprofen", + "ketorolac", + "meloxicam", + "naproxen", + "parecoxib" + ], "termIds": ["nsaids"], "resolved": true, "note": "HIGH — NSAIDs and Aspirin (Doubles risk of upper GI bleeds)." @@ -7767,6 +8124,7 @@ "severity": "high", "counterparties": [ "aspirin", + "celecoxib", "citalopram", "diclofenac", "escitalopram", @@ -7778,6 +8136,7 @@ "meloxicam", "naproxen", "pantoprazole", + "parecoxib", "paroxetine" ], "termIds": ["nsaids", "ppis", "ssris"], @@ -7833,7 +8192,16 @@ "rowKey": "Pharmacodynamic", "rowIndex": 1, "severity": "high", - "counterparties": ["aspirin", "diclofenac", "ibuprofen", "ketorolac", "meloxicam", "naproxen"], + "counterparties": [ + "aspirin", + "celecoxib", + "diclofenac", + "ibuprofen", + "ketorolac", + "meloxicam", + "naproxen", + "parecoxib" + ], "termIds": ["nsaids"], "resolved": true, "note": "HIGH — NSAIDs (Bleeding risk)." @@ -8313,6 +8681,7 @@ "counterparties": [ "aspirin", "candesartan", + "celecoxib", "diclofenac", "hydrochlorothiazide", "ibuprofen", @@ -8320,6 +8689,7 @@ "ketorolac", "meloxicam", "naproxen", + "parecoxib", "perindopril" ], "termIds": ["acei", "arbs", "lithium", "nsaids", "thiazide-diuretics"], @@ -8335,9 +8705,9 @@ "rowKey": "Endocrine", "rowIndex": 0, "severity": "critical", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": ["ethinylestradiol", "levonorgestrel", "medroxyprogesterone"], + "termIds": ["oral-contraceptives"], + "resolved": true, "note": "CRITICAL — Weak inducer of CYP3A4, but strong enough to completely destroy the efficacy of oral contraceptives (OCPs), causing unplanned pregnancy. Must use IUD or barrier." }, { @@ -8350,7 +8720,7 @@ "note": "HIGH — Inhibits CYP2C19. Will significantly raise blood levels of Phenytoin." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "amisulpride": { "rows": [ @@ -8944,13 +9314,21 @@ "rowKey": "Pharmacokinetic", "rowIndex": 0, "severity": "low", - "counterparties": [], - "termIds": [], - "resolved": false, + "counterparties": [ + "amoxicillin", + "amoxicillin-clavulanate", + "benzathine-benzylpenicillin", + "dicloxacillin", + "flucloxacillin", + "phenoxymethylpenicillin", + "piperacillin-tazobactam" + ], + "termIds": ["penicillins"], + "resolved": true, "note": "LOW — No major systemic interactions. However, it is chemically incompatible in the same IV line with many drugs (e.g., penicillins). Run on a dedicated line." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "flumazenil": { "rows": [ @@ -9384,8 +9762,43 @@ "rowKey": "Pharmacokinetic", "rowIndex": 0, "severity": "critical", - "counterparties": ["ciprofloxacin", "doxycycline", "moxifloxacin", "norfloxacin"], - "termIds": ["fluoroquinolones"], + "counterparties": [ + "amikacin", + "amoxicillin", + "amoxicillin-clavulanate", + "azithromycin", + "aztreonam", + "benzathine-benzylpenicillin", + "cefazolin", + "cefepime", + "ceftriaxone", + "cefuroxime", + "cephalexin", + "ciprofloxacin", + "clarithromycin", + "clindamycin", + "co-trimoxazole", + "colistin", + "dicloxacillin", + "doxycycline", + "ertapenem", + "erythromycin", + "flucloxacillin", + "fosfomycin", + "gentamicin", + "meropenem", + "metronidazole", + "minocycline", + "moxifloxacin", + "nitrofurantoin", + "norfloxacin", + "phenoxymethylpenicillin", + "piperacillin-tazobactam", + "roxithromycin", + "trimethoprim", + "vancomycin" + ], + "termIds": ["antibiotics", "fluoroquinolones"], "resolved": true, "note": "CRITICAL — Binds to Tetracyclines (Doxycycline) and Fluoroquinolones (Ciprofloxacin) in the gut, completely destroying their antibiotic absorption. Separate by 4 hours." } @@ -9398,8 +9811,8 @@ "rowKey": "Pharmacodynamic", "rowIndex": 0, "severity": "critical", - "counterparties": ["amlodipine", "nifedipine-xr"], - "termIds": [], + "counterparties": ["amlodipine", "diltiazem", "felodipine", "nifedipine-xr", "verapamil"], + "termIds": ["calcium-channel-blockers"], "resolved": true, "note": "CRITICAL — Calcium Channel Blockers (Nifedipine, Amlodipine). Combining IV Magnesium with high-dose CCBs causes profound, refractory hypotension and neuromuscular blockade." }, @@ -9439,11 +9852,13 @@ "amiloride", "aspirin", "candesartan", + "celecoxib", "diclofenac", "ibuprofen", "ketorolac", "meloxicam", "naproxen", + "parecoxib", "perindopril", "spironolactone" ], @@ -9559,8 +9974,8 @@ "rowIndex": 0, "severity": "critical", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["retinoids"], + "resolved": true, "note": "CRITICAL — Isotretinoin/Acitretin. These are Vitamin A derivatives. Adding Vitamin A supplements causes instant, severe systemic toxicity and intracranial hypertension." }, { @@ -9568,12 +9983,12 @@ "rowIndex": 1, "severity": "high", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["orlistat"], + "resolved": true, "note": "HIGH — Orlistat blocks absorption (fat-soluble)." } ], - "unresolvedRowCount": 2 + "unresolvedRowCount": 0 }, "vitamin-b12": { "rows": [ @@ -9596,8 +10011,8 @@ "rowIndex": 0, "severity": "high", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["bile-acid-sequestrants", "orlistat"], + "resolved": true, "note": "HIGH — Orlistat and Bile Acid Sequestrants block the absorption of all fat-soluble vitamins (A, D, E, K). Separate doses by 2-4 hours." }, { @@ -9610,7 +10025,7 @@ "note": "MODERATE — Phenytoin and Carbamazepine accelerate Vitamin D metabolism, increasing the dose requirement." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "vitamin-e": { "rows": [ @@ -9656,12 +10071,12 @@ "rowIndex": 1, "severity": "high", "counterparties": [], - "termIds": [], - "resolved": false, + "termIds": ["bile-acid-sequestrants", "orlistat"], + "resolved": true, "note": "HIGH — Bile acid sequestrants (Cholestyramine) and Orlistat block fat-soluble vitamin absorption in the gut. Avoid giving PO Vitamin K with them." } ], - "unresolvedRowCount": 1 + "unresolvedRowCount": 0 }, "zinc-sulfate": { "rows": [ diff --git a/data/medications-snapshot.json b/data/medications-snapshot.json index e32851a616..196429ef63 100644 --- a/data/medications-snapshot.json +++ b/data/medications-snapshot.json @@ -44162,17 +44162,22 @@ "rows": [ { "key": "Pharmacokinetic", - "val": "CRITICAL — **CYP2C9** Inhibitors (Fluconazole, Metronidazole, Amiodarone, Bactrim). These will massively spike Warfarin levels, shooting the INR to 8+ and causing fatal bleeding. Dose must be halved preemptively.", + "val": "CRITICAL — **CYP2C9** inhibitors (Amiodarone, Metronidazole, Fluconazole, Bactrim) massively spike INR and cause bleeding. You MUST halve the warfarin dose if starting these.", "tags": [] }, { "key": "Pharmacokinetic", - "val": "CRITICAL — **CYP2C9** Inducers (Carbamazepine, Rifampicin, St John's Wort). These destroy Warfarin, dropping the INR to 1.0 and causing massive strokes.", + "val": "CRITICAL — **CYP2C9** inducers (Carbamazepine, Rifampicin, St John's Wort). These destroy Warfarin, dropping the INR to 1.0 and causing massive strokes.", + "tags": [] + }, + { + "key": "Pharmacodynamic", + "val": "HIGH — NSAIDs, Aspirin, SSRIs (increase bleeding risk without changing INR).", "tags": [] }, { "key": "Dietary", - "val": "HIGH — Leafy green vegetables (Spinach, Broccoli) contain high Vitamin K, directly canceling out Warfarin. Patients must maintain a consistent, unchanging diet.", + "val": "HIGH — Leafy greens (broccoli, spinach) contain high Vitamin K and reverse the drug's effect. Diet must be consistent.", "tags": [] } ] @@ -44348,7 +44353,7 @@ }, { "label": "Key Interactions", - "value": "**CYP2C9** Inhibitors (Fluconazole, Metronidazole, Amiodarone, Bactrim). These will massively spike Warfarin levels, shooting the INR to 8+ and causing fatal bleeding. Dose must be halved preemptively. **CYP2C9** Inducers (Carbamazepine, Rifampicin, St John's Wort). These destroy Warfarin, dropping the INR to 1.0 and causing massive strokes. Leafy green vegetables (Spinach, Broccoli) contain high Vitamin K, directly canceling out Warfarin. Patients must maintain a consistent, unchanging diet." + "value": "**CYP2C9** inhibitors (Amiodarone, Metronidazole, Fluconazole, Bactrim) massively spike INR and cause bleeding. You MUST halve the warfarin dose if starting these. **CYP2C9** inducers (Carbamazepine, Rifampicin, St John's Wort). These destroy Warfarin, dropping the INR to 1.0 and causing massive strokes. NSAIDs, Aspirin, SSRIs (increase bleeding risk without changing INR). Leafy greens (broccoli, spinach) contain high Vitamin K and reverse the drug's effect. Diet must be consistent." }, { "label": "Monitoring", @@ -44543,6 +44548,11 @@ "val": "CRITICAL — **CYP2C9** inhibitors (Amiodarone, Metronidazole, Fluconazole, Bactrim) massively spike INR and cause bleeding. You MUST halve the warfarin dose if starting these.", "tags": [] }, + { + "key": "Pharmacokinetic", + "val": "CRITICAL — **CYP2C9** inducers (Carbamazepine, Rifampicin, St John's Wort). These destroy Warfarin, dropping the INR to 1.0 and causing massive strokes.", + "tags": [] + }, { "key": "Pharmacodynamic", "val": "HIGH — NSAIDs, Aspirin, SSRIs (increase bleeding risk without changing INR).", @@ -44720,7 +44730,7 @@ }, { "label": "Key Interactions", - "value": "**CYP2C9** inhibitors (Amiodarone, Metronidazole, Fluconazole, Bactrim) massively spike INR and cause bleeding. You MUST halve the warfarin dose if starting these. NSAIDs, Aspirin, SSRIs (increase bleeding risk without changing INR). Leafy greens (broccoli, spinach) contain high Vitamin K and reverse the drug's effect. Diet must be consistent." + "value": "**CYP2C9** inhibitors (Amiodarone, Metronidazole, Fluconazole, Bactrim) massively spike INR and cause bleeding. You MUST halve the warfarin dose if starting these. **CYP2C9** inducers (Carbamazepine, Rifampicin, St John's Wort). These destroy Warfarin, dropping the INR to 1.0 and causing massive strokes. NSAIDs, Aspirin, SSRIs (increase bleeding risk without changing INR). Leafy greens (broccoli, spinach) contain high Vitamin K and reverse the drug's effect. Diet must be consistent." }, { "label": "Monitoring", diff --git a/docs/branch-review-records/1bf7c9b14f7edbb599931c721d96a41bfa8bf96f62cbc131ae94f3cbccf22c03.record.md b/docs/branch-review-records/1bf7c9b14f7edbb599931c721d96a41bfa8bf96f62cbc131ae94f3cbccf22c03.record.md new file mode 100644 index 0000000000..ffdc535764 --- /dev/null +++ b/docs/branch-review-records/1bf7c9b14f7edbb599931c721d96a41bfa8bf96f62cbc131ae94f3cbccf22c03.record.md @@ -0,0 +1 @@ +| 2026-08-17 | gemini/clinical-medication-graph-dedup | a2ffea11481939af812b51541c081326b7ecd7f6 | Clinical medication graph & deduplication (#322, #323) | READY | npm run check:medication-lexicon-report; npx vitest run tests/medication-interaction-lexicon-coverage.test.ts; npm run typecheck:internal; npm run lint:internal; npm run format | diff --git a/docs/branch-review-records/dc184278fcbb5c0e83539eb038dbafc5e9f2da2db8985bba8a34dc9d62ae2e47.record.md b/docs/branch-review-records/dc184278fcbb5c0e83539eb038dbafc5e9f2da2db8985bba8a34dc9d62ae2e47.record.md new file mode 100644 index 0000000000..64595e555f --- /dev/null +++ b/docs/branch-review-records/dc184278fcbb5c0e83539eb038dbafc5e9f2da2db8985bba8a34dc9d62ae2e47.record.md @@ -0,0 +1 @@ +| 2026-08-18 | gemini/clinical-medication-graph-dedup | 5d46dc32a4667c87f9c3c9d844ad1a4a824e0ea7 | Clinical medication graph & deduplication (#322, #323) | READY | npm run check:medication-lexicon-report; npx vitest run tests/medication-interaction-lexicon-coverage.test.ts; npm run typecheck:internal; npm run lint:internal; npm run format | diff --git a/docs/medication-interaction-lexicon-review.md b/docs/medication-interaction-lexicon-review.md index 11a9ea5915..a32480f226 100644 --- a/docs/medication-interaction-lexicon-review.md +++ b/docs/medication-interaction-lexicon-review.md @@ -24,36 +24,45 @@ CRITICAL or HIGH. Start at the top — the table is sorted by severe usage. ## Drug-class terms -| Term | Matches these phrases | Rows | Severe | Resolves to | -| -------------------- | ------------------------------------------------------------------------------------- | ---- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `nsaids` | nsaids, nsaid | 39 | 38 | **6** — Aspirin, Diclofenac, Ibuprofen, Ketorolac, Meloxicam, Naproxen | -| `opioids` | opioids, opioid, opioid analgesia, opiates, full agonists | 36 | 35 | **14** — Buprenorphine (SL/depot), Buprenorphine + naloxone, Buprenorphine patch, Codeine, Fentanyl, Hydromorphone (IR/IV), Loperamide, Methadone, Morphine (IR/IV), Morphine SR / MR, Oxycodone IR, Oxycodone SR / MR, Tapentadol SR, Tramadol IR | -| `benzodiazepines` | benzodiazepines, benzodiazepine, benzos, benzo | 32 | 32 | **8** — Alprazolam, Clonazepam, Diazepam, Lorazepam, Midazolam, Nitrazepam, Oxazepam, Temazepam | -| `beta-blockers` | beta-blockers, beta blockers, beta-blocker, beta blocker, non-selective beta-blockers | 23 | 22 | **7** — Atenolol, Bisoprolol, Carvedilol, Labetalol, Metoprolol, Propranolol, Sotalol | -| `tcas` | tcas, tca, tricyclics, tricyclic antidepressants, anticholinergic tcas | 22 | 20 | **6** — Amitriptyline, Clomipramine, Dosulepin, Doxepin, Imipramine, Nortriptyline | -| `acei` | acei, aceis, ace inhibitors, ace inhibitor | 20 | 20 | **1** — Perindopril | -| `ssris` | ssris, ssri | 21 | 19 | **6** — Citalopram, Escitalopram, Fluoxetine, Fluvoxamine, Paroxetine, Sertraline | -| `maois` | maois, maoi, monoamine oxidase inhibitors | 19 | 17 | **2** — Phenelzine, Tranylcypromine | -| `diuretics` | diuretics, diuretic | 18 | 17 | **6** — Amiloride, Eplerenone, Frusemide, Hydrochlorothiazide, Indapamide, Spironolactone | -| `arbs` | arbs, arb | 16 | 16 | **1** — Candesartan | -| `anticholinergics` | anticholinergics, anticholinergic, atropine-like medicines | 18 | 15 | **6** — Benzatropine, Hyoscine butylbromide, Hyoscine hydrobromide, Orphenadrine, Oxybutynin, Solifenacin | -| `anticoagulants` | anticoagulants, anticoagulant, doacs, doac | 18 | 15 | **12** — Apixaban, Clopidogrel, Dabigatran, Dalteparin, Dipyridamole, Edoxaban, Enoxaparin, Heparin (IV/SC), Rivaroxaban, Ticagrelor, Warfarin (`warfarin-anticoagulant`), Warfarin (`warfarin-vka`) | -| `antipsychotics` | antipsychotics, antipsychotic | 17 | 15 | **26** — Amisulpride, Aripiprazole, Aripiprazole LAI, Asenapine, Brexpiprazole, Cariprazine, Chlorpromazine, Clozapine, Flupentixol decanoate, Haloperidol decanoate, Levomepromazine, Lurasidone, Olanzapine (wafer/ODT), Olanzapine pamoate LAI, Paliperidone ER, Paliperidone LAI, Periciazine, Quetiapine, Risperidone, Risperidone LAI, Trifluoperazine, Ziprasidone, Ziprasidone IM, Zuclopenthixol, Zuclopenthixol acetate, Zuclopenthixol decanoate | -| `antacids` | antacids, antacid | 16 | 14 | **2** — Calcium carbonate, Magnesium oxide | -| `antihypertensives` | antihypertensives, antihypertensive | 14 | 14 | **17** — Amlodipine, Atenolol, Bisoprolol, Candesartan, Carvedilol, Diltiazem, Eplerenone, Felodipine, Frusemide, Hydrochlorothiazide, Indapamide, Labetalol, Metoprolol, Nifedipine XR, Perindopril, Spironolactone, Verapamil | -| `macrolides` | macrolides, macrolide | 13 | 12 | **4** — Azithromycin, Clarithromycin, Erythromycin, Roxithromycin | -| `corticosteroids` | corticosteroids, corticosteroid, steroids, steroid | 9 | 9 | **15** — Beclometasone, Betamethasone, Budesonide, Ciclesonide, Clobetasol, Dexamethasone, Fludrocortisone, Fluticasone, Hydrocortisone, Hydrocortisone 1%, Methylprednisolone, Mometasone, Prednisolone, Prednisone, Triamcinolone | -| `lithium` | lithium, lithium carbonate | 9 | 9 | **1** — Lithium carbonate (IR/SR) | -| `thiazide-diuretics` | thiazide diuretics, thiazides, thiazide | 9 | 9 | **2** — Hydrochlorothiazide, Indapamide | -| `ppis` | ppis, ppi, proton pump inhibitors | 8 | 8 | **2** — Esomeprazole, Pantoprazole | -| `statins` | statins, statin | 9 | 7 | **2** — Atorvastatin, Rosuvastatin | -| `aminoglycosides` | aminoglycosides, aminoglycoside | 6 | 5 | **2** — Amikacin, Gentamicin | -| `fluoroquinolones` | fluoroquinolones, fluoroquinolone, quinolones | 5 | 5 | **3** — Ciprofloxacin, Moxifloxacin, Norfloxacin | -| `loop-diuretics` | loop diuretics, loop diuretic | 5 | 5 | **1** — Frusemide | -| `antihistamines` | antihistamines, antihistamine | 4 | 3 | **7** — Alimemazine, Cetirizine, Cyclizine, Diphenhydramine, Fexofenadine, Loratadine, Promethazine | -| `snris` | snris, snri | 4 | 3 | **5** — Atomoxetine, Desvenlafaxine, Duloxetine, Tramadol IR, Venlafaxine XR | -| `antiplatelets` | antiplatelets, antiplatelet | 3 | 3 | **4** — Aspirin, Clopidogrel, Dipyridamole, Ticagrelor | -| `gabapentinoids` | gabapentinoids, gabapentinoid | 3 | 3 | **2** — Gabapentin, Pregabalin | +| Term | Matches these phrases | Rows | Severe | Resolves to | +| -------------------------- | -------------------------------------------------------------------------------------------------------- | ---- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `nsaids` | nsaids, nsaid | 40 | 39 | **8** — Aspirin, Celecoxib, Diclofenac, Ibuprofen, Ketorolac, Meloxicam, Naproxen, Parecoxib | +| `opioids` | opioids, opioid, opioid analgesia, opiates, full agonists | 36 | 35 | **14** — Buprenorphine (SL/depot), Buprenorphine + naloxone, Buprenorphine patch, Codeine, Fentanyl, Hydromorphone (IR/IV), Loperamide, Methadone, Morphine (IR/IV), Morphine SR / MR, Oxycodone IR, Oxycodone SR / MR, Tapentadol SR, Tramadol IR | +| `benzodiazepines` | benzodiazepines, benzodiazepine, benzos, benzo | 32 | 32 | **8** — Alprazolam, Clonazepam, Diazepam, Lorazepam, Midazolam, Nitrazepam, Oxazepam, Temazepam | +| `beta-blockers` | beta-blockers, beta blockers, beta-blocker, beta blocker, non-selective beta-blockers | 23 | 22 | **7** — Atenolol, Bisoprolol, Carvedilol, Labetalol, Metoprolol, Propranolol, Sotalol | +| `ssris` | ssris, ssri | 22 | 20 | **6** — Citalopram, Escitalopram, Fluoxetine, Fluvoxamine, Paroxetine, Sertraline | +| `tcas` | tcas, tca, tricyclics, tricyclic antidepressants, anticholinergic tcas | 22 | 20 | **6** — Amitriptyline, Clomipramine, Dosulepin, Doxepin, Imipramine, Nortriptyline | +| `acei` | acei, aceis, ace inhibitors, ace inhibitor | 20 | 20 | **1** — Perindopril | +| `maois` | maois, maoi, monoamine oxidase inhibitors | 19 | 17 | **2** — Phenelzine, Tranylcypromine | +| `diuretics` | diuretics, diuretic | 18 | 17 | **6** — Amiloride, Eplerenone, Frusemide, Hydrochlorothiazide, Indapamide, Spironolactone | +| `arbs` | arbs, arb | 16 | 16 | **1** — Candesartan | +| `anticholinergics` | anticholinergics, anticholinergic, atropine-like medicines | 18 | 15 | **6** — Benzatropine, Hyoscine butylbromide, Hyoscine hydrobromide, Orphenadrine, Oxybutynin, Solifenacin | +| `anticoagulants` | anticoagulants, anticoagulant, doacs, doac | 18 | 15 | **12** — Apixaban, Clopidogrel, Dabigatran, Dalteparin, Dipyridamole, Edoxaban, Enoxaparin, Heparin (IV/SC), Rivaroxaban, Ticagrelor, Warfarin (`warfarin-anticoagulant`), Warfarin (`warfarin-vka`) | +| `antipsychotics` | antipsychotics, antipsychotic | 17 | 15 | **26** — Amisulpride, Aripiprazole, Aripiprazole LAI, Asenapine, Brexpiprazole, Cariprazine, Chlorpromazine, Clozapine, Flupentixol decanoate, Haloperidol decanoate, Levomepromazine, Lurasidone, Olanzapine (wafer/ODT), Olanzapine pamoate LAI, Paliperidone ER, Paliperidone LAI, Periciazine, Quetiapine, Risperidone, Risperidone LAI, Trifluoperazine, Ziprasidone, Ziprasidone IM, Zuclopenthixol, Zuclopenthixol acetate, Zuclopenthixol decanoate | +| `antacids` | antacids, antacid | 16 | 14 | **2** — Calcium carbonate, Magnesium oxide | +| `antihypertensives` | antihypertensives, antihypertensive | 14 | 14 | **17** — Amlodipine, Atenolol, Bisoprolol, Candesartan, Carvedilol, Diltiazem, Eplerenone, Felodipine, Frusemide, Hydrochlorothiazide, Indapamide, Labetalol, Metoprolol, Nifedipine XR, Perindopril, Spironolactone, Verapamil | +| `macrolides` | macrolides, macrolide | 13 | 12 | **4** — Azithromycin, Clarithromycin, Erythromycin, Roxithromycin | +| `oral-contraceptives` | oral contraceptives, oral contraceptive, combined oral contraceptive pill, cocp, ocps, ocp | 10 | 9 | **3** — Ethinylestradiol, Levonorgestrel, Medroxyprogesterone | +| `calcium-channel-blockers` | calcium channel blockers, calcium channel blocker, ccbs, ccb, non-dhp ccbs, dhp calcium channel blockers | 9 | 9 | **5** — Amlodipine, Diltiazem, Felodipine, Nifedipine XR, Verapamil | +| `corticosteroids` | corticosteroids, corticosteroid, steroids, steroid | 9 | 9 | **15** — Beclometasone, Betamethasone, Budesonide, Ciclesonide, Clobetasol, Dexamethasone, Fludrocortisone, Fluticasone, Hydrocortisone, Hydrocortisone 1%, Methylprednisolone, Mometasone, Prednisolone, Prednisone, Triamcinolone | +| `lithium` | lithium, lithium carbonate | 9 | 9 | **1** — Lithium carbonate (IR/SR) | +| `thiazide-diuretics` | thiazide diuretics, thiazides, thiazide | 9 | 9 | **2** — Hydrochlorothiazide, Indapamide | +| `ppis` | ppis, ppi, proton pump inhibitors | 8 | 8 | **2** — Esomeprazole, Pantoprazole | +| `statins` | statins, statin | 9 | 7 | **2** — Atorvastatin, Rosuvastatin | +| `aminoglycosides` | aminoglycosides, aminoglycoside | 6 | 5 | **2** — Amikacin, Gentamicin | +| `fluoroquinolones` | fluoroquinolones, fluoroquinolone, quinolones | 5 | 5 | **3** — Ciprofloxacin, Moxifloxacin, Norfloxacin | +| `loop-diuretics` | loop diuretics, loop diuretic | 5 | 5 | **1** — Frusemide | +| `antibiotics` | antibiotics, antibiotic, oral antibiotics, broad-spectrum antibiotics | 5 | 3 | **34** — Amikacin, Amoxicillin, Amoxicillin/clavulanate, Azithromycin, Aztreonam, Benzathine benzylpenicillin, Cefazolin, Cefepime, Ceftriaxone, Cefuroxime, Cephalexin, Ciprofloxacin, Clarithromycin, Clindamycin, Co-trimoxazole, Colistin, Dicloxacillin, Doxycycline, Ertapenem, Erythromycin, Flucloxacillin, Fosfomycin, Gentamicin, Meropenem, Metronidazole, Minocycline, Moxifloxacin, Nitrofurantoin, Norfloxacin, Phenoxymethylpenicillin, Piperacillin/tazobactam, Roxithromycin, Trimethoprim, Vancomycin | +| `antihistamines` | antihistamines, antihistamine | 4 | 3 | **7** — Alimemazine, Cetirizine, Cyclizine, Diphenhydramine, Fexofenadine, Loratadine, Promethazine | +| `penicillins` | penicillins, penicillin | 4 | 3 | **7** — Amoxicillin, Amoxicillin/clavulanate, Benzathine benzylpenicillin, Dicloxacillin, Flucloxacillin, Phenoxymethylpenicillin, Piperacillin/tazobactam | +| `snris` | snris, snri | 4 | 3 | **5** — Atomoxetine, Desvenlafaxine, Duloxetine, Tramadol IR, Venlafaxine XR | +| `antiplatelets` | antiplatelets, antiplatelet | 3 | 3 | **4** — Aspirin, Clopidogrel, Dipyridamole, Ticagrelor | +| `gabapentinoids` | gabapentinoids, gabapentinoid | 3 | 3 | **2** — Gabapentin, Pregabalin | +| `immunosuppressants` | immunosuppressants, immunosuppressant | 2 | 2 | **1** — Methotrexate | +| `fibrates` | fibrates, fibrate | 2 | 1 | **1** — Fenofibrate | +| `cephalosporins` | cephalosporins, cephalosporin | 1 | 1 | **5** — Cefazolin, Cefepime, Ceftriaxone, Cefuroxime, Cephalexin | +| `nrt` | transdermal nrt, nicotine transdermal systems, nicotine patches | 1 | 0 | **6** — Nicotine gum, Nicotine inhalator, Nicotine lozenge, Nicotine mouth spray, Nicotine patch, Nicotine sublingual tablet | +| `sulfonylureas` | sulfonylureas, sulfonylurea | 1 | 0 | **2** — Gliclazide, Glipizide | ## Deliberate exclusions @@ -72,29 +81,38 @@ Drugs a selector would otherwise have swept in. Each is a clinical claim worth c These never produce an alert. `nonDrug` and `external` are deliberate; `mechanism` is an admission that the class cannot be enumerated, and holds the medication at grey rather than green. -| Term | Kind | Matches these phrases | Rows | Note | -| ------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------------------------------------------------- | -| `alcohol` | nonDrug | alcohol, alcohol-containing preparations, ethanol | 33 | Substance use, not a prescribable catalogue entry. | -| `grapefruit` | nonDrug | grapefruit, grapefruit juice | 6 | Dietary CYP3A4 inhibitor. | -| `acidic-drinks` | nonDrug | acidic drinks, coffee, juice, soft drinks, cola | 7 | Buccal/oral absorption timing, not a drug interaction. | -| `smoking` | nonDrug | smoking, cigarette smoke, tobacco smoke | 7 | CYP1A2 induction by polycyclic aromatic hydrocarbons, not by nicotine. | -| `food` | nonDrug | food, dairy, milk, high-fat meals, tyramine | 10 | Dietary. | -| `st-johns-wort` | external | st john's wort, st johns wort, hypericum | 8 | Herbal CYP3A4 inducer; not stocked in the catalogue. | -| `azole-antifungals` | external | ketoconazole, azoles, azole antifungals | 23 | Ketoconazole is not in the catalogue; fluconazole/itraconazole resolve by name. | -| `barbiturates` | external | barbiturates, barbiturate, phenobarbital, phenobarbitone | 5 | Not stocked in the catalogue. | -| `antiretrovirals` | external | antiretrovirals, antiretroviral, protease inhibitors | 2 | Ritonavir and relatives are outside the catalogue. | -| `cotrimoxazole` | external | bactrim, co-trimoxazole, cotrimoxazole | 3 | Combination product; trimethoprim resolves by name. | -| `cyp-inhibitors` | mechanism | cyp inhibitors, cyp inhibitor, strong cyp inhibitors, cyp3a4 inhibitors, cyp2d6 inhibitors, cyp1a2 inhibitors, cyp2c19 inhibitors | 50 | Enumerating inhibitors needs pharmacokinetic data the catalogue does not carry. | -| `cyp-inducers` | mechanism | cyp inducers, cyp inducer, strong cyp inducers, cyp3a4 inducers, enzyme inducers | 9 | See cyp-inhibitors. | -| `cyp-substrates` | mechanism | cyp substrates, cyp2d6 substrates, cyp3a4 substrates, narrow therapeutic index drugs | 1 | | -| `pgp` | mechanism | p-gp, p-gp inhibitors, p-glycoprotein, oatp | 11 | | -| `cns-depressants` | mechanism | cns depressants, cns depressant, sedatives, sedative, sedating drugs | 12 | Deliberately unenumerable: the surface spans benzodiazepines, opioids, antihistamines, alcohol and more. | -| `qtc-prolonging` | mechanism | qtc prolonging drugs, qt prolonging drugs, concurrent qtc prolonging drugs, qt-prolonging agents | 10 | The catalogue carries QTc risk per drug but not a curated interacting set. | -| `serotonergic` | mechanism | serotonergic drugs, serotonergic agents, other serotonergics | 1 | | +| Term | Kind | Matches these phrases | Rows | Note | +| ------------------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------------------------------------------------- | +| `alcohol` | nonDrug | alcohol, alcohol-containing preparations, ethanol | 33 | Substance use, not a prescribable catalogue entry. | +| `grapefruit` | nonDrug | grapefruit, grapefruit juice | 6 | Dietary CYP3A4 inhibitor. | +| `acidic-drinks` | nonDrug | acidic drinks, coffee, juice, soft drinks, cola | 7 | Buccal/oral absorption timing, not a drug interaction. | +| `smoking` | nonDrug | smoking, cigarette smoke, tobacco smoke | 7 | CYP1A2 induction by polycyclic aromatic hydrocarbons, not by nicotine. | +| `food` | nonDrug | food, dairy, milk, high-fat meals, tyramine | 10 | Dietary. | +| `st-johns-wort` | external | st john's wort, st johns wort, hypericum | 9 | Herbal CYP3A4 inducer; not stocked in the catalogue. | +| `azole-antifungals` | external | ketoconazole, azoles, azole antifungals | 23 | Ketoconazole is not in the catalogue; fluconazole/itraconazole resolve by name. | +| `barbiturates` | external | barbiturates, barbiturate, phenobarbital, phenobarbitone | 5 | Not stocked in the catalogue. | +| `antiretrovirals` | external | antiretrovirals, antiretroviral, protease inhibitors | 2 | Ritonavir and relatives are outside the catalogue. | +| `cotrimoxazole` | external | bactrim, co-trimoxazole, cotrimoxazole | 3 | Combination product; trimethoprim resolves by name. | +| `cyp-inhibitors` | mechanism | cyp inhibitors, cyp inhibitor, strong cyp inhibitors, cyp3a4 inhibitors, cyp2d6 inhibitors, cyp1a2 inhibitors, cyp2c19 inhibitors | 50 | Enumerating inhibitors needs pharmacokinetic data the catalogue does not carry. | +| `cyp-inducers` | mechanism | cyp inducers, cyp inducer, strong cyp inducers, cyp3a4 inducers, enzyme inducers | 9 | See cyp-inhibitors. | +| `cyp-substrates` | mechanism | cyp substrates, cyp2d6 substrates, cyp3a4 substrates, narrow therapeutic index drugs | 1 | | +| `pgp` | mechanism | p-gp, p-gp inhibitors, p-glycoprotein, oatp | 11 | | +| `cns-depressants` | mechanism | cns depressants, cns depressant, sedatives, sedative, sedating drugs | 12 | Deliberately unenumerable: the surface spans benzodiazepines, opioids, antihistamines, alcohol and more. | +| `qtc-prolonging` | mechanism | qtc prolonging drugs, qt prolonging drugs, concurrent qtc prolonging drugs, qt-prolonging agents | 10 | The catalogue carries QTc risk per drug but not a curated interacting set. | +| `serotonergic` | mechanism | serotonergic drugs, serotonergic agents, other serotonergics | 1 | | +| `bile-acid-sequestrants` | external | bile acid sequestrants, cholestyramine | 3 | Bile acid sequestrants (e.g. Cholestyramine); not stocked in catalogue. | +| `retinoids` | external | isotretinoin, acitretin | 2 | Systemic retinoids; outside current catalogue. | +| `orlistat` | external | orlistat | 3 | Lipase inhibitor; outside catalogue. | +| `anaesthetics` | external | anaesthetic agents, anaesthetics, anaesthetic, neuromuscular blocking agents | 7 | Hospital-only surgical anaesthetics and neuromuscular blockers. | +| `laiv` | external | live attenuated influenza vaccine, laiv | 1 | Live attenuated influenza vaccine, not prescribable drug. | +| `barrier-contraception` | nonDrug | condoms, latex condoms, diaphragms | 1 | Barrier contraception methods damaged by oil-based formulations. | +| `liquid-paraffin` | external | liquid paraffin, mineral oil laxatives | 1 | Mineral oil laxative; outside catalogue. | +| `iv-calcium-solutions` | nonDrug | iv calcium solutions, hartmann's, plasmalyte | 1 | Intravenous electrolyte infusion solutions, not prescribable drugs. | +| `oral-absorption` | mechanism | concomitant oral medications, rapidly acting oral medications | 2 | General absorption delay / transit-time alteration for oral formulations. | ## What this tool can never warn about -**35 of the catalogue's 328 medications sit outside both ends of every resolved +**20 of the catalogue's 328 medications sit outside both ends of every resolved interaction row.** Entering one of them produces no alert — not because the combination was checked and found clear, but because no machine-resolved edge in the corpus includes that drug. On screen those outcomes look the same, so this list is the honest boundary of the feature. @@ -102,33 +120,26 @@ same, so this list is the honest boundary of the feature. This is a **corpus coverage** limit, not necessarily a lexicon fault. Widening it means adding an interaction row or making an existing row machine-resolvable, with clinical review of the source content. -| Class | Unreachable | Drugs | -| --------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------- | -| Aperient | 8 | Docusate sodium, Fortrans/PEG, Glycerol suppository, Ispaghula husk, Lactulose, Movicol/Macrogol, Osmolax, Sodium picosulfate | -| Antibiotic | 5 | Benzathine benzylpenicillin, Cefazolin, Ceftriaxone, Cephalexin, Clindamycin | -| Antidiabetic | 4 | Dulaglutide, Linagliptin, Semaglutide, Sitagliptin | -| Vitamin | 3 | Riboflavin, Thiamine, Vitamin A | -| Antidote | 2 | Acetylcysteine, Dantrolene | -| Antifungal | 2 | Clotrimazole, Nystatin | -| Urology | 2 | Dutasteride, Finasteride | -| Antiviral | 1 | Oseltamivir | -| Bone Metabolism | 1 | Denosumab | -| Haemostatic | 1 | Tranexamic acid | -| Lipid-Lowering | 1 | Ezetimibe | -| Mineral | 1 | Selenium | -| Neurology | 1 | Topiramate | -| Sedative | 1 | Zolpidem | -| SUD | 1 | Varenicline | -| Topical | 1 | Capsaicin cream | +| Class | Unreachable | Drugs | +| ------------ | ----------- | -------------------------------------------------------------------------------- | +| Aperient | 5 | Docusate sodium, Glycerol suppository, Ispaghula husk, Movicol/Macrogol, Osmolax | +| Antidiabetic | 4 | Dulaglutide, Linagliptin, Semaglutide, Sitagliptin | +| Vitamin | 3 | Riboflavin, Thiamine, Vitamin A | +| Antifungal | 2 | Clotrimazole, Nystatin | +| Urology | 2 | Dutasteride, Finasteride | +| Antiviral | 1 | Oseltamivir | +| Mineral | 1 | Selenium | +| Sedative | 1 | Zolpidem | +| Topical | 1 | Capsaicin cream | ## Flagged for a closer look -- `nsaids` does **not** cover Celecoxib (COX-2 Inhibitor), Parecoxib (COX-2 Inhibitor (Injectable)), whose own catalogue class names the term. A drug left out of a class is a missed alert, not a false one. -- The catalogue holds 2 records named **Warfarin** (`warfarin-vka`, `warfarin-anticoagulant`), and a lexicon class resolves to them. They carry **different** interaction rows (`warfarin-vka`: 3, `warfarin-anticoagulant`: 3; only 0 in common), so which record the clinician opens changes which warnings they see. Reconcile them in the catalogue. +- The catalogue holds 2 records named **Warfarin** (`warfarin-vka`, `warfarin-anticoagulant`), and a lexicon class resolves to them. They carry identical interaction rows, so the duplication is cosmetic. Checks that ran and found nothing: - **Accidental substring matches** — no class token matches a subclass only as a fragment of a longer word. (This is the check that caught `ARB` inside _Carbapenem_.) +- **Missed class members** — no catalogue drug whose own class, subclass or tag names a term's phrase was left out of that term. Three-letter class acronyms are matched as whole tokens, so `TCA` and `ARB` are covered rather than skipped. Where a class resolves to a single drug, that is the catalogue holding one such drug, not a narrow selector. ## Sign-off diff --git a/scripts/build-medication-interaction-index.ts b/scripts/build-medication-interaction-index.ts index 40a6519aa7..7e664a6a29 100644 --- a/scripts/build-medication-interaction-index.ts +++ b/scripts/build-medication-interaction-index.ts @@ -242,6 +242,10 @@ function main(): void { } for (const { surface, slug } of drugSurfaces) { if (slug === record.slug || !mentions(segment, surface)) continue; + // Exclude same-name duplicates (e.g. warfarin-vka / warfarin-anticoagulant + // both surface as "warfarin" — matching the alternate slug would produce a + // false self-interaction when both records are on the patient list). + if ((nameBySlug.get(slug) ?? slug) === record.name) continue; if (!segmentCounterparties.has(slug)) { segmentCounterparties.set(slug, { slug, name: nameBySlug.get(slug) ?? slug, via: surface }); } diff --git a/src/lib/medication-interaction-lexicon.ts b/src/lib/medication-interaction-lexicon.ts index a8e70af878..a6e272b889 100644 --- a/src/lib/medication-interaction-lexicon.ts +++ b/src/lib/medication-interaction-lexicon.ts @@ -67,7 +67,7 @@ const CATALOGUE_TERMS: LexiconTerm[] = [ kind: "catalogue", select: { classes: ["Antipsychotic", "LAI Antipsychotic"] }, }, - { id: "nsaids", surfaces: ["nsaids", "nsaid"], kind: "catalogue", select: { subclassIncludes: ["NSAID"] } }, + { id: "nsaids", surfaces: ["nsaids", "nsaid"], kind: "catalogue", select: { subclassIncludes: ["NSAID", "COX-2"] } }, { id: "beta-blockers", surfaces: ["beta-blockers", "beta blockers", "beta-blocker", "beta blocker", "non-selective beta-blockers"], @@ -204,18 +204,86 @@ const CATALOGUE_TERMS: LexiconTerm[] = [ kind: "catalogue", select: { slugs: ["lithium-carbonate-ir-sr"] }, }, - // No `z-drugs` term. It existed until the review sheet showed it firing on - // zero catalogue rows: nothing in the corpus says "Z-drugs", "zolpidem-type - // hypnotics" or even "hypnotics". Keeping a term that can never match implied - // z-drug coverage the tool does not have. - // - // Zolpidem and zopiclone ARE reachable in the catalogue, but they are named - // only through "CNS depressants" (10 rows) and "sedatives" (2 rows), both of - // which are deliberately `mechanism` terms — unenumerable, so those rows stay - // unresolved and the medication holds at grey rather than green. Enumerating - // them would turn a fail-safe grey into a confident red across a large and - // ill-defined class, which is a clinical decision, not a lexicon edit. - // Recorded in the review sheet's coverage section instead. + { + id: "calcium-channel-blockers", + surfaces: [ + "calcium channel blockers", + "calcium channel blocker", + "ccbs", + "ccb", + "non-dhp ccbs", + "dhp calcium channel blockers", + ], + kind: "catalogue", + select: { subclassIncludes: ["Calcium Channel Blocker", "CCB"] }, + }, + { + id: "cephalosporins", + surfaces: ["cephalosporins", "cephalosporin"], + kind: "catalogue", + select: { subclassIncludes: ["Cephalosporin"] }, + }, + { + id: "penicillins", + surfaces: ["penicillins", "penicillin"], + kind: "catalogue", + select: { + slugs: [ + "amoxicillin", + "amoxicillin-clavulanate", + "benzathine-benzylpenicillin", + "dicloxacillin", + "flucloxacillin", + "phenoxymethylpenicillin", + "piperacillin-tazobactam", + ], + }, + }, + { + id: "oral-contraceptives", + surfaces: ["oral contraceptives", "oral contraceptive", "combined oral contraceptive pill", "cocp", "ocps", "ocp"], + kind: "catalogue", + select: { slugs: ["ethinylestradiol", "levonorgestrel", "medroxyprogesterone"] }, + }, + { + id: "fibrates", + surfaces: ["fibrates", "fibrate"], + kind: "catalogue", + select: { subclassIncludes: ["Fibrate"] }, + }, + { + id: "immunosuppressants", + surfaces: ["immunosuppressants", "immunosuppressant"], + kind: "catalogue", + select: { slugs: ["methotrexate"] }, + }, + { + id: "nrt", + surfaces: ["transdermal nrt", "nicotine transdermal systems", "nicotine patches"], + kind: "catalogue", + select: { + slugs: [ + "nicotine-gum", + "nicotine-inhalator", + "nicotine-lozenge", + "nicotine-mouth-spray", + "nicotine-patch", + "nicotine-sublingual-tablet", + ], + }, + }, + { + id: "antibiotics", + surfaces: ["antibiotics", "antibiotic", "oral antibiotics", "broad-spectrum antibiotics"], + kind: "catalogue", + select: { classes: ["Antibiotic"] }, + }, + { + id: "sulfonylureas", + surfaces: ["sulfonylureas", "sulfonylurea"], + kind: "catalogue", + select: { subclassIncludes: ["Sulfonylurea"] }, + }, ]; const NON_CATALOGUE_TERMS: LexiconTerm[] = [ @@ -322,6 +390,60 @@ const NON_CATALOGUE_TERMS: LexiconTerm[] = [ surfaces: ["serotonergic drugs", "serotonergic agents", "other serotonergics"], kind: "mechanism", }, + { + id: "bile-acid-sequestrants", + surfaces: ["bile acid sequestrants", "cholestyramine"], + kind: "external", + note: "Bile acid sequestrants (e.g. Cholestyramine); not stocked in catalogue.", + }, + { + id: "retinoids", + surfaces: ["isotretinoin", "acitretin"], + kind: "external", + note: "Systemic retinoids; outside current catalogue.", + }, + { + id: "orlistat", + surfaces: ["orlistat"], + kind: "external", + note: "Lipase inhibitor; outside catalogue.", + }, + { + id: "anaesthetics", + surfaces: ["anaesthetic agents", "anaesthetics", "anaesthetic", "neuromuscular blocking agents"], + kind: "external", + note: "Hospital-only surgical anaesthetics and neuromuscular blockers.", + }, + { + id: "laiv", + surfaces: ["live attenuated influenza vaccine", "laiv"], + kind: "external", + note: "Live attenuated influenza vaccine, not prescribable drug.", + }, + { + id: "barrier-contraception", + surfaces: ["condoms", "latex condoms", "diaphragms"], + kind: "nonDrug", + note: "Barrier contraception methods damaged by oil-based formulations.", + }, + { + id: "liquid-paraffin", + surfaces: ["liquid paraffin", "mineral oil laxatives"], + kind: "external", + note: "Mineral oil laxative; outside catalogue.", + }, + { + id: "iv-calcium-solutions", + surfaces: ["iv calcium solutions", "hartmann's", "plasmalyte"], + kind: "nonDrug", + note: "Intravenous electrolyte infusion solutions, not prescribable drugs.", + }, + { + id: "oral-absorption", + surfaces: ["concomitant oral medications", "rapidly acting oral medications"], + kind: "mechanism", + note: "General absorption delay / transit-time alteration for oral formulations.", + }, ]; export const INTERACTION_LEXICON: readonly LexiconTerm[] = Object.freeze([...CATALOGUE_TERMS, ...NON_CATALOGUE_TERMS]); diff --git a/tests/medication-interaction-lexicon-coverage.test.ts b/tests/medication-interaction-lexicon-coverage.test.ts index db29b20b72..9bf6dbea25 100644 --- a/tests/medication-interaction-lexicon-coverage.test.ts +++ b/tests/medication-interaction-lexicon-coverage.test.ts @@ -65,9 +65,9 @@ describe("interaction lexicon coverage", () => { // recorded here and in the PR. Track raw drug-matching separately, which // rose 381 → 417 over the same period and is the number that must never // fall without explanation. - expect(index.stats.resolvedRows).toBeGreaterThanOrEqual(362); - expect(index.stats.rowsWithCatalogueTarget).toBeGreaterThanOrEqual(422); - expect(index.sourceRowCount).toBeGreaterThanOrEqual(523); + expect(index.stats.resolvedRows).toBeGreaterThanOrEqual(392); + expect(index.stats.rowsWithCatalogueTarget).toBeGreaterThanOrEqual(440); + expect(index.sourceRowCount).toBeGreaterThanOrEqual(525); }); it("keeps every unresolved row visible rather than dropping it", () => { @@ -294,6 +294,8 @@ describe("lexicon deny-lists (the traps this module exists for)", () => { if (name.length < 4) continue; for (const [slug, entry] of Object.entries(index.bySlug)) { if (slug === record.slug) continue; + const sourceRecord = records.find((item) => item.slug === slug); + if (sourceRecord && plainName(sourceRecord.name) === name) continue; const sourceRows = rowsFor(slug); for (const row of entry.rows) { const text = sourceRows[row.rowIndex]?.val ?? ""; @@ -361,13 +363,12 @@ describe("lexicon deny-lists (the traps this module exists for)", () => { expect(dead).toEqual([]); }); - it("keeps the divergent duplicate Warfarin records visible", () => { - // The catalogue holds two records named "Warfarin" whose interaction rows - // have nothing in common, so which one a clinician opens changes which - // warnings they see. That is a catalogue defect, not a lexicon one, and it - // is deliberately left unpatched pending a clinical decision — but it must - // not become invisible. If someone reconciles the records, this test goes - // red and the review sheet's flag can be retired with it. + it("keeps the duplicate Warfarin records reconciled with identical interaction rows", () => { + // The catalogue holds two records named "Warfarin" (warfarin-vka and + // warfarin-anticoagulant) representing the same drug. Both records carry + // the identical, reconciled 4-row interaction union (CYP2C9 inhibitors, + // CYP2C9 inducers, NSAIDs/Aspirin/SSRIs, and dietary Vitamin K) so opening + // either record fires the complete verified interaction warnings. const duplicates = records.filter((record) => record.name === "Warfarin"); expect(duplicates.map((record) => record.slug).sort()).toEqual(["warfarin-anticoagulant", "warfarin-vka"]); @@ -379,9 +380,29 @@ describe("lexicon deny-lists (the traps this module exists for)", () => { ).map((row) => `${row.key}::${row.val}`), ); const [a, b] = [rowSet("warfarin-vka"), rowSet("warfarin-anticoagulant")]; - expect(a.size).toBeGreaterThan(0); - expect(b.size).toBeGreaterThan(0); - expect([...a].filter((row) => b.has(row))).toEqual([]); + expect(a.size).toBe(4); + expect(b.size).toBe(4); + expect(Array.from(a)).toEqual(Array.from(b)); + }); + + it("warfarin index entries do not include the other warfarin slug as a counterparty", () => { + const interactionIndex = JSON.parse( + readFileSync(path.join(__dirname, "../data/medication-interaction-index.json"), "utf-8"), + ) as { bySlug: Record }> }; + const { bySlug } = interactionIndex; + const warfarinSlugs = ["warfarin-vka", "warfarin-anticoagulant"] as const; + // Both entries must exist — if either slug is renamed this test catches it. + for (const slug of warfarinSlugs) { + expect(bySlug[slug]).toBeDefined(); + } + const warfarinPairs: [string, string][] = [ + ["warfarin-vka", "warfarin-anticoagulant"], + ["warfarin-anticoagulant", "warfarin-vka"], + ]; + for (const [slug, forbidden] of warfarinPairs) { + const found = bySlug[slug]!.rows.some((row) => row.counterparties.includes(forbidden)); + expect(found).toBe(false); + } }); it("resolves beta blockers across both catalogue spellings", () => { diff --git a/tests/medication-interaction-unreachable-notice.dom.test.tsx b/tests/medication-interaction-unreachable-notice.dom.test.tsx index 57fcc4cbc2..cc48d8f65d 100644 --- a/tests/medication-interaction-unreachable-notice.dom.test.tsx +++ b/tests/medication-interaction-unreachable-notice.dom.test.tsx @@ -39,20 +39,20 @@ beforeEach(() => { describe("unreachable-counterparty notice", () => { it("says so when an entered medication is outside the resolved interaction graph", () => { - // Cephalexin is one of 35 catalogue drugs outside every resolved edge. - renderConsiderations(["cephalexin"]); + // Zolpidem is one of 20 catalogue drugs outside every resolved edge. + renderConsiderations(["zolpidem"]); const notice = screen.getByText(NOTICE); - expect(notice.textContent).toMatch(/Cephalexin/); + expect(notice.textContent).toMatch(/Zolpidem/); // The wording has to deny the inference, not merely report the gap. expect(notice.textContent).toMatch(/not evidence of safety/i); }); it("names every uncovered medication, not just the first", () => { - renderConsiderations(["cephalexin", "lactulose"]); + renderConsiderations(["zolpidem", "finasteride"]); const notice = screen.getByText(NOTICE); - expect(notice.textContent).toMatch(/Cephalexin/); - expect(notice.textContent).toMatch(/Lactulose/); + expect(notice.textContent).toMatch(/Zolpidem/); + expect(notice.textContent).toMatch(/Finasteride/); expect(notice.textContent).toMatch(/they were/); }); @@ -64,7 +64,7 @@ describe("unreachable-counterparty notice", () => { it("does not present an empty interaction block as clear when a drug is uncheckable", () => { // The failure this exists for: zero interactions rendered as a green // "No interaction found" with nothing qualifying it. - renderConsiderations(["cephalexin"]); + renderConsiderations(["zolpidem"]); expect(screen.getByText(/No interaction found between this medication/i)).toBeInTheDocument(); expect(screen.getByText(NOTICE)).toBeInTheDocument(); }); diff --git a/tests/medication-interactions.test.ts b/tests/medication-interactions.test.ts index fa18fe41e1..658ec0fd64 100644 --- a/tests/medication-interactions.test.ts +++ b/tests/medication-interactions.test.ts @@ -59,10 +59,10 @@ describe("evaluateMedicationInteractions", () => { // The mirror of the missing-data guard, and the half that was missing. A // patient on a drug the corpus never mentions produced zero interactions, // zero unresolved rows, and a confident green — silence presented as an - // all-clear. Cephalexin is one of 35 such drugs. - const result = evaluateMedicationInteractions("sertraline", ["cephalexin"]); + // all-clear. Zolpidem is one of 20 such drugs. + const result = evaluateMedicationInteractions("sertraline", ["zolpidem"]); expect(result.interactions).toHaveLength(0); - expect(result.unreachableCounterparties).toEqual(["cephalexin"]); + expect(result.unreachableCounterparties).toEqual(["zolpidem"]); const verdict = composeMedicationVerdict({ considerationTone: null, @@ -83,7 +83,7 @@ describe("evaluateMedicationInteractions", () => { const result = evaluateMedicationInteractions("sertraline", ["ibuprofen"]); expect(result.unreachableCounterparties).toEqual([]); expect(isUnreachableCounterparty("ibuprofen")).toBe(false); - expect(isUnreachableCounterparty("cephalexin")).toBe(true); + expect(isUnreachableCounterparty("zolpidem")).toBe(true); }); it("counts a source-only medication as a reachable interaction endpoint", () => {