diff --git a/src/features/testing/components/TestingPlanGenerator.test.tsx b/src/features/testing/components/TestingPlanGenerator.test.tsx index 391e421..b5c98f2 100644 --- a/src/features/testing/components/TestingPlanGenerator.test.tsx +++ b/src/features/testing/components/TestingPlanGenerator.test.tsx @@ -255,8 +255,10 @@ describe('TestingPlanGenerator', () => { expect(within(tableSection).getByText('1:100 start')).toBeInTheDocument(); expect(within(tableSection).getByText('1:100')).toBeInTheDocument(); - // Ketamine is DREAM-only, so no SCRATCH link should exist for it - expect(within(tableSection).queryByRole('link', { name: /View Ketamine on SCRATCH/i })).not.toBeInTheDocument(); + // Ketamine is SCRATCH-sourced since the tranche-1 migration, so its + // protocol detail links to the handbook page + const scratchLink = within(tableSection).getByRole('link', { name: /View Ketamine on SCRATCH/i }); + expect(scratchLink).toHaveAttribute('href', 'https://scratch.yuson.au/drugs/ketamine/'); }); it('fails closed and shows accessible review alert when restored draft contains invalid protocol index', async () => { diff --git a/src/shared/data/dreamOnlyProtocols.ts b/src/shared/data/dreamOnlyProtocols.ts index cef461b..8dc439e 100644 --- a/src/shared/data/dreamOnlyProtocols.ts +++ b/src/shared/data/dreamOnlyProtocols.ts @@ -20,102 +20,6 @@ export const DREAM_ONLY_PROTOCOLS: DrugProtocol[] = [ protocolLabel: "+ Rocuronium", }, // ── PENICILLINS ──────────────────────────────────────────────────────── - { - id: "ppl", - drugName: "Penicillin Major", category: "Penicillins", testType: "skin", - presentation: "PPL", sptNeatConcentration: "Neat (0.04mg/20.00mg/mL)", diluent: "Phosphate-buffered saline (1 mL supplied diluent — not plain saline)", - idtSteps: [s("1:10", "0.004mg/2mg"), s("Neat", "0.04mg/20.00mg")], - challengeSteps: [], - protocolLabel: "PPL", - }, - { - id: "md", - drugName: "Penicillin Minor", category: "Penicillins", testType: "skin", - presentation: "MD (Sodium Benzylpenilloate/Mannitol)", sptNeatConcentration: "Neat (0.50mg/20.00mg/mL)", diluent: "Phosphate-buffered saline (1 mL supplied diluent — not plain saline)", - idtSteps: [s("1:10", "0.05mg/2.00mg"), s("Neat", "0.50mg/20.00mg")], - challengeSteps: [], - protocolLabel: "MD", - }, - { - id: "neat-spt", - drugName: "Ampicillin", category: "Penicillins", testType: "skin", - presentation: "1g", sptNeatConcentration: "Neat (100mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 5 mL WFI)", - idtSteps: [s("1:100", "1mg/mL"), s("1:10", "10mg/mL"), s("1:50", "2mg/0.2mg/mL")], - challengeSteps: [], - protocolLabel: "Neat SPT", - }, - { - id: "1-5-spt", - drugName: "Ampicillin", category: "Penicillins", testType: "skin", - presentation: "1g", sptNeatConcentration: "1:5 (20mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 5 mL WFI)", - idtSteps: [s("1:10", "10mg/mL"), s("1:5", "20mg/mL"), s("1:100", "0.06mg/mL")], - challengeSteps: [], - protocolLabel: "1:5 SPT", - }, - { - id: "control", - drugName: "Ampicillin", category: "Penicillins", testType: "control", - presentation: "1g", sptNeatConcentration: "1:5 (20mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 5 mL WFI)", - idtSteps: [s("1:10", "10mg/mL"), s("1:5", "20mg/mL"), s("1:100", "0.02mg/mL")], - challengeSteps: [], - protocolLabel: "Control", - }, - { - id: "neat-spt", - drugName: "Amoxycillin", category: "Penicillins", testType: "skin", - presentation: "1g", sptNeatConcentration: "Neat (100mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 5 mL WFI)", - idtSteps: [s("1:100", "1mg/mL"), s("1:10", "10mg/mL")], - challengeSteps: [], - protocolLabel: "Neat SPT", - }, - { - id: "1-5-spt", - drugName: "Amoxycillin", category: "Penicillins", testType: "skin", - presentation: "1g", sptNeatConcentration: "1:5 (20mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 5 mL WFI)", - idtSteps: [s("1:10", "10mg/mL"), s("1:5", "20mg/mL")], - challengeSteps: [], - protocolLabel: "1:5 SPT", - }, - { - id: "1-1000-start", - drugName: "Benzylpenicillin", category: "Penicillins", testType: "skin", - presentation: "600mg", sptNeatConcentration: "Neat (6mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 1.6 mL)", - idtSteps: [s("1:100", "0.06mg/mL"), s("1:10", "0.6mg/mL")], - challengeSteps: [], - protocolLabel: "1:1,000 start", - }, - { - id: "1-100-start", - drugName: "Benzylpenicillin", category: "Penicillins", testType: "skin", - presentation: "600mg", sptNeatConcentration: "Neat (6mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 1.6 mL)", - idtSteps: [s("1:100", "0.06mg/mL"), s("1:10", "0.6mg/mL"), s("1:50", "2mg/0.2mg/mL")], - challengeSteps: [], - protocolLabel: "1:100 start", - }, - { - id: "control", - drugName: "Benzylpenicillin", category: "Penicillins", testType: "control", - presentation: "600mg", sptNeatConcentration: "Neat (6mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 1.6 mL)", - idtSteps: [s("1:100", "0.06mg/mL"), s("1:10", "0.6mg/mL")], - challengeSteps: [], - protocolLabel: "Control", - }, - { - id: "1-1000-start", - drugName: "Augmentin", category: "Penicillins", testType: "skin", - presentation: "2000mg/200mg", sptNeatConcentration: "1:5 (20mg/2mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 50 mL WFI)", - idtSteps: [s("1:50", "2mg/0.2mg/mL"), s("1:5", "20mg/2mg/mL"), s("1:100", "0.06mg/mL")], - challengeSteps: [], - protocolLabel: "1:1,000 start", - }, - { - id: "1-100-start", - drugName: "Augmentin", category: "Penicillins", testType: "skin", - presentation: "2000mg/200mg", sptNeatConcentration: "1:5 (20mg/2mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 50 mL WFI)", - idtSteps: [s("1:50", "2mg/0.2mg/mL"), s("1:5", "20mg/2mg/mL"), s("1:100", "0.2mg/mL")], - challengeSteps: [], - protocolLabel: "1:100 start", - }, { id: "iv", drugName: "Cephalexin", category: "Penicillins", testType: "skin", @@ -135,38 +39,6 @@ export const DREAM_ONLY_PROTOCOLS: DrugProtocol[] = [ protocolLabel: "", }, // ── HYPNOTICS ──────────────────────────────────────────────────────── - { - id: "1-1000-start", - drugName: "Ketamine", category: "Hypnotics", testType: "skin", - presentation: "100mg/mL", sptNeatConcentration: "Neat (100mg/mL)", diluent: "0.9% sodium chloride", - idtSteps: [s("1:1,000", "0.1mg/mL"), s("1:100", "1mg/mL"), s("1:10", "10mg/mL")], - challengeSteps: [], - protocolLabel: "1:1,000 start", - }, - { - id: "1-100-start", - drugName: "Ketamine", category: "Hypnotics", testType: "skin", - presentation: "100mg/mL", sptNeatConcentration: "Neat (100mg/mL)", diluent: "0.9% sodium chloride", - idtSteps: [s("1:1,000", "0.1mg/mL")], - challengeSteps: [], - protocolLabel: "1:100 start", - }, - { - id: "1-1000-start", - drugName: "Thiopental", category: "Hypnotics", testType: "skin", - presentation: "25mg/mL", sptNeatConcentration: "Neat (25mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 20 mL WFI or saline)", - idtSteps: [s("1:1,000", "0.025mg/mL"), s("1:100", "0.25mg/mL"), s("1:10", "2.5mg/mL")], - challengeSteps: [], - protocolLabel: "1:1,000 start", - }, - { - id: "1-100-start", - drugName: "Thiopental", category: "Hypnotics", testType: "skin", - presentation: "25mg/mL", sptNeatConcentration: "Neat (25mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 20 mL WFI or saline)", - idtSteps: [s("1:1,000", "0.025mg/mL"), s("1:100", "0.25mg/mL"), s("1:10", "2.5mg/mL")], - challengeSteps: [], - protocolLabel: "1:100 start", - }, // ── LOCAL ANAESTHETICS ──────────────────────────────────────────────────────── { id: "iv", @@ -176,72 +48,8 @@ export const DREAM_ONLY_PROTOCOLS: DrugProtocol[] = [ challengeSteps: [], protocolLabel: "IV", }, - { - id: "epidural-1", - drugName: "Ropivacaine", category: "Local Anaesthetics", testType: "skin", - presentation: "40mg/20mL", sptNeatConcentration: "Neat (2mg/mL)", diluent: "0.9% sodium chloride", - idtSteps: [s("1:1,000", "0.002mg/mL"), s("1:100", "0.02mg/mL"), s("1:10", "0.2mg/mL"), s("Neat", "2mg/mL")], - challengeSteps: [], - protocolLabel: "Epidural Protocol 1", - }, - { - id: "epidural-2", - drugName: "Ropivacaine", category: "Local Anaesthetics", testType: "skin", - presentation: "40mg/20mL", sptNeatConcentration: "Neat (2mg/mL)", diluent: "0.9% sodium chloride", - idtSteps: [s("1:10", "0.2mg/mL"), s("Neat", "2mg/mL")], - challengeSteps: [], - protocolLabel: "Epidural Protocol 2", - }, // ── OPIOIDS ──────────────────────────────────────────────────────── - { - id: "1-1000-start", - drugName: "Morphine", category: "Opioids", testType: "skin", - presentation: "10mg/mL", sptNeatConcentration: "1:10 (1mg/mL)", diluent: "0.9% sodium chloride", - idtSteps: [s("1:100,000", "0.0001mg/mL"), s("1:100", "0.0005mg/mL")], - challengeSteps: [], - protocolLabel: "1:1,000 start", - }, - { - id: "1-100-start", - drugName: "Morphine", category: "Opioids", testType: "skin", - presentation: "10mg/mL", sptNeatConcentration: "1:10 (1mg/mL)", diluent: "0.9% sodium chloride", - idtSteps: [s("1:100,000", "0.0001mg/mL"), s("1:1,000", "0.01mg/mL")], - challengeSteps: [], - protocolLabel: "1:100 start", - }, - { - id: "1-1000-start", - drugName: "Remifentanil", category: "Opioids", testType: "skin", - presentation: "1mg", sptNeatConcentration: "Neat (0.05mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 20 mL WFI)", - idtSteps: [s("1:100", "0.0005mg/mL"), s("1:10", "0.005mg/mL")], - challengeSteps: [], - protocolLabel: "1:1,000 start", - }, - { - id: "1-100-start", - drugName: "Remifentanil", category: "Opioids", testType: "skin", - presentation: "1mg", sptNeatConcentration: "Neat (0.05mg/mL)", diluent: "0.9% sodium chloride (reconstitute with 20 mL WFI)", - idtSteps: [s("1:100", "0.0005mg/mL"), s("1:10", "0.005mg/mL"), s("1:1,000", "0.01mg/mL")], - challengeSteps: [], - protocolLabel: "1:100 start", - }, // ── ANTISEPTICS ──────────────────────────────────────────────────────── - { - id: "1-1000-start", - drugName: "Povidone Iodine", category: "Antiseptics", testType: "skin", - presentation: "10% w/v", sptNeatConcentration: "Neat (100mg/mL)", diluent: "0.9% sodium chloride", - idtSteps: [s("1:10,000", "0.01mg/mL"), s("1:1,000", "0.1mg/mL"), s("1:100", "1mg/mL")], - challengeSteps: [], - protocolLabel: "1:1,000 start", - }, - { - id: "1-100-start", - drugName: "Povidone Iodine", category: "Antiseptics", testType: "skin", - presentation: "10% w/v", sptNeatConcentration: "Neat (100mg/mL)", diluent: "0.9% sodium chloride", - idtSteps: [s("1:10,000", "0.01mg/mL"), s("1:1,000", "0.1mg/mL"), s("1:100", "1mg/mL")], - challengeSteps: [], - protocolLabel: "1:100 start", - }, // ── OTHERS ──────────────────────────────────────────────────────── { id: "suspension", @@ -276,22 +84,6 @@ export const DREAM_ONLY_PROTOCOLS: DrugProtocol[] = [ challengeSteps: [], protocolLabel: "1:100 start", }, - { - id: "1-1000-start", - drugName: "Metacresol", category: "Others", testType: "skin", - presentation: "1034mg/mL", sptNeatConcentration: "1.5mg/mL", diluent: "0.9% sodium chloride", - idtSteps: [s("1:20", "0.075mg/mL")], - challengeSteps: [], - protocolLabel: "1:1,000 start", - }, - { - id: "1-100-start", - drugName: "Metacresol", category: "Others", testType: "skin", - presentation: "1034mg/mL", sptNeatConcentration: "3mg/mL", diluent: "0.9% sodium chloride", - idtSteps: [s("1:20", "0.15mg/mL")], - challengeSteps: [], - protocolLabel: "1:100 start", - }, { id: "iv-contrast", drugName: "Ultravist", category: "Others", testType: "skin", diff --git a/src/shared/data/drugMasterlist.generated.ts b/src/shared/data/drugMasterlist.generated.ts index ca7cd48..f7761c8 100644 --- a/src/shared/data/drugMasterlist.generated.ts +++ b/src/shared/data/drugMasterlist.generated.ts @@ -38,6 +38,111 @@ export const GENERATED_PROTOCOLS: DrugProtocol[] = [ underReview: false, lastReviewed: "2026-03-28", }, + { + id: "neat-spt", + drugName: "Amoxycillin", + category: "Penicillins", + testType: "skin", + presentation: "1g", + sptNeatConcentration: "Neat (100mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 5 mL WFI)", + idtSteps: [s("1:100", "1mg/mL"), s("1:10", "10mg/mL")], + challengeSteps: [], + protocolLabel: "Neat SPT", + sourceSlug: "amoxicillin", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-5-spt", + drugName: "Amoxycillin", + category: "Penicillins", + testType: "skin", + presentation: "1g", + sptNeatConcentration: "1:5 (20mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 5 mL WFI)", + idtSteps: [s("1:10", "10mg/mL"), s("1:5", "20mg/mL")], + challengeSteps: [], + protocolLabel: "1:5 SPT", + sourceSlug: "amoxicillin", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "neat-spt", + drugName: "Ampicillin", + category: "Penicillins", + testType: "skin", + presentation: "1g", + sptNeatConcentration: "Neat (100mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 5 mL WFI)", + idtSteps: [s("1:100", "1mg/mL"), s("1:10", "10mg/mL"), s("1:50", "2mg/0.2mg/mL")], + challengeSteps: [], + protocolLabel: "Neat SPT", + sourceSlug: "ampicillin", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-5-spt", + drugName: "Ampicillin", + category: "Penicillins", + testType: "skin", + presentation: "1g", + sptNeatConcentration: "1:5 (20mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 5 mL WFI)", + idtSteps: [s("1:10", "10mg/mL"), s("1:5", "20mg/mL"), s("1:100", "0.06mg/mL")], + challengeSteps: [], + protocolLabel: "1:5 SPT", + sourceSlug: "ampicillin", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "control", + drugName: "Ampicillin", + category: "Penicillins", + testType: "control", + presentation: "1g", + sptNeatConcentration: "1:5 (20mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 5 mL WFI)", + idtSteps: [s("1:10", "10mg/mL"), s("1:5", "20mg/mL"), s("1:100", "0.02mg/mL")], + challengeSteps: [], + protocolLabel: "Control", + sourceSlug: "ampicillin", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-1000-start", + drugName: "Augmentin", + category: "Penicillins", + testType: "skin", + presentation: "2000mg/200mg", + sptNeatConcentration: "1:5 (20mg/2mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 50 mL WFI)", + idtSteps: [s("1:50", "2mg/0.2mg/mL"), s("1:5", "20mg/2mg/mL"), s("1:100", "0.06mg/mL")], + challengeSteps: [], + protocolLabel: "1:1,000 start", + sourceSlug: "augmentin", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-100-start", + drugName: "Augmentin", + category: "Penicillins", + testType: "skin", + presentation: "2000mg/200mg", + sptNeatConcentration: "1:5 (20mg/2mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 50 mL WFI)", + idtSteps: [s("1:50", "2mg/0.2mg/mL"), s("1:5", "20mg/2mg/mL"), s("1:100", "0.2mg/mL")], + challengeSteps: [], + protocolLabel: "1:100 start", + sourceSlug: "augmentin", + underReview: false, + lastReviewed: "2026-03-28", + }, { id: "iv", drugName: "Azithromycin", @@ -53,6 +158,51 @@ export const GENERATED_PROTOCOLS: DrugProtocol[] = [ underReview: false, lastReviewed: "2026-03-28", }, + { + id: "1-1000-start", + drugName: "Benzylpenicillin", + category: "Penicillins", + testType: "skin", + presentation: "600mg", + sptNeatConcentration: "Neat (6mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 1.6 mL)", + idtSteps: [s("1:100", "0.06mg/mL"), s("1:10", "0.6mg/mL")], + challengeSteps: [], + protocolLabel: "1:1,000 start", + sourceSlug: "benzylpenicillin", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-100-start", + drugName: "Benzylpenicillin", + category: "Penicillins", + testType: "skin", + presentation: "600mg", + sptNeatConcentration: "Neat (6mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 1.6 mL)", + idtSteps: [s("1:100", "0.06mg/mL"), s("1:10", "0.6mg/mL"), s("1:50", "2mg/0.2mg/mL")], + challengeSteps: [], + protocolLabel: "1:100 start", + sourceSlug: "benzylpenicillin", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "control", + drugName: "Benzylpenicillin", + category: "Penicillins", + testType: "control", + presentation: "600mg", + sptNeatConcentration: "Neat (6mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 1.6 mL)", + idtSteps: [s("1:100", "0.06mg/mL"), s("1:10", "0.6mg/mL")], + challengeSteps: [], + protocolLabel: "Control", + sourceSlug: "benzylpenicillin", + underReview: false, + lastReviewed: "2026-03-28", + }, { id: "iv", drugName: "Betamethasone", @@ -443,6 +593,36 @@ export const GENERATED_PROTOCOLS: DrugProtocol[] = [ underReview: false, lastReviewed: "2026-03-28", }, + { + id: "1-1000-start", + drugName: "Ketamine", + category: "Hypnotics", + testType: "skin", + presentation: "100mg/mL", + sptNeatConcentration: "Neat (100mg/mL)", + diluent: "0.9% sodium chloride", + idtSteps: [s("1:1,000", "0.1mg/mL"), s("1:100", "1mg/mL"), s("1:10", "10mg/mL")], + challengeSteps: [], + protocolLabel: "1:1,000 start", + sourceSlug: "ketamine", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-100-start", + drugName: "Ketamine", + category: "Hypnotics", + testType: "skin", + presentation: "100mg/mL", + sptNeatConcentration: "Neat (100mg/mL)", + diluent: "0.9% sodium chloride", + idtSteps: [s("1:1,000", "0.1mg/mL")], + challengeSteps: [], + protocolLabel: "1:100 start", + sourceSlug: "ketamine", + underReview: false, + lastReviewed: "2026-03-28", + }, { id: "standard", drugName: "Lansoprazole", @@ -535,6 +715,36 @@ export const GENERATED_PROTOCOLS: DrugProtocol[] = [ underReview: false, lastReviewed: "2026-03-28", }, + { + id: "1-1000-start", + drugName: "Metacresol", + category: "Others", + testType: "skin", + presentation: "1034mg/mL", + sptNeatConcentration: "1.5mg/mL", + diluent: "0.9% sodium chloride", + idtSteps: [s("1:20", "0.075mg/mL")], + challengeSteps: [], + protocolLabel: "1:1,000 start", + sourceSlug: "metacresol", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-100-start", + drugName: "Metacresol", + category: "Others", + testType: "skin", + presentation: "1034mg/mL", + sptNeatConcentration: "3mg/mL", + diluent: "0.9% sodium chloride", + idtSteps: [s("1:20", "0.15mg/mL")], + challengeSteps: [], + protocolLabel: "1:100 start", + sourceSlug: "metacresol", + underReview: false, + lastReviewed: "2026-03-28", + }, { id: "iv", drugName: "Methylprednisolone", @@ -595,6 +805,36 @@ export const GENERATED_PROTOCOLS: DrugProtocol[] = [ underReview: false, lastReviewed: "2026-03-28", }, + { + id: "1-1000-start", + drugName: "Morphine", + category: "Opioids", + testType: "skin", + presentation: "10mg/mL", + sptNeatConcentration: "1:10 (1mg/mL)", + diluent: "0.9% sodium chloride", + idtSteps: [s("1:100,000", "0.0001mg/mL"), s("1:100", "0.0005mg/mL")], + challengeSteps: [], + protocolLabel: "1:1,000 start", + sourceSlug: "morphine", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-100-start", + drugName: "Morphine", + category: "Opioids", + testType: "skin", + presentation: "10mg/mL", + sptNeatConcentration: "1:10 (1mg/mL)", + diluent: "0.9% sodium chloride", + idtSteps: [s("1:100,000", "0.0001mg/mL"), s("1:1,000", "0.01mg/mL")], + challengeSteps: [], + protocolLabel: "1:100 start", + sourceSlug: "morphine", + underReview: false, + lastReviewed: "2026-03-28", + }, { id: "inj", drugName: "Neostigmine", @@ -776,6 +1016,66 @@ export const GENERATED_PROTOCOLS: DrugProtocol[] = [ underReview: false, lastReviewed: "2026-03-28", }, + { + id: "ppl", + drugName: "Penicillin Major", + category: "Penicillins", + testType: "skin", + presentation: "PPL", + sptNeatConcentration: "Neat (0.04mg/20.00mg/mL)", + diluent: "Phosphate-buffered saline (1 mL supplied diluent — not plain saline)", + idtSteps: [s("1:10", "0.004mg/2mg"), s("Neat", "0.04mg/20.00mg")], + challengeSteps: [], + protocolLabel: "PPL", + sourceSlug: "penicillin-major-ppl", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "md", + drugName: "Penicillin Minor", + category: "Penicillins", + testType: "skin", + presentation: "MD (Sodium Benzylpenilloate/Mannitol)", + sptNeatConcentration: "Neat (0.50mg/20.00mg/mL)", + diluent: "Phosphate-buffered saline (1 mL supplied diluent — not plain saline)", + idtSteps: [s("1:10", "0.05mg/2.00mg"), s("Neat", "0.50mg/20.00mg")], + challengeSteps: [], + protocolLabel: "MD", + sourceSlug: "penicillin-minor-md", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-1000-start", + drugName: "Povidone Iodine", + category: "Antiseptics", + testType: "skin", + presentation: "10% w/v", + sptNeatConcentration: "Neat (100mg/mL)", + diluent: "0.9% sodium chloride", + idtSteps: [s("1:10,000", "0.01mg/mL"), s("1:1,000", "0.1mg/mL"), s("1:100", "1mg/mL")], + challengeSteps: [], + protocolLabel: "1:1,000 start", + sourceSlug: "povidone-iodine", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-100-start", + drugName: "Povidone Iodine", + category: "Antiseptics", + testType: "skin", + presentation: "10% w/v", + sptNeatConcentration: "Neat (100mg/mL)", + diluent: "0.9% sodium chloride", + idtSteps: [s("1:10,000", "0.01mg/mL"), s("1:1,000", "0.1mg/mL"), s("1:100", "1mg/mL")], + challengeSteps: [], + protocolLabel: "1:100 start", + sourceSlug: "povidone-iodine", + underReview: false, + lastReviewed: "2026-03-28", + }, { id: "iv", drugName: "Propofol", @@ -836,6 +1136,36 @@ export const GENERATED_PROTOCOLS: DrugProtocol[] = [ underReview: false, lastReviewed: "2026-03-28", }, + { + id: "1-1000-start", + drugName: "Remifentanil", + category: "Opioids", + testType: "skin", + presentation: "1mg", + sptNeatConcentration: "Neat (0.05mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 20 mL WFI)", + idtSteps: [s("1:100", "0.0005mg/mL"), s("1:10", "0.005mg/mL")], + challengeSteps: [], + protocolLabel: "1:1,000 start", + sourceSlug: "remifentanil", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-100-start", + drugName: "Remifentanil", + category: "Opioids", + testType: "skin", + presentation: "1mg", + sptNeatConcentration: "Neat (0.05mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 20 mL WFI)", + idtSteps: [s("1:100", "0.0005mg/mL"), s("1:10", "0.005mg/mL"), s("1:1,000", "0.01mg/mL")], + challengeSteps: [], + protocolLabel: "1:100 start", + sourceSlug: "remifentanil", + underReview: false, + lastReviewed: "2026-03-28", + }, { id: "iv", drugName: "Rocuronium", @@ -851,6 +1181,36 @@ export const GENERATED_PROTOCOLS: DrugProtocol[] = [ underReview: false, lastReviewed: "2026-03-28", }, + { + id: "epidural-1", + drugName: "Ropivacaine", + category: "Local Anaesthetics", + testType: "skin", + presentation: "40mg/20mL", + sptNeatConcentration: "Neat (2mg/mL)", + diluent: "0.9% sodium chloride", + idtSteps: [s("1:1,000", "0.002mg/mL"), s("1:100", "0.02mg/mL"), s("1:10", "0.2mg/mL"), s("Neat", "2mg/mL")], + challengeSteps: [], + protocolLabel: "Epidural Protocol 1", + sourceSlug: "ropivacaine", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "epidural-2", + drugName: "Ropivacaine", + category: "Local Anaesthetics", + testType: "skin", + presentation: "40mg/20mL", + sptNeatConcentration: "Neat (2mg/mL)", + diluent: "0.9% sodium chloride", + idtSteps: [s("1:10", "0.2mg/mL"), s("Neat", "2mg/mL")], + challengeSteps: [], + protocolLabel: "Epidural Protocol 2", + sourceSlug: "ropivacaine", + underReview: false, + lastReviewed: "2026-03-28", + }, { id: "alone", drugName: "Sugammadex (Alone)", @@ -897,6 +1257,36 @@ export const GENERATED_PROTOCOLS: DrugProtocol[] = [ reviewNote: "Concentration discrepancy: Medication List specifies SPT at 1:10 (2 mg/mL Piperacillin), whereas calculation of 1:10 of 200 mg/mL gives 20 mg/mL. Concentration under clinical review.", lastReviewed: "2026-03-28", }, + { + id: "1-1000-start", + drugName: "Thiopental", + category: "Hypnotics", + testType: "skin", + presentation: "25mg/mL", + sptNeatConcentration: "Neat (25mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 20 mL WFI or saline)", + idtSteps: [s("1:1,000", "0.025mg/mL"), s("1:100", "0.25mg/mL"), s("1:10", "2.5mg/mL")], + challengeSteps: [], + protocolLabel: "1:1,000 start", + sourceSlug: "thiopental", + underReview: false, + lastReviewed: "2026-03-28", + }, + { + id: "1-100-start", + drugName: "Thiopental", + category: "Hypnotics", + testType: "skin", + presentation: "25mg/mL", + sptNeatConcentration: "Neat (25mg/mL)", + diluent: "0.9% sodium chloride (reconstitute with 20 mL WFI or saline)", + idtSteps: [s("1:1,000", "0.025mg/mL"), s("1:100", "0.25mg/mL"), s("1:10", "2.5mg/mL")], + challengeSteps: [], + protocolLabel: "1:100 start", + sourceSlug: "thiopental", + underReview: false, + lastReviewed: "2026-03-28", + }, { id: "iv", drugName: "Tramadol", diff --git a/src/shared/data/drugMasterlist.test.ts b/src/shared/data/drugMasterlist.test.ts index 2df3a77..6a49968 100644 --- a/src/shared/data/drugMasterlist.test.ts +++ b/src/shared/data/drugMasterlist.test.ts @@ -14,8 +14,8 @@ import { GENERATED_PROTOCOLS } from './drugMasterlist.generated'; describe('drugMasterlist structure & integrity', () => { it('contains exactly 117 protocol records in the merged masterlist', () => { expect(DRUG_MASTERLIST).toHaveLength(117); - expect(DREAM_ONLY_PROTOCOLS).toHaveLength(50); - expect(GENERATED_PROTOCOLS).toHaveLength(67); + expect(DREAM_ONLY_PROTOCOLS).toHaveLength(24); + expect(GENERATED_PROTOCOLS).toHaveLength(93); }); it('defines a non-empty id for every protocol entry', () => { diff --git a/src/shared/data/drugMasterlist.ts b/src/shared/data/drugMasterlist.ts index 76ca0b7..586119e 100644 --- a/src/shared/data/drugMasterlist.ts +++ b/src/shared/data/drugMasterlist.ts @@ -62,29 +62,29 @@ export const DRUG_MASTERLIST: DrugProtocol[] = [ // [6] Sugammadex (+ Rocuronium) (skin, + Rocuronium) findDreamOnly("Sugammadex (+ Rocuronium)", "skin", "+ Rocuronium"), // [7] Penicillin Major (skin, PPL) - findDreamOnly("Penicillin Major", "skin", "PPL"), + findGenerated("Penicillin Major", "skin", "PPL"), // [8] Penicillin Minor (skin, MD) - findDreamOnly("Penicillin Minor", "skin", "MD"), + findGenerated("Penicillin Minor", "skin", "MD"), // [9] Ampicillin (skin, Neat SPT) - findDreamOnly("Ampicillin", "skin", "Neat SPT"), + findGenerated("Ampicillin", "skin", "Neat SPT"), // [10] Ampicillin (skin, 1:5 SPT) - findDreamOnly("Ampicillin", "skin", "1:5 SPT"), + findGenerated("Ampicillin", "skin", "1:5 SPT"), // [11] Ampicillin (control, Control) - findDreamOnly("Ampicillin", "control", "Control"), + findGenerated("Ampicillin", "control", "Control"), // [12] Amoxycillin (skin, Neat SPT) - findDreamOnly("Amoxycillin", "skin", "Neat SPT"), + findGenerated("Amoxycillin", "skin", "Neat SPT"), // [13] Amoxycillin (skin, 1:5 SPT) - findDreamOnly("Amoxycillin", "skin", "1:5 SPT"), + findGenerated("Amoxycillin", "skin", "1:5 SPT"), // [14] Benzylpenicillin (skin, 1:1,000 start) - findDreamOnly("Benzylpenicillin", "skin", "1:1,000 start"), + findGenerated("Benzylpenicillin", "skin", "1:1,000 start"), // [15] Benzylpenicillin (skin, 1:100 start) - findDreamOnly("Benzylpenicillin", "skin", "1:100 start"), + findGenerated("Benzylpenicillin", "skin", "1:100 start"), // [16] Benzylpenicillin (control, Control) - findDreamOnly("Benzylpenicillin", "control", "Control"), + findGenerated("Benzylpenicillin", "control", "Control"), // [17] Augmentin (skin, 1:1,000 start) - findDreamOnly("Augmentin", "skin", "1:1,000 start"), + findGenerated("Augmentin", "skin", "1:1,000 start"), // [18] Augmentin (skin, 1:100 start) - findDreamOnly("Augmentin", "skin", "1:100 start"), + findGenerated("Augmentin", "skin", "1:100 start"), // [19] Cephalexin (skin, IV) findDreamOnly("Cephalexin", "skin", "IV"), // [20] Tazocin (skin, IV) @@ -108,13 +108,13 @@ export const DRUG_MASTERLIST: DrugProtocol[] = [ // [29] Propofol (skin, IV) findGenerated("Propofol", "skin", "IV"), // [30] Ketamine (skin, 1:1,000 start) - findDreamOnly("Ketamine", "skin", "1:1,000 start"), + findGenerated("Ketamine", "skin", "1:1,000 start"), // [31] Ketamine (skin, 1:100 start) - findDreamOnly("Ketamine", "skin", "1:100 start"), + findGenerated("Ketamine", "skin", "1:100 start"), // [32] Thiopental (skin, 1:1,000 start) - findDreamOnly("Thiopental", "skin", "1:1,000 start"), + findGenerated("Thiopental", "skin", "1:1,000 start"), // [33] Thiopental (skin, 1:100 start) - findDreamOnly("Thiopental", "skin", "1:100 start"), + findGenerated("Thiopental", "skin", "1:100 start"), // [34] Lignocaine (skin, IV) findDreamOnly("Lignocaine", "skin", "IV"), // [35] Mepivacaine (skin, Epidural) @@ -122,29 +122,29 @@ export const DRUG_MASTERLIST: DrugProtocol[] = [ // [36] Bupivacaine (skin, Epidural) findGenerated("Bupivacaine", "skin", "Epidural"), // [37] Ropivacaine (skin, Epidural Protocol 1) - findDreamOnly("Ropivacaine", "skin", "Epidural Protocol 1"), + findGenerated("Ropivacaine", "skin", "Epidural Protocol 1"), // [38] Ropivacaine (skin, Epidural Protocol 2) - findDreamOnly("Ropivacaine", "skin", "Epidural Protocol 2"), + findGenerated("Ropivacaine", "skin", "Epidural Protocol 2"), // [39] Alfentanil (skin, IV) findGenerated("Alfentanil", "skin", "IV"), // [40] Fentanyl (skin, IV) findGenerated("Fentanyl", "skin", "IV"), // [41] Morphine (skin, 1:1,000 start) - findDreamOnly("Morphine", "skin", "1:1,000 start"), + findGenerated("Morphine", "skin", "1:1,000 start"), // [42] Morphine (skin, 1:100 start) - findDreamOnly("Morphine", "skin", "1:100 start"), + findGenerated("Morphine", "skin", "1:100 start"), // [43] Remifentanil (skin, 1:1,000 start) - findDreamOnly("Remifentanil", "skin", "1:1,000 start"), + findGenerated("Remifentanil", "skin", "1:1,000 start"), // [44] Remifentanil (skin, 1:100 start) - findDreamOnly("Remifentanil", "skin", "1:100 start"), + findGenerated("Remifentanil", "skin", "1:100 start"), // [45] Oxycodone (skin, IV) findGenerated("Oxycodone", "skin", "IV"), // [46] Chlorhexidine (skin, 0.02%) findGenerated("Chlorhexidine", "skin", "0.02%"), // [47] Povidone Iodine (skin, 1:1,000 start) - findDreamOnly("Povidone Iodine", "skin", "1:1,000 start"), + findGenerated("Povidone Iodine", "skin", "1:1,000 start"), // [48] Povidone Iodine (skin, 1:100 start) - findDreamOnly("Povidone Iodine", "skin", "1:100 start"), + findGenerated("Povidone Iodine", "skin", "1:100 start"), // [49] Esomeprazole (skin) findGenerated("Esomeprazole", "skin"), // [50] Lansoprazole (skin) @@ -202,9 +202,9 @@ export const DRUG_MASTERLIST: DrugProtocol[] = [ // [76] Medroxyprogesterone (skin, Inj) findGenerated("Medroxyprogesterone", "skin", "Inj"), // [77] Metacresol (skin, 1:1,000 start) - findDreamOnly("Metacresol", "skin", "1:1,000 start"), + findGenerated("Metacresol", "skin", "1:1,000 start"), // [78] Metacresol (skin, 1:100 start) - findDreamOnly("Metacresol", "skin", "1:100 start"), + findGenerated("Metacresol", "skin", "1:100 start"), // [79] Methylprednisolone (experimental, IV) findGenerated("Methylprednisolone", "experimental", "IV"), // [80] Metoclopramide (skin, IV) diff --git a/src/shared/data/protocols.snapshot.json b/src/shared/data/protocols.snapshot.json index 2c01356..30f1ecf 100644 --- a/src/shared/data/protocols.snapshot.json +++ b/src/shared/data/protocols.snapshot.json @@ -1,7 +1,7 @@ { "schema_version": "1.1", - "generated_at": "2026-08-20T23:24:09Z", - "source_commit": "2f820d8", + "generated_at": "2026-08-22T09:47:51Z", + "source_commit": "9b5ee12", "drugs": [ { "slug": "actrapid", @@ -77,6 +77,262 @@ } ] }, + { + "slug": "amoxicillin", + "title": "Amoxicillin", + "version": "1.3", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Penicillins", + "drug_name": "Amoxycillin" + }, + "protocols": [ + { + "id": "neat-spt", + "label": "Neat SPT", + "test_type": "skin", + "presentation": "1g", + "diluent": "0.9% sodium chloride (reconstitute with 5 mL WFI)", + "spt": { + "dilution": "Neat", + "concentration": "100mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:100", + "concentration": "1mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "10mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "1-5-spt", + "label": "1:5 SPT", + "test_type": "skin", + "presentation": "1g", + "diluent": "0.9% sodium chloride (reconstitute with 5 mL WFI)", + "spt": { + "dilution": "1:5", + "concentration": "20mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:10", + "concentration": "10mg/mL", + "preparation": "" + }, + { + "dilution": "1:5", + "concentration": "20mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, + { + "slug": "ampicillin", + "title": "Ampicillin", + "version": "1.3", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Penicillins" + }, + "protocols": [ + { + "id": "neat-spt", + "label": "Neat SPT", + "test_type": "skin", + "presentation": "1g", + "diluent": "0.9% sodium chloride (reconstitute with 5 mL WFI)", + "spt": { + "dilution": "Neat", + "concentration": "100mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:100", + "concentration": "1mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "10mg/mL", + "preparation": "" + }, + { + "dilution": "1:50", + "concentration": "2mg/0.2mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "1-5-spt", + "label": "1:5 SPT", + "test_type": "skin", + "presentation": "1g", + "diluent": "0.9% sodium chloride (reconstitute with 5 mL WFI)", + "spt": { + "dilution": "1:5", + "concentration": "20mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:10", + "concentration": "10mg/mL", + "preparation": "" + }, + { + "dilution": "1:5", + "concentration": "20mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "0.06mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "control", + "label": "Control", + "test_type": "control", + "presentation": "1g", + "diluent": "0.9% sodium chloride (reconstitute with 5 mL WFI)", + "spt": { + "dilution": "1:5", + "concentration": "20mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:10", + "concentration": "10mg/mL", + "preparation": "" + }, + { + "dilution": "1:5", + "concentration": "20mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "0.02mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, + { + "slug": "augmentin", + "title": "Augmentin (Amoxicillin / Clavulanate)", + "version": "1.3", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Penicillins", + "drug_name": "Augmentin" + }, + "protocols": [ + { + "id": "1-1000-start", + "label": "1:1,000 start", + "test_type": "skin", + "presentation": "2000mg/200mg", + "diluent": "0.9% sodium chloride (reconstitute with 50 mL WFI)", + "spt": { + "dilution": "1:5", + "concentration": "20mg/2mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:50", + "concentration": "2mg/0.2mg/mL", + "preparation": "" + }, + { + "dilution": "1:5", + "concentration": "20mg/2mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "0.06mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "1-100-start", + "label": "1:100 start", + "test_type": "skin", + "presentation": "2000mg/200mg", + "diluent": "0.9% sodium chloride (reconstitute with 50 mL WFI)", + "spt": { + "dilution": "1:5", + "concentration": "20mg/2mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:50", + "concentration": "2mg/0.2mg/mL", + "preparation": "" + }, + { + "dilution": "1:5", + "concentration": "20mg/2mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "0.2mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, { "slug": "azithromycin", "title": "Azithromycin", @@ -116,6 +372,106 @@ } ] }, + { + "slug": "benzylpenicillin", + "title": "Benzylpenicillin", + "version": "1.2", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Penicillins" + }, + "protocols": [ + { + "id": "1-1000-start", + "label": "1:1,000 start", + "test_type": "skin", + "presentation": "600mg", + "diluent": "0.9% sodium chloride (reconstitute with 1.6 mL)", + "spt": { + "dilution": "Neat", + "concentration": "6mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:100", + "concentration": "0.06mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "0.6mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "1-100-start", + "label": "1:100 start", + "test_type": "skin", + "presentation": "600mg", + "diluent": "0.9% sodium chloride (reconstitute with 1.6 mL)", + "spt": { + "dilution": "Neat", + "concentration": "6mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:100", + "concentration": "0.06mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "0.6mg/mL", + "preparation": "" + }, + { + "dilution": "1:50", + "concentration": "2mg/0.2mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "control", + "label": "Control", + "test_type": "control", + "presentation": "600mg", + "diluent": "0.9% sodium chloride (reconstitute with 1.6 mL)", + "spt": { + "dilution": "Neat", + "concentration": "6mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:100", + "concentration": "0.06mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "0.6mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, { "slug": "betamethasone", "title": "Betamethasone", @@ -1059,35 +1415,102 @@ ] }, { - "slug": "lansoprazole", - "title": "Lansoprazole", - "version": "1.2", + "slug": "ketamine", + "title": "Ketamine", + "version": "1.3", "last_reviewed": "2026-03-28", "dream": { - "category": "Proton Pump Inhibitors" + "category": "Hypnotics" }, "protocols": [ { - "id": "standard", - "label": "", + "id": "1-1000-start", + "label": "1:1,000 start", "test_type": "skin", - "presentation": "30 mg capsules / orodispersible tablets", - "diluent": "0.9% sodium chloride (dissolve in 1 mL)", + "presentation": "100mg/mL", + "diluent": "0.9% sodium chloride", "spt": { "dilution": "Neat", - "concentration": "30 mg/mL", + "concentration": "100mg/mL", "positive_control": "Histamine 10 mg/mL", "negative_control": "Normal saline" }, + "idt": [ + { + "dilution": "1:1,000", + "concentration": "0.1mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "1mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "10mg/mL", + "preparation": "" + } + ], "under_review": false, "review_note": "", "needs_pharmacy_verification": false - } - ] - }, - { - "slug": "latex", - "title": "Latex", + }, + { + "id": "1-100-start", + "label": "1:100 start", + "test_type": "skin", + "presentation": "100mg/mL", + "diluent": "0.9% sodium chloride", + "spt": { + "dilution": "Neat", + "concentration": "100mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:1,000", + "concentration": "0.1mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, + { + "slug": "lansoprazole", + "title": "Lansoprazole", + "version": "1.2", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Proton Pump Inhibitors" + }, + "protocols": [ + { + "id": "standard", + "label": "", + "test_type": "skin", + "presentation": "30 mg capsules / orodispersible tablets", + "diluent": "0.9% sodium chloride (dissolve in 1 mL)", + "spt": { + "dilution": "Neat", + "concentration": "30 mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, + { + "slug": "latex", + "title": "Latex", "version": "1.2", "last_reviewed": "2026-03-28", "dream": { @@ -1259,6 +1682,61 @@ } ] }, + { + "slug": "metacresol", + "title": "Metacresol", + "version": "1.1", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Others" + }, + "protocols": [ + { + "id": "1-1000-start", + "label": "1:1,000 start", + "test_type": "skin", + "presentation": "1034mg/mL", + "diluent": "0.9% sodium chloride", + "spt": { + "concentration": "1.5mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:20", + "concentration": "0.075mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "1-100-start", + "label": "1:100 start", + "test_type": "skin", + "presentation": "1034mg/mL", + "diluent": "0.9% sodium chloride", + "spt": { + "concentration": "3mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:20", + "concentration": "0.15mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, { "slug": "methylprednisolone", "title": "Methylprednisolone", @@ -1405,6 +1883,73 @@ } ] }, + { + "slug": "morphine", + "title": "Morphine", + "version": "1.2", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Opioids" + }, + "protocols": [ + { + "id": "1-1000-start", + "label": "1:1,000 start", + "test_type": "skin", + "presentation": "10mg/mL", + "diluent": "0.9% sodium chloride", + "spt": { + "dilution": "1:10", + "concentration": "1mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:100,000", + "concentration": "0.0001mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "0.0005mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "1-100-start", + "label": "1:100 start", + "test_type": "skin", + "presentation": "10mg/mL", + "diluent": "0.9% sodium chloride", + "spt": { + "dilution": "1:10", + "concentration": "1mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:100,000", + "concentration": "0.0001mg/mL", + "preparation": "" + }, + { + "dilution": "1:1,000", + "concentration": "0.01mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, { "slug": "neostigmine", "title": "Neostigmine", @@ -1848,6 +2393,163 @@ } ] }, + { + "slug": "penicillin-major-ppl", + "title": "Penicillin Major (PPL)", + "version": "1.2", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Penicillins", + "drug_name": "Penicillin Major" + }, + "protocols": [ + { + "id": "ppl", + "label": "PPL", + "test_type": "skin", + "presentation": "PPL", + "diluent": "Phosphate-buffered saline (1 mL supplied diluent — not plain saline)", + "spt": { + "dilution": "Neat", + "concentration": "0.04mg/20.00mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:10", + "concentration": "0.004mg/2mg", + "preparation": "" + }, + { + "dilution": "Neat", + "concentration": "0.04mg/20.00mg", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, + { + "slug": "penicillin-minor-md", + "title": "Penicillin Minor Determinant (MD)", + "version": "1.2", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Penicillins", + "drug_name": "Penicillin Minor" + }, + "protocols": [ + { + "id": "md", + "label": "MD", + "test_type": "skin", + "presentation": "MD (Sodium Benzylpenilloate/Mannitol)", + "diluent": "Phosphate-buffered saline (1 mL supplied diluent — not plain saline)", + "spt": { + "dilution": "Neat", + "concentration": "0.50mg/20.00mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:10", + "concentration": "0.05mg/2.00mg", + "preparation": "" + }, + { + "dilution": "Neat", + "concentration": "0.50mg/20.00mg", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, + { + "slug": "povidone-iodine", + "title": "Povidone Iodine", + "version": "1.2", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Antiseptics" + }, + "protocols": [ + { + "id": "1-1000-start", + "label": "1:1,000 start", + "test_type": "skin", + "presentation": "10% w/v", + "diluent": "0.9% sodium chloride", + "spt": { + "dilution": "Neat", + "concentration": "100mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:10,000", + "concentration": "0.01mg/mL", + "preparation": "" + }, + { + "dilution": "1:1,000", + "concentration": "0.1mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "1mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "1-100-start", + "label": "1:100 start", + "test_type": "skin", + "presentation": "10% w/v", + "diluent": "0.9% sodium chloride", + "spt": { + "dilution": "Neat", + "concentration": "100mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:10,000", + "concentration": "0.01mg/mL", + "preparation": "" + }, + { + "dilution": "1:1,000", + "concentration": "0.1mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "1mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, { "slug": "propofol", "title": "Propofol", @@ -1993,6 +2695,78 @@ } ] }, + { + "slug": "remifentanil", + "title": "Remifentanil", + "version": "1.2", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Opioids" + }, + "protocols": [ + { + "id": "1-1000-start", + "label": "1:1,000 start", + "test_type": "skin", + "presentation": "1mg", + "diluent": "0.9% sodium chloride (reconstitute with 20 mL WFI)", + "spt": { + "dilution": "Neat", + "concentration": "0.05mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:100", + "concentration": "0.0005mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "0.005mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "1-100-start", + "label": "1:100 start", + "test_type": "skin", + "presentation": "1mg", + "diluent": "0.9% sodium chloride (reconstitute with 20 mL WFI)", + "spt": { + "dilution": "Neat", + "concentration": "0.05mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:100", + "concentration": "0.0005mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "0.005mg/mL", + "preparation": "" + }, + { + "dilution": "1:1,000", + "concentration": "0.01mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, { "slug": "rocuronium", "title": "Rocuronium", @@ -2032,6 +2806,83 @@ } ] }, + { + "slug": "ropivacaine", + "title": "Ropivacaine", + "version": "1.3", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Local Anaesthetics" + }, + "protocols": [ + { + "id": "epidural-1", + "label": "Epidural Protocol 1", + "test_type": "skin", + "presentation": "40mg/20mL", + "diluent": "0.9% sodium chloride", + "spt": { + "dilution": "Neat", + "concentration": "2mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:1,000", + "concentration": "0.002mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "0.02mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "0.2mg/mL", + "preparation": "" + }, + { + "dilution": "Neat", + "concentration": "2mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "epidural-2", + "label": "Epidural Protocol 2", + "test_type": "skin", + "presentation": "40mg/20mL", + "diluent": "0.9% sodium chloride", + "spt": { + "dilution": "Neat", + "concentration": "2mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:10", + "concentration": "0.2mg/mL", + "preparation": "" + }, + { + "dilution": "Neat", + "concentration": "2mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, { "slug": "sugammadex", "title": "Sugammadex", @@ -2149,6 +3000,83 @@ } ] }, + { + "slug": "thiopental", + "title": "Thiopental", + "version": "1.2", + "last_reviewed": "2026-03-28", + "dream": { + "category": "Hypnotics" + }, + "protocols": [ + { + "id": "1-1000-start", + "label": "1:1,000 start", + "test_type": "skin", + "presentation": "25mg/mL", + "diluent": "0.9% sodium chloride (reconstitute with 20 mL WFI or saline)", + "spt": { + "dilution": "Neat", + "concentration": "25mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:1,000", + "concentration": "0.025mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "0.25mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "2.5mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + }, + { + "id": "1-100-start", + "label": "1:100 start", + "test_type": "skin", + "presentation": "25mg/mL", + "diluent": "0.9% sodium chloride (reconstitute with 20 mL WFI or saline)", + "spt": { + "dilution": "Neat", + "concentration": "25mg/mL", + "positive_control": "Histamine 10 mg/mL", + "negative_control": "Normal saline" + }, + "idt": [ + { + "dilution": "1:1,000", + "concentration": "0.025mg/mL", + "preparation": "" + }, + { + "dilution": "1:100", + "concentration": "0.25mg/mL", + "preparation": "" + }, + { + "dilution": "1:10", + "concentration": "2.5mg/mL", + "preparation": "" + } + ], + "under_review": false, + "review_note": "", + "needs_pharmacy_verification": false + } + ] + }, { "slug": "tramadol", "title": "Tramadol",