Make a ppt of
Topic: Arterial Blood Pressure Monitoring: Oscillometric, Continuous Non-invasive and Invasive Techniques, and Clinical Utility
blood pressure monitoring AND oscillometric
arterial blood pressure monitoring oscillometric continuous noninvasive invasive techniques clinical utility guideline
diagram oscillometric blood pressure cuff arterial waveform invasive arterial line monitoring
~/
https://pmc.ncbi.nlm.nih.gov/articles/PMC5766655
mkdir -p "/tmp/workspace/arterial-bp-monitoring/src" "/tmp/workspace/arterial-bp-monitoring/assets" "/tmp/workspace/arterial-bp-monitoring/output" && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/d7148dc450c60c5fffcffd40dd1bda40591269b23c0dc2a4caa8c5154e97588a.png" "https://cdn.orris.care/cdss_images/635d342370c9b259cffda6c86d73273e4b9aae84dc7873312590703168fd7786.png" > "/tmp/workspace/arterial-bp-monitoring/assets/images.json"
python - <<'PY' import json,base64 p='/tmp/workspace/arterial-bp-monitoring/assets/images.json' data=json.load(open(p)) for n,item in enumerate(data): print(n, item.get('url'), bool(item.get('base64')), item.get('error')) if item.get('base64'): header,b64=item['base64'].split(',',1) ext='.png' if 'png' in header else '.jpg' open(f'/tmp/workspace/arterial-bp-monitoring/assets/source_{n}{ext}','wb').write(base64.b64decode(b64)) PY
python - <<'PY' from pathlib import Path p=Path('/tmp/workspace/arterial-bp-monitoring/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.shapes import MSO_SHAPE, MSO_CONNECTOR from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.enum.dml import MSO_THEME_COLOR from pptx.enum.text import MSO_AUTO_SIZE from pptx.enum.shapes import MSO_SHAPE_TYPE from pptx.enum.dml import MSO_LINE_DASH_STYLE from pptx.enum.shapes import MSO_CONNECTOR from pptx.enum.text import PP_PARAGRAPH_ALIGNMENT from pptx.enum.shapes import MSO_SHAPE from pptx.enum.text import MSO_VERTICAL_ANCHOR from pptx import Presentation from pptx.util import Inches, Pt from pptx.dml.color import RGBColor from pptx.enum.shapes import MSO_SHAPE from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.enum.dml import MSO_LINE_DASH_STYLE from pptx.enum.shapes import MSO_CONNECTOR from pptx.enum.text import MSO_AUTO_SIZE from pptx.enum.text import MSO_VERTICAL_ANCHOR from pptx.enum.shapes import MSO_SHAPE from pptx.enum.dml import MSO_THEME_COLOR from math import sin, pi OUT='/tmp/workspace/arterial-bp-monitoring/output/Arterial_Blood_Pressure_Monitoring.pptx' AS='/tmp/workspace/arterial-bp-monitoring/assets' prs=Presentation(); prs.slide_width=Inches(13.333); prs.slide_height=Inches(7.5) blank=prs.slide_layouts[6] # palette NAVY=RGBColor(11,30,52); BLUE=RGBColor(26,107,168); TEAL=RGBColor(20,151,143); CYAN=RGBColor(76,194,203) RED=RGBColor(208,76,76); AMBER=RGBColor(231,160,55); GREEN=RGBColor(70,161,113) INK=RGBColor(28,42,56); MUTED=RGBColor(89,108,123); PALE=RGBColor(242,247,250); WHITE=RGBColor(255,255,255); LINE=RGBColor(209,221,229) # utilities def rect(sl,x,y,w,h,fill, radius=False, line=None, lw=0.8): sh=sl.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE, Inches(x), Inches(y), Inches(w), Inches(h)) sh.fill.solid(); sh.fill.fore_color.rgb=fill sh.line.color.rgb=line if line else fill; sh.line.width=Pt(lw) return sh def line(sl,x1,y1,x2,y2,color=LINE,width=1.2,dash=None): sh=sl.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, Inches(x1), Inches(y1), Inches(x2), Inches(y2)); sh.line.color.rgb=color; sh.line.width=Pt(width) if dash: sh.line.dash_style=dash return sh def txt(sl,x,y,w,h,text,size=18,color=INK,bold=False,align=PP_ALIGN.LEFT,font='Aptos',val=MSO_ANCHOR.TOP): tb=sl.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)); tf=tb.text_frame; tf.clear(); tf.word_wrap=True tf.margin_left=tf.margin_right=tf.margin_top=tf.margin_bottom=0; tf.vertical_anchor=val p=tf.paragraphs[0]; p.alignment=align; r=p.add_run(); r.text=text; r.font.name=font; r.font.size=Pt(size); r.font.bold=bold; r.font.color.rgb=color return tb def paras(sl,x,y,w,h,items,size=17,color=INK,leading=8): tb=sl.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)); tf=tb.text_frame; tf.clear(); tf.word_wrap=True tf.margin_left=tf.margin_right=tf.margin_top=tf.margin_bottom=0 for i,(head,body,accent) in enumerate(items): p=tf.paragraphs[0] if i==0 else tf.add_paragraph(); p.space_after=Pt(leading); p.level=0 p.text=''; r=p.add_run(); r.text=head; r.font.name='Aptos'; r.font.bold=True; r.font.size=Pt(size); r.font.color.rgb=accent if body: r=p.add_run(); r.text=body; r.font.name='Aptos'; r.font.size=Pt(size); r.font.color.rgb=color return tb def title(sl,kicker,heading,sub=''): txt(sl,.65,.38,12,.28,kicker.upper(),10,TEAL,True) txt(sl,.65,.72,12,0.55,heading,28,NAVY,True) if sub: txt(sl,.65,1.30,11.8,.35,sub,12,MUTED) line(sl,.65,1.78,12.68,1.78,LINE,.7) def footer(sl,n): line(sl,.65,7.08,12.68,7.08,LINE,.6) txt(sl,.65,7.16,8,.18,'ARTERIAL BLOOD PRESSURE MONITORING',8,MUTED,True) txt(sl,12.1,7.14,.55,.18,str(n).zfill(2),9,TEAL,True,PP_ALIGN.RIGHT) def chip(sl,x,y,w,label,color): rect(sl,x,y,w,.34,color,True); txt(sl,x,y+.075,w,.16,label,9,WHITE,True,PP_ALIGN.CENTER) def card(sl,x,y,w,h,head,body,accent=BLUE): rect(sl,x,y,w,h,WHITE,True,LINE,.8); rect(sl,x,y,.08,h,accent,False) txt(sl,x+.25,y+.2,w-.45,.28,head,15,INK,True) txt(sl,x+.25,y+.58,w-.45,h-.75,body,12,MUTED) def add_notes(sl, text): # notes text not essential pass # 1 cover s=prs.slides.add_slide(blank); rect(s,0,0,13.333,7.5,NAVY); rect(s,0,0,.22,7.5,TEAL) # abstract waveform for i in range(0,58): x=.65+i*.22 y=5.75 - (0.08*sin(i*.42)+ (0.62 if i%5==1 else 0) - (0.2 if i%5==2 else 0)) if i<57: nx=.65+(i+1)*.22; ny=5.75 - (0.08*sin((i+1)*.42)+ (0.62 if (i+1)%5==1 else 0) - (0.2 if (i+1)%5==2 else 0)) line(s,x,y,nx,ny,CYAN,1.6) txt(s,.78,.77,5,.30,'CLINICAL MONITORING',11,CYAN,True) txt(s,.78,1.35,10.7,1.7,'Arterial Blood\nPressure Monitoring',38,WHITE,True) txt(s,.8,3.3,9.4,.65,'Oscillometric, continuous non-invasive and invasive techniques, and clinical utility',18,RGBColor(207,224,234)) chip(s,.8,4.38,1.52,'INTERMITTENT',BLUE); chip(s,2.47,4.38,1.65,'CONTINUOUS',TEAL); chip(s,4.28,4.38,1.30,'INVASIVE',RED) txt(s,.8,6.68,8,.25,'Teaching deck | Perioperative and critical care monitoring',11,RGBColor(178,202,216)) # 2 framing s=prs.slides.add_slide(blank); title(s,'01 | clinical question','Choose the resolution of monitoring that the patient needs','Blood pressure is a surrogate for perfusion, not perfusion itself. Match technique to acuity, decision speed and sampling needs.') # continuum line(s,1.15,3.25,12.0,3.25,BLUE,4) for x,c,lab,sub in [(1.4,BLUE,'Oscillometric','intermittent cuff'),(6.1,TEAL,'C-NIBP','beat-to-beat, cuffless/finger'),(10.7,RED,'Arterial line','beat-to-beat + sampling')]: sh=s.shapes.add_shape(MSO_SHAPE.OVAL,Inches(x),Inches(2.83),Inches(.82),Inches(.82));sh.fill.solid();sh.fill.fore_color.rgb=c;sh.line.color.rgb=WHITE txt(s,x-.35,3.85,1.55,.28,lab,15,INK,True,PP_ALIGN.CENTER);txt(s,x-.65,4.19,2.15,.25,sub,11,MUTED,False,PP_ALIGN.CENTER) for x,head,body,c in [(1.05,'Low risk','Routine OR / ward\nSnapshot every 3-5 min',BLUE),(4.45,'Detection gap','Instability may occur\nbetween cuff cycles',AMBER),(8.75,'High consequence','Titration, shock,\nfrequent ABGs',RED)]: card(s,x,5.05,2.65,1.25,head,body,c) footer(s,2) # 3 oscillometry s=prs.slides.add_slide(blank); title(s,'02 | oscillometric NIBP','Oscillometry: cuff oscillations reveal MAP most directly','Automated cuffs infer systolic and diastolic values using device-specific algorithms.') # image s.shapes.add_picture(AS+'/source_0.png', Inches(.78), Inches(2.02), width=Inches(5.2), height=Inches(3.75)) card(s,6.35,2.02,2.75,1.1,'1. Occlusion','Cuff pressure > SBP: minimal flow and oscillation.',BLUE) card(s,9.35,2.02,2.75,1.1,'2. Maximal pulse','Peak oscillation amplitude corresponds to MAP.',TEAL) card(s,6.35,3.38,2.75,1.1,'3. Algorithmic estimate','SBP and DBP are derived around the maximum.',AMBER) card(s,9.35,3.38,2.75,1.1,'4. Repeat cycle','A new reading is a point estimate, not a continuous trend.',RED) rect(s,6.35,5.10,5.75,.70,PALE,True,LINE); txt(s,6.60,5.28,5.25,.3,'Practical anchor: correct cuff size, position and validation determine usefulness.',12,INK,True) txt(s,.82,5.98,5.2,.35,'Source figure: Morgan & Mikhail, Clinical Anesthesiology, 7e, p. 158.',9,MUTED) footer(s,3) # 4 limitations s=prs.slides.add_slide(blank); title(s,'03 | intermittent measurement','Where oscillometry works, and where it misleads','The cuff is efficient for stable patients. It becomes less dependable when signal quality or perfusion is poor.') for x,y,head,body,c in [(0.8,2.15,'Strength','Fast, automated, non-invasive\nRoutine anesthesia and ward care',GREEN),(4.48,2.15,'Signal limits','Arrhythmia, movement, shivering\nLow flow or vasoconstriction',AMBER),(8.16,2.15,'Technique limits','Wrong cuff size, poor placement\nCuff on IV line or dialysis access',RED),(0.8,4.45,'Physiology limits','Stiff arteries, severe obesity\nExtremes of BP can widen bias',AMBER),(4.48,4.45,'Temporal blind spot','A 3-5 minute cycle can miss\nrapid induction or bleeding events',RED),(8.16,4.45,'Escalation cue','If values drive urgent therapy,\nseek a more reliable continuous method',TEAL)]: rect(s,x,y,3.3,1.62,WHITE,True,LINE); rect(s,x,y,3.3,.13,c) txt(s,x+.22,y+.30,2.86,.25,head,15,INK,True);txt(s,x+.22,y+.70,2.85,.6,body,12,MUTED) footer(s,4) #5 CNIBP s=prs.slides.add_slide(blank); title(s,'04 | continuous non-invasive BP','Continuous without an arterial puncture','C-NIBP provides a waveform and trend but needs method-specific quality checks and may require cuff calibration.') # three columns for x,lab,tech,detail,c in [(0.75,'VOLUME CLAMP','Finger cuff','Photoplethysmography controls cuff pressure to maintain arterial volume.',TEAL),(4.58,'APPLANATION','Tonometry','Surface sensor flattens a superficial artery over a firm support.',BLUE),(8.41,'PULSE-BASED','Reconstruction','Pulse transit / contour algorithms estimate arterial pressure from a peripheral signal.',AMBER)]: rect(s,x,2.15,3.35,2.6,WHITE,True,LINE); chip(s,x+.22,2.4,1.35,lab,c);txt(s,x+.22,2.95,2.8,.3,tech,20,INK,True);txt(s,x+.22,3.53,2.85,.70,detail,12,MUTED) # visual mini finger rect(s,.95,5.35,10.9,.85,PALE,True,LINE); txt(s,1.18,5.53,10.4,.25,'Clinical role: fill the gap between cuff snapshots and an arterial line when trending matters but cannulation is not warranted or not feasible.',14,INK,True) txt(s,.8,6.47,11.8,.25,'Tonometry is sensitive to motion and requires frequent calibration; continuous non-invasive values are not automatically interchangeable with invasive values.',10,MUTED) footer(s,5) #6 CNIBP evaluation s=prs.slides.add_slide(blank); title(s,'05 | C-NIBP clinical utility','Trend detector, not a universal arterial-line replacement','Its main value is early recognition of rapid change. Use absolute numbers cautiously when treatment thresholds are tight.') # Draw two rows for y,label,items in [(2.22,'Favors C-NIBP',['Moderate-risk anesthesia','Need for earlier hypotension detection','Short procedures or difficult arterial access']), (4.55,'Favors arterial line',['Vasoactive titration / severe shock','Repeated ABG or laboratory sampling','High-risk surgery with rapid shifts'])]: txt(s,.83,y,.95,.32,label,14,TEAL if y<3 else RED,True) for j,it in enumerate(items): x=2.05+j*3.35; rect(s,x,y-.18,2.92,.9,WHITE,True,LINE); txt(s,x+.17,y+.10,2.55,.40,it,12,INK,True,PP_ALIGN.CENTER, val=MSO_ANCHOR.MIDDLE) line(s,.82,3.78,12.1,3.78,LINE,1) rect(s,.82,6.10,11.28,.55,RGBColor(234,246,245),True,RGBColor(194,228,224));txt(s,1.05,6.26,10.8,.2,'Interpret device trends in context: perfusion exam, capnography, ECG, urine output, lactate and clinical trajectory.',11,INK,True) footer(s,6) #7 invasive system s=prs.slides.add_slide(blank); title(s,'06 | invasive arterial pressure','A fluid-filled system turns arterial pulsation into a continuous waveform','The arterial catheter also enables frequent arterial blood sampling.') # system diagram # artery/cath rect(s,.85,3.25,1.35,.5,RED,True);txt(s,.92,3.39,1.2,.16,'RADIAL ARTERY',9,WHITE,True,PP_ALIGN.CENTER) line(s,2.22,3.50,3.25,3.50,RED,2.5);rect(s,3.22,3.21,1.25,.58,BLUE,True);txt(s,3.34,3.39,1.0,.16,'CATHETER',9,WHITE,True,PP_ALIGN.CENTER) line(s,4.48,3.50,6.0,3.50,BLUE,2.5);rect(s,5.98,3.17,1.45,.66,TEAL,True);txt(s,6.12,3.39,1.15,.16,'TUBING',9,WHITE,True,PP_ALIGN.CENTER) line(s,7.44,3.50,8.35,3.50,TEAL,2.5);rect(s,8.32,3.05,1.7,.9,NAVY,True);txt(s,8.48,3.30,1.38,.25,'TRANSDUCER',10,WHITE,True,PP_ALIGN.CENTER) line(s,10.03,3.50,10.72,3.50,NAVY,2.5);rect(s,10.68,2.84,1.5,1.32,INK,True);txt(s,10.83,3.15,1.2,.2,'MONITOR',10,WHITE,True,PP_ALIGN.CENTER) # waveform pts=[] for i in range(18): x=10.82+i*.067; phase=i%5 vals=[.72,.15,.48,.62,.70]; y=3.08+vals[phase] pts.append((x,y)) for a,b in zip(pts,pts[1:]): line(s,a[0],a[1],b[0],b[1],CYAN,1.1) for x,head,body,c in [(1.0,'Sites','Radial most common; femoral, axillary, brachial or dorsalis pedis selected case-by-case.',BLUE),(4.45,'Indications','Anticipated instability, tight beat-to-beat control, or serial arterial samples.',RED),(8.25,'What it adds','Continuous waveform quality and immediate response to intervention.',TEAL)]:card(s,x,5.18,3.18,1.1,head,body,c) footer(s,7) #8 waveform & artifacts s=prs.slides.add_slide(blank); title(s,'07 | waveform fidelity','Trust the MAP, but troubleshoot the waveform before treating numbers','Level and zero the transducer at the phlebostatic axis. Assess the dynamic response with a fast-flush test.') # three wave panels for x,head,sub,c,pattern in [(0.85,'Optimal damping','Clear upstroke and dicrotic notch',GREEN,'opt'),(4.58,'Overdamped','Blunted waveform: low SBP, high DBP',AMBER,'over'),(8.31,'Underdamped','Ringing: high SBP, low DBP',RED,'under')]: rect(s,x,2.15,3.15,2.25,WHITE,True,LINE);txt(s,x+.2,2.38,2.7,.25,head,15,INK,True);txt(s,x+.2,2.72,2.7,.22,sub,10,MUTED) base=3.82; line(s,x+.25,base,x+2.85,base,LINE,.8) pts=[] for i in range(25): xx=x+.26+i*.105 if pattern=='opt': yy=base-([0,.08,.75,.33,.52,.60,.64,.64][i%8]) elif pattern=='over': yy=base-([0,.04,.34,.25,.29,.31,.32,.32][i%8]) else: yy=base-([0,.15,.83,.16,.62,.30,.47,.40][i%8]) pts.append((xx,yy)) for a,b in zip(pts,pts[1:]):line(s,a[0],a[1],b[0],b[1],c,1.7) for x,head,body in [(0.88,'Overdamped causes','Air bubble, clot, kink, compliant tubing, loose connection.'),(4.64,'Underdamped causes','Long stiff tubing or low system damping: amplified ringing.'),(8.38,'Fast-flush target','Square wave then 1-2 oscillations before returning to baseline.')]:card(s,x,5.0,3.12,1.06,head,body,BLUE) footer(s,8) #9 risks & safeguard s=prs.slides.add_slide(blank); title(s,'08 | invasive technique','Accuracy has a procedural cost','Use aseptic technique and ongoing line care. Reassess whether the arterial line remains necessary.') # risk/control table headers=['Risk / failure mode','Practical safeguard','Clinical consequence if missed'] for i,h in enumerate(headers): rect(s,.8+i*4.12,2.08,3.92,.48,NAVY,True);txt(s,1.0+i*4.12,2.23,3.5,.17,h,11,WHITE,True) rows=[('Infection','Sterile insertion, dressing and daily review','Sepsis or line-related infection'),('Thrombosis / ischemia','Site selection; inspect perfusion and limb','Distal ischemia / tissue injury'),('Bleeding / disconnection','Secure connections; pressure bag and alarms','Blood loss or air entry'),('Measurement artifact','Level/zero, flush test, remove air/kinks','Inappropriate vasoactive or fluid therapy')] for r,(a,b,c) in enumerate(rows): y=2.57+r*.77 for i,val in enumerate([a,b,c]): rect(s,.8+i*4.12,y,3.92,.75,WHITE,False,LINE);txt(s,1.0+i*4.12,y+.18,3.48,.38,val,11,INK, True if i==0 else False, val=MSO_ANCHOR.MIDDLE) rect(s,.8,6.05,12.15,.58,RGBColor(255,244,241),True,RGBColor(246,207,194));txt(s,1.04,6.23,11.6,.2,'Decision rule: use direct monitoring when the benefit of rapid, reliable information exceeds the insertion and maintenance risk.',12,INK,True) footer(s,9) #10 algorithm s=prs.slides.add_slide(blank); title(s,'09 | bedside selection','A pragmatic escalation pathway','Use the least invasive technique that reliably answers the question at hand.') # flow steps=[('Is the patient stable?','No rapid change expected\nNo serial arterial sampling',BLUE),('Do cuff readings change care?','Hypotension, arrhythmia,\npoor signal or unreliable cuff?',AMBER),('Is beat-to-beat trend enough?','Consider C-NIBP if validated\nand clinical thresholds allow.',TEAL),('Need accuracy + sampling?','Insert arterial line; level, zero\nand verify waveform.',RED)] for i,(h,b,c) in enumerate(steps): x=.7+i*3.12; rect(s,x,2.36,2.65,1.4,WHITE,True,LINE);rect(s,x,2.36,2.65,.13,c);txt(s,x+.19,2.63,2.25,.35,h,14,INK,True);txt(s,x+.19,3.12,2.25,.42,b,10,MUTED) if i<3: line(s,x+2.65,3.05,x+3.06,3.05,c,2.2) # decision axis rect(s,1.0,5.08,11.2,.42,PALE,True,LINE) for x,lab,c in [(1.14,'Cuff\nNIBP',BLUE),(4.83,'C-NIBP',TEAL),(8.55,'Arterial\nline',RED)]: sh=s.shapes.add_shape(MSO_SHAPE.OVAL,Inches(x),Inches(4.83),Inches(.92),Inches(.92));sh.fill.solid();sh.fill.fore_color.rgb=c;sh.line.color.rgb=WHITE txt(s,x-.25,5.72,1.42,.36,lab,11,INK,True,PP_ALIGN.CENTER) txt(s,1.03,6.45,10.9,.24,'Escalate for clinical consequence, not merely for a single discrepant number. First check cuff, position, transducer and waveform quality.',12,MUTED,False,PP_ALIGN.CENTER) footer(s,10) #11 key takeaway s=prs.slides.add_slide(blank); title(s,'10 | take-home messages','Method, measurement quality and context are inseparable','A monitoring device is only useful when its signal is credible and its time resolution matches the patient’s risk.') for y,num,head,body,c in [(2.05,'1','Oscillometry is the default for stable care.','MAP tracks the maximum cuff oscillation; SBP and DBP are algorithm-derived.',BLUE),(3.22,'2','Continuous non-invasive monitors add trend resolution.','They are best viewed as a bridge, not a blanket substitute for invasive measurement.',TEAL),(4.39,'3','An arterial line is for consequence-heavy decisions.','It provides beat-to-beat pressure, waveform assessment and arterial sampling, but requires technical discipline.',RED)]: sh=s.shapes.add_shape(MSO_SHAPE.OVAL, Inches(.9), Inches(y), Inches(.58), Inches(.58));sh.fill.solid();sh.fill.fore_color.rgb=c;sh.line.color.rgb=c;txt(s,.9,y+.15,.58,.16,num,12,WHITE,True,PP_ALIGN.CENTER) txt(s,1.75,y,9.8,.3,head,16,INK,True);txt(s,1.75,y+.40,9.8,.32,body,12,MUTED) rect(s,.9,6.05,11.65,.55,NAVY,True);txt(s,1.22,6.22,11,.2,'Before changing therapy, verify the measurement.',15,WHITE,True,PP_ALIGN.CENTER) footer(s,11) #12 refs s=prs.slides.add_slide(blank); title(s,'references','Selected sources','Textbook and review sources used to prepare this teaching presentation.') refs=[ 'Morgan & Mikhail’s Clinical Anesthesiology, 7th ed. Chapter 5, “Arterial Blood Pressure,” pp. 156-161.', 'Fischer’s Mastery of Surgery, 8th ed. “Arterial Blood Pressure Monitoring,” pp. 316-319.', 'Guyton and Hall Textbook of Medical Physiology. “Clinical methods for measuring systolic and diastolic pressures,” p. 175.', 'Saugel B, et al. Techniques for Non-Invasive Monitoring of Arterial Blood Pressure. Front Med. 2017;4:231. PMCID: PMC5766655.', 'Bauer M, et al. Comparison of oscillometric, non-invasive and invasive arterial pressure monitoring in bariatric surgery. BMC Anesthesiol. 2022. PMCID: PMC8962134.', 'Arterial Pressure Monitoring. StatPearls. NCBI Bookshelf. Updated 2025.' ] for i,r in enumerate(refs): y=2.05+i*.62; rect(s,.82,y,11.9,.46,WHITE,True,LINE);txt(s,1.05,y+.13,11.4,.18,r,11,INK) txt(s,.83,6.38,11.5,.3,'Educational use only. Local policy, validated devices and patient-specific assessment govern clinical practice.',10,MUTED) footer(s,12) prs.save(OUT) print(OUT) ''') PY python "/tmp/workspace/arterial-bp-monitoring/src/create_deck.py"