Small ppt presentation on inotrope and vasopressor escalation, up and down titration
vasopressors inotropes septic shock
Surviving Sepsis Campaign 2021 vasopressor norepinephrine vasopressin guidelines
~/
mkdir -p "/tmp/workspace/inotrope-vasopressor-ppt/src" "/tmp/workspace/inotrope-vasopressor-ppt/output"
python - <<'PY' from pathlib import Path p=Path('/tmp/workspace/inotrope-vasopressor-ppt/src/create_deck.py') p.write_text(r'''from pptx import Presentation from pptx.util import Inches, Pt from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR from pptx.enum.dml import MSO_THEME_COLOR OUT='/tmp/workspace/inotrope-vasopressor-ppt/output/Inotrope_Vasopressor_Escalation_Titration.pptx' prs=Presentation(); prs.slide_width=Inches(13.333); prs.slide_height=Inches(7.5) blank=prs.slide_layouts[6] # colors NAVY=RGBColor(15,37,61); BLUE=RGBColor(25,98,145); TEAL=RGBColor(12,141,150); GREEN=RGBColor(43,134,96); AMBER=RGBColor(219,143,35); RED=RGBColor(187,63,60); PALE=RGBColor(242,247,250); GREY=RGBColor(80,95,108); LIGHT=RGBColor(220,230,236); WHITE=RGBColor(255,255,255) def rect(slide,x,y,w,h,fill, radius=False, line=None): s=slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE, Inches(x), Inches(y), Inches(w), Inches(h)) s.fill.solid(); s.fill.fore_color.rgb=fill s.line.color.rgb = line or fill return s def textbox(slide,x,y,w,h,text,size=18,color=NAVY,bold=False,align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.TOP, font='Aptos', margin=.04): b=slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)); tf=b.text_frame tf.clear(); tf.word_wrap=True; tf.margin_left=tf.margin_right=Inches(margin); tf.margin_top=tf.margin_bottom=Inches(margin); tf.vertical_anchor=valign lines=text.split('\n') for i,line in enumerate(lines): p=tf.paragraphs[0] if i==0 else tf.add_paragraph(); p.text=line; p.alignment=align p.space_after=Pt(4) for r in p.runs: r.font.name=font; r.font.size=Pt(size); r.font.bold=bold; r.font.color.rgb=color return b def title(slide,kicker,heading,sub=''): rect(slide,0,0,13.333,.22,TEAL) textbox(slide,.62,.42,12,.28,kicker.upper(),11,TEAL,True) textbox(slide,.62,.76,12.0,.55,heading,27,NAVY,True) if sub: textbox(slide,.62,1.35,12,.38,sub,12,GREY) rect(slide,.62,1.82,12.08,.02,LIGHT) def footer(slide,n): textbox(slide,.62,7.12,9,.18,'Adult ICU teaching aid | Use local drug concentrations, targets and escalation policy',8,GREY) textbox(slide,12.15,7.08,.5,.22,str(n),9,TEAL,True,PP_ALIGN.RIGHT) def bullet_box(slide,x,y,w,h,head,items,accent=BLUE): rect(slide,x,y,w,h,WHITE,True,LIGHT); rect(slide,x,y,w,.11,accent) textbox(slide,x+.22,y+.22,w-.44,.3,head,15,NAVY,True) yy=y+.67 for item in items: textbox(slide,x+.24,yy,.16,.25,'•',17,accent,True) textbox(slide,x+.45,yy,w-.66,.42,item,12,GREY) yy+=.58 def arrow(slide,x1,y1,x2,y2,c=TEAL): ln=slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, Inches(x1), Inches(y1), Inches(x2), Inches(y2)); ln.line.color.rgb=c; ln.line.width=Pt(2.2); ln.line.end_arrowhead=True # 1 s=prs.slides.add_slide(blank); rect(s,0,0,13.333,7.5,NAVY); rect(s,0,0,13.333,.22,TEAL) textbox(s,.75,1.12,11.7,.35,'ADULT ICU QUICK TEACHING DECK',14,RGBColor(119,213,211),True) textbox(s,.75,1.65,10.8,1.25,'Inotrope & Vasopressor\nEscalation and Titration',34,WHITE,True) textbox(s,.78,3.25,8.9,.55,'A physiology-led approach to pressure, flow, and safe weaning',18,RGBColor(213,227,237)) rect(s,.78,4.2,4.4,.68,TEAL,True); textbox(s,.98,4.38,4,.23,'PRESSURE • PERFUSION • REASSESS',11,WHITE,True,PP_ALIGN.CENTER) textbox(s,.78,6.65,11.4,.3,'Educational framework only. Stabilize the cause of shock and follow local ICU protocols.',10,RGBColor(189,209,223)) # 2 s=prs.slides.add_slide(blank); title(s,'1. Before the pump','Confirm shock physiology before escalating','Treat the cause and avoid reflex dose escalation.'); footer(s,2) bullet_box(s,.7,2.12,3.85,3.9,'1 | Is perfusion inadequate?', ['MAP below individualized target','Altered mentation or cool/mottled skin','Oliguria, rising lactate or delayed capillary refill'],TEAL) bullet_box(s,4.75,2.12,3.85,3.9,'2 | Is preload responsive?', ['Give fluid only if likely responsive','Use dynamic assessment where possible','Avoid fluid accumulation and congestion'],BLUE) bullet_box(s,8.8,2.12,3.85,3.9,'3 | What is the phenotype?', ['Vasoplegia: low SVR, low pressure','Pump failure: low output, congestion','Mixed shock: pressure and flow both impaired'],AMBER) textbox(s,.85,6.35,11.6,.38,'Parallel actions: secure access, source control or reperfusion, oxygenation/ventilation, rhythm correction, and bedside echocardiography when available.',12,NAVY,True,PP_ALIGN.CENTER) #3 s=prs.slides.add_slide(blank); title(s,'2. Choose the therapeutic target','Vasopressor for pressure. Inotrope for flow.','A normal MAP alone does not prove adequate cardiac output or tissue perfusion.'); footer(s,3) rect(s,.75,2.2,5.65,3.7,RGBColor(233,246,247),True,TEAL); textbox(s,1.05,2.55,5.0,.4,'VASOPRESSOR',22,TEAL,True,PP_ALIGN.CENTER) textbox(s,1.05,3.12,5.0,.46,'Primary problem: vasodilation / low SVR',15,NAVY,True,PP_ALIGN.CENTER) textbox(s,1.2,3.85,4.75,1.3,'Goal: restore perfusion pressure\nTypical first line: norepinephrine\nMonitor: MAP, HR/rhythm, extremities, ischemia',13,GREY,False,PP_ALIGN.CENTER) rect(s,6.92,2.2,5.65,3.7,RGBColor(247,241,230),True,AMBER); textbox(s,7.22,2.55,5.0,.4,'INOTROPE',22,AMBER,True,PP_ALIGN.CENTER) textbox(s,7.22,3.12,5.0,.46,'Primary problem: low cardiac output',15,NAVY,True,PP_ALIGN.CENTER) textbox(s,7.37,3.85,4.75,1.3,'Goal: improve forward flow\nTypical agent: dobutamine (selected cases)\nMonitor: output, perfusion, tachyarrhythmia, ischemia',13,GREY,False,PP_ALIGN.CENTER) textbox(s,.9,6.35,11.5,.35,'Mixed shock commonly needs both: establish pressure first, then add inotropy only when persistent hypoperfusion with cardiac dysfunction is evident.',12,NAVY,True,PP_ALIGN.CENTER) #4 s=prs.slides.add_slide(blank); title(s,'3. Vasopressor escalation','A practical adult septic/vasoplegic shock pathway','Illustrative sequencing. Use local concentrations and prescribed dose limits.'); footer(s,4) steps=[('1','Norepinephrine','Start early for persistent hypotension after initial resuscitation. Titrate to MAP and perfusion.'),('2','Add vasopressin','If norepinephrine requirement is escalating or target MAP remains unmet. Commonly a fixed-dose adjunct.'),('3','Add epinephrine','If MAP remains inadequate despite norepinephrine + vasopressin, or where it fits the physiology.'),('4','Reframe refractory shock','Echo/hemodynamics, source control, occult bleeding/obstruction, steroids if indicated, specialist input.')] for i,(num,h,body) in enumerate(steps): x=.65+i*3.15; rect(s,x,2.35,2.75,3.25,WHITE,True,LIGHT); rect(s,x+.92,2.05,.9,.55,[TEAL,BLUE,AMBER,RED][i],True); textbox(s,x+.92,2.18,.9,.2,num,13,WHITE,True,PP_ALIGN.CENTER); textbox(s,x+.2,2.83,2.35,.35,h,15,NAVY,True,PP_ALIGN.CENTER); textbox(s,x+.25,3.43,2.25,1.55,body,11,GREY,False,PP_ALIGN.CENTER) if i<3: arrow(s,x+2.78,3.95,x+3.05,3.95) textbox(s,.9,6.25,11.5,.45,'Guideline anchor: norepinephrine first line; add vasopressin rather than only escalating norepinephrine; then consider epinephrine if MAP remains inadequate.',12,NAVY,True,PP_ALIGN.CENTER) #5 s=prs.slides.add_slide(blank); title(s,'4. Inotrope escalation','Do not use an inotrope just to raise the blood pressure','Inotropy is for low-output physiology after adequate volume status and perfusion pressure.'); footer(s,5) for x,h,b,c in [(0.8,'Recognize','Persistent hypoperfusion despite MAP at goal\n+ echo/clinical evidence of cardiac dysfunction',TEAL),(4.75,'Support','Maintain vasopressor support\nAdd dobutamine to norepinephrine, or use epinephrine in selected cases',AMBER),(8.7,'Reassess','Check response promptly: flow/perfusion, lactate trend, urine output, HR/rhythm, ischemia',GREEN)]: rect(s,x,2.2,3.8,3.25,WHITE,True,LIGHT); rect(s,x,2.2,3.8,.12,c); textbox(s,x+.25,2.58,3.25,.35,h,19,NAVY,True,PP_ALIGN.CENTER); textbox(s,x+.38,3.35,3.05,1.35,b,13,GREY,False,PP_ALIGN.CENTER) textbox(s,.9,6.12,11.6,.5,'Stop or reduce if there is no perfusion benefit, or if tachyarrhythmia, myocardial ischemia, hypotension, or worsening dynamic obstruction occurs.',13,RED,True,PP_ALIGN.CENTER) #6 s=prs.slides.add_slide(blank); title(s,'5. Up-titration at the bedside','One change, one hypothesis, one reassessment','Avoid chasing a number. Define the target, interval, and stop criteria before each change.'); footer(s,6) items=[('SET TARGET','Usually MAP ≥65 mmHg initially, then individualize for chronic hypertension, neurovascular disease, and perfusion.','TEAL'),('TITRATE','Make small protocolized adjustments. Escalate only when hypotension or hypoperfusion persists and the mechanism fits.','BLUE'),('REASSESS','Within minutes for BP and rhythm; serially for capillary refill, mental state, urine output, lactate and echo/hemodynamics.','AMBER'),('ESCALATE SMARTLY','Add a complementary agent rather than simply increasing a single catecholamine indefinitely.','RED')] for i,(h,b,cname) in enumerate(items): c={'TEAL':TEAL,'BLUE':BLUE,'AMBER':AMBER,'RED':RED}[cname]; y=2.05+i*1.08; rect(s,.85,y,11.65,.78,WHITE,True,LIGHT); rect(s,.85,y,.17,.78,c); textbox(s,1.25,y+.15,2.1,.22,h,13,c,True); textbox(s,3.45,y+.13,8.65,.35,b,12,GREY) #7 s=prs.slides.add_slide(blank); title(s,'6. Down-titration and de-escalation','Wean the agent that is no longer treating an active problem','De-escalation begins when perfusion is stable and the underlying insult is controlled.'); footer(s,7) bullet_box(s,.75,2.15,3.8,3.85,'Readiness checklist',['MAP and peripheral perfusion stable','Lactate no longer rising; urine output acceptable','No new arrhythmia or ischemia','Fluid status and cause of shock reassessed'],GREEN) bullet_box(s,4.78,2.15,3.8,3.85,'Practical sequence',['Reduce catecholamine gradually with close monitoring','Avoid abrupt withdrawal of fixed-dose adjuncts','Reduce or stop inotrope if output/perfusion is adequate','Pause or reverse if hypotension recurs'],BLUE) bullet_box(s,8.81,2.15,3.8,3.85,'After each reduction',['Check MAP and rhythm immediately','Recheck perfusion trends and congestion','Document dose, target, response and plan','Reassess whether a different shock driver emerged'],TEAL) #8 s=prs.slides.add_slide(blank); title(s,'7. Safety, monitoring and documentation','Every titration needs a monitored endpoint','Dose ranges, line policies, and drug concentrations vary by institution.'); footer(s,8) for x,h,arr,c in [(0.75,'Continuous', ['Invasive BP where feasible','ECG and oxygen saturation','Infusion line/site surveillance'],TEAL),(4.78,'Serial',['Capillary refill / skin temperature','Mental status and urine output','Lactate plus focused echo/hemodynamics'],BLUE),(8.81,'Red flags',['New tachyarrhythmia or bradyarrhythmia','Myocardial ischemia / peripheral ischemia','No response despite escalating support'],RED)]: bullet_box(s,x,2.2,3.75,3.5,h,arr,c) textbox(s,.95,6.25,11.3,.38,'Document: shock phenotype, target MAP/perfusion goal, current agents and dose, response, adverse effects, next reassessment time, and senior review threshold.',12,NAVY,True,PP_ALIGN.CENTER) #9 s=prs.slides.add_slide(blank); title(s,'Take-home algorithm','Treat cause + choose pressure or flow target + reassess relentlessly','For adult ICU teaching. Not a substitute for local guideline or expert review.'); footer(s,9) boxes=[('SHOCK?','Confirm hypotension/hypoperfusion\nTreat cause; assess fluids','TEAL'),('LOW MAP?','Norepinephrine\nTarget MAP + perfusion','BLUE'),('STILL LOW MAP?','Add vasopressin\nThen consider epinephrine','AMBER'),('LOW FLOW?','After pressure adequate:\nconsider dobutamine','GREEN'),('IMPROVING?','Wean thoughtfully\nMonitor after every step','TEAL')] for i,(h,b,cname) in enumerate(boxes): c={'TEAL':TEAL,'BLUE':BLUE,'AMBER':AMBER,'GREEN':GREEN}[cname]; x=.45+i*2.55; rect(s,x,2.65,2.2,2.15,WHITE,True,LIGHT); rect(s,x,2.65,2.2,.12,c); textbox(s,x+.18,3.03,1.84,.32,h,14,NAVY,True,PP_ALIGN.CENTER); textbox(s,x+.2,3.62,1.8,.72,b,11,GREY,False,PP_ALIGN.CENTER) if i<4: arrow(s,x+2.2,3.73,x+2.47,3.73) textbox(s,.85,5.75,11.6,.48,'The question after any dose change: “Has tissue perfusion improved, and is the treatment causing harm?”',16,NAVY,True,PP_ALIGN.CENTER) #10 s=prs.slides.add_slide(blank); title(s,'References and clinical guardrails','Sources used for this teaching deck'); footer(s,10) refs=['Evans L, et al. Surviving Sepsis Campaign: International Guidelines for Management of Sepsis and Septic Shock 2021. Crit Care Med. 2021;49:e1063-e1143.','Surviving Sepsis Campaign International Guidelines for Management of Sepsis and Septic Shock, 2026 update. Society of Critical Care Medicine.','Goldman-Cecil Medicine, Circulatory Therapy: septic shock perfusion targets and vasoactive support, pp. 1098-1099.','Rosen’s Emergency Medicine, Vasoactive Drug Therapy and Inotropes: bedside principles of shock resuscitation.','Bauer SR, et al. Adjunctive Vasopressors and Short-Term Mortality in Adults With Septic Shock: systematic review and meta-analysis. Shock. 2025. PMID: 39965613.'] textbox(s,.9,2.2,11.5,.35,'Key guardrails',17,TEAL,True) textbox(s,.95,2.7,11.3,.7,'• This deck does not supply dosing. Prescribe and titrate using your unit’s approved concentration, monitoring and maximum-dose policy.\n• Seek immediate senior/critical-care review for refractory shock, escalating multi-agent support, arrhythmia, ischemia or uncertain phenotype.',12,NAVY) textbox(s,.9,3.85,11.5,.35,'References',17,TEAL,True) y=4.3 for r in refs: textbox(s,1.0,y,11.1,.36,'• '+r,10,GREY); y+=.43 prs.save(OUT) print(OUT) ''') PY python "/tmp/workspace/inotrope-vasopressor-ppt/src/create_deck.py"
Complete the above request
~/inotrope-vasopressor-ppt/output
python - <<'PY' from pptx import Presentation p='/tmp/workspace/inotrope-vasopressor-ppt/output/Inotrope_Vasopressor_Escalation_Titration.pptx' prs=Presentation(p) print('slides', len(prs.slides)) for i,s in enumerate(prs.slides,1): texts=[sh.text_frame.text.strip().replace('\n',' | ') for sh in s.shapes if getattr(sh,'has_text_frame',False) and sh.text_frame.text.strip()] print(i, len(s.shapes), texts[:3]) PY python - <<'PY' import zipfile p='/tmp/workspace/inotrope-vasopressor-ppt/output/Inotrope_Vasopressor_Escalation_Titration.pptx' with zipfile.ZipFile(p) as z: print('pptx zip OK', len(z.namelist()), 'files') PY
Inotrope Vasopressor Escalation Titration
Presentation · PPTX