difficult airway assesment ppt
~/
difficult airway AND assessment
2022 ASA Practice Guidelines Management of the Difficult Airway airway assessment official
difficult airway assessment clinical predictors Mallampati thyromental distance upper lip bite test
https://www.apsf.org/article/anesthesia-patient-safety-found…
PMID: 39020308
mkdir -p "/tmp/workspace/difficult-airway-assessment-ppt/src" "/tmp/workspace/difficult-airway-assessment-ppt/assets" "/tmp/workspace/difficult-airway-assessment-ppt/output" && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/5eadc78d5f84b6061726032932f3573e088fa317d255f30138c1eff1f3a4d79e.png" "https://cdn.orris.care/cdss_images/fa740904944f9b7679e191274bda9802580fcc69da0e9db82bfe5479a5216f7b.png" > "/tmp/workspace/difficult-airway-assessment-ppt/assets/images.json"
python - <<'PY' import json, base64, os p='/tmp/workspace/difficult-airway-assessment-ppt/assets/images.json' data=json.load(open(p)) for i, im in enumerate(data): if im.get('base64'): raw=base64.b64decode(im['base64'].split(',',1)[1]) open(f'/tmp/workspace/difficult-airway-assessment-ppt/assets/mallampati_{i+1}.png','wb').write(raw) PY cat > "/tmp/workspace/difficult-airway-assessment-ppt/src/create_deck.py" <<'PY' from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.shapes import MSO_SHAPE from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.dml.color import RGBColor from pptx.enum.dml import MSO_THEME_COLOR from pptx.enum.shapes import MSO_CONNECTOR from pptx.enum.text import MSO_AUTO_SIZE from pathlib import Path OUT=Path('/tmp/workspace/difficult-airway-assessment-ppt/output/Difficult_Airway_Assessment.pptx') AS=Path('/tmp/workspace/difficult-airway-assessment-ppt/assets') prs=Presentation(); prs.slide_width=Inches(13.333); prs.slide_height=Inches(7.5) blank=prs.slide_layouts[6] # colors NAVY=RGBColor(12,34,55); BLUE=RGBColor(25,92,140); TEAL=RGBColor(20,137,142); CYAN=RGBColor(115,205,214) RED=RGBColor(192,68,62); ORANGE=RGBColor(229,138,54); GREEN=RGBColor(50,140,95) INK=RGBColor(30,44,55); MID=RGBColor(85,104,116); PALE=RGBColor(241,246,248); WHITE=RGBColor(255,255,255); LINE=RGBColor(206,220,226) def rect(s,x,y,w,h,fill, radius=False, line=None): sh=s.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 or fill if radius: sh.adjustments[0]=0.12 return sh def text(s,txt,x,y,w,h,size=20,color=INK,bold=False,align=PP_ALIGN.LEFT, font='Aptos', margin=0.04): box=s.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)); tf=box.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=MSO_ANCHOR.MIDDLE for j,line in enumerate(txt.split('\n')): p=tf.paragraphs[0] if j==0 else tf.add_paragraph(); p.text=line; p.alignment=align p.space_after=Pt(2); p.font.name=font; p.font.size=Pt(size); p.font.bold=bold; p.font.color.rgb=color return box def title(s,ttl,sub=None,num=None): rect(s,0,0,13.333,0.24,TEAL) text(s,ttl,0.55,0.35,11.7,0.55,28,NAVY,True) if sub: text(s,sub,0.57,0.94,11.8,0.35,11,MID) if num: text(s,f'{num:02d}',12.35,0.38,0.45,0.34,13,TEAL,True,PP_ALIGN.RIGHT) def footer(s, source='Teaching deck | adult perioperative airway assessment'): rect(s,0.55,7.08,12.2,0.012,LINE) text(s,source,0.56,7.14,10.7,0.18,8,MID) text(s,'Difficult Airway Assessment',10.65,7.14,2.1,0.18,8,MID,False,PP_ALIGN.RIGHT) def bullet_list(s, items,x,y,w,h,size=17, accent=TEAL): yy=y for item in items: rect(s,x,yy+0.14,0.11,0.11,accent,True) text(s,item,x+0.22,yy,w-0.22,0.45,size,INK) yy+=0.58 def pill(s,txt,x,y,w,color): sh=rect(s,x,y,w,0.37,color,True); text(s,txt,x+0.06,y+0.03,w-0.12,0.29,11,WHITE,True,PP_ALIGN.CENTER) #1 s=prs.slides.add_slide(blank); rect(s,0,0,13.333,7.5,NAVY); rect(s,0,0,0.28,7.5,TEAL) text(s,'DIFFICULT AIRWAY',0.78,1.18,7.2,0.65,19,CYAN,True) text(s,'Assessment before\nthe first attempt',0.75,1.82,8.6,1.7,36,WHITE,True) text(s,'A structured bedside approach for recognizing difficulty with ventilation, laryngoscopy, intubation and rescue access.',0.8,3.78,7.4,0.75,18,RGBColor(215,231,235)) # visual airway pathway for x,label,c in [(9.05,'LOOK',TEAL),(10.25,'MEASURE',BLUE),(11.55,'PLAN',ORANGE)]: rect(s,x,2.0,0.92,0.92,c,True); text(s,label,x-0.15,3.05,1.25,0.28,10,WHITE,True,PP_ALIGN.CENTER) text(s,'ASSESS',8.65,4.3,3.8,0.45,24,WHITE,True,PP_ALIGN.CENTER); text(s,'Oxygenation is the endpoint',8.65,4.88,3.8,0.3,13,CYAN,False,PP_ALIGN.CENTER) text(s,'For education. Apply local protocols, supervision and clinical judgment.',0.8,6.7,9,0.25,10,RGBColor(180,203,211)) #2 s=prs.slides.add_slide(blank); title(s,'Why assess?', 'The assessment changes the plan, team, equipment and location.',2) rect(s,0.65,1.48,3.8,4.95,PALE,True); text(s,'The goal',0.95,1.82,3.1,0.38,20,NAVY,True) text(s,'Identify risk before airway manipulation so that oxygenation can be preserved and rescue is prepared.',0.95,2.4,3.1,1.0,18,INK) for i,(a,b,c) in enumerate([('1','Predict difficulty','Not perfection'),('2','Prepare a primary plan','Choose technique'),('3','Prepare rescue','Help + devices + FONA')]): yy=3.75+i*0.75; rect(s,0.95,yy,0.45,0.45,c,True); text(s,a,0.95,yy+0.02,0.45,0.35,16,WHITE,True,PP_ALIGN.CENTER); text(s,b,1.55,yy-0.01,2.25,0.25,14,NAVY,True); text(s,c,1.55,yy+0.27,2.25,0.2,10,MID) text(s,'Key principle',5.0,1.55,2.6,0.34,20,NAVY,True) bullet_list(s,['No single test rules difficulty in or out.','Combine history, anatomy, physiology and context.','A previous airway record is often the highest-value data point.'],5.0,2.15,7.2,2.1,19) rect(s,5.0,4.75,7.25,1.18,RGBColor(230,246,244),True); text(s,'Anticipation allows awake techniques, optimized oxygenation, expert help and a defined rescue route.',5.35,4.98,6.55,0.68,18,TEAL,True,PP_ALIGN.CENTER) footer(s,'Core concept: Fishman’s Pulmonary Diseases, 5e, Airway Assessment, pp. 2575-76') #3 s=prs.slides.add_slide(blank); title(s,'What can be difficult?', 'Separate the task into four clinically distinct risks.',3) items=[('Face-mask ventilation','Obesity, OSA, beard, edentulous face, obstruction','MASK'),('Supraglottic airway','Restricted mouth opening, distorted pharyngeal anatomy','SGA'),('Laryngoscopy / tube delivery','Poor view, limited access, reduced neck or jaw movement','TUBE'),('Emergency invasive airway','Obesity, neck mass, radiation, difficult landmarks','FONA')] for i,(a,b,c) in enumerate(items): x=0.7+(i%2)*6.05; y=1.55+(i//2)*2.4; col=[BLUE,TEAL,ORANGE,RED][i] rect(s,x,y,5.55,1.82,WHITE,True,LINE); rect(s,x,y,0.16,1.82,col); pill(s,c,x+0.42,y+0.28,0.9,col); text(s,a,x+1.52,y+0.24,3.55,0.35,18,NAVY,True); text(s,b,x+0.42,y+0.83,4.65,0.58,15,INK) rect(s,0.7,6.35,11.6,0.42,NAVY,True); text(s,'Ask: If the first plan fails, can I oxygenate? Can I rescue? Can I access the neck?',0.95,6.4,11.1,0.25,16,WHITE,True,PP_ALIGN.CENTER) footer(s) #4 s=prs.slides.add_slide(blank); title(s,'Start with history and context', 'The airway examination begins before the patient opens their mouth.',4) left=[('Previous airway record','Grade of view, device, tube size, number of attempts, complications'),('Symptoms / pathology','Stridor, dysphagia, voice change, infection, trauma, tumor, angioedema'),('Comorbidity','OSA/CPAP, obesity, rheumatoid disease, cervical spine disease, pregnancy'),('Procedure / environment','Shared airway, prone position, limited access, emergency setting, available help')] for i,(a,b) in enumerate(left): y=1.45+i*1.17; rect(s,0.75,y,7.35,0.9,WHITE,True,LINE); rect(s,0.75,y,0.13,0.9,[TEAL,RED,ORANGE,BLUE][i]); text(s,a,1.1,y+0.13,2.25,0.25,16,NAVY,True); text(s,b,3.3,y+0.12,4.35,0.45,13,INK) rect(s,8.55,1.46,3.95,4.78,RGBColor(253,245,233),True); text(s,'Red flags',8.95,1.85,3.1,0.35,21,RED,True) bullet_list(s,['Prior difficult intubation or ventilation','Progressive obstruction or stridor','Head/neck mass, radiation or surgery','Cervical immobilization or unstable physiology'],8.95,2.47,3.1,2.6,15,RED) text(s,'Escalate early. Consider a controlled setting and an awake approach when appropriate.',8.95,5.42,3.0,0.5,14,RED,True) footer(s,'ASA 2022 guideline: risk assessment includes history, records, clinical conditions and patient interview') #5 s=prs.slides.add_slide(blank); title(s,'Bedside examination: look, measure, move', 'Use a standard sequence and document the findings.',5) # cards cards=[('LOOK','Face / profile\nDentition, incisors\nBeard, obesity\nNeck mass / scars',TEAL),('MEASURE','Mouth opening\nThyromental distance\nNeck circumference\nLandmarks',BLUE),('MOVE','Jaw protrusion\nAtlanto-occipital extension\nNeck range of motion\nUpper lip bite',ORANGE)] for i,(a,b,c) in enumerate(cards): x=.72+i*4.15; rect(s,x,1.55,3.6,3.75,WHITE,True,LINE); rect(s,x,1.55,3.6,.7,c,True); text(s,a,x+.15,1.7,3.3,.32,18,WHITE,True,PP_ALIGN.CENTER); text(s,b,x+.35,2.58,2.9,1.8,19,INK,False,PP_ALIGN.CENTER) text(s,'Do not substitute a checklist for clinical judgment: inspect for pathology, dynamic obstruction and the ability to rescue.',1.15,5.85,11.0,.55,18,NAVY,True,PP_ALIGN.CENTER) footer(s,'Structured elements: Fishman’s Pulmonary Diseases, 5e, Airway Assessment, p. 2576') #6 Mallampati s=prs.slides.add_slide(blank); title(s,'Oropharyngeal view: modified Mallampati', 'Performed seated, mouth maximally open, tongue protruded, usually without phonation.',6) rect(s,.72,1.45,5.75,4.98,PALE,True); text(s,'How to perform',1.05,1.78,2.2,.3,19,NAVY,True) bullet_list(s,['Ensure the patient is sitting upright.','Ask for maximal mouth opening and tongue protrusion.','Observe visible pharyngeal structures.','Class III-IV increases concern but is not a stand-alone decision rule.'],1.05,2.35,4.95,2.8,16) # image labels rect(s,7.05,1.45,5.5,4.98,WHITE,True,LINE); text(s,'Illustrative views',7.4,1.75,3.2,.32,19,NAVY,True) try: s.shapes.add_picture(str(AS/'mallampati_1.png'), Inches(7.55), Inches(2.25), height=Inches(2.75)) s.shapes.add_picture(str(AS/'mallampati_2.png'), Inches(10.25), Inches(2.25), height=Inches(2.75)) except: pass text(s,'Class I: palate, fauces and uvula visible',7.25,5.35,2.55,.48,11,TEAL,True,PP_ALIGN.CENTER) text(s,'Class III: limited palatal view',10.0,5.35,2.25,.48,11,RED,True,PP_ALIGN.CENTER) footer(s,'Fishman’s Pulmonary Diseases, 5e, Fig. 145-3 and Airway Assessment, p. 2576') #7 measurements s=prs.slides.add_slide(blank); title(s,'Key measurements and mobility tests', 'Thresholds are screening aids, not guarantees.',7) rows=[('Mouth opening','Inter-incisor gap','< 3 fingerbreadths raises concern','Access for blade / SGA'),('Thyromental distance','Mentum to thyroid notch','Short distance increases concern','Mandibular space / laryngeal view'),('Jaw protrusion','Advance lower incisors','Poor protrusion increases concern','Mandibular mobility'),('Neck extension','Atlanto-occipital movement','Restriction increases concern','Alignment for laryngoscopy'),('Upper lip bite test','Lower incisors bite upper lip','Inability to reach lip = abnormal','Mandibular movement / dentition')] for i,r in enumerate(rows): y=1.35+i*.95; rect(s,.7,y,11.95,.76,WHITE,True,LINE); rect(s,.7,y,.14,.76,[TEAL,BLUE,ORANGE,TEAL,RED][i]); text(s,r[0],1.03,y+.13,2.15,.3,15,NAVY,True); text(s,r[1],3.22,y+.13,2.2,.3,13,INK); text(s,r[2],5.42,y+.13,3.15,.33,13,RED if i in [0,1,2,3,4] else INK); text(s,r[3],8.75,y+.13,3.35,.3,13,MID) text(s,'Combine abnormal findings with pathology, prior history, physiology and the rescue plan.',1.1,6.38,11,.3,17,NAVY,True,PP_ALIGN.CENTER) footer(s,'Fishman’s Pulmonary Diseases, 5e, pp. 2576-77; ASA 2022 airway examination examples') #8 LEMON s=prs.slides.add_slide(blank); title(s,'A practical cognitive aid: LEMON', 'Useful especially when time is short. It is a prompt, not a validated guarantee.',8) lemon=[('L','Look externally','Facial trauma, large incisors, beard, obesity, neck mass'),('E','Evaluate 3-3-2','Mouth opening, mentum-hyoid space, thyroid distance'),('M','Mallampati','Oropharyngeal view, if patient cooperation allows'),('O','Obstruction','Stridor, tumor, epiglottitis, hematoma, foreign body'),('N','Neck mobility','Extension, cervical collar, ankylosis, injury')] for i,(a,b,c) in enumerate(lemon): y=1.32+i*1.02; rect(s,.72,y,11.9,.78,WHITE,True,LINE); rect(s,.72,y,.82,.78,[TEAL,BLUE,ORANGE,RED,GREEN][i],True); text(s,a,.72,y+.12,.82,.38,24,WHITE,True,PP_ALIGN.CENTER); text(s,b,1.85,y+.1,2.0,.3,16,NAVY,True); text(s,c,4.0,y+.1,7.85,.35,14,INK) footer(s,'LEMON is commonly used in emergency airway assessment. Apply alongside clinician assessment and local protocol.') #9 physiologic + anticipated s=prs.slides.add_slide(blank); title(s,'Anatomy is not the whole airway', 'Physiology and context may make a technically manageable airway dangerous.',9) for i,(h,body,col) in enumerate([('Difficult oxygenation','Hypoxemia, obesity, OSA, pulmonary edema, shunt, low reserve',BLUE),('Hemodynamic fragility','Shock, right heart failure, severe pulmonary hypertension',RED),('Metabolic demand','Severe acidosis, sepsis, agitation, high oxygen consumption',ORANGE)]): x=.75+i*4.1; rect(s,x,1.55,3.58,3.25,WHITE,True,LINE); rect(s,x,1.55,3.58,.22,col); text(s,h,x+.3,1.98,2.95,.5,18,NAVY,True,PP_ALIGN.CENTER); text(s,body,x+.42,2.95,2.75,.95,16,INK,False,PP_ALIGN.CENTER) rect(s,.75,5.3,11.8,1.0,RGBColor(230,246,244),True); text(s,'When apnea tolerance is low, prioritize oxygenation, position, preoxygenation, first-pass success and an explicit stop point.',1.05,5.56,11.2,.43,18,TEAL,True,PP_ALIGN.CENTER) footer(s,'ASA 2022 emphasizes decreased apneic tolerance in awake-airway decision-making') #10 decision s=prs.slides.add_slide(blank); title(s,'Translate assessment into a plan', 'A plan must anticipate failure, not merely describe the first device.',10) steps=[('1','Primary technique','Device, position, operator, adjuncts, tube plan'),('2','Oxygenation plan','Preoxygenation, nasal oxygen, mask ventilation strategy'),('3','Rescue plan','SGA, alternate device, skilled help, emergency invasive access'),('4','Exit / extubation plan','Reintubation risk, equipment, location and documentation')] for i,(n,a,b) in enumerate(steps): x=.75+(i%2)*6.1; y=1.55+(i//2)*2.15; col=[TEAL,BLUE,ORANGE,RED][i] rect(s,x,y,5.55,1.55,WHITE,True,LINE); rect(s,x+.25,y+.32,.58,.58,col,True); text(s,n,x+.25,y+.4,.58,.25,18,WHITE,True,PP_ALIGN.CENTER); text(s,a,x+1.1,y+.27,3.9,.3,17,NAVY,True); text(s,b,x+1.1,y+.72,3.95,.42,13,INK) text(s,'Brief the team aloud: anticipated problem, first plan, rescue plan, role allocation and trigger to change course.',1.0,6.15,11.3,.34,17,NAVY,True,PP_ALIGN.CENTER) footer(s,'ASA 2022: strategy depends on clinician experience, resources, competent help and clinical context') #11 awake s=prs.slides.add_slide(blank); title(s,'When should an awake airway be considered?', 'ASA 2022 decision support focuses on risk if induction is followed by failure.',11) rect(s,.75,1.35,12,4.8,RGBColor(248,249,250),True,LINE); text(s,'Consider awake tracheal intubation when difficult intubation is expected AND one or more of the following is present:',1.1,1.75,11.25,.45,19,NAVY,True,PP_ALIGN.CENTER) opts=[('Difficult ventilation','Face mask or supraglottic ventilation may be difficult',BLUE),('Aspiration risk','Loss of protective reflexes adds risk',ORANGE),('Low apnea tolerance','Rapid desaturation or physiologic collapse likely',RED),('Difficult emergency access','Rescue front-of-neck access may be challenging',TEAL)] for i,(a,b,c) in enumerate(opts): x=1.1+(i%2)*5.75; y=2.55+(i//2)*1.45; rect(s,x,y,5.25,1.1,WHITE,True,LINE); rect(s,x,y,.16,1.1,c); text(s,a,x+.38,y+.2,3.95,.28,16,NAVY,True); text(s,b,x+.38,y+.56,4.2,.27,12,INK) text(s,'Awake intubation is a deliberate safety strategy. Technique should match patient factors, operator skill and available support.',1.05,6.43,11.2,.3,16,TEAL,True,PP_ALIGN.CENTER) footer(s,'ASA Practice Guidelines for Management of the Difficult Airway, Anesthesiology 2022;136:31-81') #12 checklist s=prs.slides.add_slide(blank); title(s,'60-second pre-airway checklist', 'A repeatable routine for the bedside or theatre.',12) checks=[('HISTORY','Prior airway, symptoms, OSA, aspiration risk'),('EXAM','Look, mouth opening, Mallampati, jaw, neck, landmarks'),('PHYSIOLOGY','Oxygenation, hemodynamics, apnea tolerance'),('TEAM','Experienced help, roles, call early'),('EQUIPMENT','Primary device, bougie, SGA, suction, FONA kit'),('PLAN','Plan A-B-C, limit attempts, reassess ventilation')] for i,(a,b) in enumerate(checks): x=.75+(i%3)*4.12; y=1.45+(i//3)*2.25; c=[TEAL,BLUE,ORANGE,RED,GREEN,NAVY][i] rect(s,x,y,3.58,1.55,WHITE,True,LINE); rect(s,x,y,3.58,.42,c,True); text(s,a,x+.12,y+.08,3.3,.2,12,WHITE,True,PP_ALIGN.CENTER); text(s,b,x+.3,y+.68,2.98,.52,14,INK,False,PP_ALIGN.CENTER) rect(s,.75,6.15,11.82,.54,NAVY,True); text(s,'Oxygenation, time and attempts are continuously reassessed. Change strategy before task fixation develops.',1.0,6.28,11.3,.23,15,WHITE,True,PP_ALIGN.CENTER) footer(s) #13 takeaways + refs s=prs.slides.add_slide(blank); title(s,'Take-home points', 'Assessment is the first airway intervention.',13) for i,t in enumerate(['Use multiple findings, not a single score.','History of a prior airway and obvious pathology matter greatly.','Assess difficulty with ventilation, intubation and emergency access separately.','Include physiology, setting, resources and clinician skill.','Convert findings into a primary plan and a rescue plan before starting.']): y=1.38+i*.78; rect(s,.95,y,.42,.42,[TEAL,BLUE,ORANGE,RED,GREEN][i],True); text(s,str(i+1),.95,y+.06,.42,.22,13,WHITE,True,PP_ALIGN.CENTER); text(s,t,1.6,y+.02,9.9,.32,18,NAVY if i<4 else TEAL,True) text(s,'Selected references',.95,5.62,2.3,.28,15,NAVY,True) refs=['Apfelbaum JL, et al. 2022 ASA Practice Guidelines for Management of the Difficult Airway. Anesthesiology. 2022;136:31-81.','Fishman’s Pulmonary Diseases and Disorders, 5e. Airway Assessment, pp. 2575-77.','Wang Z, et al. Evaluation of preoperative difficult airway prediction methods: systematic review and meta-analysis. BMC Anesthesiol. 2024;24:221. PMID 39020308.'] for i,r in enumerate(refs): text(s,r,.95,5.98+i*.29,11.3,.25,9,MID) footer(s,'Educational material. Does not replace institutional difficult-airway policy.') # core properties prs.core_properties.title='Difficult Airway Assessment'; prs.core_properties.subject='Airway assessment teaching presentation'; prs.core_properties.author='Orris'; prs.save(OUT) print(OUT) PY python "/tmp/workspace/difficult-airway-assessment-ppt/src/create_deck.py"
~/difficult-airway-assessment-ppt/src/create_deck.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/difficult-airway-assessment-ppt/src/create_deck.py'
python "/tmp/workspace/difficult-airway-assessment-ppt/src/create_deck.py" && ls -lh "/tmp/workspace/difficult-airway-assessment-ppt/output/Difficult_Airway_Assessment.pptx"
python - <<'PY' from pptx import Presentation p='/tmp/workspace/difficult-airway-assessment-ppt/output/Difficult_Airway_Assessment.pptx' prs=Presentation(p) print('slides=',len(prs.slides)) for i,s in enumerate(prs.slides,1): strings=[] for sh in s.shapes: if getattr(sh,'has_text_frame',False) and sh.text.strip(): strings.append(sh.text.replace('\n',' | ')) print(i, ' :: '.join(strings[:3])) PY
difficult airway assessment ppt
Difficult Airway Assessment
Presentation · PPTX