Assessment of antibiotic related medication errors during intensive care unit-to-ward transitions: a prospective cohort study Objectives: 1. To determine the incidence, severity and preventability of antibiotic related medication errors during ICU-to-ward transfer. 2. To identify predictors of antibiotic related medication errors during ICU-to-ward transfer. 3. To assess the association between antibiotic-related medication errors and adverse patient outcomes. 4. To evaluate the healthcare and economic burden of antibiotic-related medication errors.
antibiotic medication errors ICU ward transition care handoff
medication errors intensive care unit incidence severity preventability
antibiotic medication errors ICU to ward transition prospective cohort study incidence predictors outcomes
medication errors transition care ICU discharge ward
antibiotic prescribing errors adverse drug events ICU outcomes
https://pmc.ncbi.nlm.nih.gov/articles/PMC9013992
PMID: 35042765
antimicrobial stewardship errors adverse drug events economic cost hospital
medication reconciliation antibiotic ICU transfer patient outcomes readmission
antibiotic de-escalation ICU-to-ward transition errors predictors length of stay mortality
medication errors adverse drug events economic burden hospital costs
antibiotic inappropriate continuation ICU discharge predictors risk factors
https://www.sciencedirect.com/science/article/pii/S277250142…
PMID: 37059685
antibiotic related medication errors economic burden cost prolonged hospital stay readmission 2022 2023 2024
| Error Type | Examples |
|---|---|
| Omission | Antibiotic discontinued without clinical indication to stop |
| Commission | New antibiotic started without appropriate indication at transfer |
| Dose error | Wrong dose prescribed on ward (different from ICU dose) |
| Frequency error | Dosing interval changed without renal/hepatic dose adjustment rationale |
| Route error | IV-to-oral switch not made, or oral prescribed where IV indicated |
| Duration error | No stop date/review date documented; inappropriate prolongation |
| De-escalation failure | Broad-spectrum empirical antibiotic not narrowed when culture data available |
| Allergy-related error | Antibiotic prescribed despite documented allergy |
| Category | Description |
|---|---|
| A | Circumstances that may cause error (near miss) |
| B | Error occurred but did not reach patient |
| C | Error reached patient but caused no harm |
| D | Error reached patient, required monitoring, no harm |
| E | Error reached patient, required intervention, temporary harm |
| F | Error required initial/prolonged hospitalisation |
| G | Error caused permanent patient harm |
| H | Error required life-sustaining intervention |
| I | Error contributed to/caused patient death |
| Outcome | Definition | Assessment Time Points |
|---|---|---|
| Primary | Composite of antibiotic-related adverse drug event (ADE), clinical failure requiring antibiotic change, and ICU readmission | 30 days post-transfer |
| Antibiotic-related ADE | Clinically documented adverse event attributable to antibiotic error (e.g., drug toxicity from under-monitoring, superinfection from de-escalation failure, treatment failure from omission error, anaphylaxis from allergy error) | During index admission |
| Clinical failure | Persistent/worsening infection requiring escalation of antibiotic therapy | 7 and 14 days post-transfer |
| ICU readmission | Unplanned readmission to ICU | 14 and 30 days |
| Secondary | Length of stay (LOS) post-transfer | Until discharge |
| In-hospital mortality | Until discharge | |
| 30-day all-cause mortality | 30 days | |
| C. difficile infection | During index admission | |
| Emergence of resistant organisms | During index admission | |
| Hospital readmission | 30 days post-discharge |
| Component | Data Source | Method |
|---|---|---|
| Antibiotic acquisition costs (incorrect vs correct) | Hospital pharmacy records | Actual acquisition cost per defined daily dose |
| Additional laboratory monitoring costs (TDM, renal function) | Hospital billing records | Itemised billing codes |
| Cost of managing antibiotic ADEs (e.g., nephrotoxicity workup, C. difficile treatment) | Patient-level cost data | Top-down or micro-costing |
| Excess ward LOS attributable to ARME | LOS difference between error vs no-error groups × daily bed cost | Regression-based LOS attributable fraction |
| Cost of ICU readmission attributable to ARME | Readmission rate difference × mean ICU-day cost | Incremental cost approach |
| Pharmacist intervention time | Time-and-motion study | Resource costing |
ICU Transfer Event
↓
Pharmacist Review within 24h
- ICU Rx vs. Ward Rx reconciliation
- Microbiology data linkage
- Error classification (type, NCC MERP severity)
- Preventability assessment (dual review)
↓
Baseline Data Collection
- Patient demographics, comorbidities
- Antibiotic and clinical variables
- System/transfer-level variables
↓
Prospective Follow-Up (30 days)
- Clinical outcomes monitoring
- Adverse drug event documentation
- LOS tracking
- ICU readmission surveillance
↓
Cost Data Linkage
- Pharmacy billing
- Hospital costing records
↓
Statistical Analysis
create a protocol on 3rd objective in official format
medication errors adverse drug events patient outcomes ICU prospective cohort
antibiotic errors treatment failure ICU readmission mortality outcomes
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && ls -la /tmp/workspace/
mkdir -p /tmp/workspace/obj3-protocol && cat > /tmp/workspace/obj3-protocol/build_protocol.py << 'PYEOF' from docx import Document from docx.shared import Pt, Inches, RGBColor, Cm from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.table import WD_TABLE_ALIGNMENT, WD_ALIGN_VERTICAL from docx.oxml.ns import qn from docx.oxml import OxmlElement import copy doc = Document() # ── Page margins ────────────────────────────────────────────────────────────── section = doc.sections[0] section.page_width = Inches(8.27) # A4 section.page_height = Inches(11.69) section.left_margin = Inches(1.18) section.right_margin = Inches(1.18) section.top_margin = Inches(1.0) section.bottom_margin = Inches(1.0) # ── Base font ───────────────────────────────────────────────────────────────── normal_style = doc.styles["Normal"] normal_style.font.name = "Times New Roman" normal_style.font.size = Pt(12) normal_style.paragraph_format.space_after = Pt(6) # ── Heading styles ──────────────────────────────────────────────────────────── for level, sz, bold, color_hex in [ (1, 14, True, "1F3864"), # dark navy (2, 12, True, "1F3864"), (3, 12, True, "2F5496"), ]: h = doc.styles[f"Heading {level}"] h.font.name = "Times New Roman" h.font.size = Pt(sz) h.font.bold = bold r, g, b = int(color_hex[0:2],16), int(color_hex[2:4],16), int(color_hex[4:6],16) h.font.color.rgb = RGBColor(r, g, b) h.paragraph_format.space_before = Pt(12) h.paragraph_format.space_after = Pt(4) h.paragraph_format.keep_with_next = True # ── Helper: paragraph with alignment & spacing ──────────────────────────────── def add_para(text, bold=False, italic=False, align=WD_ALIGN_PARAGRAPH.JUSTIFY, space_before=0, space_after=6, indent=None, font_size=12): p = doc.add_paragraph() p.alignment = align p.paragraph_format.space_before = Pt(space_before) p.paragraph_format.space_after = Pt(space_after) if indent: p.paragraph_format.left_indent = Inches(indent) run = p.add_run(text) run.bold = bold run.italic = italic run.font.name = "Times New Roman" run.font.size = Pt(font_size) return p def add_bullet(text, level=0, bold_prefix=None): p = doc.add_paragraph(style="List Bullet") p.paragraph_format.left_indent = Inches(0.35 + level*0.25) p.paragraph_format.space_after = Pt(3) if bold_prefix: r1 = p.add_run(bold_prefix) r1.bold = True r1.font.name = "Times New Roman" r1.font.size = Pt(12) r2 = p.add_run(text) r2.font.name = "Times New Roman" r2.font.size = Pt(12) else: r = p.add_run(text) r.font.name = "Times New Roman" r.font.size = Pt(12) return p def add_numbered(text, bold_prefix=None): p = doc.add_paragraph(style="List Number") p.paragraph_format.left_indent = Inches(0.35) p.paragraph_format.space_after = Pt(3) if bold_prefix: r1 = p.add_run(bold_prefix) r1.bold = True r1.font.name = "Times New Roman" r1.font.size = Pt(12) r2 = p.add_run(text) r2.font.name = "Times New Roman" r2.font.size = Pt(12) else: r = p.add_run(text) r.font.name = "Times New Roman" r.font.size = Pt(12) return p # helper: add shaded table header row def shade_row(row, hex_color="1F3864"): for cell in row.cells: tc = cell._tc tcPr = tc.get_or_add_tcPr() shd = OxmlElement("w:shd") shd.set(qn("w:val"), "clear") shd.set(qn("w:color"), "auto") shd.set(qn("w:fill"), hex_color) tcPr.append(shd) def set_cell_font(cell, text, bold=False, color_hex=None, size=11, center=False): cell.text = "" p = cell.paragraphs[0] if center: p.alignment = WD_ALIGN_PARAGRAPH.CENTER run = p.add_run(text) run.font.name = "Times New Roman" run.font.size = Pt(size) run.bold = bold if color_hex: r,g,b = int(color_hex[0:2],16), int(color_hex[2:4],16), int(color_hex[4:6],16) run.font.color.rgb = RGBColor(r,g,b) def add_horizontal_rule(): p = doc.add_paragraph() p.paragraph_format.space_before = Pt(4) p.paragraph_format.space_after = Pt(4) pPr = p._p.get_or_add_pPr() pBdr = OxmlElement("w:pBdr") bottom = OxmlElement("w:bottom") bottom.set(qn("w:val"), "single") bottom.set(qn("w:sz"), "6") bottom.set(qn("w:space"), "1") bottom.set(qn("w:color"), "1F3864") pBdr.append(bottom) pPr.append(pBdr) # ══════════════════════════════════════════════════════════════════════════════ # TITLE PAGE # ══════════════════════════════════════════════════════════════════════════════ doc.add_paragraph() # top space title_p = doc.add_paragraph() title_p.alignment = WD_ALIGN_PARAGRAPH.CENTER title_p.paragraph_format.space_before = Pt(48) title_p.paragraph_format.space_after = Pt(8) r = title_p.add_run("STUDY PROTOCOL") r.font.name = "Times New Roman" r.font.size = Pt(14) r.bold = True r.font.color.rgb = RGBColor(0x1F, 0x38, 0x64) sub_p = doc.add_paragraph() sub_p.alignment = WD_ALIGN_PARAGRAPH.CENTER sub_p.paragraph_format.space_after = Pt(24) r2 = sub_p.add_run("Objective 3 — Assessment of the Association Between Antibiotic-Related\nMedication Errors and Adverse Patient Outcomes") r2.font.name = "Times New Roman" r2.font.size = Pt(16) r2.bold = True r2.font.color.rgb = RGBColor(0x1F, 0x38, 0x64) parent_p = doc.add_paragraph() parent_p.alignment = WD_ALIGN_PARAGRAPH.CENTER parent_p.paragraph_format.space_after = Pt(8) r3 = parent_p.add_run("Part of the Prospective Cohort Study:\n"Assessment of Antibiotic-Related Medication Errors\nDuring ICU-to-Ward Transitions"") r3.font.name = "Times New Roman" r3.font.size = Pt(13) r3.italic = True doc.add_paragraph() doc.add_paragraph() meta_items = [ ("Protocol Version:", "1.0"), ("Date:", "19 July 2026"), ("Protocol Status:", "Draft — For Ethical Review Submission"), ("Study Design:", "Prospective Observational Cohort Study"), ("Setting:", "Adult Intensive Care Unit(s), Tertiary Care Hospital"), ("Primary Investigator:", "[PI Name], [Department], [Institution]"), ("Co-Investigators:", "[Co-I Names and Affiliations]"), ("Sponsor/Funder:", "[Institution / Grant Body]"), ("Ethics Reference No.:", "Pending"), ("Trial Registration:", "Pending — ClinicalTrials.gov / ISRCTN"), ] tbl = doc.add_table(rows=len(meta_items), cols=2) tbl.style = "Table Grid" tbl.alignment = WD_TABLE_ALIGNMENT.CENTER tbl.columns[0].width = Inches(2.3) tbl.columns[1].width = Inches(4.0) for i, (label, value) in enumerate(meta_items): set_cell_font(tbl.rows[i].cells[0], label, bold=True, size=11) set_cell_font(tbl.rows[i].cells[1], value, size=11) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # TABLE OF CONTENTS (manual) # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("Table of Contents", level=1) toc_items = [ ("1.", "Abbreviations and Definitions", "3"), ("2.", "Background and Scientific Rationale", "4"), ("3.", "Objective", "5"), ("4.", "Study Design", "5"), ("5.", "Study Population", "5"), ("6.", "Outcome Measures", "6"), ("7.", "Data Collection Procedures", "8"), ("8.", "Data Variables", "9"), ("9.", "Adjudication of Antibiotic-Related Medication Errors", "10"), ("10.", "Sample Size and Power", "11"), ("11.", "Statistical Analysis Plan", "11"), ("12.", "Data Management", "14"), ("13.", "Ethical Considerations", "14"), ("14.", "Quality Assurance and Monitoring", "15"), ("15.", "Limitations and Mitigation Strategies", "16"), ("16.", "Dissemination Plan", "16"), ("17.", "References", "17"), ("Appendix A:", "NCC MERP Index — Severity Classification", "19"), ("Appendix B:", "Outcome Assessment Forms (CRF Outline)", "20"), ("Appendix C:", "Causality Assessment Algorithm", "21"), ] toc_tbl = doc.add_table(rows=len(toc_items), cols=3) toc_tbl.style = "Table Grid" for i,(num,title,pg) in enumerate(toc_items): set_cell_font(toc_tbl.rows[i].cells[0], num, bold=True, size=11) set_cell_font(toc_tbl.rows[i].cells[1], title, size=11) set_cell_font(toc_tbl.rows[i].cells[2], pg, size=11, center=True) # remove borders for a cleaner TOC for cell in toc_tbl.rows[i].cells: tc = cell._tc tcPr = tc.get_or_add_tcPr() tcBorders = OxmlElement("w:tcBorders") for side in ["top","left","bottom","right","insideH","insideV"]: b = OxmlElement(f"w:{side}") b.set(qn("w:val"), "none") tcBorders.append(b) tcPr.append(tcBorders) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 1 — ABBREVIATIONS # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("1. Abbreviations and Definitions", level=1) add_horizontal_rule() abbr = [ ("ADE", "Adverse Drug Event"), ("AKI", "Acute Kidney Injury"), ("AMR", "Antimicrobial Resistance"), ("APACHE II","Acute Physiology and Chronic Health Evaluation II"), ("ARME", "Antibiotic-Related Medication Error"), ("CCI", "Charlson Comorbidity Index"), ("CDI", "Clostridioides difficile Infection"), ("CI", "Confidence Interval"), ("CRF", "Case Report Form"), ("CRE", "Carbapenem-Resistant Enterobacterales"), ("eGFR", "Estimated Glomerular Filtration Rate"), ("HDU", "High Dependency Unit"), ("HR", "Hazard Ratio"), ("ICU", "Intensive Care Unit"), ("IQR", "Interquartile Range"), ("IV", "Intravenous"), ("LOS", "Length of Hospital Stay"), ("MDR", "Multidrug-Resistant"), ("MDT", "Multidisciplinary Team"), ("NCC MERP", "National Coordinating Council for Medication Error Reporting and Prevention"), ("OR", "Odds Ratio"), ("PI", "Principal Investigator"), ("PS", "Propensity Score"), ("REC", "Research Ethics Committee"), ("SOFA", "Sequential Organ Failure Assessment"), ("SOP", "Standard Operating Procedure"), ("TDM", "Therapeutic Drug Monitoring"), ("TTE", "Time-to-Event"), ] tbl2 = doc.add_table(rows=len(abbr)+1, cols=2) tbl2.style = "Table Grid" shade_row(tbl2.rows[0], "1F3864") set_cell_font(tbl2.rows[0].cells[0], "Abbreviation", bold=True, color_hex="FFFFFF", size=11, center=True) set_cell_font(tbl2.rows[0].cells[1], "Full Term", bold=True, color_hex="FFFFFF", size=11, center=True) for i,(ab,full) in enumerate(abbr,1): set_cell_font(tbl2.rows[i].cells[0], ab, bold=True, size=11) set_cell_font(tbl2.rows[i].cells[1], full, size=11) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 2 — BACKGROUND # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("2. Background and Scientific Rationale", level=1) add_horizontal_rule() doc.add_heading("2.1 The ICU-to-Ward Transition as a High-Risk Care Interface", level=2) add_para( "The transfer of a patient from the intensive care unit (ICU) to a general hospital ward represents one " "of the most complex and error-prone transitions in acute care. Critically ill patients who survive an ICU " "episode frequently carry a heavy pharmacological burden at the point of discharge — including multiple " "broad-spectrum antibiotics, parenteral formulations, weight- and renal function-adjusted dosing regimens, " "and time-critical de-escalation schedules linked to pending or reported microbiological culture results. " "Ward environments typically lack the prescribing infrastructure, pharmacist-to-patient ratios, and " "monitoring intensity needed to safely continue these regimens without structured reconciliation." ) add_para( "A multicentre retrospective epidemiological study by Wang et al. (2022) of 1,546 ICU-to-non-ICU transfers " "across three tertiary hospitals found that 58.15% of patients experienced at least one medication error at " "transition, with anti-infective agents accounting for 14.84% of all errors — the second most affected drug " "class. Among anti-infective errors, beta-lactams accounted for 37.81% and peptides (vancomycin, colistin) " "for 23.67%. The three most common error types were route of administration (37.85%), dosage (17.99%), and " "frequency errors (9.23%)." ) add_para( "A retrospective observational study by Martínez Pradeda et al. (2023) of 452 ICU-to-ward medication " "reconciliations found that 34.29% of patients had at least one discrepancy and 18.14% had at least one " "confirmed reconciliation error, with dose/route errors and omission errors each comprising 31.79% of all " "errors. Notably, high-alert medications — including antibiotics with narrow therapeutic indices — were " "implicated in 19.20% of reconciliation errors." ) add_para( "The systematic review and meta-analysis by Bourne et al. (2022), published in BMJ Quality & Safety, " "reviewed 17 studies on medication-related interventions at ICU transitions and demonstrated that structured " "interventions reduce the odds of inappropriate medication continuation at ICU discharge by 55% " "(OR 0.45, 95% CI 0.31–0.63). Critically, the authors noted that the vast majority of existing studies " "were uncontrolled before-after designs, and explicitly called for prospective observational studies with " "rigorous outcome measurement and economic evaluation." ) doc.add_heading("2.2 Clinical Consequences of Antibiotic-Related Medication Errors", level=2) add_para( "Antibiotic-related medication errors (ARMEs) at care transitions can result in patient harm through " "several distinct mechanisms:" ) add_bullet("Treatment failure: Omission errors or unintended interruption of effective therapy may result in persistent or worsening infection, microbiological relapse, or systemic sepsis. This is particularly consequential for patients recovering from bacteraemia or ventilator-associated pneumonia.", bold_prefix="(a) ") add_bullet("Drug toxicity from under-monitoring: Narrow-therapeutic-index agents — particularly vancomycin and aminoglycosides — require continuous renal function monitoring and therapeutic drug monitoring (TDM). Failure to continue ICU-level monitoring on the ward risks nephrotoxicity, ototoxicity, and toxicity-related acute kidney injury.", bold_prefix="(b) ") add_bullet("Resistance selection and superinfection: Inappropriate continuation of broad-spectrum empirical antibiotics beyond culture-guided indications promotes Clostridioides difficile infection (CDI) and selection of multidrug-resistant (MDR) organisms. A systematic review found the OR for CDI with antibiotic exposure is 7.6 (95% CI 4.9–11.9).", bold_prefix="(c) ") add_bullet("Allergy-related adverse reactions: Antibiotic administration to a patient with a documented allergy, due to reconciliation failure, may precipitate anaphylaxis or other immune-mediated reactions.", bold_prefix="(d) ") add_bullet("De-escalation failure: Failure to narrow antibiotic spectrum when culture data are available — particularly failure to step down carbapenems or glycopeptides — prolongs selection pressure and increases drug-acquisition costs without clinical benefit.", bold_prefix="(e) ") add_para( "A systematic review on antibiotic resistance economic burden (2023) found that resistant infections " "incur a mean excess length of stay of 7.4 days (95% CI 3.4–11.4), an OR for mortality of 1.844 " "(95% CI 1.187–2.865), and an OR for readmission of 1.492 (95% CI 1.231–1.807) compared to " "susceptible infections." ) doc.add_heading("2.3 Evidence Gap", level=2) add_para( "Despite these data, no prospective cohort study has systematically measured the association between " "antibiotic-specific medication errors at ICU-to-ward transition and objectively defined adverse patient " "outcomes — including clinical failure, ICU readmission, length of stay, in-hospital mortality, emergence " "of resistant organisms, and Clostridioides difficile infection. Existing studies are predominantly " "retrospective, do not isolate antibiotic-related errors from general medication errors, and do not " "apply rigorous causal-inference methods (propensity score adjustment) to outcome analysis. This protocol " "addresses that evidence gap as Objective 3 of the overarching prospective cohort study." ) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 3 — OBJECTIVE # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("3. Objective", level=1) add_horizontal_rule() add_para( "To assess the association between antibiotic-related medication errors (ARMEs) at ICU-to-ward transition " "and adverse patient outcomes, including clinical failure, ICU readmission, length of stay, in-hospital " "mortality, Clostridioides difficile infection, emergence of antimicrobial resistance, and 30-day " "hospital readmission." ) doc.add_heading("3.1 Specific Hypotheses", level=2) add_numbered("H\u2081 (Primary): Patients who experience at least one ARME at ICU-to-ward transition have a significantly higher rate of the composite primary outcome (antibiotic-related adverse drug event, clinical failure, or ICU readmission within 30 days) compared to patients without an ARME, after adjusting for baseline disease severity.") add_numbered("H\u2082: Patients with ARMEs have significantly longer post-transfer ward length of stay than those without ARMEs, after propensity score adjustment.") add_numbered("H\u2083: The severity of ARME (NCC MERP categories) is positively associated with the magnitude of clinical harm — i.e., higher-severity errors carry greater odds of adverse outcomes.") add_numbered("H\u2084: Specific ARME types (omission, de-escalation failure, dose error, route error) differ in their association with specific adverse outcomes.") doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 4 — STUDY DESIGN # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("4. Study Design", level=1) add_horizontal_rule() add_para( "This is a prospective observational cohort study. Patients are enrolled at the point of ICU-to-ward " "transfer and followed prospectively for 30 days post-transfer or until hospital discharge, whichever " "is later. No intervention is applied; the study observes and documents naturally occurring prescribing " "practices, medication errors, and subsequent clinical outcomes." ) add_para( "Reporting will follow the STROBE (Strengthening the Reporting of Observational Studies in Epidemiology) " "checklist for cohort studies." ) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 5 — STUDY POPULATION # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("5. Study Population", level=1) add_horizontal_rule() doc.add_heading("5.1 Inclusion Criteria", level=2) add_bullet("Adult patients aged ≥18 years") add_bullet("Admitted to an adult medical, surgical, or mixed ICU") add_bullet("Transferred from the ICU to a general ward (not to HDU, step-down unit, or another ICU)") add_bullet("Receiving at least one systemic antibiotic at the time of ICU transfer") add_bullet("Expected ward stay of ≥24 hours following transfer") doc.add_heading("5.2 Exclusion Criteria", level=2) add_bullet("Transfer to a high-dependency unit (HDU) or step-down unit rather than a general ward") add_bullet("ICU readmission within 24 hours of transfer (transfer deemed temporary)") add_bullet("Patients under palliative/comfort-only care at the time of transfer") add_bullet("Patients without documented consent where waiver was not granted by the ethics committee") add_bullet("Patients enrolled in a concurrent interventional drug trial that may alter antibiotic management") add_bullet("Transfer to a different hospital (no follow-up feasible)") doc.add_heading("5.3 Study Period and Setting", level=2) add_para( "The study will be conducted over 12 consecutive months in adult ICU(s) of a tertiary care hospital. " "Where feasible, two to three ICUs of different types (medical, surgical, mixed) within the same " "institution or affiliated network should be enrolled to improve representativeness. Consecutive " "eligible patients will be enrolled to minimize selection bias." ) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 6 — OUTCOME MEASURES # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("6. Outcome Measures", level=1) add_horizontal_rule() doc.add_heading("6.1 Primary Outcome", level=2) add_para( "Composite endpoint of any of the following occurring within 30 days of ICU-to-ward transfer:" ) tbl_po = doc.add_table(rows=4, cols=3) tbl_po.style = "Table Grid" shade_row(tbl_po.rows[0], "1F3864") for txt, cell in zip(["Component","Definition","Ascertainment Method"], tbl_po.rows[0].cells): set_cell_font(cell, txt, bold=True, color_hex="FFFFFF", size=11, center=True) rows_po = [ ("Antibiotic-Related Adverse Drug Event (ADE)", "A clinically documented adverse event with a plausible causal relationship to an identified ARME, classified as at least NCC MERP Category D (reached patient; monitoring required) or higher.", "Daily chart review by study pharmacist; causality assessed using the Naranjo Algorithm (probable/definite: score ≥5)"), ("Clinical Failure", "Persistence or worsening of the index infection requiring escalation of antibiotic therapy (addition of a new antibiotic, switch to a broader agent, or recommencement of a discontinued antibiotic) as determined by the treating team and documented in the medical record.", "Medical record review at days 7, 14, and 30 post-transfer"), ("Unplanned ICU Readmission", "Readmission to any ICU within 30 days of the index ICU-to-ward transfer, for any reason, as distinguished from planned step-down readmission.", "Hospital administrative and ICU admission records"), ] for i, (comp, defn, method) in enumerate(rows_po, 1): set_cell_font(tbl_po.rows[i].cells[0], comp, bold=True, size=10) set_cell_font(tbl_po.rows[i].cells[1], defn, size=10) set_cell_font(tbl_po.rows[i].cells[2], method, size=10) add_para("") doc.add_heading("6.2 Secondary Outcomes", level=2) tbl_so = doc.add_table(rows=8, cols=3) tbl_so.style = "Table Grid" shade_row(tbl_so.rows[0], "2F5496") for txt, cell in zip(["Outcome","Definition / Metric","Assessment Time Point"], tbl_so.rows[0].cells): set_cell_font(cell, txt, bold=True, color_hex="FFFFFF", size=11, center=True) secondary = [ ("Post-transfer length of stay (LOS)", "Number of days from ICU-to-ward transfer to hospital discharge or in-hospital death", "Until discharge"), ("In-hospital mortality", "Death during the index hospitalisation", "Until discharge"), ("30-day all-cause mortality", "Death from any cause within 30 days of ICU-to-ward transfer, including post-discharge deaths (ascertained via hospital/civil records)", "Day 30"), ("Clostridioides difficile infection (CDI)", "New positive CDI toxin assay (EIA or NAAT) with compatible clinical syndrome (≥3 loose stools/day), occurring ≥48 hours after index transfer", "During index admission"), ("Emergence of MDR organisms", "First microbiological isolation of a new MDR organism (MRSA, VRE, CRE, ESBL-producing Enterobacterales, carbapenem-resistant Acinetobacter/Pseudomonas) not present in pre-transfer cultures", "During index admission"), ("Antibiotic-associated nephrotoxicity", "AKI (KDIGO Stage ≥1: serum creatinine ≥1.5× baseline or urine output <0.5 mL/kg/h for ≥6 h) occurring after transfer and attributed to antibiotic use (vancomycin, aminoglycosides, colistin) by the treating team", "Days 1–14 post-transfer"), ("30-day hospital readmission", "Unplanned readmission to any hospital within 30 days of index hospital discharge", "Day 30"), ] for i, (out, defn, tp) in enumerate(secondary, 1): set_cell_font(tbl_so.rows[i].cells[0], out, bold=True, size=10) set_cell_font(tbl_so.rows[i].cells[1], defn, size=10) set_cell_font(tbl_so.rows[i].cells[2], tp, size=10, center=True) add_para("") doc.add_heading("6.3 Subgroup Outcome Analysis", level=2) add_para("Pre-specified subgroup analyses will be conducted for the primary outcome stratified by:") add_bullet("ARME severity class: clinically significant (NCC MERP D–I) vs. non-significant (NCC MERP A–C)") add_bullet("ARME type: omission, de-escalation failure, dose error, route error, duration error, allergy-related error") add_bullet("Antibiotic class: beta-lactam, glycopeptide (vancomycin), carbapenem, aminoglycoside, fluoroquinolone, other") add_bullet("Patient renal function at transfer: AKI present, CKD (eGFR <60 mL/min/1.73m²), or normal") add_bullet("ICU admission diagnosis: sepsis/septic shock vs. post-operative vs. other") doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 7 — DATA COLLECTION # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("7. Data Collection Procedures", level=1) add_horizontal_rule() doc.add_heading("7.1 Enrollment and Baseline Assessment (Day 0 — Time of Transfer)", level=2) add_para( "A designated research pharmacist will screen all ICU patients for eligibility on a daily basis. " "Upon confirmation of an ICU-to-ward transfer order, the pharmacist will:" ) add_numbered("Document the complete list of antibiotics prescribed in the ICU at the time of transfer, including drug name, dose, route, frequency, intended duration/stop date, and TDM requirements.") add_numbered("Retrieve the most recent microbiological culture and sensitivity reports, and document whether therapy is empirical or culture-directed, and whether any cultures remain pending.") add_numbered("Record current renal and hepatic function parameters (serum creatinine, eGFR, bilirubin, albumin, weight).") add_numbered("Review the ward admission order and document the complete antibiotic prescription as written on the ward.") add_numbered("Identify and classify all discrepancies between ICU and ward prescriptions using the ARME classification framework (see Section 9).") doc.add_heading("7.2 Prospective Follow-Up (Days 1–30)", level=2) add_para("Follow-up data will be collected by the research pharmacist and a trained research nurse:") add_bullet("Daily chart review for the first 7 days post-transfer to capture early clinical events") add_bullet("Review at Days 14 and 30 post-transfer for later outcomes") add_bullet("Laboratory data (renal function, culture results, CDI assays) extracted from the hospital electronic records system at each review point") add_bullet("Clinical events (antibiotic escalation, ICU readmission, death) ascertained from nursing notes, medical records, and hospital administrative data") add_bullet("30-day post-discharge follow-up for readmission: hospital records, general practitioner notification, or patient/surrogate contact as approved by ethics") doc.add_heading("7.3 Data Capture Tool", level=2) add_para( "All data will be captured in a secure, web-based electronic case report form (eCRF) developed on " "REDCap (Research Electronic Data Capture). Access will be restricted to authorised study personnel " "via individual unique login credentials. All entries will be time-stamped and audit-trailed. " "Paper backup CRFs will be available for situations of system unavailability." ) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 8 — DATA VARIABLES # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("8. Data Variables", level=1) add_horizontal_rule() doc.add_heading("8.1 Patient-Level Variables (Collected at Baseline)", level=2) tbl_vars = doc.add_table(rows=1, cols=3) tbl_vars.style = "Table Grid" shade_row(tbl_vars.rows[0], "1F3864") set_cell_font(tbl_vars.rows[0].cells[0], "Variable", bold=True, color_hex="FFFFFF", size=11) set_cell_font(tbl_vars.rows[0].cells[1], "Type / Scale", bold=True, color_hex="FFFFFF", size=11, center=True) set_cell_font(tbl_vars.rows[0].cells[2], "Source", bold=True, color_hex="FFFFFF", size=11) vars_data = [ ("Age (years)", "Continuous", "Medical record"), ("Sex (male/female/other)", "Categorical", "Medical record"), ("Body weight (kg), height (cm)", "Continuous", "ICU nursing chart"), ("Charlson Comorbidity Index", "Ordinal (0–37)", "Calculated from discharge summary"), ("Renal function at transfer: serum creatinine, eGFR (mL/min/1.73m²)", "Continuous", "Laboratory system"), ("Presence of AKI at time of transfer (KDIGO staging)", "Categorical (0/1/2/3)", "Laboratory + clinical records"), ("Hepatic function: Child-Pugh score (if cirrhosis)", "Ordinal (A/B/C)", "Clinical assessment"), ("APACHE II score at ICU admission", "Continuous", "ICU records"), ("SOFA score at ICU discharge (day of transfer)", "Continuous", "ICU records"), ("ICU admission diagnosis", "Categorical (sepsis, post-operative, respiratory failure, trauma, other)", "ICU records"), ("Duration of mechanical ventilation (days)", "Continuous", "ICU records"), ("Vasopressor use during ICU stay (yes/no)", "Binary", "ICU medication chart"), ("ICU length of stay (days)", "Continuous", "Hospital administrative records"), ("Total number of medications at time of transfer", "Continuous (count)", "ICU medication chart"), ("Number of antibiotics at time of transfer", "Continuous (count)", "ICU medication chart"), ("Documented drug allergies (yes/no; agent if yes)", "Binary / Categorical", "Allergy record"), ("Pending cultures at time of transfer (yes/no)", "Binary", "Microbiology system"), ("Culture-directed vs. empirical antibiotic therapy", "Binary", "Microbiology + clinical records"), ("Time of transfer (daytime 07:00–17:59 / overnight 18:00–06:59 / weekend)", "Categorical", "Transfer timestamp"), ("Receiving ward specialty (medical/surgical/specialist)", "Categorical", "Hospital records"), ("ICU discharge summary provided (yes/no/partial)", "Categorical", "Chart review"), ("Pharmacist involvement in ICU discharge (yes/no)", "Binary", "Pharmacy records"), ] for var, typ, src in vars_data: row = tbl_vars.add_row() set_cell_font(row.cells[0], var, size=10) set_cell_font(row.cells[1], typ, size=10) set_cell_font(row.cells[2], src, size=10) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 9 — ADJUDICATION # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("9. Adjudication of Antibiotic-Related Medication Errors", level=1) add_horizontal_rule() doc.add_heading("9.1 Error Classification", level=2) add_para( "All discrepancies between ICU and ward antibiotic prescriptions will be classified by the research pharmacist " "using the following framework:" ) tbl_err = doc.add_table(rows=8, cols=3) tbl_err.style = "Table Grid" shade_row(tbl_err.rows[0], "1F3864") for txt, cell in zip(["Error Type","Definition","Clinical Example"], tbl_err.rows[0].cells): set_cell_font(cell, txt, bold=True, color_hex="FFFFFF", size=11, center=True) err_data = [ ("Omission", "Antibiotic discontinued without documented clinical justification", "Meropenem for gram-negative bacteraemia not prescribed on ward transfer"), ("Commission", "New antibiotic started on ward without clear indication", "Empirical metronidazole added at transfer without documented infectious indication"), ("Dose error", "Wrong dose prescribed, not accounted for by renal/hepatic adjustment", "Vancomycin dose unchanged despite improvement in renal function"), ("Frequency error", "Dosing interval changed without documented renal/clinical justification", "Piperacillin-tazobactam 4.5g q6h changed to q8h without recorded reason"), ("Route error", "Inappropriate route change (IV left as IV when oral switch clinically appropriate, or vice versa)", "IV ciprofloxacin continued on ward when oral switch criteria met"), ("Duration/stop date error", "No stop date, review date, or treatment duration documented", "Flucloxacillin prescription with no documented duration or review"), ("De-escalation failure", "Broad-spectrum empirical agent not narrowed when culture data support de-escalation", "Meropenem continued when culture showed fully-susceptible E. coli"), ("Allergy-related error", "Antibiotic prescribed to patient with documented allergy to that agent or class", "Amoxicillin prescribed to patient with documented penicillin allergy"), ] for i, (t, d, e) in enumerate(err_data, 1): set_cell_font(tbl_err.rows[i].cells[0], t, bold=True, size=10) set_cell_font(tbl_err.rows[i].cells[1], d, size=10) set_cell_font(tbl_err.rows[i].cells[2], e, size=10) doc.add_heading("9.2 Severity Classification (NCC MERP Index)", level=2) add_para( "All identified ARMEs will be assigned a severity category using the NCC MERP Index (categories A–I). " "A severity table is provided in Appendix A. Errors of Category D or above will be defined as " "'clinically significant' for the purpose of primary and subgroup outcome analyses." ) doc.add_heading("9.3 Intentionality Assessment", level=2) add_para( "Discrepancies identified will be reviewed by a multidisciplinary adjudication panel comprising: " "(1) an ICU pharmacist, (2) the receiving ward pharmacist, (3) an infectious diseases physician, " "and (4) a clinical intensivist. Each panel member will independently classify each discrepancy as:" ) add_bullet("Intentional and clinically justified: e.g., deliberate de-escalation based on culture results, documented IV-to-oral switch decision, documented stop order on attainment of clinical cure") add_bullet("Intentional but potentially unjustified: clinical decision documented but discordant with microbiological or clinical evidence") add_bullet("Unintentional error: no clinical justification documented or identifiable; classified as an ARME") add_para( "Discordant classifications between reviewers will be resolved by majority vote. " "Inter-rater agreement will be quantified using Cohen's weighted kappa; a kappa ≥0.70 will be " "considered acceptable reliability." ) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 10 — SAMPLE SIZE # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("10. Sample Size and Power", level=1) add_horizontal_rule() add_para( "The sample size is calculated for the primary composite outcome. Based on the existing literature:" ) add_bullet("Expected ARME prevalence: ~40% (Wang et al. 2022: 58.15%; Martínez Pradeda et al. 2023: 18.14%; conservative estimate for antibiotic-specific errors: 35–45%)") add_bullet("Expected composite primary outcome rate in patients without ARME: approximately 15% (estimated from background ICU readmission and clinical failure rates in comparable populations)") add_bullet("Anticipated OR for the primary composite outcome in patients with vs. without ARME: 2.5 (clinically meaningful threshold)") add_bullet("Type I error (α): 0.05 (two-tailed)") add_bullet("Power (1-β): 80%") add_para( "Using the formula for two-proportion comparison with unequal group sizes (40% ARME: 60% no-ARME ratio):" ) add_para( " - Event rate in ARME group: 15% × OR 2.5 / [1 + 15% × (OR 2.5 – 1)] ≈ 30.6%\n" " - Event rate in no-ARME group: 15%\n" " - Required total n ≈ 340 patients (136 ARME, 204 no-ARME)\n" " - Adding 15% for loss-to-follow-up and ineligible transfers: n = 392", indent=0.3 ) add_para( "Target enrollment: 400 eligible ICU-to-ward transfers. With an estimated eligibility rate of " "approximately 70% of all ICU transfers (i.e., ~70% carry active antibiotics at discharge), " "this requires screening of approximately 570–600 total ICU transfers over the 12-month study period." ) add_para( "For the secondary regression-based analyses (Section 11), the rule of 10 events per predictor " "variable is applied. With an anticipated primary outcome rate of ~20% in the full cohort, " "400 patients yield ~80 events — sufficient for logistic regression models with up to 8 predictor variables." ) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 11 — STATISTICAL ANALYSIS PLAN # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("11. Statistical Analysis Plan", level=1) add_horizontal_rule() doc.add_heading("11.1 Analytical Populations", level=2) add_bullet("Full Analysis Set (FAS): All enrolled patients who meet inclusion/exclusion criteria, regardless of completeness of follow-up. Primary analysis population.", bold_prefix="Full Analysis Set (FAS): ") add_bullet("Per-Protocol Set (PPS): Patients with complete outcome data at 30 days. Used for sensitivity analysis.", bold_prefix="Per-Protocol Set (PPS): ") doc.add_heading("11.2 Descriptive Statistics", level=2) add_para("All baseline and outcome variables will be described as follows:") add_bullet("Continuous variables: mean (standard deviation) if normally distributed; median (interquartile range, IQR) if non-normal (Shapiro-Wilk test for normality)") add_bullet("Categorical variables: frequency (n) and proportion (%)") add_para("Comparisons between the ARME group and no-ARME group at baseline:") add_bullet("Continuous variables: independent samples t-test (normal) or Mann-Whitney U test (non-normal)") add_bullet("Categorical variables: chi-squared test or Fisher's exact test (expected cell count <5)") add_bullet("Standardised mean differences (SMDs) will be reported to assess covariate balance between groups") doc.add_heading("11.3 Primary Analysis — Multivariable Logistic Regression", level=2) add_para( "The association between ARME (binary exposure: yes/no) and the composite primary outcome (binary: yes/no) " "will be estimated using multivariable logistic regression. The model will include the following " "a priori-specified confounders:" ) add_bullet("Age (continuous)") add_bullet("APACHE II score at ICU admission (continuous)") add_bullet("Charlson Comorbidity Index (continuous)") add_bullet("Renal function at transfer: AKI stage (ordinal: none, KDIGO 1, 2, 3)") add_bullet("ICU length of stay (continuous)") add_bullet("Number of antibiotics at transfer (continuous)") add_bullet("ICU admission diagnosis (categorical: sepsis, post-operative, other)") add_bullet("Time of transfer (day vs. overnight/weekend)") add_para( "Results will be reported as adjusted odds ratios (aOR) with 95% confidence intervals and p-values. " "Statistical significance threshold: p <0.05 (two-tailed). The Hosmer-Lemeshow goodness-of-fit test " "will assess model calibration; the area under the receiver-operating-characteristic curve (AUROC) " "will assess model discrimination." ) doc.add_heading("11.4 Propensity Score Analysis", level=2) add_para( "To address the non-random nature of ARME occurrence and reduce confounding by indication, a propensity " "score (PS) analysis will be conducted as the principal causal-inference approach:" ) add_numbered("Propensity score estimation: A multivariable logistic regression model will be fitted with ARME (yes/no) as the outcome and all baseline covariates listed in Section 8.1 as predictors.") add_numbered("Matching: 1:1 nearest-neighbour propensity score matching with a caliper of 0.2 standard deviations of the logit of the PS, without replacement.") add_numbered("Balance assessment: Covariate balance in the matched cohort will be assessed using SMDs (threshold: SMD <0.10 for adequate balance); Love plots will be generated.") add_numbered("Outcome analysis in matched cohort: Conditional logistic regression for the primary binary outcome; paired t-test or Wilcoxon signed-rank test for continuous LOS outcome.") add_numbered("PS weighting (sensitivity): Inverse probability of treatment weighting (IPTW) using the average treatment effect (ATE) estimand as a sensitivity analysis to the matched analysis.") doc.add_heading("11.5 Time-to-Event Analysis (Secondary Outcomes)", level=2) add_para( "For the secondary outcome of time to hospital discharge (LOS), a competing-risks survival analysis " "will be performed using the Fine-Gray subdistribution hazard model, with in-hospital death treated " "as the competing event. Results will be reported as subdistribution hazard ratios (SHR) with 95% CIs." ) add_para( "For 30-day all-cause mortality (binary), and for CDI and MDR organism emergence, multivariable " "logistic regression models will be fitted using the same confounders as the primary analysis." ) add_para( "For 30-day hospital readmission, a logistic regression model adjusted for APACHE II, comorbidities, " "and discharge destination will be used." ) doc.add_heading("11.6 Subgroup Analyses", level=2) add_para( "Pre-specified subgroup analyses for the primary composite outcome will be conducted by:" ) add_bullet("ARME severity: clinically significant (NCC MERP D–I) vs. non-significant (A–C); interaction term tested in the main model") add_bullet("ARME type: separate analyses for each error category (omission, de-escalation failure, dose/route/frequency/duration, allergy-related)") add_bullet("Antibiotic class involved (beta-lactams, glycopeptides, carbapenems, aminoglycosides)") add_bullet("Patient renal function at transfer (AKI present vs. absent; eGFR <60 vs. ≥60 mL/min/1.73m²)") add_bullet("ICU admission diagnosis (sepsis/septic shock vs. post-operative vs. other)") add_para( "All subgroup analyses are exploratory and hypothesis-generating; no correction for multiple comparisons " "will be applied within subgroup analyses, but this limitation will be explicitly stated in reporting. " "Interaction tests (p <0.10 threshold for interaction) will be used to assess whether subgroup effects " "are statistically supported." ) doc.add_heading("11.7 Sensitivity Analyses", level=2) add_bullet("Complete-case analysis: repeating the primary analysis restricted to patients with complete 30-day follow-up") add_bullet("Multiple imputation: Multiple imputation by chained equations (MICE, m=20 imputations) for missing covariate data, assuming data are missing at random (MAR)") add_bullet("IPTW analysis: As described in Section 11.4") add_bullet("Alternative outcome definition: Using only the most severe component of the composite (ICU readmission or death) as a sensitivity primary outcome") add_bullet("Restricting to errors rated NCC MERP C or above (i.e., errors that reached the patient) as an alternative exposure definition") doc.add_heading("11.8 Software", level=2) add_para( "All analyses will be conducted in R (version ≥4.3; R Foundation for Statistical Computing, Vienna, Austria) " "and/or Stata (version ≥17; StataCorp, College Station, TX). Key packages: MatchIt (PS matching), " "twang (IPTW), cmprsk (competing risks), mice (multiple imputation). A fully annotated analysis " "script will be pre-registered alongside the protocol." ) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 12 — DATA MANAGEMENT # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("12. Data Management", level=1) add_horizontal_rule() add_numbered("All data will be collected using REDCap, hosted on institutional servers compliant with ISO 27001 and local data protection law.") add_numbered("Patient identifiers (name, date of birth, hospital number) will be stored in a separate master linking log accessible only to the PI and senior data manager, held under institutional data custodianship.") add_numbered("The analysis dataset will contain only study ID numbers — no direct identifiers.") add_numbered("Data will be retained for a minimum of 10 years post-publication in line with institutional research governance policy.") add_numbered("All electronic transfers of data will use encrypted channels (TLS 1.2 or higher).") add_numbered("Data queries will be generated automatically by REDCap validation rules and resolved within 5 working days.") add_numbered("A data dictionary defining all variables, permissible values, and coding conventions will be maintained and version-controlled.") doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 13 — ETHICAL CONSIDERATIONS # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("13. Ethical Considerations", level=1) add_horizontal_rule() doc.add_heading("13.1 Ethics Approval", level=2) add_para( "The study will be submitted for prospective approval to the relevant institutional Research Ethics " "Committee (REC) / Institutional Review Board (IRB) prior to commencement. No patient data will be " "collected until written ethics approval is received. Any protocol amendments will be submitted to " "the REC for review before implementation." ) doc.add_heading("13.2 Informed Consent", level=2) add_para( "Given that many ICU patients who are transferred to the ward may have residual cognitive impairment " "(ICU-acquired weakness, delirium, sedation effects), a three-tier consent approach is proposed:" ) add_bullet("Patients with capacity: written informed consent obtained prior to data collection, with a minimum cooling-off period of 24 hours.", bold_prefix="Tier 1 — Capable patients: ") add_bullet("Patients temporarily lacking capacity: consent obtained from a legally authorised surrogate/next of kin. Deferred patient consent will be sought once capacity is regained.", bold_prefix="Tier 2 — Temporarily incapacitated patients: ") add_bullet("Where surrogate consent is not feasible within 24 hours of transfer: the PI may apply for a waiver of consent from the REC for observational chart review data, given that: (a) the research involves no more than minimal risk, (b) it would be impracticable to conduct the study otherwise, and (c) findings will be reported only at group level.", bold_prefix="Tier 3 — Waiver of consent (if approved by REC): ") doc.add_heading("13.3 Duty of Care and Error Notification", level=2) add_para( "This study is observational. However, the research team holds an ethical duty of care. When a " "potentially clinically significant ARME is identified (NCC MERP Category D or above), the research " "pharmacist will notify the patient's treating team within 4 hours of identification. The treating " "team's response (correction, partial correction, or no action with documented rationale) will be " "recorded as a secondary data point but will not alter the ARME classification for analysis purposes. " "This approach is standard in prospective medication safety research." ) doc.add_heading("13.4 Risk to Participants", level=2) add_para( "This is a non-interventional observational study. No study procedure involves risk beyond routine " "clinical care. There is no experimental drug, device, or procedure. The sole study-specific activity " "is review of medical records and the pharmacist notification process described above, which is " "clinically beneficial." ) doc.add_heading("13.5 Confidentiality", level=2) add_para( "All study data will be pseudonymised at point of collection. No identifiable data will appear in " "publications or presentations. Only aggregate, group-level results will be reported." ) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 14 — QUALITY ASSURANCE # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("14. Quality Assurance and Monitoring", level=1) add_horizontal_rule() add_bullet("Training: All research pharmacists and nurses will complete a standardised training programme covering ARME classification, outcome ascertainment, and REDCap data entry prior to study commencement.") add_bullet("Standard Operating Procedures (SOPs): Written SOPs for each data collection activity will be developed, piloted in a 4-week feasibility phase, and revised before full recruitment.") add_bullet("Inter-rater reliability: ARME classification and adjudication: Cohen's kappa will be calculated monthly during the first three months; calibration meetings will be held if kappa falls below 0.70.") add_bullet("Data completeness monitoring: REDCap dashboards will be reviewed weekly. Missing data rates per variable will be monitored; variables with >20% missing data will trigger a data collection protocol review.") add_bullet("Independent monitoring: An independent data monitor (not part of the research team) will conduct source data verification on a 10% random sample of enrolled patients at 3-month intervals.") add_bullet("Protocol deviations: All deviations will be logged in REDCap and reported to the REC if material.") doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 15 — LIMITATIONS # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("15. Limitations and Mitigation Strategies", level=1) add_horizontal_rule() tbl_lim = doc.add_table(rows=6, cols=3) tbl_lim.style = "Table Grid" shade_row(tbl_lim.rows[0], "1F3864") for txt, cell in zip(["Limitation","Impact","Mitigation"], tbl_lim.rows[0].cells): set_cell_font(cell, txt, bold=True, color_hex="FFFFFF", size=11, center=True) lims = [ ("Residual confounding", "Unobserved differences between patients with and without ARMEs may bias outcome associations", "Propensity score matching and IPTW; sensitivity analyses; transparent reporting of unmeasured confounders"), ("Outcome attribution", "Adverse outcomes may be caused by underlying illness rather than the error", "Causality assessed by structured algorithm (Naranjo Scale); MDT adjudication for primary outcome components"), ("Intentional vs. unintentional classification", "Some de-escalation decisions may be underdocumented, misclassifying intentional actions as errors", "Dual-blind pharmacist review + MDT adjudication panel; Cohen's kappa monitoring; SOP-guided criteria"), ("Hawthorne effect", "Awareness of pharmacist review may improve ward prescribing behaviour during the study period, underestimating true baseline error rates", "Documented in limitations; compare early vs. late recruitment period error rates as a proxy check"), ("Single/limited-centre generalisability", "Results may not generalise to lower-resource or differently organised healthcare systems", "Enrol ≥2 ICU types; describe institutional context in detail; encourage multi-site replication"), ("Loss to follow-up for 30-day outcomes", "Patients discharged early may be lost to 30-day follow-up", "Active 30-day follow-up via hospital records, GP notification, or phone contact; multiple imputation for missing outcomes"), ] for i, (lim, imp, mit) in enumerate(lims, 1): set_cell_font(tbl_lim.rows[i].cells[0], lim, bold=True, size=10) set_cell_font(tbl_lim.rows[i].cells[1], imp, size=10) set_cell_font(tbl_lim.rows[i].cells[2], mit, size=10) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 16 — DISSEMINATION # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("16. Dissemination Plan", level=1) add_horizontal_rule() add_bullet("Pre-registration: This protocol will be registered on ClinicalTrials.gov and/or the ISRCTN registry prior to first patient enrolment. The statistical analysis plan will be pre-registered and time-stamped.") add_bullet("Publications: Primary results will be submitted to a peer-reviewed journal in the fields of clinical pharmacology, intensive care medicine, or patient safety (e.g., Critical Care Medicine, BMJ Quality & Safety, Pharmacotherapy, Infection Control & Hospital Epidemiology).") add_bullet("Conference presentations: Preliminary findings will be presented at national and international critical care and infectious disease conferences.") add_bullet("Clinical translation: Findings will be shared with the hospital's Antimicrobial Stewardship Committee and Patient Safety Committee to inform local policy on pharmacist-led ICU discharge medication reconciliation.") add_bullet("Open data: A de-identified, anonymised analysis dataset will be made available via an institutional data repository upon publication, in accordance with the journal's data-sharing policy and ethical approvals.") doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # SECTION 17 — REFERENCES # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("17. References", level=1) add_horizontal_rule() refs = [ "1. Bourne RS, Jennings JK, Panagioti M, Hodkinson A, Sutton A, Ashcroft DM. Medication-related interventions to improve medication safety and patient outcomes on transition from adult intensive care settings: a systematic review and meta-analysis. BMJ Qual Saf. 2022;31(8):609–622. doi:10.1136/bmjqs-2021-013760. PMID: 35042765.", "2. Wang Y, Chen L, Yu C, et al. Evaluation of medication risk at the transition of care: a multicentre, retrospective, epidemiological study. BMJ Open Qual. 2022;11(2):e001614. doi:10.1136/bmjoq-2021-001614. PMC: PMC9013992.", "3. Martínez Pradeda A, Albiñana Pérez MS, Fernández Oliveira C, Díaz Lamas A, Rey Abalo M, Margusino-Framiñán L. Medication reconciliation for patients after their discharge from intensive care unit to the hospital ward. Farm Hosp. 2023;47(3):100–105. doi:10.1016/j.farma.2023.02.005. PMID: 37059685.", "4. Tully AP, Hammond DA, Li C, et al. Evaluation of medication errors at the transition of care from an ICU to a non-ICU location. Crit Care Med. 2019;47(4):543–549. doi:10.1097/CCM.0000000000003633.", "5. National Coordinating Council for Medication Error Reporting and Prevention (NCC MERP). NCC MERP Index for Categorizing Medication Errors. 2001. Available at: https://www.nccmerp.org/types-medication-errors.", "6. Henry Basil J, Premakumar CM, Mhd Ali A. Prevalence, causes and severity of medication administration errors in the neonatal intensive care unit: a systematic review and meta-analysis. Drug Saf. 2022;45(12):1375–1388. doi:10.1007/s40264-022-01238-4. PMID: 36192535.", "7. Schumock GT, Thornton JP. Focusing on the preventability of adverse drug reactions. Hosp Pharm. 1992;27(6):538.", "8. Naranjo CA, Busto U, Sellers EM, et al. A method for estimating the probability of adverse drug reactions. Clin Pharmacol Ther. 1981;30(2):239–245. doi:10.1038/clpt.1981.154.", "9. Fine JP, Gray RJ. A proportional hazards model for the subdistribution of a competing risk. J Am Stat Assoc. 1999;94(446):496–509. doi:10.1080/01621459.1999.10474144.", "10. Austin PC. An introduction to propensity score methods for reducing the effects of confounding in observational studies. Multivariate Behav Res. 2011;46(3):399–424. doi:10.1080/00273171.2011.568786.", "11. WHO Collaborating Centre for Patient Safety Solutions. Assuring Medication Accuracy at Transitions in Care. Patient Safety Solutions. 2007;1(6).", "12. The Economic Burden of Antibiotic Resistance: A Systematic Review and Meta-Analysis. PLoS One. 2023. PMC: PMC10166566.", "13. von Elm E, Altman DG, Egger M, et al. The Strengthening the Reporting of Observational Studies in Epidemiology (STROBE) statement: guidelines for reporting observational studies. PLoS Med. 2007;4(10):e296. doi:10.1371/journal.pmed.0040296.", "14. Harris PA, Taylor R, Thielke R, et al. Research electronic data capture (REDCap) — A metadata-driven methodology and workflow process for providing translational research informatics support. J Biomed Inform. 2009;42(2):377–381. doi:10.1016/j.jbi.2008.08.010.", ] for ref in refs: p = doc.add_paragraph() p.paragraph_format.left_indent = Inches(0.35) p.paragraph_format.first_line_indent = Inches(-0.35) p.paragraph_format.space_after = Pt(4) r = p.add_run(ref) r.font.name = "Times New Roman" r.font.size = Pt(10.5) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # APPENDIX A — NCC MERP # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("Appendix A — NCC MERP Index: Severity Classification of Medication Errors", level=1) add_horizontal_rule() tbl_ncc = doc.add_table(rows=10, cols=3) tbl_ncc.style = "Table Grid" shade_row(tbl_ncc.rows[0], "1F3864") for txt, cell in zip(["Category","Description","Clinically Significant?"], tbl_ncc.rows[0].cells): set_cell_font(cell, txt, bold=True, color_hex="FFFFFF", size=11, center=True) ncc = [ ("A", "Circumstances or events that have the capacity to cause error (near miss; error not yet occurred)", "No"), ("B", "Error occurred but did not reach the patient", "No"), ("C", "Error reached the patient but is unlikely to cause harm", "No"), ("D", "Error reached the patient and could have necessitated monitoring to confirm no harm was caused, and/or necessitated an intervention to preclude harm", "YES"), ("E", "Error may have contributed to or resulted in temporary harm to the patient and required an intervention", "YES"), ("F", "Error may have contributed to or resulted in temporary harm to the patient and required initial or prolonged hospitalisation", "YES"), ("G", "Error may have contributed to or resulted in permanent patient harm", "YES"), ("H", "Error required intervention necessary to sustain patient's life", "YES"), ("I", "Error may have contributed to or resulted in the patient's death", "YES"), ] fill_colors = ["FFFFFF","FFFFFF","FFFFFF","FFF2CC","FFCCCC","FFCCCC","FF9999","FF6666","FF0000"] for i, ((cat, desc, sig), fill) in enumerate(zip(ncc, fill_colors), 1): for cell in tbl_ncc.rows[i].cells: tc = cell._tc tcPr = tc.get_or_add_tcPr() shd = OxmlElement("w:shd") shd.set(qn("w:val"), "clear") shd.set(qn("w:color"), "auto") shd.set(qn("w:fill"), fill) tcPr.append(shd) set_cell_font(tbl_ncc.rows[i].cells[0], cat, bold=True, size=11, center=True) set_cell_font(tbl_ncc.rows[i].cells[1], desc, size=10) set_cell_font(tbl_ncc.rows[i].cells[2], sig, bold=(sig=="YES"), size=11, center=True, color_hex=("CC0000" if sig=="YES" else None)) add_para("\nCategories D–I = Clinically Significant Errors. Primary outcome and subgroup analyses will use this threshold.", italic=True) doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # APPENDIX B — CRF OUTLINE # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("Appendix B — Case Report Form (CRF) Outline for Objective 3", level=1) add_horizontal_rule() crf_sections = [ ("Module 1: Enrolment and Baseline", [ "Study ID / Date of enrolment", "Date and time of ICU-to-ward transfer", "ICU type (medical / surgical / mixed)", "Receiving ward specialty", "Patient demographics (age, sex, weight, height)", "Charlson Comorbidity Index components", "APACHE II score (from ICU admission)", "SOFA score (at day of transfer)", "ICU LOS (days)", "Mechanical ventilation (yes/no; days)", "Vasopressor use (yes/no)", "AKI at transfer (KDIGO stage 0/1/2/3); serum creatinine; eGFR", "Hepatic function (Child-Pugh if applicable)", "Total medications at transfer (count)", "Drug allergy documentation (yes/no)", ]), ("Module 2: Antibiotic and ARME Data", [ "List of antibiotics active at ICU transfer (drug, dose, route, frequency, start date, stop date/duration, TDM required)", "List of antibiotics as prescribed on ward (drug, dose, route, frequency)", "Discrepancies identified (per antibiotic: type, ARME category)", "NCC MERP severity classification (A–I)", "Preventability classification (Schumock-Thornton)", "Adjudication outcome (intentional/unintentional)", "Cohen's kappa for this patient's errors", "Error notification to treating team (yes/no; time; response)", "Pending cultures at transfer (yes/no; organism if preliminary result available)", "Culture-directed vs empirical therapy (yes/no)", ]), ("Module 3: Follow-Up Outcomes", [ "Day 7 review: antibiotic changes (yes/no; reason); new cultures; clinical status", "Day 14 review: clinical failure (yes/no; definition met); CDI (yes/no); new MDR organism (yes/no; species)", "Day 30 review: composite primary outcome (yes/no; components met); antibiotic-related ADE (yes/no; description; Naranjo score)", "ICU readmission (yes/no; date; reason; planned vs unplanned)", "In-hospital mortality (yes/no; date; primary cause)", "Antibiotic-associated nephrotoxicity (yes/no; KDIGO stage; implicated agent)", "Ward LOS post-transfer (days)", "Hospital discharge date / in-hospital death date", "30-day all-cause mortality (yes/no; source of ascertainment)", "30-day hospital readmission (yes/no; reason; date)", ]), ] for mod_title, items in crf_sections: doc.add_heading(mod_title, level=2) for item in items: add_bullet(item) doc.add_paragraph() doc.add_page_break() # ══════════════════════════════════════════════════════════════════════════════ # APPENDIX C — CAUSALITY ALGORITHM # ══════════════════════════════════════════════════════════════════════════════ doc.add_heading("Appendix C — Causality Assessment Algorithm (Naranjo Scale)", level=1) add_horizontal_rule() add_para("The Naranjo Adverse Drug Reaction Probability Scale will be used to assess causality between an identified ARME and a clinically observed adverse event. Only antibiotic-related ADEs scoring ≥5 (Probable) or ≥9 (Definite) will be counted toward the primary composite outcome.") tbl_nar = doc.add_table(rows=11, cols=4) tbl_nar.style = "Table Grid" shade_row(tbl_nar.rows[0], "2F5496") for txt, cell in zip(["Question","Yes","No","Do Not Know"], tbl_nar.rows[0].cells): set_cell_font(cell, txt, bold=True, color_hex="FFFFFF", size=10, center=True) naranjo = [ ("1. Are there previous conclusive reports on this reaction?", "+1","0","0"), ("2. Did the adverse event appear after the antibiotic was given?", "+2","-1","0"), ("3. Did the adverse reaction improve when the drug was discontinued?", "+1","0","0"), ("4. Did the reaction reappear when the drug was re-administered?", "+2","-1","0"), ("5. Are there alternative causes that could have caused the reaction?","-1","+2","0"), ("6. Did the reaction reappear when placebo was given?", "-1","+1","0"), ("7. Was the drug detected in blood/fluids in toxic concentrations?", "+1","0","0"), ("8. Was the reaction more severe when dose increased, or less when decreased?","+1","0","0"), ("9. Did patient have similar reaction to same or similar drug before?", "+1","0","0"), ("10. Was the adverse event confirmed by objective evidence?", "+1","0","0"), ] for i, (q, y, n, dk) in enumerate(naranjo, 1): set_cell_font(tbl_nar.rows[i].cells[0], q, size=9) set_cell_font(tbl_nar.rows[i].cells[1], y, size=10, center=True, bold=True) set_cell_font(tbl_nar.rows[i].cells[2], n, size=10, center=True) set_cell_font(tbl_nar.rows[i].cells[3], dk, size=10, center=True) add_para("\nInterpretation: Total score ≥9 = Definite; 5–8 = Probable; 1–4 = Possible; ≤0 = Doubtful.", bold=True) add_para("For this protocol, only Probable (≥5) and Definite (≥9) causal links will qualify as antibiotic-related ADEs for the primary composite outcome.", italic=True) # ────────────────────────────────────────────────────────────────────────────── out_path = "/tmp/workspace/obj3-protocol/Objective3_Protocol_ARMEs_ICU_Ward_Transition.docx" doc.save(out_path) print(f"SUCCESS: Saved to {out_path}") PYEOF python3 /tmp/workspace/obj3-protocol/build_protocol.py
~/obj3-protocol/build_protocol.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/obj3-protocol/build_protocol.py'
python3 /tmp/workspace/obj3-protocol/build_protocol.py
~/obj3-protocol/build_protocol.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/obj3-protocol/build_protocol.py'
python3 /tmp/workspace/obj3-protocol/build_protocol.py
~/obj3-protocol/build_protocol.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/obj3-protocol/build_protocol.py'
python3 /tmp/workspace/obj3-protocol/build_protocol.py
ls -lh /tmp/workspace/obj3-protocol/
Objective3 Protocol ARMEs ICU Ward Transition
Word Document · DOCX
| Section | Content |
|---|---|
| Title Page | Protocol version, date, status, PI/co-I fields, ethics/registration placeholders |
| 1. Abbreviations | Full two-column table (28 terms) |
| 2. Background | Scientific rationale (3 subsections): ICU transition risk, clinical consequences of ARMEs, evidence gap |
| 3. Objective | Primary objective statement + 4 specific testable hypotheses (H1–H4) |
| 4. Study Design | Prospective observational cohort; STROBE reporting |
| 5. Study Population | Inclusion/exclusion criteria; setting and study period |
| 6. Outcome Measures | Composite primary outcome (3 components in a table); 7 secondary outcomes (tabulated); pre-specified subgroup analyses |
| 7. Data Collection | Day 0 pharmacist review procedure; 30-day follow-up schedule; REDCap data capture |
| 8. Data Variables | 22-row variable table (type, scale, source) |
| 9. Adjudication | 8-category ARME classification table with clinical examples; NCC MERP severity; intentionality panel; kappa threshold |
| 10. Sample Size | Power calculation with assumptions; target n = 400; EPV check for regression |
| 11. Statistical Analysis Plan | FAS/PPS populations; descriptive stats; multivariable logistic regression; propensity score matching + IPTW; Fine-Gray competing-risks model; subgroup tests; 5 sensitivity analyses; software |
| 12. Data Management | REDCap; pseudonymisation; retention; encryption; data dictionary |
| 13. Ethics | Three-tier consent; duty-of-care notification protocol; minimal risk justification; confidentiality |
| 14. Quality Assurance | Training; SOPs; kappa monitoring; data completeness dashboards; source data verification |
| 15. Limitations | 6-row table (limitation / impact / mitigation) |
| 16. Dissemination | Pre-registration; publications; conferences; policy translation; open data |
| 17. References | 14 fully formatted references |
| Appendix A | NCC MERP Index — colour-coded severity table (A–I) |
| Appendix B | Three-module CRF outline (enrolment, ARME data, follow-up outcomes) |
| Appendix C | Naranjo Adverse Drug Reaction Probability Scale with scoring grid and interpretation |
Make a presentation slide deck on the study design and Objective 3 rationale
cat > /tmp/workspace/obj3-protocol/build_deck.py << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.oxml.ns import qn from pptx.oxml import parse_xml from lxml import etree from io import BytesIO # ── Palette ──────────────────────────────────────────────────────────────────── NAVY = RGBColor(0x1F, 0x38, 0x64) STEEL = RGBColor(0x2F, 0x54, 0x96) ACCENT = RGBColor(0x00, 0x70, 0xC0) GOLD = RGBColor(0xED, 0x7D, 0x31) RED_SOFT = RGBColor(0xC0, 0x00, 0x00) GREEN_SOFT = RGBColor(0x37, 0x86, 0x47) WHITE = RGBColor(0xFF, 0xFF, 0xFF) LIGHT_GREY = RGBColor(0xF2, 0xF2, 0xF2) MID_GREY = RGBColor(0xD9, 0xD9, 0xD9) DARK_GREY = RGBColor(0x40, 0x40, 0x40) YELLOW_SOFT = RGBColor(0xFF, 0xFF, 0xCC) TEAL = RGBColor(0x00, 0x70, 0x70) W = Inches(13.333) H = Inches(7.5) prs = Presentation() prs.slide_width = W prs.slide_height = H blank = prs.slide_layouts[6] # ── Helpers ─────────────────────────────────────────────────────────────────── def rgb_hex(rgb): return "%02X%02X%02X" % (rgb.r, rgb.g, rgb.b) def add_rect(slide, x, y, w, h, fill_rgb=None, line_rgb=None, line_width_pt=0): shape = slide.shapes.add_shape(1, x, y, w, h) # MSO_SHAPE_TYPE.RECTANGLE=1 if fill_rgb: shape.fill.solid() shape.fill.fore_color.rgb = fill_rgb else: shape.fill.background() if line_rgb: shape.line.color.rgb = line_rgb shape.line.width = Pt(line_width_pt) else: shape.line.fill.background() return shape def add_tb(slide, x, y, w, h, text, size=18, bold=False, color=DARK_GREY, align=PP_ALIGN.LEFT, italic=False, wrap=True, v_anchor=None, margin=True): tb = slide.shapes.add_textbox(x, y, w, h) tf = tb.text_frame tf.word_wrap = wrap if not margin: tf.margin_left = tf.margin_right = tf.margin_top = tf.margin_bottom = 0 if v_anchor: tf.vertical_anchor = v_anchor p = tf.paragraphs[0] p.alignment = align r = p.add_run() r.text = text r.font.name = "Calibri" r.font.size = Pt(size) r.font.bold = bold r.font.italic = italic r.font.color.rgb = color return tb def add_tb_lines(slide, x, y, w, h, lines, default_size=18, default_color=DARK_GREY, default_bold=False, align=PP_ALIGN.LEFT, wrap=True, margin=True, line_spacing=None): """ lines = list of (text, size, bold, color, italic) or just strings """ tb = slide.shapes.add_textbox(x, y, w, h) tf = tb.text_frame tf.word_wrap = wrap if not margin: tf.margin_left = tf.margin_right = tf.margin_top = tf.margin_bottom = 0 first = True for item in lines: if isinstance(item, str): text, sz, bd, col, it = item, default_size, default_bold, default_color, False else: text = item[0] sz = item[1] if len(item)>1 else default_size bd = item[2] if len(item)>2 else default_bold col = item[3] if len(item)>3 else default_color it = item[4] if len(item)>4 else False if first: p = tf.paragraphs[0] first = False else: p = tf.add_paragraph() p.alignment = align if line_spacing: p.line_spacing = line_spacing r = p.add_run() r.text = text r.font.name = "Calibri" r.font.size = Pt(sz) r.font.bold = bd r.font.italic = it r.font.color.rgb = col return tb def add_bullet_box(slide, x, y, w, h, bullets, bullet_char="▸ ", size=16, color=DARK_GREY, bold_prefix=False, indent=0.15, line_spacing_pt=None): tb = slide.shapes.add_textbox(x, y, w, h) tf = tb.text_frame tf.word_wrap = True tf.margin_left = Inches(0.05) tf.margin_right = Inches(0.05) tf.margin_top = Inches(0.05) tf.margin_bottom= Inches(0.05) first = True for b in bullets: if first: p = tf.paragraphs[0] first = False else: p = tf.add_paragraph() p.alignment = PP_ALIGN.LEFT p.paragraph_format.left_margin = Inches(indent) p.paragraph_format.first_line_indent = Inches(-indent) if line_spacing_pt: p.line_spacing = Pt(line_spacing_pt) if isinstance(b, tuple): prefix, rest = b r1 = p.add_run() r1.text = bullet_char + prefix r1.font.name = "Calibri" r1.font.size = Pt(size) r1.font.bold = True r1.font.color.rgb = NAVY r2 = p.add_run() r2.text = rest r2.font.name = "Calibri" r2.font.size = Pt(size) r2.font.bold = False r2.font.color.rgb = color else: r = p.add_run() r.text = bullet_char + b r.font.name = "Calibri" r.font.size = Pt(size) r.font.bold = False r.font.color.rgb = color return tb def slide_header(slide, title, subtitle=None, bar_color=NAVY): # Top bar add_rect(slide, 0, 0, W, Inches(1.15), fill_rgb=bar_color) # Slide number strip at bottom add_rect(slide, 0, Inches(7.2), W, Inches(0.3), fill_rgb=MID_GREY) add_tb(slide, Inches(0.3), Inches(7.22), Inches(12.5), Inches(0.25), "Antibiotic-Related Medication Errors | ICU-to-Ward Transitions · Objective 3 Protocol", size=8, color=DARK_GREY, italic=True) # Title add_tb(slide, Inches(0.4), Inches(0.08), Inches(12.0), Inches(0.72), title, size=28, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE, margin=False) if subtitle: add_tb(slide, Inches(0.4), Inches(0.82), Inches(12.0), Inches(0.3), subtitle, size=13, color=RGBColor(0xBF, 0xD7, 0xFF), italic=True) def divider_line(slide, y, color=STEEL, width_pt=1.0): import pptx.shapes.connector as conn from pptx.util import Emu ln = slide.shapes.add_connector(1, Inches(0.4), y, Inches(12.93), y) ln.line.color.rgb = color ln.line.width = Pt(width_pt) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 1 — TITLE SLIDE # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) # Full dark background add_rect(slide, 0, 0, W, H, fill_rgb=NAVY) # Accent bar bottom add_rect(slide, 0, Inches(6.8), W, Inches(0.7), fill_rgb=STEEL) # Diagonal accent strip add_rect(slide, 0, Inches(6.2), W, Inches(0.08), fill_rgb=GOLD) add_tb(slide, Inches(0.8), Inches(0.8), Inches(11.7), Inches(0.5), "STUDY PROTOCOL", size=16, bold=True, color=GOLD, align=PP_ALIGN.CENTER) add_tb(slide, Inches(0.5), Inches(1.4), Inches(12.3), Inches(1.6), "Assessment of Antibiotic-Related Medication\nErrors During ICU-to-Ward Transitions", size=36, bold=True, color=WHITE, align=PP_ALIGN.CENTER, wrap=True) add_tb(slide, Inches(0.5), Inches(3.1), Inches(12.3), Inches(0.5), "Objective 3: Association with Adverse Patient Outcomes", size=20, bold=False, color=RGBColor(0xBF, 0xD7, 0xFF), align=PP_ALIGN.CENTER) add_tb(slide, Inches(0.5), Inches(3.8), Inches(12.3), Inches(0.35), "Prospective Observational Cohort Study", size=16, italic=True, color=MID_GREY, align=PP_ALIGN.CENTER) add_tb(slide, Inches(0.5), Inches(6.85), Inches(12.3), Inches(0.35), "Version 1.0 | 19 July 2026 | [Institution Name] | Draft — For Ethical Review", size=12, color=MID_GREY, align=PP_ALIGN.CENTER) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 2 — PRESENTATION OUTLINE # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Presentation Outline") items = [ ("01", "Background & Problem Statement", "Why ICU-to-ward transitions are high-risk for antibiotic errors"), ("02", "Study Design Overview", "Design, setting, population and overall architecture"), ("03", "All Four Study Objectives", "Incidence · Predictors · Outcomes · Economic burden"), ("04", "Objective 3 — Scientific Rationale", "Clinical consequences of ARMEs and the evidence gap"), ("05", "Objective 3 — Outcome Measures", "Primary composite, secondary outcomes, subgroup analyses"), ("06", "Study Population & Data Collection", "Eligibility, pharmacist review, follow-up protocol"), ("07", "ARME Classification & Adjudication", "Error types, NCC MERP severity, MDT panel"), ("08", "Sample Size & Statistical Analysis", "Power calculation, regression, propensity scoring"), ("09", "Ethical Considerations", "Consent framework, duty of care, data governance"), ("10", "Significance & Expected Impact", "How findings will change clinical practice"), ] box_w = Inches(5.8) box_h = Inches(0.54) x_left = Inches(0.4) x_right = Inches(6.9) y_start = Inches(1.28) y_gap = Inches(0.565) for i, (num, title, sub) in enumerate(items): col = 0 if i < 5 else 1 row = i if i < 5 else i - 5 x = x_left if col == 0 else x_right y = y_start + row * y_gap # number box add_rect(slide, x, y, Inches(0.42), box_h, fill_rgb=NAVY) add_tb(slide, x, y, Inches(0.42), box_h, num, size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE, margin=False) # content box add_rect(slide, x+Inches(0.44), y, box_w-Inches(0.44), box_h, fill_rgb=WHITE, line_rgb=MID_GREY, line_width_pt=0.5) add_tb_lines(slide, x+Inches(0.52), y+Inches(0.04), box_w-Inches(0.55), box_h-Inches(0.08), [(title, 13, True, NAVY), (sub, 10, False, DARK_GREY)]) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 3 — BACKGROUND: ICU-to-Ward = High-Risk Interface # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Background: ICU-to-Ward — A High-Risk Medication Interface", subtitle="Antibiotic regimens are among the most complex to manage across care transitions") # Left: stat boxes stats = [ ("58%", "of ICU patients had ≥1 medication\nerror at transfer", "Wang et al., 2022\nn=1,546 patients"), ("18%", "had a confirmed reconciliation\nerror at ICU discharge", "Martínez Pradeda et al., 2023\nn=452 patients"), ("1.88", "medication errors per patient\nat ICU-to-ward transition", "Tully et al., 2019\nn=985 patients"), ] bx = Inches(0.35) by = Inches(1.35) bw = Inches(3.1) bh = Inches(1.55) bg = Inches(0.12) colors = [NAVY, STEEL, ACCENT] for i, (stat, desc, src) in enumerate(stats): add_rect(slide, bx, by + i*(bh+bg), bw, bh, fill_rgb=colors[i]) add_tb(slide, bx+Inches(0.08), by + i*(bh+bg)+Inches(0.1), bw-Inches(0.16), Inches(0.65), stat, size=36, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_tb(slide, bx+Inches(0.08), by + i*(bh+bg)+Inches(0.72), bw-Inches(0.16), Inches(0.52), desc, size=12, color=WHITE, align=PP_ALIGN.CENTER, wrap=True) add_tb(slide, bx+Inches(0.08), by + i*(bh+bg)+Inches(1.25), bw-Inches(0.16), Inches(0.25), src, size=9, color=MID_GREY, align=PP_ALIGN.CENTER, italic=True) # Divider add_rect(slide, Inches(3.6), Inches(1.3), Inches(0.04), Inches(5.6), fill_rgb=MID_GREY) # Right: antibiotic-specific facts add_tb(slide, Inches(3.82), Inches(1.3), Inches(9.1), Inches(0.35), "Why antibiotics are disproportionately affected:", size=15, bold=True, color=NAVY) bullets = [ "Anti-infectives are the 2nd most error-prone drug class at ICU transfers (14.84% of all errors)", "Beta-lactams account for 37.8% · Peptides (vancomycin, colistin) account for 23.7% of anti-infective errors", "Most common error types: Route of administration (37.9%) · Dose error (18.0%) · Frequency error (9.2%)", "De-escalation failure: broad-spectrum agents continued despite culture-guided narrow-spectrum options", "Narrow therapeutic index agents (vancomycin, aminoglycosides) require TDM — often not maintained on ward", "High-alert medications involved in 19.2% of reconciliation errors at ICU-to-ward transition", ] add_bullet_box(slide, Inches(3.82), Inches(1.72), Inches(9.1), Inches(4.7), bullets, size=14, color=DARK_GREY, line_spacing_pt=18) # Source note add_tb(slide, Inches(3.82), Inches(6.7), Inches(9.1), Inches(0.3), "Sources: Wang et al. BMJ Open Qual 2022; Martínez Pradeda et al. Farm Hosp 2023; Tully et al. Crit Care Med 2019", size=9, color=RGBColor(0x80,0x80,0x80), italic=True) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 4 — STUDY DESIGN OVERVIEW # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Overall Study Design", subtitle="Prospective Observational Cohort Study — 12 Months") # Design summary boxes (top row) design_items = [ ("Design", "Prospective\nObservational Cohort"), ("Setting", "Adult ICU(s)\nTertiary Care Hospital"), ("Duration", "12 Consecutive\nMonths"), ("Population", "ICU patients\nwith ≥1 antibiotic\nat time of transfer"), ("Target n", "400 eligible\nICU-to-ward\ntransfers"), ("Reporting", "STROBE\nGuidelines"), ] bw2 = Inches(1.95) bh2 = Inches(1.3) bx2 = Inches(0.35) bg2 = Inches(0.15) by2 = Inches(1.28) col_colors = [NAVY, NAVY, NAVY, STEEL, STEEL, STEEL] for i, (lbl, val) in enumerate(design_items): add_rect(slide, bx2 + i*(bw2+bg2), by2, bw2, Inches(0.35), fill_rgb=col_colors[i]) add_tb(slide, bx2 + i*(bw2+bg2), by2, bw2, Inches(0.35), lbl, size=11, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE, margin=False) add_rect(slide, bx2 + i*(bw2+bg2), by2+Inches(0.35), bw2, bh2-Inches(0.35), fill_rgb=WHITE, line_rgb=col_colors[i], line_width_pt=1.0) add_tb(slide, bx2 + i*(bw2+bg2)+Inches(0.06), by2+Inches(0.4), bw2-Inches(0.12), bh2-Inches(0.44), val, size=13, bold=True, color=col_colors[i], align=PP_ALIGN.CENTER, wrap=True) # Flow diagram: study flow flow_y = Inches(2.75) flow_boxes = [ (Inches(0.35), "SCREENING\nAll ICU transfers daily\n(pharmacist review)", NAVY), (Inches(3.05), "ENROLMENT\nEligibility confirmed\nConsent obtained", STEEL), (Inches(5.75), "BASELINE (Day 0)\nARME identification\n& classification", ACCENT), (Inches(8.45), "FOLLOW-UP\nDays 1–7 (daily)\nDays 14 & 30", TEAL), (Inches(11.15), "ANALYSIS\nOutcomes & cost\ndata linkage", GREEN_SOFT), ] fbw = Inches(2.45) fbh = Inches(1.55) for x, txt, col in flow_boxes: add_rect(slide, x, flow_y, fbw, fbh, fill_rgb=col) add_tb(slide, x+Inches(0.05), flow_y+Inches(0.05), fbw-Inches(0.1), fbh-Inches(0.1), txt, size=13, bold=False, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE, wrap=True) # Arrows between boxes for i in range(4): ax = Inches(0.35) + i*(fbw + Inches(0.25)) + fbw + Inches(0.02) ay = flow_y + fbh/2 - Inches(0.02) add_tb(slide, ax, ay, Inches(0.22), Inches(0.25), "➜", size=18, color=GOLD, align=PP_ALIGN.CENTER) # 4 objectives row obj_y = Inches(4.52) obj_items = [ ("Objective 1", "Incidence, Severity\n& Preventability\nof ARMEs", NAVY), ("Objective 2", "Predictors of\nARMEs at\nICU Transfer", STEEL), ("Objective 3", "Association with\nAdverse Patient\nOutcomes ★", RED_SOFT), ("Objective 4", "Healthcare &\nEconomic\nBurden", GREEN_SOFT), ] obw = Inches(2.8) obh = Inches(1.7) obg = Inches(0.45) obx = Inches(0.65) for i, (title2, desc2, col2) in enumerate(obj_items): add_rect(slide, obx + i*(obw+obg), obj_y, obw, Inches(0.38), fill_rgb=col2) add_tb(slide, obx + i*(obw+obg), obj_y, obw, Inches(0.38), title2, size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE, margin=False) add_rect(slide, obx + i*(obw+obg), obj_y+Inches(0.38), obw, obh-Inches(0.38), fill_rgb=WHITE if col2!=RED_SOFT else RGBColor(0xFF,0xF0,0xF0), line_rgb=col2, line_width_pt=1.5) add_tb(slide, obx + i*(obw+obg)+Inches(0.08), obj_y+Inches(0.44), obw-Inches(0.16), obh-Inches(0.5), desc2, size=13, bold=(col2==RED_SOFT), color=col2, align=PP_ALIGN.CENTER, wrap=True) add_tb(slide, Inches(0.35), Inches(6.35), Inches(12.6), Inches(0.3), "★ This presentation focuses on Objective 3", size=11, italic=True, color=RED_SOFT) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 5 — OBJ 3 SCIENTIFIC RATIONALE # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Objective 3: Scientific Rationale", subtitle="How antibiotic errors at transition lead to patient harm — five distinct pathways") pathway_data = [ ("Treatment\nFailure", "Omission or interruption\nof effective therapy →\ninfection relapse / sepsis", RED_SOFT), ("Drug\nToxicity", "Vancomycin/aminoglycosides\nnot monitored → nephrotoxicity,\noterotoxicity, AKI", GOLD), ("Resistance\nSelection", "Inappropriate broad-spectrum\ncontinuation → MDR organisms,\nC. difficile infection", RGBColor(0x70,0x30,0xA0)), ("Allergy\nReaction", "Allergy record lost at\ntransfer → anaphylaxis\nor immune-mediated ADE", RGBColor(0x00,0x70,0x70)), ("Escalation\nFailure", "De-escalation not performed\nwhen culture data available →\nprolonged resistance pressure", RGBColor(0x80,0x40,0x00)), ] add_tb(slide, Inches(0.35), Inches(1.3), Inches(12.6), Inches(0.35), "Five Harm Pathways from ARMEs at ICU-to-Ward Transfer:", size=14, bold=True, color=NAVY) pw = Inches(2.35) ph = Inches(2.4) pg = Inches(0.18) px = Inches(0.35) py = Inches(1.72) for i, (name, desc, col) in enumerate(pathway_data): add_rect(slide, px + i*(pw+pg), py, pw, Inches(0.55), fill_rgb=col) add_tb(slide, px + i*(pw+pg), py, pw, Inches(0.55), name, size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE, margin=False) add_rect(slide, px + i*(pw+pg), py+Inches(0.55), pw, ph-Inches(0.55), fill_rgb=WHITE, line_rgb=col, line_width_pt=1.5) add_tb(slide, px + i*(pw+pg)+Inches(0.08), py+Inches(0.65), pw-Inches(0.16), ph-Inches(0.72), desc, size=13, color=DARK_GREY, align=PP_ALIGN.CENTER, wrap=True) # Evidence gap box add_rect(slide, Inches(0.35), Inches(4.3), Inches(12.63), Inches(0.04), fill_rgb=STEEL) add_rect(slide, Inches(0.35), Inches(4.42), Inches(12.63), Inches(1.6), fill_rgb=RGBColor(0xE8,0xEF,0xF8), line_rgb=STEEL, line_width_pt=1.0) add_tb(slide, Inches(0.55), Inches(4.48), Inches(2.2), Inches(0.4), "⚠ Evidence Gap:", size=14, bold=True, color=STEEL) add_tb(slide, Inches(0.55), Inches(4.88), Inches(12.1), Inches(1.1), "Bourne et al. (BMJ Quality & Safety, 2022) — the definitive systematic review on ICU transition medication safety — analysed 17 studies " "and found 88% were uncontrolled before-after designs. It explicitly called for prospective studies with rigorous outcome " "measurement and economic evaluation. No prospective cohort study has yet measured antibiotic-specific error outcomes with " "propensity-score-adjusted causal-inference methods.", size=12, color=DARK_GREY, wrap=True) add_tb(slide, Inches(0.35), Inches(6.1), Inches(12.63), Inches(0.35), "Supporting evidence: Resistant infections → excess LOS +7.4 days (95% CI 3.4–11.4) · OR mortality 1.84 (95% CI 1.19–2.87) · OR readmission 1.49 (95% CI 1.23–1.81)", size=11, italic=True, color=RED_SOFT) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 6 — OBJECTIVE 3 STATEMENT + HYPOTHESES # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Objective 3: Statement and Hypotheses") # Objective box add_rect(slide, Inches(0.35), Inches(1.28), Inches(12.63), Inches(1.3), fill_rgb=NAVY) add_tb(slide, Inches(0.55), Inches(1.33), Inches(12.2), Inches(0.3), "OBJECTIVE 3", size=12, bold=True, color=GOLD, align=PP_ALIGN.LEFT) add_tb(slide, Inches(0.55), Inches(1.63), Inches(12.2), Inches(0.88), "To assess the association between antibiotic-related medication errors (ARMEs) at ICU-to-ward " "transition and adverse patient outcomes, including clinical failure, ICU readmission, length of " "stay, in-hospital mortality, Clostridioides difficile infection, antimicrobial resistance emergence, " "and 30-day hospital readmission.", size=13, color=WHITE, wrap=True) # Hypotheses add_tb(slide, Inches(0.35), Inches(2.72), Inches(12.63), Inches(0.32), "Pre-Specified Hypotheses:", size=14, bold=True, color=NAVY) hyps = [ ("H₁ (Primary)", "Patients with ≥1 ARME have a significantly higher rate of the composite primary outcome " "(ADE + clinical failure + ICU readmission) within 30 days, after adjusting for baseline disease severity."), ("H₂", "Patients with ARMEs have significantly longer post-transfer ward length of stay after propensity score adjustment."), ("H₃", "Higher NCC MERP severity (Categories D–I) is positively associated with greater odds of adverse outcomes."), ("H₄", "Specific ARME types (omission, de-escalation failure, dose error, route error) differ in their association with specific outcomes."), ] hy = Inches(3.1) for i, (label, text) in enumerate(hyps): bg_col = RGBColor(0xF0,0xF4,0xFF) if i % 2 == 0 else WHITE add_rect(slide, Inches(0.35), hy + i*Inches(0.88), Inches(12.63), Inches(0.84), fill_rgb=bg_col, line_rgb=MID_GREY, line_width_pt=0.5) add_rect(slide, Inches(0.35), hy + i*Inches(0.88), Inches(1.1), Inches(0.84), fill_rgb=STEEL) add_tb(slide, Inches(0.35), hy + i*Inches(0.88), Inches(1.1), Inches(0.84), label, size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE, margin=False) add_tb(slide, Inches(1.55), hy + i*Inches(0.88)+Inches(0.08), Inches(11.3), Inches(0.72), text, size=13, color=DARK_GREY, wrap=True) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 7 — OUTCOME MEASURES # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Objective 3: Outcome Measures", subtitle="Primary composite endpoint + 7 pre-defined secondary outcomes") # Primary outcome header add_rect(slide, Inches(0.35), Inches(1.28), Inches(12.63), Inches(0.38), fill_rgb=RED_SOFT) add_tb(slide, Inches(0.4), Inches(1.28), Inches(12.5), Inches(0.38), "PRIMARY OUTCOME — Composite Endpoint (within 30 days of ICU-to-ward transfer):", size=13, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE) # 3 components comp_data = [ ("① Antibiotic-Related ADE", "Clinically documented adverse event causally\nlinked to ARME (Naranjo score ≥5)\nNCC MERP Category D or above"), ("② Clinical Failure", "Persistent/worsening infection requiring\nantibiotic escalation, addition of new agent,\nor recommencement of stopped antibiotic"), ("③ Unplanned ICU Readmission", "Readmission to any ICU within 30 days\nof index ICU-to-ward transfer,\nfor any reason"), ] cw = Inches(3.85) ch = Inches(1.55) cx = Inches(0.35) cy = Inches(1.72) for i, (title3, desc3) in enumerate(comp_data): add_rect(slide, cx + i*(cw+Inches(0.18)), cy, cw, ch, fill_rgb=RGBColor(0xFF,0xF0,0xF0), line_rgb=RED_SOFT, line_width_pt=1.5) add_tb(slide, cx + i*(cw+Inches(0.18))+Inches(0.08), cy+Inches(0.06), cw-Inches(0.16), Inches(0.38), title3, size=12, bold=True, color=RED_SOFT) add_tb(slide, cx + i*(cw+Inches(0.18))+Inches(0.08), cy+Inches(0.45), cw-Inches(0.16), Inches(1.02), desc3, size=11, color=DARK_GREY, wrap=True) # Secondary outcomes header add_rect(slide, Inches(0.35), Inches(3.42), Inches(12.63), Inches(0.35), fill_rgb=STEEL) add_tb(slide, Inches(0.4), Inches(3.42), Inches(12.5), Inches(0.35), "SECONDARY OUTCOMES:", size=13, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE) # 7 secondary outcomes in 2 cols sec_outcomes = [ ("Post-transfer LOS (days)", "Transfer → discharge/death", "Until discharge"), ("In-hospital mortality", "Death during index admission", "Until discharge"), ("30-day all-cause mortality", "Death from any cause ≤30 days", "Day 30"), ("C. difficile infection (CDI)", "New positive CDI assay + clinical syndrome", "During admission"), ("MDR organism emergence", "New MDR isolate absent in pre-transfer cultures", "During admission"), ("Antibiotic-associated nephrotoxicity", "AKI (KDIGO ≥1) attributed to vancomycin / aminoglycoside / colistin", "Days 1–14"), ("30-day hospital readmission", "Unplanned readmission post-discharge", "Day 30"), ] sw = Inches(6.0) sh = Inches(0.5) sx1 = Inches(0.35) sx2 = Inches(6.7) sy = Inches(3.84) sg = Inches(0.04) for i, (name3, defn3, tp3) in enumerate(sec_outcomes): col2 = 0 if i < 4 else 1 row2 = i if i < 4 else i - 4 sx = sx1 if col2 == 0 else sx2 sy2 = sy + row2*(sh+sg) bg2 = RGBColor(0xF2,0xF2,0xF2) if row2 % 2 == 0 else WHITE add_rect(slide, sx, sy2, sw, sh, fill_rgb=bg2, line_rgb=MID_GREY, line_width_pt=0.3) add_rect(slide, sx, sy2, Inches(0.18), sh, fill_rgb=STEEL) add_tb_lines(slide, sx+Inches(0.22), sy2+Inches(0.04), sw-Inches(0.25), sh-Inches(0.08), [(name3, 11, True, NAVY), (" " + defn3, 10, False, DARK_GREY)], line_spacing=Pt(14)) add_tb(slide, sx+sw-Inches(1.1), sy2+Inches(0.12), Inches(1.05), Inches(0.28), tp3, size=9, italic=True, color=RGBColor(0x70,0x70,0x70), align=PP_ALIGN.RIGHT) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 8 — STUDY POPULATION & ARME CLASSIFICATION # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Study Population & ARME Classification Framework") # Left: eligibility add_rect(slide, Inches(0.35), Inches(1.28), Inches(5.8), Inches(0.38), fill_rgb=NAVY) add_tb(slide, Inches(0.4), Inches(1.28), Inches(5.7), Inches(0.38), "Inclusion Criteria", size=13, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE) inc = ["Age ≥18 years", "Adult medical, surgical or mixed ICU", "Transfer to a general ward (not HDU/step-down)", "≥1 systemic antibiotic active at time of transfer", "Expected ward stay ≥24 hours post-transfer"] add_bullet_box(slide, Inches(0.35), Inches(1.7), Inches(5.8), Inches(1.7), inc, size=13, color=DARK_GREY, bullet_char="✓ ", indent=0.2) add_rect(slide, Inches(0.35), Inches(3.52), Inches(5.8), Inches(0.38), fill_rgb=RED_SOFT) add_tb(slide, Inches(0.4), Inches(3.52), Inches(5.7), Inches(0.38), "Exclusion Criteria", size=13, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE) exc = ["Transfer to HDU / step-down / another ICU", "ICU readmission within 24 hours of transfer", "Palliative / comfort-only care status", "Enrolled in concurrent interventional drug trial", "Transfer to different hospital (no follow-up feasible)"] add_bullet_box(slide, Inches(0.35), Inches(3.94), Inches(5.8), Inches(1.7), exc, size=13, color=DARK_GREY, bullet_char="✗ ", indent=0.2) # Right: ARME types add_rect(slide, Inches(6.4), Inches(1.28), Inches(6.58), Inches(0.38), fill_rgb=STEEL) add_tb(slide, Inches(6.45), Inches(1.28), Inches(6.45), Inches(0.38), "8 ARME Categories — NCC MERP Severity (A–I)", size=13, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE) arme_types = [ ("Omission", "Antibiotic not prescribed on ward without documented justification"), ("Commission", "New antibiotic started without clear indication at transfer"), ("Dose error", "Wrong dose not accounted for by renal/hepatic adjustment"), ("Frequency error", "Dosing interval changed without clinical justification"), ("Route error", "IV not switched to oral when switch criteria met (or vice versa)"), ("Duration error", "No stop date, review date or treatment duration documented"), ("De-escalation failure", "Broad-spectrum agent not narrowed despite culture data"), ("Allergy-related", "Antibiotic prescribed to patient with documented allergy"), ] aw = Inches(6.58) ah = Inches(0.52) ax3 = Inches(6.4) ay3 = Inches(1.7) ag3 = Inches(0.03) row_colors = [RGBColor(0xE8,0xEF,0xF8), WHITE] for i, (atype, adesc) in enumerate(arme_types): add_rect(slide, ax3, ay3 + i*(ah+ag3), aw, ah, fill_rgb=row_colors[i%2], line_rgb=MID_GREY, line_width_pt=0.3) add_rect(slide, ax3, ay3 + i*(ah+ag3), Inches(1.85), ah, fill_rgb=STEEL if i%2==0 else RGBColor(0x5B,0x85,0xB5)) add_tb(slide, ax3+Inches(0.06), ay3 + i*(ah+ag3)+Inches(0.08), Inches(1.75), ah-Inches(0.1), atype, size=11, bold=True, color=WHITE) add_tb(slide, ax3+Inches(1.9), ay3 + i*(ah+ag3)+Inches(0.08), aw-Inches(1.95), ah-Inches(0.1), adesc, size=11, color=DARK_GREY) # NCC MERP severity legend add_rect(slide, Inches(0.35), Inches(5.72), Inches(5.8), Inches(0.35), fill_rgb=NAVY) add_tb(slide, Inches(0.4), Inches(5.72), Inches(5.7), Inches(0.35), "NCC MERP Severity · Clinically Significant = D–I", size=12, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE) ncc_items = [ ("A–C", "Near miss / No harm to patient", RGBColor(0xD9,0xD9,0xD9), DARK_GREY), ("D", "Reached patient — monitoring required", RGBColor(0xFF,0xFF,0xCC), DARK_GREY), ("E–F", "Temporary harm / hospitalisation", RGBColor(0xFF,0xCC,0x99), DARK_GREY), ("G–I", "Permanent harm / Death", RGBColor(0xFF,0x80,0x80), WHITE), ] nw = Inches(1.35) nx3 = Inches(0.35) ny3 = Inches(6.1) for i, (cat2, desc2, bg3, fg3) in enumerate(ncc_items): add_rect(slide, nx3 + i*(nw+Inches(0.06)), ny3, nw, Inches(0.7), fill_rgb=bg3, line_rgb=MID_GREY, line_width_pt=0.5) add_tb(slide, nx3 + i*(nw+Inches(0.06))+Inches(0.04), ny3+Inches(0.04), nw-Inches(0.08), Inches(0.3), cat2, size=14, bold=True, color=RED_SOFT if cat2=="G–I" else NAVY, align=PP_ALIGN.CENTER) add_tb(slide, nx3 + i*(nw+Inches(0.06))+Inches(0.04), ny3+Inches(0.35), nw-Inches(0.08), Inches(0.32), desc2, size=9, color=DARK_GREY, align=PP_ALIGN.CENTER, wrap=True) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 9 — DATA COLLECTION TIMELINE # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Data Collection & Follow-Up Timeline", subtitle="Prospective pharmacist-led review from transfer through 30 days") # Timeline bar tl_y = Inches(3.2) tl_x1 = Inches(0.7) tl_x2 = Inches(12.63) add_rect(slide, tl_x1, tl_y + Inches(0.18), tl_x2-tl_x1, Inches(0.14), fill_rgb=STEEL) time_points = [ (0.0, "Day 0\n(Transfer)", NAVY, ["ICU Rx vs Ward Rx reconciliation", "ARME identification & classification", "Microbiology data linkage", "Renal/hepatic function capture", "Demographics & baseline variables"]), (0.28, "Days 1–7\n(Daily)", ACCENT, ["Daily chart review", "Clinical status monitoring", "New culture results", "Antibiotic changes documented", "ADE surveillance (daily)"]), (0.55, "Day 14\n(Review)", TEAL, ["Clinical failure assessment", "CDI assay check", "MDR organism isolation", "AKI documentation", "Outcome data entry in REDCap"]), (0.82, "Day 30\n(Final)", RED_SOFT, ["Primary composite outcome", "30-day mortality", "30-day hospital readmission", "Cost data linkage", "Case closure"]), ] for frac, label2, col3, tasks2 in time_points: tx = tl_x1 + frac * (tl_x2 - tl_x1) # dot add_rect(slide, tx-Inches(0.17), tl_y+Inches(0.08), Inches(0.34), Inches(0.34), fill_rgb=col3) # label above add_tb(slide, tx-Inches(1.1), tl_y-Inches(0.65), Inches(2.2), Inches(0.55), label2, size=13, bold=True, color=col3, align=PP_ALIGN.CENTER, wrap=True) # task list below task_box_h = Inches(0.36) * len(tasks2) + Inches(0.15) add_rect(slide, tx-Inches(1.3), tl_y+Inches(0.62), Inches(2.6), task_box_h, fill_rgb=WHITE, line_rgb=col3, line_width_pt=1.0) add_rect(slide, tx-Inches(1.3), tl_y+Inches(0.62), Inches(2.6), Inches(0.25), fill_rgb=col3) add_tb(slide, tx-Inches(1.3), tl_y+Inches(0.62), Inches(2.6), Inches(0.25), "DATA COLLECTED", size=9, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE, margin=False) add_bullet_box(slide, tx-Inches(1.22), tl_y+Inches(0.92), Inches(2.44), task_box_h-Inches(0.32), tasks2, size=10, color=DARK_GREY, bullet_char="• ", indent=0.1, line_spacing_pt=16) # REDCap note add_rect(slide, Inches(4.2), Inches(6.4), Inches(4.93), Inches(0.5), fill_rgb=RGBColor(0xE8,0xF4,0xFF), line_rgb=ACCENT, line_width_pt=1.0) add_tb(slide, Inches(4.3), Inches(6.42), Inches(4.73), Inches(0.46), "All data captured in REDCap (encrypted, pseudonymised, audit-trailed)", size=12, color=ACCENT, align=PP_ALIGN.CENTER, italic=True) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 10 — SAMPLE SIZE & STATISTICAL ANALYSIS # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Sample Size & Statistical Analysis Plan", subtitle="Powered for the composite primary outcome — propensity-score causal inference framework") # Sample size box add_rect(slide, Inches(0.35), Inches(1.28), Inches(4.05), Inches(4.1), fill_rgb=NAVY) add_tb(slide, Inches(0.45), Inches(1.32), Inches(3.85), Inches(0.38), "SAMPLE SIZE", size=14, bold=True, color=GOLD) ss_lines = [ ("Expected ARME prevalence:", 12, True, WHITE), ("~40% (range 18–58% in literature)", 13, False, MID_GREY), ("", 8, False, WHITE), ("Composite outcome rate — no ARME:", 12, True, WHITE), ("15% (background rate)", 13, False, MID_GREY), ("", 8, False, WHITE), ("Target OR to detect:", 12, True, WHITE), ("2.5 (clinically meaningful)", 13, False, MID_GREY), ("", 8, False, WHITE), ("Power: 80% | α: 0.05 (two-tailed)", 12, True, GOLD), ("", 8, False, WHITE), ("Required n:", 12, True, WHITE), ("340 patients", 13, False, MID_GREY), ("+15% attrition → n = 392", 12, False, MID_GREY), ("", 8, False, WHITE), ("TARGET ENROLMENT", 13, True, GOLD), ("400 ICU-to-ward transfers", 15, True, WHITE), ] add_tb_lines(slide, Inches(0.45), Inches(1.75), Inches(3.85), Inches(3.55), ss_lines) # Analysis methods add_rect(slide, Inches(4.6), Inches(1.28), Inches(8.38), Inches(0.38), fill_rgb=STEEL) add_tb(slide, Inches(4.65), Inches(1.28), Inches(8.25), Inches(0.38), "Statistical Methods — 5-Layer Approach", size=14, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE) methods = [ ("1", "Descriptive Statistics", "Mean ± SD or median (IQR) · Chi-squared / Fisher's exact · Standardised Mean Differences (SMDs)"), ("2", "Multivariable Logistic Regression", "Primary outcome (binary) · A priori confounders: APACHE II, CCI, renal function, ICU LOS, antibiotic count · aOR + 95% CI"), ("3", "Propensity Score Matching", "1:1 nearest-neighbour matching (caliper 0.2 SD) · Balance assessed by SMD <0.10 · Conditional logistic regression on matched cohort"), ("4", "Competing-Risks Survival (LOS)", "Fine-Gray subdistribution hazard model · In-hospital death = competing event · SHR + 95% CI reported"), ("5", "Sensitivity Analyses", "Complete-case analysis · MICE multiple imputation (m=20) · IPTW (ATE) · Alternative exposure definitions"), ] my = Inches(1.72) for num2, mname, mdesc in methods: add_rect(slide, Inches(4.6), my, Inches(8.38), Inches(0.93), fill_rgb=RGBColor(0xF0,0xF4,0xFF) if int(num2)%2==1 else WHITE, line_rgb=MID_GREY, line_width_pt=0.3) add_rect(slide, Inches(4.6), my, Inches(0.4), Inches(0.93), fill_rgb=STEEL) add_tb(slide, Inches(4.6), my, Inches(0.4), Inches(0.93), num2, size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE, margin=False) add_tb(slide, Inches(5.05), my+Inches(0.06), Inches(7.85), Inches(0.3), mname, size=12, bold=True, color=NAVY) add_tb(slide, Inches(5.05), my+Inches(0.35), Inches(7.85), Inches(0.5), mdesc, size=11, color=DARK_GREY, wrap=True) my += Inches(0.97) add_tb(slide, Inches(4.6), Inches(6.62), Inches(8.38), Inches(0.3), "Software: R (≥4.3) — packages: MatchIt · twang · cmprsk · mice | All scripts pre-registered", size=10, italic=True, color=RGBColor(0x60,0x60,0x60)) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 11 — ETHICAL CONSIDERATIONS # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Ethical Considerations", subtitle="Three-tier consent framework · Duty of care protocol · Data governance") eth_sections = [ ("Consent Framework", NAVY, [ ("Tier 1 — Capable patients:", " Written informed consent; 24-hour cooling-off period"), ("Tier 2 — Temporarily incapacitated:", " Surrogate/next-of-kin consent; deferred patient consent on recovery"), ("Tier 3 — Waiver (if REC approved):", " Observational chart review only; no more than minimal risk; group-level reporting"), ]), ("Duty of Care", RED_SOFT, [ ("Error notification:", " Clinically significant ARMEs (NCC MERP ≥D) notified to treating team within 4 hours"), ("Response recorded:", " Team response (corrected / partial / no action + reason) documented as secondary data"), ("Error classification unchanged:", " Notification does not alter the ARME classification for analysis"), ]), ("Data Governance", GREEN_SOFT, [ ("Pseudonymisation:", " Patient identifiers stored in separate master-link file — analysis dataset is ID-only"), ("Storage:", " REDCap on ISO 27001-compliant institutional servers; TLS 1.2+ encrypted transfers"), ("Retention:", " Minimum 10 years post-publication per institutional research governance policy"), ]), ("Risk to Participants", TEAL, [ ("Non-interventional:", " No experimental drug, device or procedure involved"), ("Minimal risk:", " Chart review only; pharmacist notification is clinically beneficial"), ("Reporting:", " De-identified aggregate results only in all publications"), ]), ] ew = Inches(5.9) eh_start = Inches(1.28) eg = Inches(0.18) positions = [(Inches(0.35), eh_start), (Inches(6.63), eh_start), (Inches(0.35), Inches(4.18)), (Inches(6.63), Inches(4.18))] for idx, (sec_title, col4, items4) in enumerate(eth_sections): ex, ey = positions[idx] add_rect(slide, ex, ey, ew, Inches(0.38), fill_rgb=col4) add_tb(slide, ex+Inches(0.1), ey, ew-Inches(0.2), Inches(0.38), sec_title, size=14, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE) add_rect(slide, ex, ey+Inches(0.38), ew, Inches(2.45), fill_rgb=WHITE, line_rgb=col4, line_width_pt=1.0) by_item = ey+Inches(0.48) for prefix3, rest3 in items4: add_tb_lines(slide, ex+Inches(0.12), by_item, ew-Inches(0.2), Inches(0.65), [(prefix3, 12, True, col4), (rest3, 12, False, DARK_GREY)]) by_item += Inches(0.72) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 12 — SIGNIFICANCE & EXPECTED IMPACT # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=LIGHT_GREY) slide_header(slide, "Significance & Expected Impact", subtitle="From evidence gap to clinical practice change") # Left: what the study will demonstrate add_rect(slide, Inches(0.35), Inches(1.28), Inches(6.1), Inches(0.38), fill_rgb=NAVY) add_tb(slide, Inches(0.4), Inches(1.28), Inches(6.0), Inches(0.38), "What This Study Will Provide", size=14, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE) will_provide = [ "First prospective cohort data on ARME-specific patient outcomes at ICU-to-ward transition", "Propensity-score-adjusted outcome estimates to minimise confounding by severity of illness", "Quantification of which error types (omission, de-escalation failure, dose/route errors) carry greatest clinical harm", "Antibiotic-specific outcome data: beta-lactams vs. glycopeptides vs. carbapenems vs. aminoglycosides", "Evidence base for pharmacist-led reconciliation interventions at ICU discharge", ] add_bullet_box(slide, Inches(0.35), Inches(1.7), Inches(6.1), Inches(3.2), will_provide, size=13, color=DARK_GREY, line_spacing_pt=19) # Right: expected impact add_rect(slide, Inches(6.8), Inches(1.28), Inches(6.18), Inches(0.38), fill_rgb=GREEN_SOFT) add_tb(slide, Inches(6.85), Inches(1.28), Inches(6.05), Inches(0.38), "Expected Clinical & Policy Impact", size=14, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE) impact_items = [ ("Patient safety:", " Justify mandatory pharmacist reconciliation at ICU discharge"), ("Antimicrobial stewardship:", " Standardise de-escalation documentation at ICU transfer"), ("Hospital policy:", " Drive structured ICU discharge summaries with antibiotic review"), ("Cost-effectiveness:", " Provide outcome data to model cost-benefit of reconciliation services"), ("Research:", " Supply propensity-matched outcome estimates for future RCT sample-size calculations"), ] by_imp = Inches(1.7) for pref4, rest4 in impact_items: add_tb_lines(slide, Inches(6.8), by_imp, Inches(6.18), Inches(0.58), [(pref4, 12, True, GREEN_SOFT), (rest4, 12, False, DARK_GREY)]) by_imp += Inches(0.6) # Bottom: key references add_rect(slide, Inches(0.35), Inches(5.05), Inches(12.63), Inches(0.04), fill_rgb=MID_GREY) add_tb(slide, Inches(0.35), Inches(5.12), Inches(12.63), Inches(0.28), "Key Evidence Base:", size=12, bold=True, color=NAVY) refs3 = [ "Bourne et al. BMJ Qual Saf 2022 (PMID 35042765) · Wang et al. BMJ Open Qual 2022 (PMC9013992) · Martínez Pradeda et al. Farm Hosp 2023 (PMID 37059685)", "Tully et al. Crit Care Med 2019 · Economic burden of AMR — Systematic Review 2023 (PMC10166566) · NCC MERP Index 2001", ] for i3, ref3 in enumerate(refs3): add_tb(slide, Inches(0.35), Inches(5.44) + i3*Inches(0.38), Inches(12.63), Inches(0.35), ref3, size=10, italic=True, color=RGBColor(0x50,0x50,0x50)) # Call to action box add_rect(slide, Inches(0.35), Inches(6.28), Inches(12.63), Inches(0.68), fill_rgb=NAVY) add_tb(slide, Inches(0.5), Inches(6.32), Inches(12.4), Inches(0.58), "This prospective cohort study will generate the high-quality outcome evidence that Bourne et al. explicitly identified as " "lacking — enabling evidence-based, costed interventions to protect patients at the critical moment of ICU-to-ward transfer.", size=13, bold=False, color=WHITE, wrap=True, v_anchor=MSO_ANCHOR.MIDDLE) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 13 — THANK YOU / QUESTIONS # ═══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, W, H, fill_rgb=NAVY) add_rect(slide, 0, Inches(6.55), W, Inches(0.95), fill_rgb=STEEL) add_rect(slide, 0, Inches(6.25), W, Inches(0.08), fill_rgb=GOLD) add_tb(slide, Inches(0.5), Inches(1.6), Inches(12.33), Inches(0.6), "Thank You", size=48, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_tb(slide, Inches(0.5), Inches(2.3), Inches(12.33), Inches(0.45), "Questions & Discussion", size=26, color=GOLD, align=PP_ALIGN.CENTER) add_tb(slide, Inches(0.5), Inches(3.1), Inches(12.33), Inches(0.45), "Assessment of Antibiotic-Related Medication Errors During ICU-to-Ward Transitions", size=16, italic=True, color=MID_GREY, align=PP_ALIGN.CENTER) add_tb(slide, Inches(0.5), Inches(3.6), Inches(12.33), Inches(0.35), "Objective 3: Association with Adverse Patient Outcomes · Prospective Cohort Study Protocol", size=14, color=MID_GREY, align=PP_ALIGN.CENTER) add_tb(slide, Inches(0.5), Inches(4.4), Inches(12.33), Inches(0.35), "Contact:", size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_tb(slide, Inches(0.5), Inches(4.75), Inches(12.33), Inches(0.35), "[PI Name] · [Department, Institution] · [email@institution.edu]", size=14, color=MID_GREY, align=PP_ALIGN.CENTER) add_tb(slide, Inches(0.5), Inches(6.58), Inches(12.33), Inches(0.35), "Protocol v1.0 | 19 July 2026 | Draft — For Ethical Review Submission | Protocol registered on ClinicalTrials.gov (pending)", size=11, color=MID_GREY, align=PP_ALIGN.CENTER) # ───────────────────────────────────────────────────────────────────────────── out = "/tmp/workspace/obj3-protocol/Objective3_Study_Design_Presentation.pptx" buf = BytesIO() prs.save(buf) with open(out, "wb") as f: f.write(buf.getvalue()) print(f"SUCCESS: {out}") PYEOF python3 /tmp/workspace/obj3-protocol/build_deck.py
~/obj3-protocol/build_deck.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/obj3-protocol/build_deck.py'
python3 /tmp/workspace/obj3-protocol/build_deck.py 2>&1
ls -lh /tmp/workspace/obj3-protocol/*.pptx && python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/obj3-protocol/Objective3_Study_Design_Presentation.pptx') print(f'Slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): texts = [s.text_frame.text.split()[0:5] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] print(f' Slide {i}: {texts[0] if texts else \"(empty)\"}') "
Objective3 Study Design Presentation
Presentation · PPTX
| Slide | Title | Key Visual |
|---|---|---|
| 1 | Title Slide | Dark navy hero with gold accent bar |
| 2 | Presentation Outline | 10-item numbered grid (two columns) |
| 3 | Background: High-Risk Interface | Three stat boxes (58%, 18%, 1.88 errors) + 6 antibiotic-specific bullets |
| 4 | Overall Study Design | 6 design summary boxes + 5-step flow diagram + 4 objective panels (Obj 3 highlighted in red) |
| 5 | Objective 3: Scientific Rationale | Five colour-coded harm pathway panels + evidence gap callout box |
| 6 | Objective 3: Statement & Hypotheses | Objective statement box + H₁–H₄ banded hypothesis table |
| 7 | Outcome Measures | Composite primary outcome (3 components) + 7 secondary outcomes table |
| 8 | Study Population & ARME Classification | Inclusion/exclusion criteria + 8-category ARME error type table + NCC MERP severity legend |
| 9 | Data Collection Timeline | 4-point timeline (Day 0 → Days 1–7 → Day 14 → Day 30) with task lists per time point |
| 10 | Sample Size & Statistical Analysis | Sample size parameter box + 5-method statistical approach table |
| 11 | Ethical Considerations | Four-panel grid: consent framework · duty of care · data governance · risk |
| 12 | Significance & Expected Impact | Impact bullets + call-to-action closing box with Bourne et al. citation |
| 13 | Thank You / Questions | Dark close slide with contact details |
rewrite the protocol including sspa as the statistical analysis method , and proper literature review and citation
antibiotic medication errors ICU transition outcomes mortality readmission
medication reconciliation ICU discharge adverse drug events outcomes
SSPA statistical software sample size power analysis observational study clinical protocol methodology
medication errors ICU transition care patient safety pharmacist
antibiotic adverse drug events hospital outcomes length of stay mortality
antimicrobial stewardship ICU de-escalation clinical outcomes prospective
PASS SSPA "sample size and power analysis" software clinical observational cohort study protocol 2023 2024
PMID: 35042765
PMID: 35731853
medication error preventable adverse drug event hospital economic cost
vancomycin aminoglycoside nephrotoxicity ICU monitoring outcomes
Clostridioides difficile antibiotic associated infection ICU hospital risk
PMID: 34611721
PMID: 37059685
Wang 2022 "medication errors" ICU transfer BMJ Open Quality incidence anti-infective beta-lactam
redesign the protocol which should contain literature review , proper sspa analytical system , and citation
medication errors ICU intensive care unit incidence types prevalence
antibiotic adverse drug events outcomes ICU hospital mortality length of stay
medication reconciliation transition of care hospital patient safety
SSPA "sample size and power analysis" PASS software protocol clinical research methodology logistic regression two proportions
PMID: 40392264
PMID: 30136718
PMID: 31410745
antimicrobial resistance economic burden hospital length of stay mortality readmission
PMID: 37155660
PMID: 33570331
prospective cohort study antibiotic prescribing errors clinical pharmacist hospital
Tully 2019 medication errors ICU transition care "critical care medicine" PMID pharmacist
can you create a documentation form to collect the required data for the research analysis
ls -la /tmp/workspace/obj3-protocol/