1. Evaluation of maternal and fetal outcomes , clinical management and guidelines adherence in pregnant women with gestational hypertension and pre-eclampsia : An Ambispective study
gestational hypertension pre-eclampsia maternal fetal outcomes
ISSHP ACOG NICE pre-eclampsia gestational hypertension guidelines 2023 2024
pre-eclampsia clinical management guidelines adherence outcomes India
ambispective study design methodology gestational hypertension pre-eclampsia India hospital based
gestational hypertension preeclampsia antihypertensive treatment outcomes randomized
https://pdfs.semanticscholar.org/2c66/3ab51d3d1b2b2bd6fa3b47…
| Domain | Guideline Recommendation | Adherent (Yes/No) |
|---|---|---|
| BP threshold for treatment initiation | Antihypertensive started at BP ≥140/90 mmHg | |
| First-line antihypertensive | Labetalol / nifedipine / methyldopa used | |
| Acute severe HTN management | IV labetalol / hydralazine / oral nifedipine given within 30-60 minutes | |
| MgSO4 prophylaxis | Given to all PE with severe features | |
| Fetal growth assessment | Ultrasound performed at diagnosis and every 2-4 weeks | |
| Umbilical artery Doppler | Performed at diagnosis and serially | |
| Timing of delivery - GH | Offered delivery at ≥37 weeks | |
| Timing of delivery - PE without severe features | Offered delivery at ≥37 weeks | |
| Timing of delivery - PE with severe features | Delivery planned from 34 weeks | |
| Corticosteroids | Given for fetal lung maturity if <34 weeks and delivery planned | |
| Postpartum review | Scheduled at 6 weeks postpartum | |
| Documentation | BP target (135/85) documented |
| Term | Definition |
|---|---|
| Gestational hypertension (GH) | New-onset BP ≥140/90 mmHg after 20 weeks of gestation on ≥2 occasions ≥4 hours apart, without proteinuria or end-organ damage, resolving by 12 weeks postpartum |
| Pre-eclampsia (PE) | GH + proteinuria (≥300 mg/24h or PCR ≥0.3) OR any other end-organ feature (renal, hepatic, neurological, haematological, or pulmonary oedema) |
| PE with severe features | PE + SBP ≥160 or DBP ≥110 mmHg, or platelets <100,000/µL, or creatinine >1.1 mg/dL, or transaminases ≥2×ULN, or severe headache, or visual disturbances, or pulmonary oedema |
| Eclampsia | New-onset generalised tonic-clonic convulsions in a woman with PE |
| HELLP syndrome | Haemolysis + elevated liver enzymes + low platelets (<100,000/µL) |
| Preterm birth | Delivery before 37 completed weeks of gestation |
| SGA | Birth weight <10th centile for gestational age |
| Guideline adherence | Proportion of applicable guideline recommendations fulfilled for an individual patient |
| Severe hypertension | SBP ≥160 mmHg or DBP ≥110 mmHg |
| Antepartum period | From confirmation of pregnancy to onset of labour |
| Phase | Activity | Duration |
|---|---|---|
| Phase 1 | IEC approval, tool preparation, staff training | Month 1-2 |
| Phase 2 | Retrospective data collection | Month 2-4 |
| Phase 3 | Prospective patient enrollment and follow-up | Month 3-15 |
| Phase 4 | Data cleaning and entry | Month 13-16 |
| Phase 5 | Statistical analysis | Month 16-17 |
| Phase 6 | Manuscript preparation and submission | Month 17-18 |
Generate a presentation summarizing the study design for ethics committee approval
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
mkdir -p /tmp/workspace/iec-presentation && cat > /tmp/workspace/iec-presentation/build_pptx.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.dml.color import RGBColor from io import BytesIO # ── Colour palette (deep navy + teal accent + white) ────────────────────────── NAVY = RGBColor(0x0D, 0x2B, 0x55) # deep navy – slide header bg TEAL = RGBColor(0x00, 0x7A, 0x87) # accent LIGHT_BG = RGBColor(0xF0, 0xF4, 0xF8) # slide body background WHITE = RGBColor(0xFF, 0xFF, 0xFF) DARK_TEXT = RGBColor(0x1A, 0x1A, 0x2E) MID_GREY = RGBColor(0x55, 0x65, 0x7A) GOLD = RGBColor(0xE8, 0xB84B, 0x1E) # actually just use orange accent ORANGE = RGBColor(0xE8, 0x6B, 0x1E) W = Inches(13.333) H = Inches(7.5) prs = Presentation() prs.slide_width = W prs.slide_height = H blank = prs.slide_layouts[6] # fully blank # ── Helpers ─────────────────────────────────────────────────────────────────── def add_rect(slide, x, y, w, h, fill_rgb, alpha=None): shape = slide.shapes.add_shape(1, x, y, w, h) # MSO_SHAPE_TYPE.RECTANGLE = 1 shape.line.fill.background() shape.line.color.rgb = fill_rgb shape.fill.solid() shape.fill.fore_color.rgb = fill_rgb return shape def tb(slide, x, y, w, h, text, size, bold=False, color=WHITE, align=PP_ALIGN.LEFT, italic=False, wrap=True, font="Calibri"): box = slide.shapes.add_textbox(x, y, w, h) tf = box.text_frame tf.word_wrap = wrap tf.margin_left = tf.margin_right = tf.margin_top = tf.margin_bottom = 0 p = tf.paragraphs[0] p.alignment = align run = p.add_run() run.text = text run.font.name = font run.font.size = Pt(size) run.font.bold = bold run.font.italic = italic run.font.color.rgb = color return box def tb_multi(slide, x, y, w, h, lines, size, color=DARK_TEXT, bold=False, align=PP_ALIGN.LEFT, line_spacing=1.2, font="Calibri"): """lines = list of (text, bold_override, color_override)""" box = slide.shapes.add_textbox(x, y, w, h) tf = box.text_frame tf.word_wrap = True tf.margin_left = tf.margin_top = tf.margin_right = tf.margin_bottom = 0 from pptx.oxml.ns import qn from pptx.util import Pt as _Pt import lxml.etree as etree first = True for line in lines: if isinstance(line, str): txt, b, c = line, bold, color else: txt = line[0] b = line[1] if len(line) > 1 else bold c = line[2] if len(line) > 2 else color p = tf.paragraphs[0] if first else tf.add_paragraph() first = False p.alignment = align # line spacing p.line_spacing = line_spacing run = p.add_run() run.text = txt run.font.name = font run.font.size = _Pt(size) run.font.bold = b run.font.color.rgb = c return box def header_bar(slide, title, subtitle=None): """Navy top bar with title + optional subtitle.""" add_rect(slide, 0, 0, W, Inches(1.3), NAVY) # slide number accent line add_rect(slide, 0, Inches(1.3), W, Inches(0.05), TEAL) tb(slide, Inches(0.45), Inches(0.12), Inches(11.5), Inches(0.8), title, 28, bold=True, color=WHITE) if subtitle: tb(slide, Inches(0.45), Inches(0.88), Inches(11.5), Inches(0.38), subtitle, 15, bold=False, color=RGBColor(0xB0,0xD0,0xE8)) def footer(slide, num): add_rect(slide, 0, Inches(7.22), W, Inches(0.28), NAVY) tb(slide, Inches(0.3), Inches(7.24), Inches(9), Inches(0.22), "IEC Presentation – GH & Pre-Eclampsia Ambispective Study", 9, color=RGBColor(0xB0,0xD0,0xE8)) tb(slide, Inches(12.5), Inches(7.24), Inches(0.7), Inches(0.22), str(num), 9, color=WHITE, align=PP_ALIGN.RIGHT) def slide_bg(slide): add_rect(slide, 0, 0, W, H, LIGHT_BG) def bullet_box(slide, x, y, w, h, items, size=14, title=None, title_size=15, bullet="▸", color=DARK_TEXT, title_color=TEAL): if title: tb(slide, x, y, w, Inches(0.32), title, title_size, bold=True, color=title_color) y += Inches(0.35) h -= Inches(0.35) box = slide.shapes.add_textbox(x, y, w, h) tf = box.text_frame tf.word_wrap = True tf.margin_left = tf.margin_top = tf.margin_right = tf.margin_bottom = 0 first = True for item in items: p = tf.paragraphs[0] if first else tf.add_paragraph() first = False p.alignment = PP_ALIGN.LEFT p.line_spacing = 1.25 if isinstance(item, tuple): txt, b = item else: txt, b = item, False run = p.add_run() run.text = f"{bullet} {txt}" run.font.name = "Calibri" run.font.size = Pt(size) run.font.bold = b run.font.color.rgb = color # ───────────────────────────────────────────────────────────────────────────── # SLIDE 1 – Title Slide # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, W, H, NAVY) add_rect(s, 0, Inches(4.6), W, Inches(0.08), TEAL) # decorative bar add_rect(s, 0, Inches(4.68), W, Inches(2.82), RGBColor(0x08, 0x1D, 0x40)) tb(s, Inches(0.8), Inches(0.7), Inches(11.7), Inches(0.55), "INSTITUTIONAL ETHICS COMMITTEE – RESEARCH PROPOSAL", 14, color=RGBColor(0xB0,0xD0,0xE8), bold=False, align=PP_ALIGN.CENTER) tb(s, Inches(0.5), Inches(1.35), Inches(12.3), Inches(1.2), "Evaluation of Maternal and Fetal Outcomes,", 30, bold=True, color=WHITE, align=PP_ALIGN.CENTER) tb(s, Inches(0.5), Inches(2.5), Inches(12.3), Inches(0.7), "Clinical Management, and Guidelines Adherence", 30, bold=True, color=WHITE, align=PP_ALIGN.CENTER) tb(s, Inches(0.5), Inches(3.15), Inches(12.3), Inches(0.55), "in Pregnant Women with Gestational Hypertension and Pre-Eclampsia", 22, color=RGBColor(0xB0,0xD0,0xE8), align=PP_ALIGN.CENTER) tb(s, Inches(0.5), Inches(4.1), Inches(12.3), Inches(0.42), "An Ambispective Observational Study", 19, bold=True, color=ORANGE, align=PP_ALIGN.CENTER) tb(s, Inches(0.5), Inches(4.85), Inches(12.3), Inches(0.38), "Principal Investigator: [Name], Dept. of Obstetrics & Gynaecology", 14, color=RGBColor(0xCC,0xDD,0xEE), align=PP_ALIGN.CENTER) tb(s, Inches(0.5), Inches(5.22), Inches(12.3), Inches(0.38), "Guide / Co-Investigator: [Name] | [Institution Name]", 14, color=RGBColor(0xCC,0xDD,0xEE), align=PP_ALIGN.CENTER) tb(s, Inches(0.5), Inches(5.60), Inches(12.3), Inches(0.38), "[City, State] | July 2026", 13, color=RGBColor(0x88,0xAA,0xCC), align=PP_ALIGN.CENTER) footer(s, 1) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 2 – Presentation Overview # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Presentation Overview") footer(s, 2) items = [ ("Background & Rationale", True), ("Study Objectives", True), ("Study Design – Ambispective Approach", True), ("Study Population: Inclusion / Exclusion Criteria", True), ("Sample Size & Sampling", True), ("Data Variables & Outcome Measures", True), ("Guideline Adherence Assessment Framework", True), ("Statistical Analysis Plan", True), ("Ethical Considerations & Consent", True), ("Expected Outcomes & Significance", True), ] # Two columns left_items = items[:5] right_items = items[5:] for i, (txt, b) in enumerate(left_items): add_rect(s, Inches(0.45), Inches(1.55 + i*1.0), Inches(5.8), Inches(0.82), WHITE) add_rect(s, Inches(0.45), Inches(1.55 + i*1.0), Inches(0.08), Inches(0.82), TEAL) tb(s, Inches(0.62), Inches(1.67 + i*1.0), Inches(5.5), Inches(0.5), f"{i+1}. {txt}", 14, bold=b, color=DARK_TEXT) for i, (txt, b) in enumerate(right_items): add_rect(s, Inches(6.95), Inches(1.55 + i*1.0), Inches(5.9), Inches(0.82), WHITE) add_rect(s, Inches(6.95), Inches(1.55 + i*1.0), Inches(0.08), Inches(0.82), TEAL) tb(s, Inches(7.13), Inches(1.67 + i*1.0), Inches(5.6), Inches(0.5), f"{i+6}. {txt}", 14, bold=b, color=DARK_TEXT) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 3 – Background & Rationale # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Background & Rationale", "Why this study needs to be done") footer(s, 3) # Stat boxes stats = [ ("10–20%", "HDP prevalence among\npregnant women in India\n(ICMR)"), ("8–10%", "Pre-eclampsia incidence\nin India (National\nHealth Portal)"), ("76,000", "Maternal deaths/year\nglobally from PE &\nrelated HDP (WHO)"), ("~25%", "GH cases that\nprogress to\npre-eclampsia"), ] for i, (val, lbl) in enumerate(stats): x = Inches(0.4 + i * 3.22) add_rect(s, x, Inches(1.55), Inches(3.0), Inches(2.1), WHITE) add_rect(s, x, Inches(1.55), Inches(3.0), Inches(0.07), TEAL) tb(s, x + Inches(0.1), Inches(1.68), Inches(2.8), Inches(0.72), val, 30, bold=True, color=NAVY, align=PP_ALIGN.CENTER) tb(s, x + Inches(0.1), Inches(2.38), Inches(2.8), Inches(0.75), lbl, 12, color=MID_GREY, align=PP_ALIGN.CENTER) bullet_box(s, Inches(0.4), Inches(3.85), Inches(12.5), Inches(2.85), [ "HDP is the 3rd leading cause of maternal death in Indian tertiary centres (retrospective study 2000–2009)", "51.1% of HDP-related deaths occur peripartum / immediate postpartum (FOGSI report)", "Despite ACOG, NICE, ISSHP 2021 and FOGSI guidelines, real-world practice in India shows significant variability", "Key gaps: antihypertensive choice, MgSO₄ use, timing of delivery, fetal surveillance, postpartum follow-up", "No published study has simultaneously quantified guideline adherence AND correlated it with outcomes in this setting", ], size=13.5, bullet="▸", color=DARK_TEXT) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 4 – Aim & Objectives # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Aim & Objectives") footer(s, 4) # Primary aim box add_rect(s, Inches(0.4), Inches(1.5), Inches(12.5), Inches(0.95), NAVY) tb(s, Inches(0.55), Inches(1.58), Inches(12.2), Inches(0.78), "Primary Aim: To evaluate maternal and fetal outcomes in women with GH and PE, assess clinical management practices, " "and determine adherence to standard guidelines.", 14, bold=False, color=WHITE) objectives = [ "Determine prevalence & distribution of HDP subtypes (GH, PE ± severe features, eclampsia, HELLP)", "Describe sociodemographic & obstetric profiles of study participants", "Document antihypertensive therapy, MgSO₄ use, corticosteroid use, and delivery management", "Assess adherence to ISSHP 2021 / FOGSI / NICE guidelines using a structured 12-item checklist", "Evaluate maternal outcomes: severe HTN, eclampsia, HELLP, AKI, PPH, ICU admission, maternal mortality", "Evaluate fetal/neonatal outcomes: preterm birth, SGA, IUGR, APGAR scores, NICU admission, perinatal death", "Identify predictors of adverse maternal and fetal outcomes (logistic regression)", "Correlate degree of guideline adherence with clinical outcomes", ] for i, obj in enumerate(objectives): row = i // 2 col = i % 2 x = Inches(0.4 + col * 6.5) y = Inches(2.62 + row * 1.08) add_rect(s, x, y, Inches(6.2), Inches(0.95), WHITE) add_rect(s, x, y, Inches(0.07), Inches(0.95), ORANGE) tb(s, x + Inches(0.16), y + Inches(0.05), Inches(5.9), Inches(0.85), f"O{i+1}. {obj}", 12.5, color=DARK_TEXT) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 5 – Study Design # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Study Design: Ambispective Observational Study") footer(s, 5) # Left panel – retrospective add_rect(s, Inches(0.4), Inches(1.5), Inches(5.8), Inches(4.5), WHITE) add_rect(s, Inches(0.4), Inches(1.5), Inches(5.8), Inches(0.45), RGBColor(0x1A,0x6E,0xA0)) tb(s, Inches(0.5), Inches(1.54), Inches(5.6), Inches(0.38), "◀ RETROSPECTIVE ARM", 15, bold=True, color=WHITE) bullet_box(s, Inches(0.5), Inches(2.05), Inches(5.6), Inches(3.8), ["Review of past medical records", "Period: Jan 2023 – Dec 2024 (indicative)", "Cases already managed; outcomes known", "Structured CRF applied to extract data", "Strength: immediate data, larger N", "Limitation: depends on record quality", ], size=13, color=DARK_TEXT) # Central arrow tb(s, Inches(6.32), Inches(3.3), Inches(0.7), Inches(0.5), "⟺", 36, bold=True, color=TEAL, align=PP_ALIGN.CENTER) tb(s, Inches(6.1), Inches(3.78), Inches(1.1), Inches(0.38), "COMBINED", 11, bold=True, color=TEAL, align=PP_ALIGN.CENTER) # Right panel – prospective add_rect(s, Inches(7.1), Inches(1.5), Inches(5.8), Inches(4.5), WHITE) add_rect(s, Inches(7.1), Inches(1.5), Inches(5.8), Inches(0.45), TEAL) tb(s, Inches(7.2), Inches(1.54), Inches(5.6), Inches(0.38), "PROSPECTIVE ARM ▶", 15, bold=True, color=WHITE) bullet_box(s, Inches(7.2), Inches(2.05), Inches(5.6), Inches(3.8), ["Prospective enrollment of new cases", "Period: Jan 2025 – Dec 2025 (indicative)", "Real-time standardised data capture", "Guideline adherence documented in situ", "Strength: complete, structured data", "Limitation: time-intensive; follow-up loss", ], size=13, color=DARK_TEXT) # Bottom timeline bar add_rect(s, Inches(0.4), Inches(6.15), Inches(12.5), Inches(0.65), NAVY) phases = ["Phase 1\nIEC Approval\n& Tool Prep\n(M 1–2)", "Phase 2\nRetrospective\nData Coll.\n(M 2–4)", "Phase 3\nProspective\nEnrollment\n(M 3–15)", "Phase 4\nData Entry\n& Cleaning\n(M 13–16)", "Phase 5\nAnalysis\n(M 16–17)", "Phase 6\nWrite-up\n(M 17–18)"] for i, ph in enumerate(phases): tb(s, Inches(0.5 + i*2.08), Inches(6.17), Inches(2.0), Inches(0.6), ph, 8.5, color=WHITE, align=PP_ALIGN.CENTER) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 6 – Study Population # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Study Population: Eligibility Criteria") footer(s, 6) # Inclusion add_rect(s, Inches(0.4), Inches(1.55), Inches(6.0), Inches(4.85), WHITE) add_rect(s, Inches(0.4), Inches(1.55), Inches(6.0), Inches(0.42), RGBColor(0x10,0x7C,0x41)) tb(s, Inches(0.5), Inches(1.59), Inches(5.8), Inches(0.36), "✔ INCLUSION CRITERIA", 14, bold=True, color=WHITE) bullet_box(s, Inches(0.5), Inches(2.08), Inches(5.8), Inches(4.15), ["Pregnant women aged ≥18 years", "Gestational age ≥20 completed weeks at diagnosis", "Singleton or multiple gestation", "Diagnosis of one of:", " • Gestational Hypertension (GH)", " • Pre-eclampsia without severe features", " • Pre-eclampsia with severe features", " • Eclampsia", " • HELLP Syndrome", "Delivered (or planning delivery) at study institution", ], size=13, color=DARK_TEXT) # Exclusion add_rect(s, Inches(6.9), Inches(1.55), Inches(6.0), Inches(4.85), WHITE) add_rect(s, Inches(6.9), Inches(1.55), Inches(6.0), Inches(0.42), RGBColor(0xBF,0x1E,0x2E)) tb(s, Inches(7.0), Inches(1.59), Inches(5.8), Inches(0.36), "✘ EXCLUSION CRITERIA", 14, bold=True, color=WHITE) bullet_box(s, Inches(7.0), Inches(2.08), Inches(5.8), Inches(4.15), ["Chronic hypertension diagnosed prior to 20 weeks", "Pre-existing renal disease (e.g., chronic kidney disease)", "Pre-existing autoimmune / systemic conditions causing hypertension", "Secondary causes: pheochromocytoma, primary aldosteronism (known)", "Incomplete medical records (retrospective arm)", "Refusal to provide informed consent (prospective arm)", "Patients transferred out before delivery", ], size=13, color=DARK_TEXT) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 7 – Sample Size # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Sample Size & Sampling Method") footer(s, 7) # Formula box add_rect(s, Inches(0.4), Inches(1.55), Inches(8.5), Inches(3.6), WHITE) add_rect(s, Inches(0.4), Inches(1.55), Inches(8.5), Inches(0.08), TEAL) tb(s, Inches(0.6), Inches(1.72), Inches(8.1), Inches(0.42), "Sample Size Formula (Proportion)", 15, bold=True, color=NAVY) tb(s, Inches(0.6), Inches(2.18), Inches(8.1), Inches(0.55), "n = Z²α/2 × P(1−P) / d²", 20, bold=True, color=TEAL, align=PP_ALIGN.CENTER, font="Courier New") params = [ ("Z (95% CI)", "1.96"), ("P (estimated guideline adherence)", "0.60 (60%)"), ("d (absolute precision)", "0.05 (5%)"), ("Calculated n", "369 patients"), ("+ 10% for incomplete records", "≈ 400 patients (FINAL)"), ] for i, (lbl, val) in enumerate(params): y = Inches(2.85 + i * 0.45) bg = LIGHT_BG if i % 2 == 0 else WHITE add_rect(s, Inches(0.6), y, Inches(8.1), Inches(0.43), bg) tb(s, Inches(0.7), y + Inches(0.04), Inches(5.5), Inches(0.38), lbl, 13, color=DARK_TEXT) tb(s, Inches(6.0), y + Inches(0.04), Inches(2.4), Inches(0.38), val, 13, bold=(i==4), color=NAVY if i==4 else TEAL, align=PP_ALIGN.RIGHT) # Right – sampling add_rect(s, Inches(9.3), Inches(1.55), Inches(3.6), Inches(3.6), WHITE) add_rect(s, Inches(9.3), Inches(1.55), Inches(3.6), Inches(0.08), ORANGE) tb(s, Inches(9.4), Inches(1.72), Inches(3.4), Inches(0.38), "Sampling Method", 15, bold=True, color=NAVY) bullet_box(s, Inches(9.4), Inches(2.15), Inches(3.4), Inches(2.9), ["Consecutive sampling", "All eligible women in study period enrolled", "No random exclusion", "Minimises selection bias", ], size=13, color=DARK_TEXT) # Distribution note add_rect(s, Inches(0.4), Inches(5.3), Inches(12.5), Inches(0.92), NAVY) tb(s, Inches(0.6), Inches(5.38), Inches(12.1), Inches(0.76), "Expected distribution: ~200 from retrospective arm (2 yrs records) + ~200 from prospective arm (12 months enrollment)\n" "Anticipated HDP prevalence in study centre: 10–15% of deliveries. Adjusted for ~10% missing data / dropouts.", 12.5, color=WHITE) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 8 – Data Variables & Outcome Measures # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Data Variables & Outcome Measures") footer(s, 8) col_data = [ ("Sociodemographic", ["Age, gravida/parity", "Gestational age at diagnosis", "BMI, socioeconomic status", "ANC history"]), ("Clinical / BP", ["BP values (all readings)", "Symptoms (headache, visual Δ,\nepigastric pain, oedema)", "Proteinuria (dipstick,\nspot PCR, 24-h urine)"]), ("Investigations", ["CBC, LFT, RFT, uric acid", "Coagulation profile", "USG: growth, AFI, BPP", "Umbilical artery Doppler, NST"]), ("Management", ["Antihypertensive agents\n(drug, dose, route)", "Acute severe HTN rx", "MgSO₄ (indication, dose,\nmonitoring)", "Steroids, IOL, LSCS"]), ] for i, (title, items) in enumerate(col_data): x = Inches(0.35 + i * 3.25) add_rect(s, x, Inches(1.55), Inches(3.1), Inches(2.95), WHITE) add_rect(s, x, Inches(1.55), Inches(3.1), Inches(0.38), TEAL) tb(s, x+Inches(0.1), Inches(1.59), Inches(2.9), Inches(0.34), title, 13, bold=True, color=WHITE) bullet_box(s, x+Inches(0.1), Inches(2.0), Inches(2.9), Inches(2.4), items, size=12, bullet="•", color=DARK_TEXT) # Outcome boxes add_rect(s, Inches(0.35), Inches(4.65), Inches(6.1), Inches(2.1), RGBColor(0xE8,0xF4,0xFB)) add_rect(s, Inches(0.35), Inches(4.65), Inches(6.1), Inches(0.38), NAVY) tb(s, Inches(0.5), Inches(4.69), Inches(5.8), Inches(0.34), "MATERNAL OUTCOMES", 13, bold=True, color=WHITE) bullet_box(s, Inches(0.5), Inches(5.1), Inches(5.8), Inches(1.55), ["Severe HTN | Eclampsia | HELLP syndrome", "AKI | Pulmonary oedema | Abruption placentae", "PPH | DIC | ICU admission | Maternal death", ], size=12.5, bullet="▸", color=DARK_TEXT) add_rect(s, Inches(6.9), Inches(4.65), Inches(6.05), Inches(2.1), RGBColor(0xF0,0xFB,0xF0)) add_rect(s, Inches(6.9), Inches(4.65), Inches(6.05), Inches(0.38), RGBColor(0x10,0x7C,0x41)) tb(s, Inches(7.05), Inches(4.69), Inches(5.8), Inches(0.34), "FETAL / NEONATAL OUTCOMES", 13, bold=True, color=WHITE) bullet_box(s, Inches(7.05), Inches(5.1), Inches(5.8), Inches(1.55), ["Preterm birth | SGA (<10th centile) | IUGR", "APGAR at 1 & 5 min | NICU admission & duration", "Perinatal death | Neonatal complications", ], size=12.5, bullet="▸", color=DARK_TEXT) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 9 – Guideline Adherence Framework # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Guideline Adherence Assessment Framework", "Assessed against ISSHP 2021 / FOGSI / NICE (updated 2023)") footer(s, 9) items_adh = [ ("1", "BP threshold for treatment", "Antihypertensive started at BP ≥140/90 mmHg"), ("2", "First-line agent choice", "Labetalol / Nifedipine (MR) / Methyldopa used"), ("3", "Acute severe HTN management", "IV labetalol/hydralazine or oral nifedipine within 30–60 min"), ("4", "MgSO₄ prophylaxis", "Given to ALL PE with severe features"), ("5", "Fetal growth ultrasound", "Performed at diagnosis and every 2–4 weeks"), ("6", "Umbilical artery Doppler", "Performed at diagnosis and serially"), ("7", "Timing – GH", "Delivery offered at ≥37 weeks"), ("8", "Timing – PE without severe features","Delivery offered at ≥37 weeks"), ("9", "Timing – PE with severe features", "Delivery planned from ≥34 weeks"), ("10", "Corticosteroids", "Given for fetal lung maturity if <34 weeks"), ("11", "Postpartum review", "Scheduled at 6 weeks postpartum"), ("12", "BP target documented", "135/85 mmHg target recorded in notes"), ] add_rect(s, Inches(0.35), Inches(1.5), Inches(0.5), Inches(5.1), NAVY) add_rect(s, Inches(0.85), Inches(1.5), Inches(3.5), Inches(5.1), RGBColor(0xD0,0xE8,0xF5)) add_rect(s, Inches(4.35), Inches(1.5), Inches(8.65), Inches(5.1), WHITE) # column headers tb(s, Inches(0.38), Inches(1.5), Inches(0.46), Inches(0.35), "#", 11, bold=True, color=WHITE, align=PP_ALIGN.CENTER) tb(s, Inches(0.87), Inches(1.5), Inches(3.46), Inches(0.35), "DOMAIN", 11, bold=True, color=NAVY) tb(s, Inches(4.37), Inches(1.5), Inches(5.5), Inches(0.35), "GUIDELINE RECOMMENDATION", 11, bold=True, color=NAVY) tb(s, Inches(10.2), Inches(1.5), Inches(2.7), Inches(0.35), "SCORE (Yes / No / N/A)", 11, bold=True, color=NAVY, align=PP_ALIGN.CENTER) add_rect(s, Inches(0.35), Inches(1.85), Inches(12.6), Inches(0.04), TEAL) for i, (num, domain, rec) in enumerate(items_adh): y = Inches(1.9 + i * 0.38) bg = LIGHT_BG if i % 2 == 0 else WHITE add_rect(s, Inches(0.85), y, Inches(3.5), Inches(0.37), bg) add_rect(s, Inches(4.35), y, Inches(5.75), Inches(0.37), bg) add_rect(s, Inches(10.1), y, Inches(2.8), Inches(0.37), bg) tb(s, Inches(0.38), y+Inches(0.04), Inches(0.46), Inches(0.3), num, 10.5, color=WHITE, bold=True, align=PP_ALIGN.CENTER) tb(s, Inches(0.9), y+Inches(0.04), Inches(3.4), Inches(0.3), domain, 10.5, color=DARK_TEXT) tb(s, Inches(4.38), y+Inches(0.04), Inches(5.6), Inches(0.3), rec, 10.5, color=DARK_TEXT) # Score boxes for j, lbl in enumerate(["Yes","No","N/A"]): add_rect(s, Inches(10.15 + j*0.9), y+Inches(0.05), Inches(0.75), Inches(0.27), RGBColor(0xE0,0xE8,0xF0)) tb(s, Inches(10.15 + j*0.9), y+Inches(0.05), Inches(0.75), Inches(0.27), lbl, 9, color=MID_GREY, align=PP_ALIGN.CENTER) # scoring note add_rect(s, Inches(0.35), Inches(6.62), Inches(12.6), Inches(0.5), NAVY) tb(s, Inches(0.5), Inches(6.67), Inches(12.2), Inches(0.4), "Adherence Score = Items Met / Total Applicable × 100% | Low: <50% Moderate: 50–74% High: ≥75%", 12, color=WHITE) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 10 – Statistical Analysis # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Statistical Analysis Plan") footer(s, 10) analysis = [ ("Descriptive Statistics", ["Continuous: Mean ± SD or Median (IQR)", "Categorical: Frequency & percentage", "Tables for sociodemographic & clinical variables"]), ("Group Comparisons", ["GH vs PE: Independent t-test / Mann–Whitney U", "Categorical: Chi-square / Fisher's exact test", "Adherent vs Non-adherent group outcomes"]), ("Multivariate Analysis", ["Binary logistic regression for adverse outcomes", "Predictors: age, parity, GA, HTN severity,\n management type, guideline adherence score", "Results expressed as Adjusted OR (95% CI)"]), ("Correlation", ["Spearman's rank correlation: guideline adherence\n score vs outcome parameters", "p-value <0.05 = statistically significant"]), ("Software", ["IBM SPSS v26 / Stata", "Charts: MS Excel / SPSS", "Missing data: documented, excluded listwise"]), ("Subgroup Analyses", ["By HDP type (GH / PE without SF / PE with SF)", "By gestational age at diagnosis (<34 / 34–37 / ≥37 wk)", "By antihypertensive regimen used"]), ] for i, (title, items) in enumerate(analysis): row = i // 3 col = i % 3 x = Inches(0.35 + col * 4.35) y = Inches(1.55 + row * 2.65) add_rect(s, x, y, Inches(4.15), Inches(2.45), WHITE) add_rect(s, x, y, Inches(4.15), Inches(0.38), TEAL if col % 2 == 0 else NAVY) tb(s, x+Inches(0.1), y+Inches(0.04), Inches(3.95), Inches(0.34), title, 13, bold=True, color=WHITE) bullet_box(s, x+Inches(0.1), y+Inches(0.45), Inches(3.9), Inches(1.9), items, size=12, bullet="▸", color=DARK_TEXT) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 11 – Ethical Considerations # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Ethical Considerations", "As per ICMR National Ethical Guidelines for Biomedical and Health Research 2017") footer(s, 11) eth_items = [ ("IEC Approval", NAVY, "Institutional Ethics Committee approval will be obtained BEFORE commencement.\n" "IEC registration no.: [XXXX] | Proposed IEC meeting: [Month Year]"), ("Informed Consent\n(Prospective Arm)", TEAL, "Written informed consent in local language from all prospective participants.\n" "Consent covers: data use, publication, right to withdraw without consequence."), ("Consent Waiver\n(Retrospective Arm)", RGBColor(0x10,0x7C,0x41), "Waiver of informed consent to be sought for anonymised retrospective records,\n" "in accordance with ICMR 2017 guidelines."), ("Confidentiality\n& Data Security", RGBColor(0x6A,0x3D,0x99), "All patient identifiers replaced by study IDs. Data stored in password-protected\n" "files accessible only to investigators. No personal data in publications."), ("No Intervention / Risk", ORANGE, "This is a purely observational study. No treatment is altered, withheld, or\n" "added for research purposes. Zero additional risk to participants."), ("Benefit to Society", RGBColor(0x00,0x7A,0x87), "Findings will identify care gaps and inform quality improvement. Indirect benefit\n" "to future patients through improved guideline implementation."), ] for i, (title, col, text) in enumerate(eth_items): row = i // 2 c = i % 2 x = Inches(0.35 + c * 6.55) y = Inches(1.55 + row * 1.72) add_rect(s, x, y, Inches(6.25), Inches(1.58), WHITE) add_rect(s, x, y, Inches(0.1), Inches(1.58), col) tb(s, x+Inches(0.2), y+Inches(0.1), Inches(5.9), Inches(0.42), title, 13.5, bold=True, color=col) tb(s, x+Inches(0.2), y+Inches(0.52), Inches(5.9), Inches(1.0), text, 12, color=DARK_TEXT, wrap=True) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 12 – Expected Outcomes & Significance # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) slide_bg(s) header_bar(s, "Expected Outcomes & Study Significance") footer(s, 12) outcomes = [ ("Data Generated", ["Prevalence & clinical profile of GH and PE in a tertiary Indian centre", "Real-world antihypertensive prescribing patterns vs. guidelines", "Rates of maternal and perinatal complications", "Quantified guideline adherence scores with specific gap identification"]), ("Clinical Impact", ["Targeted quality improvement initiatives at institutional level", "Protocol development and SOP creation for HDP management", "Input for continuing medical education (CME) programmes", "Identification of high-risk subgroups requiring intensified monitoring"]), ("Research Contribution", ["One of few Indian studies correlating adherence with outcomes", "Ambispective design offers robust, larger dataset vs. purely prospective", "Publication in a peer-reviewed indexed journal (JOGI / JAPI / BJOG)", "Foundation for multicentre / interventional follow-up research"]), ] for i, (title, items) in enumerate(outcomes): x = Inches(0.35 + i * 4.35) add_rect(s, x, Inches(1.55), Inches(4.15), Inches(5.0), WHITE) add_rect(s, x, Inches(1.55), Inches(4.15), Inches(0.42), [NAVY, TEAL, ORANGE][i]) tb(s, x+Inches(0.1), Inches(1.59), Inches(3.95), Inches(0.38), title, 14, bold=True, color=WHITE) bullet_box(s, x+Inches(0.1), Inches(2.05), Inches(3.9), Inches(4.35), items, size=13, bullet="▸", color=DARK_TEXT) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 13 – Thank You / Questions # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, W, H, NAVY) add_rect(s, 0, Inches(3.3), W, Inches(0.08), TEAL) tb(s, Inches(1), Inches(1.2), Inches(11.3), Inches(1.2), "Thank You", 56, bold=True, color=WHITE, align=PP_ALIGN.CENTER) tb(s, Inches(1), Inches(2.55), Inches(11.3), Inches(0.55), "We welcome your questions, suggestions, and guidance.", 20, color=RGBColor(0xB0,0xD0,0xE8), align=PP_ALIGN.CENTER) tb(s, Inches(1), Inches(3.6), Inches(11.3), Inches(0.42), "Principal Investigator: [Name] | [Designation]", 15, color=WHITE, align=PP_ALIGN.CENTER) tb(s, Inches(1), Inches(4.05), Inches(11.3), Inches(0.42), "Department of Obstetrics & Gynaecology | [Institution]", 15, color=RGBColor(0xCC,0xDD,0xEE), align=PP_ALIGN.CENTER) tb(s, Inches(1), Inches(4.5), Inches(11.3), Inches(0.42), "Email: [email@institution.edu] | Phone: [XXXXXXXXXX]", 14, color=RGBColor(0x99,0xBB,0xDD), align=PP_ALIGN.CENTER) # key reference strip add_rect(s, 0, Inches(5.6), W, Inches(1.4), RGBColor(0x08,0x1D,0x40)) refs = ("Key References: ACOG PB 222 (2020, reaffirmed 2023) ▪ ISSHP 2021 Classification ▪ NICE NG133 (updated 2023)" " ▪ CHIPS Trial (NEJM 2015) ▪ HYPITAT Trial ▪ ICMR National Ethical Guidelines 2017" " ▪ Hup et al., AJOG 2025 [PMID 40216176] ▪ Ibirogba et al., Semin Perinatol 2026 [PMID 41453814]") tb(s, Inches(0.4), Inches(5.7), Inches(12.5), Inches(1.1), refs, 10, color=RGBColor(0x99,0xBB,0xDD), wrap=True) footer(s, 13) # ── Save ────────────────────────────────────────────────────────────────────── out = "/tmp/workspace/iec-presentation/IEC_GH_PreEclampsia_Study_Presentation.pptx" buf = BytesIO() prs.save(buf) with open(out, "wb") as f: f.write(buf.getvalue()) print(f"Saved: {out}") PYEOF echo "Script written OK"
cd /tmp/workspace/iec-presentation && python build_pptx.py 2>&1
~/iec-presentation/build_pptx.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/iec-presentation/build_pptx.py'
cd /tmp/workspace/iec-presentation && python build_pptx.py 2>&1
python -c " from pptx import Presentation prs = Presentation('/tmp/workspace/iec-presentation/IEC_GH_PreEclampsia_Study_Presentation.pptx') print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): texts = [s.text_frame.text.strip()[:60] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] if texts: print(f' Slide {i}: {texts[0]}') "
IEC GH PreEclampsia Study Presentation
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title Slide - Full study title, PI/co-investigator placeholders, institution, date |
| 2 | Presentation Overview - 10-item agenda with numbered card layout |
| 3 | Background & Rationale - 4 statistic highlight boxes (HDP 10-20%, PE 8-10%, 76,000 deaths/yr, 25% GH→PE progression) + key rationale bullets |
| 4 | Aim & Objectives - Primary aim box + 8 numbered specific objectives in a grid |
| 5 | Study Design - Side-by-side retrospective vs. prospective panels with a 6-phase timeline bar at the bottom |
| 6 | Eligibility Criteria - Green inclusion / Red exclusion two-column layout |
| 7 | Sample Size - Formula breakdown (Z, P, d, n = 369 → 400), sampling method, expected distribution |
| 8 | Data Variables & Outcomes - 4 data-domain boxes + separate maternal and fetal outcome panels |
| 9 | Guideline Adherence Framework - Full 12-item checklist table (ISSHP/FOGSI/NICE) with Yes/No/N/A scoring columns and adherence tier legend |
| 10 | Statistical Analysis Plan - 6-box grid: descriptive, group comparisons, logistic regression, correlation, software, subgroups |
| 11 | Ethical Considerations - 6 colour-coded cards: IEC approval, consent, waiver, confidentiality, no-intervention, societal benefit |
| 12 | Expected Outcomes & Significance - Data generated / Clinical impact / Research contribution |
| 13 | Thank You - Contact details + key references strip |
[Name], [Institution], [City], [email], [IEC registration no.] and adjust the retrospective/prospective date ranges to match your centre.