Neuro come measures pls create in good thyeme
cd "/tmp/workspace/attachments/25e642d6-bc56-4169-9dd4-0c424b358711/" && python3 -c " from pptx import Presentation prs = Presentation('eortc qlq-c30.pptx') for i, slide in enumerate(prs.slides, 1): print(f'--- Slide {i} ---') for shape in slide.shapes: if shape.has_text_frame and shape.text_frame.text.strip(): print(shape.text_frame.text[:500]) "
mkdir -p /tmp/workspace/neuro-outcome-measures && python3 << '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.util import Inches, Pt import copy prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) blank_layout = prs.slide_layouts[6] # Color palette - deep neurological blue/teal theme C_DARK_NAVY = RGBColor(0x0A, 0x1F, 0x44) # very dark navy C_MID_BLUE = RGBColor(0x1B, 0x4F, 0x72) # mid blue C_TEAL = RGBColor(0x17, 0x7E, 0x89) # teal accent C_LIGHT_TEAL = RGBColor(0x76, 0xC8, 0xD0) # light teal C_SILVER = RGBColor(0xEC, 0xF0, 0xF1) # very light silver/white C_WHITE = RGBColor(0xFF, 0xFF, 0xFF) C_GOLD = RGBColor(0xF0, 0xC0, 0x40) # golden yellow highlight C_LIGHT_BG = RGBColor(0xF4, 0xF8, 0xFB) # nearly white blue bg def add_rect(slide, left, top, width, height, fill_color, transparency=0): shape = slide.shapes.add_shape(1, Inches(left), Inches(top), Inches(width), Inches(height)) shape.fill.solid() shape.fill.fore_color.rgb = fill_color shape.line.fill.background() return shape def add_text(slide, text, left, top, width, height, font_size=18, bold=False, color=None, align=PP_ALIGN.LEFT, italic=False, v_anchor=MSO_ANCHOR.TOP, wrap=True, font_name="Calibri"): tb = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height)) tf = tb.text_frame tf.word_wrap = wrap tf.vertical_anchor = v_anchor p = tf.paragraphs[0] p.alignment = align run = p.add_run() run.text = text run.font.name = font_name run.font.size = Pt(font_size) run.font.bold = bold run.font.italic = italic if color: run.font.color.rgb = color return tb def add_multiline(slide, lines, left, top, width, height, font_size=16, bold=False, color=None, align=PP_ALIGN.LEFT, spacing_after=8, font_name="Calibri", bullet=False, line_spacing=1.1): from pptx.util import Pt as Pt2 from pptx.oxml.ns import qn from lxml import etree tb = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height)) tf = tb.text_frame tf.word_wrap = True for i, line in enumerate(lines): if i == 0: p = tf.paragraphs[0] else: p = tf.add_paragraph() p.alignment = align # Space after p.space_after = Pt2(spacing_after) run = p.add_run() prefix = " \u2022 " if bullet else "" run.text = prefix + line run.font.name = font_name run.font.size = Pt2(font_size) run.font.bold = bold if color: run.font.color.rgb = color return tb # ─── SLIDE 1 : TITLE ──────────────────────────────────────────────────────── slide = prs.slides.add_slide(blank_layout) # Full background add_rect(slide, 0, 0, 13.333, 7.5, C_DARK_NAVY) # Top accent strip add_rect(slide, 0, 0, 13.333, 0.12, C_TEAL) # Brain/neuro decorative circle (left) add_rect(slide, 0.3, 1.2, 3.5, 3.5, C_MID_BLUE) # placeholder square behind circle # Side accent bar add_rect(slide, 0, 0.12, 0.35, 7.38, C_MID_BLUE) # Bottom accent add_rect(slide, 0, 7.2, 13.333, 0.30, C_TEAL) # Institution add_text(slide, "MGM Allied Health Science Institute", 1.0, 0.25, 11.5, 0.55, font_size=14, bold=False, color=C_LIGHT_TEAL, align=PP_ALIGN.CENTER) # Main title add_text(slide, "OUTCOME MEASURES IN NEUROLOGY", 1.0, 1.2, 11.5, 1.2, font_size=38, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER, font_name="Calibri") # Subtitle line add_rect(slide, 3.0, 2.55, 7.333, 0.07, C_GOLD) add_text(slide, "Neurological Assessment Tools & Patient-Reported Outcomes", 1.0, 2.75, 11.5, 0.7, font_size=18, bold=False, color=C_LIGHT_TEAL, align=PP_ALIGN.CENTER, italic=True) # Presenter info box add_rect(slide, 2.5, 4.0, 8.333, 2.2, C_MID_BLUE) add_rect(slide, 2.5, 4.0, 0.12, 2.2, C_GOLD) add_text(slide, "Presented by: Shrasti Naigaonkar", 2.8, 4.15, 5.0, 0.6, font_size=15, bold=True, color=C_WHITE) add_text(slide, "MPT 1st Year (Neurology)", 2.8, 4.7, 5.0, 0.5, font_size=13, bold=False, color=C_LIGHT_TEAL) add_text(slide, "Guided by: Dr. Niketa Shobhit", 2.8, 5.2, 5.0, 0.6, font_size=15, bold=True, color=C_WHITE) add_text(slide, "Department of Physiotherapy", 2.8, 5.75, 5.0, 0.5, font_size=13, bold=False, color=C_LIGHT_TEAL) # ─── HELPER: CONTENT SLIDE BACKGROUND ──────────────────────────────────────── def make_content_slide(prs, title_text, slide_num_text=""): slide = prs.slides.add_slide(blank_layout) # BG add_rect(slide, 0, 0, 13.333, 7.5, C_LIGHT_BG) # Top bar add_rect(slide, 0, 0, 13.333, 1.1, C_DARK_NAVY) add_rect(slide, 0, 1.1, 13.333, 0.07, C_TEAL) # Left accent stripe add_rect(slide, 0, 0, 0.35, 7.5, C_MID_BLUE) # Bottom bar add_rect(slide, 0, 7.1, 13.333, 0.40, C_DARK_NAVY) add_rect(slide, 0, 7.05, 13.333, 0.07, C_TEAL) # Title add_text(slide, title_text, 0.6, 0.12, 11.8, 0.85, font_size=28, bold=True, color=C_WHITE, align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE, font_name="Calibri") # Footer add_text(slide, "Neuro Outcome Measures | MGM AHS Institute", 0.5, 7.12, 10.0, 0.35, font_size=10, bold=False, color=C_LIGHT_TEAL, align=PP_ALIGN.LEFT) if slide_num_text: add_text(slide, slide_num_text, 11.8, 7.12, 1.3, 0.35, font_size=10, bold=False, color=C_LIGHT_TEAL, align=PP_ALIGN.RIGHT) return slide # ─── SLIDE 2 : INTRODUCTION ─────────────────────────────────────────────────── slide = make_content_slide(prs, "INTRODUCTION", "2") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) intro_lines = [ "Outcome measures are standardized tools used to assess a patient's neurological status before, during, and after treatment.", "They provide objective data on function, disability, quality of life, and symptom severity.", "In Neurology & Neurological Physiotherapy, outcome measures are essential for:", ] add_multiline(slide, intro_lines, 1.0, 1.5, 11.8, 2.2, font_size=17, color=C_DARK_NAVY, spacing_after=10) sub_lines = [ "Documenting baseline neurological status", "Monitoring recovery and disease progression", "Evaluating effectiveness of rehabilitation interventions", "Guiding clinical decision-making", "Benchmarking outcomes in research and clinical trials", ] add_multiline(slide, sub_lines, 1.2, 3.5, 11.3, 2.8, font_size=16, color=C_MID_BLUE, spacing_after=8, bullet=True) # ─── SLIDE 3 : CLASSIFICATION OF NEURO OUTCOME MEASURES ────────────────────── slide = make_content_slide(prs, "CLASSIFICATION OF OUTCOME MEASURES", "3") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) categories = [ ("Functional/Activity Measures", "Barthel Index, FIM, Modified Rankin Scale (mRS)"), ("Balance & Mobility Measures", "Berg Balance Scale (BBS), TUG, Tinetti POMA, FAC"), ("Motor & Impairment Measures", "Fugl-Meyer Assessment (FMA), NIHSS, MAS, Brunnstrom"), ("Cognitive Measures", "MMSE, MoCA, MOCA-BLIND, COGNISTAT"), ("Quality of Life Measures", "SF-36, NEUROQOL, SS-QOL, PDQ-39, MS Impact Scale"), ("Disease-Specific Measures", "UPDRS (Parkinson's), EDSS (MS), ARAT (Stroke), ALS-FRS"), ("Pain & Sensory Measures", "VAS, NRS, Sensory testing, LANSS"), ] y = 1.55 for cat, examples in categories: add_rect(slide, 0.85, y, 5.5, 0.52, C_DARK_NAVY) add_text(slide, cat, 0.9, y+0.05, 5.4, 0.45, font_size=13, bold=True, color=C_WHITE) add_text(slide, examples, 6.5, y+0.05, 6.4, 0.45, font_size=12, bold=False, color=C_DARK_NAVY) y += 0.65 # ─── SLIDE 4 : BARTHEL INDEX ───────────────────────────────────────────────── slide = make_content_slide(prs, "BARTHEL INDEX (BI)", "4") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) add_text(slide, "Definition & Background", 0.85, 1.5, 8.0, 0.45, font_size=16, bold=True, color=C_MID_BLUE) add_text(slide, "Developed by Mahoney & Barthel (1965). Measures functional independence in ADLs.", 0.85, 1.95, 12.0, 0.45, font_size=14, color=C_DARK_NAVY) # Two columns add_rect(slide, 0.85, 2.5, 5.7, 0.4, C_MID_BLUE) add_text(slide, "10 ADL Items (Score 0–100)", 0.9, 2.55, 5.5, 0.35, font_size=13, bold=True, color=C_WHITE) items = ["Feeding", "Bathing", "Grooming", "Dressing", "Bowel control", "Bladder control", "Toilet use", "Transfers", "Mobility", "Stairs"] y = 3.0 for i, item in enumerate(items): col = 0 if i < 5 else 1 row = i if i < 5 else i - 5 x = 0.9 if col == 0 else 3.5 add_text(slide, f"\u2022 {item}", x, y + row * 0.47, 2.4, 0.4, font_size=13, color=C_DARK_NAVY) add_rect(slide, 6.8, 2.5, 5.7, 0.4, C_MID_BLUE) add_text(slide, "Score Interpretation", 6.85, 2.55, 5.5, 0.35, font_size=13, bold=True, color=C_WHITE) interp = [ ("0 – 20", "Total dependence"), ("21 – 60", "Severe dependence"), ("61 – 90", "Moderate dependence"), ("91 – 99", "Slight dependence"), ("100", "Full independence"), ] y2 = 3.0 for score, label in interp: add_rect(slide, 6.8, y2, 2.0, 0.38, C_LIGHT_TEAL) add_text(slide, score, 6.82, y2+0.03, 1.9, 0.33, font_size=12, bold=True, color=C_DARK_NAVY, align=PP_ALIGN.CENTER) add_text(slide, label, 8.85, y2+0.03, 3.5, 0.33, font_size=12, color=C_DARK_NAVY) y2 += 0.48 # ─── SLIDE 5 : BERG BALANCE SCALE ──────────────────────────────────────────── slide = make_content_slide(prs, "BERG BALANCE SCALE (BBS)", "5") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) add_text(slide, "Developed by Katherine Berg (1989) | 14 functional balance tasks | Score: 0–56", 0.85, 1.5, 12.0, 0.45, font_size=14, bold=False, color=C_MID_BLUE, italic=True) bbs_items = [ "1. Sitting unsupported", "2. Standing unsupported", "3. Sitting to standing", "4. Standing to sitting", "5. Transfers", "6. Standing eyes closed", "7. Standing feet together", "8. Reaching forward with outstretched arm", "9. Retrieving object from floor", "10. Turning to look behind", "11. Turning 360°", "12. Placing alternate foot on stool", "13. Standing with one foot in front", "14. Standing on one foot", ] cols = [bbs_items[:7], bbs_items[7:]] for col_i, col_items in enumerate(cols): x = 0.85 + col_i * 6.0 for row_i, item in enumerate(col_items): bg = C_LIGHT_BG if row_i % 2 == 0 else C_WHITE add_rect(slide, x, 2.05 + row_i * 0.58, 5.7, 0.55, bg) add_text(slide, item, x + 0.1, 2.1 + row_i * 0.58, 5.5, 0.48, font_size=12, color=C_DARK_NAVY) # Score interpretation bar at bottom add_rect(slide, 0.85, 6.25, 12.0, 0.55, C_DARK_NAVY) add_text(slide, "Score: 0–20 = High fall risk | 21–40 = Medium fall risk | 41–56 = Low fall risk", 0.9, 6.3, 11.8, 0.45, font_size=13, bold=True, color=C_GOLD, align=PP_ALIGN.CENTER) # ─── SLIDE 6 : NIHSS ───────────────────────────────────────────────────────── slide = make_content_slide(prs, "NIH STROKE SCALE (NIHSS)", "6") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) add_text(slide, "Developed by Brott et al. (1989). Gold standard for assessing acute stroke severity.", 0.85, 1.5, 12.0, 0.45, font_size=14, italic=True, color=C_MID_BLUE) nihss_items = [ ("1a", "Level of Consciousness", "0–3"), ("1b", "LOC Questions", "0–2"), ("1c", "LOC Commands", "0–2"), ("2", "Best Gaze", "0–2"), ("3", "Visual Fields", "0–3"), ("4", "Facial Palsy", "0–3"), ("5", "Motor Arm (L/R)", "0–4"), ("6", "Motor Leg (L/R)", "0–4"), ("7", "Limb Ataxia", "0–2"), ("8", "Sensory", "0–2"), ("9", "Best Language", "0–3"), ("10", "Dysarthria", "0–2"), ("11", "Extinction/Inattention", "0–2"), ] # Table header add_rect(slide, 0.85, 2.05, 1.0, 0.4, C_DARK_NAVY) add_rect(slide, 1.85, 2.05, 6.0, 0.4, C_DARK_NAVY) add_rect(slide, 7.85, 2.05, 1.5, 0.4, C_DARK_NAVY) for txt, x, w in [("Item", 0.85, 1.0), ("Domain", 1.85, 6.0), ("Score", 7.85, 1.5)]: add_text(slide, txt, x+0.05, 2.1, w-0.1, 0.3, font_size=12, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER) for i, (num, domain, sc) in enumerate(nihss_items): bg = C_LIGHT_BG if i % 2 == 0 else C_WHITE y = 2.5 + i * 0.31 add_rect(slide, 0.85, y, 1.0, 0.30, bg) add_rect(slide, 1.85, y, 6.0, 0.30, bg) add_rect(slide, 7.85, y, 1.5, 0.30, bg) add_text(slide, num, 0.9, y+0.02, 0.9, 0.28, font_size=11, color=C_DARK_NAVY, align=PP_ALIGN.CENTER) add_text(slide, domain, 1.9, y+0.02, 5.8, 0.28, font_size=11, color=C_DARK_NAVY) add_text(slide, sc, 7.9, y+0.02, 1.3, 0.28, font_size=11, color=C_MID_BLUE, align=PP_ALIGN.CENTER) add_rect(slide, 9.6, 2.05, 3.4, 5.4, C_DARK_NAVY) add_rect(slide, 9.6, 2.05, 0.12, 5.4, C_GOLD) severity = [ ("0", "No stroke"), ("1–4", "Minor stroke"), ("5–15", "Moderate stroke"), ("16–20", "Moderate–Severe"), ("21–42", "Severe stroke"), ] add_text(slide, "Severity Scale", 9.8, 2.15, 3.0, 0.45, font_size=13, bold=True, color=C_GOLD) for j, (sc, label) in enumerate(severity): y = 2.7 + j * 0.75 add_rect(slide, 9.75, y, 0.95, 0.55, C_TEAL) add_text(slide, sc, 9.77, y+0.05, 0.9, 0.45, font_size=14, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER) add_text(slide, label, 10.75, y+0.05, 2.1, 0.45, font_size=12, color=C_SILVER) # ─── SLIDE 7 : MODIFIED RANKIN SCALE ───────────────────────────────────────── slide = make_content_slide(prs, "MODIFIED RANKIN SCALE (mRS)", "7") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) add_text(slide, "A global disability scale; widely used in stroke clinical trials to assess degree of disability.", 0.85, 1.5, 12.0, 0.45, font_size=14, italic=True, color=C_MID_BLUE) mrs_grades = [ ("0", "No symptoms at all", C_TEAL), ("1", "No significant disability — able to carry out all usual duties", C_TEAL), ("2", "Slight disability — unable to carry out some previous activities, but able to look after own affairs", C_MID_BLUE), ("3", "Moderate disability — requiring some help, but able to walk unassisted", C_MID_BLUE), ("4", "Moderately severe disability — unable to walk, attend to own bodily needs without assistance", C_DARK_NAVY), ("5", "Severe disability — bedridden, incontinent, requiring constant nursing care", C_DARK_NAVY), ("6", "Dead", RGBColor(0x7F, 0x0A, 0x0A)), ] y = 2.05 for grade, desc, col in mrs_grades: add_rect(slide, 0.85, y, 0.8, 0.56, col) add_text(slide, grade, 0.87, y+0.07, 0.75, 0.45, font_size=22, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER) bg = C_LIGHT_BG if int(grade) % 2 == 0 else C_WHITE add_rect(slide, 1.65, y, 11.0, 0.56, bg) add_text(slide, desc, 1.75, y+0.07, 10.8, 0.45, font_size=13, color=C_DARK_NAVY) y += 0.63 # ─── SLIDE 8 : FUGL-MEYER ASSESSMENT ──────────────────────────────────────── slide = make_content_slide(prs, "FUGL-MEYER ASSESSMENT (FMA)", "8") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) add_text(slide, "Developed by Fugl-Meyer et al. (1975). Quantitative assessment of sensorimotor stroke recovery.", 0.85, 1.5, 12.0, 0.45, font_size=14, italic=True, color=C_MID_BLUE) domains = [ ("Upper Extremity Motor", "33 items", "66 pts"), ("Lower Extremity Motor", "17 items", "34 pts"), ("Sensory", "12 items", "24 pts"), ("Balance", " 7 items", "14 pts"), ("Range of Motion", "44 items", "44 pts"), ("Pain", "44 items", "44 pts"), ] add_rect(slide, 0.85, 2.1, 5.7, 0.42, C_DARK_NAVY) for txt, x in [("Domain", 0.9), ("Items", 4.0), ("Max Score", 5.2)]: add_text(slide, txt, x, 2.15, 1.2, 0.35, font_size=13, bold=True, color=C_WHITE) for i, (dom, items, pts) in enumerate(domains): bg = C_LIGHT_BG if i % 2 == 0 else C_WHITE y = 2.58 + i * 0.58 add_rect(slide, 0.85, y, 5.7, 0.55, bg) add_text(slide, dom, 0.9, y+0.07, 3.1, 0.43, font_size=13, color=C_DARK_NAVY) add_text(slide, items, 4.0, y+0.07, 1.0, 0.43, font_size=13, color=C_MID_BLUE, align=PP_ALIGN.CENTER) add_text(slide, pts, 5.2, y+0.07, 1.2, 0.43, font_size=13, bold=True, color=C_TEAL, align=PP_ALIGN.CENTER) add_text(slide, "TOTAL MAX SCORE = 226 pts", 0.85, 6.1, 5.7, 0.45, font_size=14, bold=True, color=C_WHITE) add_rect(slide, 0.85, 6.1, 5.7, 0.45, C_DARK_NAVY) add_text(slide, "TOTAL MAX SCORE = 226 pts", 0.85, 6.12, 5.7, 0.42, font_size=14, bold=True, color=C_GOLD, align=PP_ALIGN.CENTER) # Right column add_rect(slide, 7.0, 2.1, 5.7, 5.5, C_DARK_NAVY) add_rect(slide, 7.0, 2.1, 0.12, 5.5, C_GOLD) add_text(slide, "Scoring per item:", 7.25, 2.2, 5.2, 0.4, font_size=14, bold=True, color=C_GOLD) scoring_info = [ "0 = Cannot perform", "1 = Partial performance", "2 = Full performance", "", "Score Interpretation:", "< 50 Severe impairment", "50–84 Moderate impairment", "85–94 Mild impairment", "95–99 Minimal impairment", "100 No impairment", ] add_multiline(slide, scoring_info, 7.25, 2.7, 5.0, 4.6, font_size=13, color=C_SILVER, spacing_after=5) # ─── SLIDE 9 : TUG & TINETTI ────────────────────────────────────────────────── slide = make_content_slide(prs, "TIMED UP AND GO (TUG) & TINETTI POMA", "9") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) # TUG left box add_rect(slide, 0.85, 1.45, 5.8, 5.3, C_WHITE) add_rect(slide, 0.85, 1.45, 5.8, 0.42, C_MID_BLUE) add_rect(slide, 0.85, 1.45, 0.12, 5.3, C_TEAL) add_text(slide, "Timed Up and Go (TUG)", 1.05, 1.5, 5.5, 0.35, font_size=14, bold=True, color=C_WHITE) tug_pts = [ "Stand up from standard chair", "Walk 3 meters", "Turn around", "Walk back 3 meters", "Sit back down", "", "Scoring (time in seconds):", "< 10 sec Normal mobility", "10–19 sec Good — independent", "20–29 sec Moderate — some risk", "> 30 sec Poor — dependent", ] add_multiline(slide, tug_pts, 1.05, 1.95, 5.5, 4.5, font_size=13, color=C_DARK_NAVY, spacing_after=6) # Tinetti right box add_rect(slide, 7.0, 1.45, 5.8, 5.3, C_WHITE) add_rect(slide, 7.0, 1.45, 5.8, 0.42, C_MID_BLUE) add_rect(slide, 7.0, 1.45, 0.12, 5.3, C_TEAL) add_text(slide, "Tinetti POMA", 7.2, 1.5, 5.4, 0.35, font_size=14, bold=True, color=C_WHITE) tin_pts = [ "Developed by Tinetti (1986)", "", "Balance sub-scale: 9 items (16 pts)", "Gait sub-scale: 7 items (12 pts)", "Total: 28 pts", "", "Score Interpretation:", "< 19 High fall risk", "19–24 Moderate fall risk", "25–28 Low fall risk", ] add_multiline(slide, tin_pts, 7.2, 1.95, 5.4, 4.5, font_size=13, color=C_DARK_NAVY, spacing_after=6) # ─── SLIDE 10 : MoCA ───────────────────────────────────────────────────────── slide = make_content_slide(prs, "MONTREAL COGNITIVE ASSESSMENT (MoCA)", "10") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) add_text(slide, "Developed by Nasreddine et al. (2005). Rapid screening for mild cognitive impairment (MCI).", 0.85, 1.5, 12.0, 0.45, font_size=14, italic=True, color=C_MID_BLUE) moca_domains = [ ("Visuospatial / Executive", "Trail test, cube, clock drawing", "5"), ("Naming", "Name 3 animals", "3"), ("Memory (Delayed Recall)", "5 words — recall after 5 min", "5"), ("Attention", "Digit span, tapping, serial 7", "6"), ("Language", "Sentence repetition, fluency", "3"), ("Abstraction", "Similarity between 2 items", "2"), ("Orientation", "Date, month, year, day, place", "6"), ] add_rect(slide, 0.85, 2.05, 7.5, 0.42, C_DARK_NAVY) for txt, x, w in [("Domain",0.9,3.0),("Task",3.95,4.0),("Pts",8.1,1.0)]: add_text(slide, txt, x, 2.1, w, 0.34, font_size=13, bold=True, color=C_WHITE) for i, (dom, task, pts) in enumerate(moca_domains): bg = C_LIGHT_BG if i % 2 == 0 else C_WHITE y = 2.52 + i * 0.53 add_rect(slide, 0.85, y, 7.5, 0.52, bg) add_text(slide, dom, 0.9, y+0.06, 2.9, 0.43, font_size=12, color=C_DARK_NAVY, bold=True) add_text(slide, task, 3.95, y+0.06, 3.9, 0.43, font_size=12, color=C_DARK_NAVY) add_text(slide, pts, 8.1, y+0.06, 0.9, 0.43, font_size=13, bold=True, color=C_TEAL, align=PP_ALIGN.CENTER) add_rect(slide, 0.85, 6.25, 7.5, 0.45, C_DARK_NAVY) add_text(slide, "Total: 30 pts | ≥ 26 = Normal | 18–25 = Mild CI | 10–17 = Moderate CI | < 10 = Severe CI", 0.9, 6.28, 7.3, 0.38, font_size=11, bold=True, color=C_GOLD, align=PP_ALIGN.CENTER) # Right panel add_rect(slide, 9.0, 2.05, 3.7, 4.65, C_DARK_NAVY) add_rect(slide, 9.0, 2.05, 0.12, 4.65, C_GOLD) add_text(slide, "Key Features", 9.2, 2.15, 3.3, 0.4, font_size=14, bold=True, color=C_GOLD) key_feats = [ "Takes 10 min to administer", "Available in 100+ languages", "Cut-off: 26/30", "Sensitivity: 90% for MCI", "Suitable for stroke, PD,", " TBI, dementia screening", "", "1 extra point if", "education < 12 years", ] add_multiline(slide, key_feats, 9.2, 2.65, 3.3, 3.8, font_size=12, color=C_SILVER, spacing_after=5) # ─── SLIDE 11 : UPDRS / PDQ-39 ──────────────────────────────────────────────── slide = make_content_slide(prs, "DISEASE-SPECIFIC MEASURES", "11") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) # UPDRS Box add_rect(slide, 0.85, 1.5, 5.6, 5.1, C_WHITE) add_rect(slide, 0.85, 1.5, 5.6, 0.45, C_MID_BLUE) add_rect(slide, 0.85, 1.5, 0.12, 5.1, C_TEAL) add_text(slide, "UPDRS (Parkinson's Disease)", 1.05, 1.55, 5.3, 0.38, font_size=13, bold=True, color=C_WHITE) updrs = [ "Unified Parkinson's Disease Rating Scale", "Developed by MDRS taskforce", "", "Part I: Non-motor symptoms", "Part II: Motor ADL", "Part III: Motor examination", "Part IV: Motor complications", "", "Score range: 0–199", "Higher score = greater disability", ] add_multiline(slide, updrs, 1.05, 2.05, 5.3, 4.3, font_size=13, color=C_DARK_NAVY, spacing_after=5) # PDQ-39 Box add_rect(slide, 6.8, 1.5, 5.6, 5.1, C_WHITE) add_rect(slide, 6.8, 1.5, 5.6, 0.45, C_MID_BLUE) add_rect(slide, 6.8, 1.5, 0.12, 5.1, C_TEAL) add_text(slide, "PDQ-39 (Parkinson's Disease QoL)", 7.0, 1.55, 5.3, 0.38, font_size=13, bold=True, color=C_WHITE) pdq = [ "Parkinson's Disease Questionnaire (39 items)", "Patient-reported outcome measure", "", "8 Domains:", " Mobility", " ADL", " Emotional wellbeing", " Stigma", " Social support", " Cognition, Communication, Bodily discomfort", "", "Score: 0–100 (lower = better QoL)", ] add_multiline(slide, pdq, 7.0, 2.05, 5.3, 4.3, font_size=12, color=C_DARK_NAVY, spacing_after=4) # ─── SLIDE 12 : FUNCTIONAL INDEPENDENCE MEASURE ─────────────────────────────── slide = make_content_slide(prs, "FUNCTIONAL INDEPENDENCE MEASURE (FIM)", "12") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) add_text(slide, "Comprehensive measure of disability and function; 18 items rated 1–7. Range: 18–126.", 0.85, 1.5, 12.0, 0.45, font_size=14, italic=True, color=C_MID_BLUE) # Left: Motor domain add_rect(slide, 0.85, 2.05, 5.8, 0.42, C_DARK_NAVY) add_text(slide, "Motor Domain (13 items — max 91 pts)", 0.9, 2.08, 5.6, 0.36, font_size=13, bold=True, color=C_WHITE) motor_items = [ "Self Care (6 items): Eating, Grooming, Bathing, Dressing-upper/lower, Toileting", "Sphincter Control (2): Bladder, Bowel", "Transfers (3): Bed/chair, Toilet, Tub/shower", "Locomotion (2): Walk/Wheelchair, Stairs", ] add_multiline(slide, motor_items, 0.9, 2.55, 5.6, 2.5, font_size=13, color=C_DARK_NAVY, spacing_after=10, bullet=True) # Right: Cognitive domain add_rect(slide, 6.9, 2.05, 5.8, 0.42, C_DARK_NAVY) add_text(slide, "Cognitive Domain (5 items — max 35 pts)", 6.95, 2.08, 5.6, 0.36, font_size=13, bold=True, color=C_WHITE) cog_items = [ "Communication (2): Comprehension, Expression", "Social Cognition (3): Social interaction, Problem solving, Memory", ] add_multiline(slide, cog_items, 6.95, 2.55, 5.6, 1.5, font_size=13, color=C_DARK_NAVY, spacing_after=10, bullet=True) # FIM levels add_rect(slide, 6.9, 4.15, 5.8, 0.42, C_MID_BLUE) add_text(slide, "7-Level Rating Scale", 6.95, 4.18, 5.6, 0.36, font_size=13, bold=True, color=C_WHITE) fim_levels = [ ("7", "Complete independence"), ("6", "Modified independence"), ("5", "Supervision/Setup"), ("4", "Minimal assist ≥75%"), ("3", "Moderate assist ≥50%"), ("2", "Maximal assist ≥25%"), ("1", "Total assist <25%"), ] for i, (n, label) in enumerate(fim_levels): bg = C_LIGHT_TEAL if int(n) >= 5 else (C_MID_BLUE if int(n) == 4 else C_DARK_NAVY) add_rect(slide, 6.9, 4.62 + i*0.33, 0.5, 0.31, bg) add_text(slide, n, 6.92, 4.64+i*0.33, 0.45, 0.28, font_size=12, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER) add_text(slide, label, 7.45, 4.64+i*0.33, 5.1, 0.28, font_size=12, color=C_DARK_NAVY) # FIM score interpretation (bottom left) add_rect(slide, 0.85, 5.15, 5.8, 1.55, C_LIGHT_BG) add_rect(slide, 0.85, 5.15, 0.12, 1.55, C_GOLD) add_text(slide, "Score Interpretation:", 1.05, 5.22, 5.4, 0.38, font_size=13, bold=True, color=C_DARK_NAVY) add_text(slide, "18 = Total dependence 19–60 = Maximal\n61–103 = Moderate 104–126 = Minimal/Independence", 1.05, 5.65, 5.5, 0.95, font_size=12, color=C_DARK_NAVY) # ─── SLIDE 13 : EDSS (MS) ───────────────────────────────────────────────────── slide = make_content_slide(prs, "EXPANDED DISABILITY STATUS SCALE (EDSS)", "13") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) add_text(slide, "Kurtzke EDSS (1983) — Standard outcome measure for Multiple Sclerosis (MS). Range: 0–10.", 0.85, 1.5, 12.0, 0.45, font_size=14, italic=True, color=C_MID_BLUE) edss = [ ("0.0", "Normal neurological exam", C_TEAL), ("1.0–1.5","No disability, minimal signs", C_TEAL), ("2.0–2.5","Minimal disability", C_TEAL), ("3.0–3.5","Moderate disability — fully ambulatory", RGBColor(0x1A,0x80,0x3A)), ("4.0–4.5","Relatively severe disability — ambulatory", RGBColor(0x1A,0x80,0x3A)), ("5.0–5.5","Disability severe — ambulatory ≥200m", C_MID_BLUE), ("6.0–6.5","Intermittent/constant unilateral assistance", C_DARK_NAVY), ("7.0–7.5","Unable to walk ~5m, restricted to wheelchair", RGBColor(0x7F,0x0A,0x0A)), ("8.0–8.5","Essentially restricted to bed", RGBColor(0x7F,0x0A,0x0A)), ("9.0–9.5","Helpless bed patient", RGBColor(0x50,0x00,0x00)), ("10.0", "Death due to MS", RGBColor(0x30,0x00,0x00)), ] y = 2.05 for score, desc, col in edss: add_rect(slide, 0.85, y, 1.5, 0.44, col) add_text(slide, score, 0.87, y+0.06, 1.45, 0.34, font_size=12, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER) bg = C_LIGHT_BG if edss.index((score,desc,col)) % 2 == 0 else C_WHITE add_rect(slide, 2.35, y, 10.7, 0.44, bg) add_text(slide, desc, 2.45, y+0.06, 10.5, 0.34, font_size=13, color=C_DARK_NAVY) y += 0.465 # ─── SLIDE 14 : ADVANTAGES & LIMITATIONS ───────────────────────────────────── slide = make_content_slide(prs, "ADVANTAGES & LIMITATIONS OF NEURO OUTCOME MEASURES", "14") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) # Left - Advantages add_rect(slide, 0.85, 1.5, 5.8, 0.42, C_TEAL) add_text(slide, "ADVANTAGES", 0.9, 1.54, 5.7, 0.36, font_size=14, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER) adv = [ "Provide standardized, objective assessments", "Allow comparison across patients and settings", "Enable measurement of change over time", "Support evidence-based clinical decisions", "Aid in setting rehabilitation goals", "Essential tools for research and audit", "Improve communication among care teams", "Patient-reported measures capture subjective experience", ] add_multiline(slide, adv, 0.9, 2.0, 5.6, 4.6, font_size=13, color=C_DARK_NAVY, bullet=True, spacing_after=8) # Right - Limitations add_rect(slide, 7.0, 1.5, 5.8, 0.42, C_DARK_NAVY) add_text(slide, "LIMITATIONS", 7.05, 1.54, 5.7, 0.36, font_size=14, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER) lim = [ "Many are time-consuming to administer", "Require trained assessors for validity", "May not capture all aspects of function", "Ceiling/floor effects in some scales", "Subjectivity in patient-reported tools", "Some lack sensitivity to small changes", "May not be appropriate for all populations", "Cultural and language barriers", ] add_multiline(slide, lim, 7.05, 2.0, 5.6, 4.6, font_size=13, color=C_DARK_NAVY, bullet=True, spacing_after=8) # ─── SLIDE 15 : ROLE OF PHYSIOTHERAPIST ────────────────────────────────────── slide = make_content_slide(prs, "ROLE OF PHYSIOTHERAPIST IN NEUROLOGICAL ASSESSMENT", "15") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) roles = [ ("Selection", "Choose the most appropriate and valid outcome measure for the condition and clinical setting."), ("Administration", "Correctly administer the tool as per standardized instructions to ensure reliable results."), ("Scoring & Interpretation", "Accurately score the measure and interpret findings in the context of the patient's goals."), ("Goal Setting", "Use baseline scores to set realistic, measurable rehabilitation goals."), ("Monitoring Progress", "Re-administer at regular intervals to track change and respond to treatment."), ("Communication", "Share results with the multidisciplinary team to coordinate holistic patient care."), ("Research", "Contribute to clinical research using validated measures for evidence-based practice."), ] y = 1.55 for role, desc in roles: add_rect(slide, 0.85, y, 3.5, 0.6, C_DARK_NAVY) add_rect(slide, 0.85, y, 0.12, 0.6, C_GOLD) add_text(slide, role, 1.05, y+0.1, 3.2, 0.42, font_size=12, bold=True, color=C_WHITE) add_text(slide, desc, 4.5, y+0.08, 8.7, 0.5, font_size=12, color=C_DARK_NAVY) y += 0.69 # ─── SLIDE 16 : REFERENCES ──────────────────────────────────────────────────── slide = make_content_slide(prs, "REFERENCES", "16") add_rect(slide, 0.6, 1.35, 12.3, 5.55, C_WHITE) add_rect(slide, 0.6, 1.35, 0.12, 5.55, C_TEAL) refs = [ "Mahoney FI, Barthel DW. Functional evaluation: The Barthel Index. Maryland State Med J. 1965;14:61–65.", "Berg KO, Wood-Dauphinee SL, Williams JI, Maki B. Measuring balance in the elderly: validation of an instrument. Can J Public Health. 1992;83(Suppl2):S7–11.", "Brott T, Adams HP, Olinger CP, et al. Measurements of acute cerebral infarction. Stroke. 1989;20:864–870.", "Fugl-Meyer AR, Jääskö L, Leyman I, et al. The post-stroke hemiplegic patient. Scand J Rehabil Med. 1975;7:13–31.", "Nasreddine ZS, Phillips NA, Bédirian V, et al. The Montreal Cognitive Assessment, MoCA. JAGS. 2005;53:695–699.", "Tinetti ME. Performance-oriented assessment of mobility problems in elderly patients. JAGS. 1986;34:119–126.", "Kurtzke JF. Rating neurologic impairment in multiple sclerosis: An expanded disability status scale (EDSS). Neurology. 1983;33:1444–1452.", "Goetz CG, et al. Movement Disorder Society-sponsored revision of the UPDRS. Mov Disord. 2008;23(15):2129–2170.", ] add_multiline(slide, refs, 0.9, 1.55, 12.0, 5.3, font_size=11.5, color=C_DARK_NAVY, spacing_after=7) # ─── SLIDE 17 : THANK YOU ──────────────────────────────────────────────────── slide = prs.slides.add_slide(blank_layout) add_rect(slide, 0, 0, 13.333, 7.5, C_DARK_NAVY) add_rect(slide, 0, 0, 13.333, 0.12, C_TEAL) add_rect(slide, 0, 7.38, 13.333, 0.12, C_TEAL) add_rect(slide, 0, 0, 0.35, 7.5, C_MID_BLUE) # Decorative circle add_rect(slide, 4.8, 1.8, 3.8, 3.8, C_MID_BLUE) add_text(slide, "THANK YOU", 1.0, 2.5, 11.5, 1.5, font_size=52, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER, font_name="Calibri") add_rect(slide, 3.5, 4.15, 6.333, 0.07, C_GOLD) add_text(slide, "Questions & Discussion", 1.0, 4.35, 11.5, 0.7, font_size=20, bold=False, color=C_LIGHT_TEAL, align=PP_ALIGN.CENTER, italic=True) add_text(slide, "MGM Allied Health Science Institute | Department of Physiotherapy", 1.0, 5.5, 11.5, 0.55, font_size=13, bold=False, color=C_LIGHT_TEAL, align=PP_ALIGN.CENTER) prs.save("/tmp/workspace/neuro-outcome-measures/Neuro_Outcome_Measures.pptx") print("Saved successfully!") PYEOF
python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/neuro-outcome-measures/Neuro_Outcome_Measures.pptx') print(f'Slides: {len(prs.slides)}') print(f'Width: {prs.slide_width.inches:.2f} inches') print(f'Height: {prs.slide_height.inches:.2f} inches') import os size = os.path.getsize('/tmp/workspace/neuro-outcome-measures/Neuro_Outcome_Measures.pptx') print(f'File size: {size/1024:.1f} KB') "
Neuro Outcome Measures
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title slide - MGM AHS Institute branding |
| 2 | Introduction to neurological outcome measures |
| 3 | Classification of all neuro outcome measure types |
| 4 | Barthel Index (BI) - 10 ADL items + score interpretation |
| 5 | Berg Balance Scale (BBS) - all 14 tasks + fall risk levels |
| 6 | NIHSS - all 13 domains in table format + severity scale |
| 7 | Modified Rankin Scale (mRS) - all 7 grades color-coded |
| 8 | Fugl-Meyer Assessment (FMA) - 6 domains + scoring guide |
| 9 | TUG & Tinetti POMA - side-by-side comparison |
| 10 | MoCA - all 7 cognitive domains + score cut-offs |
| 11 | UPDRS (Parkinson's) & PDQ-39 - disease-specific measures |
| 12 | FIM - motor + cognitive domains + 7-level rating scale |
| 13 | EDSS (Multiple Sclerosis) - full 0–10 scale color-coded |
| 14 | Advantages & Limitations (side-by-side) |
| 15 | Role of Physiotherapist in assessment |
| 16 | References (8 key citations) |
| 17 | Thank You slide |
give proper neuro outcome measures according to book with respective scale
python3 << 'PYEOF' 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 prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) blank = prs.slide_layouts[6] # ── Palette ────────────────────────────────────────────────────────────────── NAVY = RGBColor(0x0A, 0x1F, 0x44) BLUE = RGBColor(0x1B, 0x4F, 0x72) TEAL = RGBColor(0x17, 0x7E, 0x89) LTEAL = RGBColor(0x76, 0xC8, 0xD0) WHITE = RGBColor(0xFF, 0xFF, 0xFF) SILVER = RGBColor(0xEC, 0xF0, 0xF1) GOLD = RGBColor(0xF0, 0xC0, 0x40) LBGB = RGBColor(0xF4, 0xF8, 0xFB) GREEN = RGBColor(0x1A, 0x80, 0x3A) RED = RGBColor(0x7F, 0x0A, 0x0A) ORANGE = RGBColor(0xC0, 0x50, 0x10) # ── Primitive helpers ───────────────────────────────────────────────────────── def rect(slide, l,t,w,h,col): s = slide.shapes.add_shape(1,Inches(l),Inches(t),Inches(w),Inches(h)) s.fill.solid(); s.fill.fore_color.rgb=col; s.line.fill.background(); return s def tb(slide, text, l,t,w,h, sz=14, bold=False, col=NAVY, align=PP_ALIGN.LEFT, italic=False, va=MSO_ANCHOR.TOP, wrap=True, fn="Calibri"): box=slide.shapes.add_textbox(Inches(l),Inches(t),Inches(w),Inches(h)) tf=box.text_frame; tf.word_wrap=wrap; tf.vertical_anchor=va p=tf.paragraphs[0]; p.alignment=align r=p.add_run(); r.text=text; r.font.name=fn r.font.size=Pt(sz); r.font.bold=bold; r.font.italic=italic if col: r.font.color.rgb=col return box def mltb(slide, lines, l,t,w,h, sz=13, bold=False, col=NAVY, align=PP_ALIGN.LEFT, sa=7, fn="Calibri", bullet=False): box=slide.shapes.add_textbox(Inches(l),Inches(t),Inches(w),Inches(h)) tf=box.text_frame; tf.word_wrap=True for i,line in enumerate(lines): p=tf.paragraphs[0] if i==0 else tf.add_paragraph() p.alignment=align; p.space_after=Pt(sa) r=p.add_run() r.text=(" \u2022 "+line if bullet and line else line) r.font.name=fn; r.font.size=Pt(sz); r.font.bold=bold if col: r.font.color.rgb=col return box # ── Content-slide template ──────────────────────────────────────────────────── def content_slide(prs, title, pg=""): s=prs.slides.add_slide(blank) rect(s,0,0,13.333,7.5,LBGB) rect(s,0,0,13.333,1.08,NAVY) rect(s,0,1.08,13.333,0.06,TEAL) rect(s,0,0,0.32,7.5,BLUE) rect(s,0,7.1,13.333,0.40,NAVY) rect(s,0,7.06,13.333,0.06,TEAL) tb(s,title,0.55,0.10,11.8,0.90,sz=26,bold=True,col=WHITE, align=PP_ALIGN.LEFT,va=MSO_ANCHOR.MIDDLE) tb(s,"Neuro Outcome Measures | MGM AHS Institute",0.5,7.12,10,0.35, sz=9,col=LTEAL) if pg: tb(s,pg,11.8,7.12,1.2,0.35,sz=9,col=LTEAL,align=PP_ALIGN.RIGHT) return s # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 1 – TITLE # ═══════════════════════════════════════════════════════════════════════════════ s=prs.slides.add_slide(blank) rect(s,0,0,13.333,7.5,NAVY) rect(s,0,0,13.333,0.10,TEAL) rect(s,0,7.40,13.333,0.10,TEAL) rect(s,0,0,0.32,7.5,BLUE) tb(s,"MGM Allied Health Science Institute",0.5,0.2,12.5,0.5, sz=13,col=LTEAL,align=PP_ALIGN.CENTER) tb(s,"OUTCOME MEASURES\nIN NEUROLOGY",0.5,1.1,12.5,2.0, sz=40,bold=True,col=WHITE,align=PP_ALIGN.CENTER,fn="Calibri") rect(s,3.0,3.25,7.333,0.07,GOLD) tb(s,"Neurological Assessment Tools & Scales",0.5,3.45,12.5,0.65, sz=18,col=LTEAL,align=PP_ALIGN.CENTER,italic=True) rect(s,2.5,4.15,8.333,2.1,BLUE) rect(s,2.5,4.15,0.10,2.1,GOLD) tb(s,"Presented by: Shrasti Naigaonkar",2.75,4.28,5,0.5, sz=14,bold=True,col=WHITE) tb(s,"MPT 1st Year (Neurology / Oncology)",2.75,4.78,5,0.45, sz=12,col=LTEAL) tb(s,"Guided by: Dr. Niketa Shobhit",2.75,5.28,5,0.5, sz=14,bold=True,col=WHITE) tb(s,"Department of Physiotherapy",2.75,5.78,5,0.45, sz=12,col=LTEAL) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 2 – INTRODUCTION # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"INTRODUCTION","2") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) mltb(s,[ "Outcome measures are standardized tools used to quantify the neurological status of a patient before, during, and after treatment.", "They provide objective, reproducible data on impairment, activity limitation, participation restriction, and quality of life.", "In neurological physiotherapy, outcome measures serve to:", ],1.0,1.42,12.0,2.1,sz=15,col=NAVY,sa=10) mltb(s,[ "Establish a baseline of neurological function", "Track recovery / disease progression over time", "Evaluate effectiveness of physiotherapy interventions", "Guide goal-setting and clinical decision-making", "Enable communication across the multidisciplinary team", "Contribute to evidence-based research and clinical trials", ],1.1,3.3,11.8,3.2,sz=14,col=BLUE,bullet=True,sa=8) tb(s,"Source: Adams & Victor's Principles of Neurology 12e; Bradley & Daroff's Neurology in Clinical Practice", 0.7,6.62,12.0,0.38,sz=9,italic=True,col=TEAL) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 3 – CLASSIFICATION # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"CLASSIFICATION OF NEURO OUTCOME MEASURES","3") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) cats = [ ("Neurological Severity / Impairment", "NIHSS, GCS, Hunt & Hess, FOUR Score, MRC Motor Scale"), ("Global Disability / Activity", "Modified Rankin Scale (mRS), Barthel Index (BI), FIM"), ("Motor Function / Recovery", "Fugl-Meyer Assessment (FMA), Brunnstrom Stages, MAS"), ("Balance & Gait", "Berg Balance Scale (BBS), TUG, Tinetti POMA, FAC, DGI"), ("Cognitive Screening", "MoCA, MMSE, COGNISTAT, Trail Making Test"), ("Disease-Specific QoL", "PDQ-39 (Parkinson's), EDSS (MS), SS-QOL (Stroke), ALS-FRS"), ("Spasticity / Tone", "Modified Ashworth Scale (MAS), Tardieu Scale"), ] y=1.42 for cat, tools in cats: rect(s,0.75,y,5.2,0.56,NAVY) tb(s,cat,0.8,y+0.07,5.1,0.45,sz=12,bold=True,col=WHITE) tb(s,tools,6.05,y+0.07,6.7,0.45,sz=12,col=NAVY) y+=0.68 tb(s,"Source: Adams & Victor's Principles of Neurology 12e; Bradley & Daroff's Neurology in Clinical Practice", 0.7,6.62,12.0,0.38,sz=9,italic=True,col=TEAL) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 4 – NIHSS (Book: Adams & Victor 12e, Table 33-4; Tintinalli EM Table 167-6) # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"NIH STROKE SCALE (NIHSS)","4") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Source: Adams & Victor's Principles of Neurology 12e, Table 33-4 | Tintinalli's EM, Table 167-6", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) tb(s,"13 essential elements (15 items) | Score range: 0–42 | Higher score = worse deficit | Time: < 10 min", 0.7,1.72,12.0,0.4,sz=12,italic=True,col=BLUE) nihss=[ ("1A","Level of consciousness","0–3"), ("1B","Response to month and age questions","0–3"), ("1C","Response to blink eyes / squeeze hand","0–2"), ("2","Best gaze (horizontal eye movements)","0–2"), ("3","Visual fields","0–3"), ("4","Facial palsy","0–3"), ("5a / 5b","Motor arm – left / right","0–4 each"), ("6a / 6b","Motor leg – left / right","0–4 each"), ("7","Limb ataxia","0–2"), ("8","Sensory","0–2"), ("9","Best language (aphasia)","0–3"), ("10","Dysarthria","0–2"), ("11","Extinction and inattention (neglect)","0–2"), ] # Table header for txt,x,w in [("Item",0.65,0.7),("Domain",1.4,7.2),("Score",8.65,1.3)]: rect(s,x,2.2,w,0.38,NAVY) tb(s,txt,x+0.04,2.24,w-0.08,0.32,sz=11,bold=True,col=WHITE,align=PP_ALIGN.CENTER) for i,(num,dom,sc) in enumerate(nihss): bg=LBGB if i%2==0 else WHITE y=2.62+i*0.325 rect(s,0.65,y,0.7,0.315,bg) rect(s,1.4,y,7.2,0.315,bg) rect(s,8.65,y,1.3,0.315,bg) tb(s,num, 0.67,y+0.03,0.64,0.28,sz=10,col=NAVY,align=PP_ALIGN.CENTER) tb(s,dom, 1.44,y+0.03,7.1,0.28,sz=10,col=NAVY) tb(s,sc, 8.67,y+0.03,1.24,0.28,sz=10,col=BLUE,align=PP_ALIGN.CENTER) # Severity box right rect(s,10.15,2.2,2.5,5.1,NAVY) rect(s,10.15,2.2,0.10,5.1,GOLD) tb(s,"Severity",10.35,2.28,2.1,0.35,sz=12,bold=True,col=GOLD) sev=[("0","No stroke"),("1–4","Minor"),("5–14","Mild–Mod"), ("15–24","Severe"),("25–42","Very severe")] for j,(sc,lb) in enumerate(sev): rect(s,10.3,2.75+j*0.9,0.8,0.72,TEAL) tb(s,sc,10.32,2.8+j*0.9,0.76,0.6,sz=13,bold=True,col=WHITE,align=PP_ALIGN.CENTER) tb(s,lb,11.15,2.8+j*0.9,1.35,0.6,sz=11,col=SILVER) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 5 – mRS (Adams & Victor 12e, Table 33-4) # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"MODIFIED RANKIN SCALE (mRS)","5") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Source: Adams & Victor's Principles of Neurology 12e, Table 33-4", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) tb(s,"Global disability scale | 7 categories (0–6) | 0 = No symptoms → 6 = Death | Widely used in stroke trials", 0.7,1.72,12.0,0.4,sz=12,italic=True,col=BLUE) mrs=[ ("0","No symptoms at all",TEAL), ("1","No significant disability — able to carry out all usual duties and activities",TEAL), ("2","Slight disability — unable to carry out all previous activities but able to look after own affairs without assistance",GREEN), ("3","Moderate disability — requiring some help, but able to walk without assistance",GREEN), ("4","Moderately severe disability — unable to walk without assistance and unable to attend to own bodily needs without assistance",ORANGE), ("5","Severe disability — bedridden, incontinent, requiring constant nursing care and attention",RED), ("6","Dead",RGBColor(0x40,0x00,0x00)), ] y=2.18 for grade,desc,col in mrs: rect(s,0.65,y,0.75,0.56,col) tb(s,grade,0.67,y+0.07,0.7,0.44,sz=22,bold=True,col=WHITE,align=PP_ALIGN.CENTER) bg=LBGB if int(grade)%2==0 else WHITE rect(s,1.4,y,11.0,0.56,bg) tb(s,desc,1.5,y+0.08,10.8,0.44,sz=12,col=NAVY) y+=0.635 tb(s,"Note: 0–2 = good outcome in most trials; 0–3 also used. Single-point change is clinically meaningful. (Adams & Victor 12e)", 0.65,6.62,12.2,0.38,sz=9,italic=True,col=TEAL) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 6 – BARTHEL INDEX (Adams & Victor 12e, Table 33-4) # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"BARTHEL INDEX (BI)","6") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Source: Adams & Victor's Principles of Neurology 12e, Table 33-4", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) tb(s,"Functional ADL scale | Score: 0–100 | Higher score = better function | 100 = totally independent", 0.7,1.72,12.0,0.4,sz=12,italic=True,col=BLUE) # 10 items in table form bi=[ ("Feeding", "0, 5, 10"), ("Bathing", "0, 5"), ("Grooming", "0, 5"), ("Dressing", "0, 5, 10"), ("Bowels (continence)", "0, 5, 10"), ("Bladder (continence)", "0, 5, 10"), ("Toilet use", "0, 5, 10"), ("Transfers (chair / bed)", "0, 5, 10, 15"), ("Mobility on level surface", "0, 5, 10, 15"), ("Stairs", "0, 5, 10"), ] for txt,x,w in [("ADL Item",0.65,6.0),("Possible Scores",6.7,2.8)]: rect(s,x,2.18,w,0.38,NAVY) tb(s,txt,x+0.05,2.22,w-0.1,0.32,sz=11,bold=True,col=WHITE,align=PP_ALIGN.CENTER) for i,(item,sc) in enumerate(bi): bg=LBGB if i%2==0 else WHITE y=2.6+i*0.44 rect(s,0.65,y,6.0,0.42,bg) rect(s,6.7,y,2.8,0.42,bg) tb(s,f" {i+1}. {item}",0.67,y+0.04,5.9,0.36,sz=12,col=NAVY) tb(s,sc,6.72,y+0.04,2.7,0.36,sz=12,col=BLUE,align=PP_ALIGN.CENTER) # Score interpretation right box rect(s,9.7,2.18,2.9,5.65,NAVY) rect(s,9.7,2.18,0.10,5.65,GOLD) tb(s,"Score Interpretation",9.9,2.26,2.5,0.38,sz=11,bold=True,col=GOLD) interp=[ ("0 – 20","Total dependence"), ("21 – 60","Severe dependence"), ("61 – 90","Moderate dependence"), ("91 – 99","Slight dependence"), ("100","Full independence"), ] for j,(sc,lb) in enumerate(interp): rect(s,9.85,2.72+j*0.95,1.15,0.72,TEAL) tb(s,sc,9.87,2.78+j*0.95,1.11,0.6,sz=12,bold=True,col=WHITE,align=PP_ALIGN.CENTER) tb(s,lb,11.05,2.78+j*0.95,1.4,0.6,sz=11,col=SILVER) tb(s,"Variable point weighting: transfers, mobility, and toileting carry most weight. (Adams & Victor 12e)", 0.65,6.62,8.8,0.38,sz=9,italic=True,col=TEAL) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 7 – ABCD² + Hunt & Hess (Adams & Victor 12e, Table 33-4) # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"ABCD² SCORE & HUNT–HESS SCALE","7") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Source: Adams & Victor's Principles of Neurology 12e, Table 33-4", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) # ABCD2 left rect(s,0.65,1.75,5.9,0.42,BLUE) rect(s,0.65,1.75,0.10,0.42,GOLD) tb(s,"ABCD² Score (TIA Stroke Risk Prediction)",0.82,1.79,5.6,0.35,sz=12,bold=True,col=WHITE) abcd2=[ ("A – Age","≥ 60 years = 1 pt"), ("B – BP","Systolic ≥ 140 or Diastolic ≥ 90 = 1 pt"), ("C – Clinical features","Unilateral weakness = 2 pts; Speech disturbance without weakness = 1 pt"), ("D – Duration of TIA","≥ 60 min = 2 pts; 10–59 min = 1 pt"), ("D – Diabetes","Present = 1 pt"), ] y=2.22 for fac,score in abcd2: rect(s,0.65,y,2.3,0.58,LBGB) rect(s,2.95,y,3.6,0.58,WHITE) tb(s,fac,0.68,y+0.06,2.22,0.48,sz=11,bold=True,col=NAVY) tb(s,score,2.98,y+0.06,3.5,0.48,sz=11,col=NAVY) y+=0.64 rect(s,0.65,5.45,5.9,0.38,NAVY) tb(s,"Score 0–3 = Low risk | 4–5 = Moderate risk | 6–7 = High 2-day stroke risk", 0.7,5.49,5.8,0.32,sz=10,bold=True,col=GOLD,align=PP_ALIGN.CENTER) # Hunt & Hess right rect(s,6.85,1.75,5.9,0.42,BLUE) rect(s,6.85,1.75,0.10,0.42,GOLD) tb(s,"Hunt & Hess Scale (Subarachnoid Haemorrhage)",7.02,1.79,5.6,0.35,sz=12,bold=True,col=WHITE) hh=[ ("Grade 1","Asymptomatic or mild headache / slight nuchal rigidity",TEAL), ("Grade 2","Moderate–severe headache; nuchal rigidity; no neurological deficit except CN palsy",GREEN), ("Grade 3","Drowsiness, confusion, or mild focal deficit",GREEN), ("Grade 4","Stupor; moderate–severe hemiparesis; early decerebrate rigidity",ORANGE), ("Grade 5","Deep coma; decerebrate rigidity; moribund appearance",RED), ] y=2.22 for grade,desc,col in hh: rect(s,6.85,y,1.3,0.58,col) tb(s,grade,6.87,y+0.1,1.24,0.42,sz=11,bold=True,col=WHITE,align=PP_ALIGN.CENTER) bg=LBGB if hh.index((grade,desc,col))%2==0 else WHITE rect(s,8.15,y,4.6,0.58,bg) tb(s,desc,8.18,y+0.06,4.55,0.48,sz=11,col=NAVY) y+=0.65 # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 8 – GCS (Adams & Victor 12e) # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"GLASGOW COMA SCALE (GCS)","8") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Source: Adams & Victor's Principles of Neurology 12e; Bradley & Daroff's Neurology in Clinical Practice", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) tb(s,"3 components | Score range: 3–15 | Used for TBI, coma, stroke, ICU patients", 0.7,1.72,12.0,0.4,sz=12,italic=True,col=BLUE) gcs=[ ("Eye Opening (E)","4 = Spontaneous\n3 = To voice\n2 = To pain\n1 = None"), ("Verbal Response (V)","5 = Oriented\n4 = Confused\n3 = Inappropriate words\n2 = Incomprehensible sounds\n1 = None"), ("Motor Response (M)","6 = Obeys commands\n5 = Localises pain\n4 = Withdraws\n3 = Abnormal flexion (decorticate)\n2 = Extension (decerebrate)\n1 = None"), ] y=2.1 for comp,desc in gcs: rect(s,0.65,y,3.5,0.4,NAVY) tb(s,comp,0.7,y+0.06,3.4,0.32,sz=13,bold=True,col=WHITE) desc_lines=desc.split("\n") mltb(s,desc_lines,4.25,y+0.05,8.5,len(desc_lines)*0.48,sz=13,col=NAVY,sa=4) y+=len(desc_lines)*0.5+0.25 rect(s,0.65,6.0,5.5,0.45,NAVY) tb(s,"Interpretation: 13–15 = Mild TBI | 9–12 = Moderate | ≤ 8 = Severe TBI / Coma", 0.7,6.03,11.5,0.38,sz=11,bold=True,col=GOLD,align=PP_ALIGN.LEFT) rect(s,0.65,6.0,12.0,0.45,NAVY) tb(s,"Interpretation: 13–15 = Mild TBI | 9–12 = Moderate | ≤ 8 = Severe TBI / Coma", 0.7,6.04,11.8,0.38,sz=12,bold=True,col=GOLD,align=PP_ALIGN.CENTER) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 9 – FUGL-MEYER ASSESSMENT # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"FUGL-MEYER ASSESSMENT (FMA)","9") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Source: Fugl-Meyer AR et al. Scand J Rehabil Med 1975; referenced in Bradley & Daroff's Neurology in Clinical Practice", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) tb(s,"Quantitative sensorimotor stroke recovery scale | Each item: 0 = cannot perform, 1 = partial, 2 = full", 0.7,1.72,12.0,0.4,sz=12,italic=True,col=BLUE) for txt,x,w in [("Domain",0.65,4.0),("Items",4.7,1.2),("Max Score",5.95,1.5)]: rect(s,x,2.18,w,0.4,NAVY) tb(s,txt,x+0.05,2.22,w-0.1,0.34,sz=12,bold=True,col=WHITE,align=PP_ALIGN.CENTER) fma=[ ("Upper Extremity Motor","33","66"), ("Lower Extremity Motor","17","34"), ("Sensory (light touch + proprioception)","12","24"), ("Balance (sitting + standing)","7","14"), ("Joint Range of Motion","44","44"), ("Joint Pain","44","44"), ] for i,(dom,items,pts) in enumerate(fma): bg=LBGB if i%2==0 else WHITE y=2.62+i*0.6 rect(s,0.65,y,4.0,0.56,bg) rect(s,4.7,y,1.2,0.56,bg) rect(s,5.95,y,1.5,0.56,bg) tb(s,dom,0.7,y+0.08,3.9,0.45,sz=12,col=NAVY) tb(s,items,4.72,y+0.08,1.1,0.45,sz=12,col=BLUE,align=PP_ALIGN.CENTER) tb(s,pts,5.97,y+0.08,1.4,0.45,sz=12,bold=True,col=TEAL,align=PP_ALIGN.CENTER) rect(s,0.65,6.24,6.8,0.42,NAVY) tb(s,"Total Maximum Score = 226 points",0.7,6.27,6.7,0.36,sz=13,bold=True,col=GOLD,align=PP_ALIGN.CENTER) # Right panel rect(s,7.7,2.18,4.8,4.7,NAVY) rect(s,7.7,2.18,0.10,4.7,GOLD) tb(s,"Score Interpretation",7.9,2.26,4.4,0.38,sz=12,bold=True,col=GOLD) mltb(s,[ "< 50 pts Severe motor impairment", "50–84 pts Marked impairment", "85–94 pts Moderate impairment", "95–99 pts Slight impairment", "100 pts No impairment", "","Upper Extremity Sub-scale:", "0–28 Severe | 29–56 Moderate", "57–79 Mild | 80–100 Minimal", ],7.9,2.7,4.4,4.0,sz=12,col=SILVER,sa=6) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 10 – BERG BALANCE SCALE # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"BERG BALANCE SCALE (BBS)","10") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Source: Berg KO et al. Can J Public Health 1992; referenced in Neurological Physiotherapy practice", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) tb(s,"14 functional balance tasks | Each item scored 0–4 | Total: 0–56 | Scoring: 0 = unable, 4 = independent", 0.7,1.72,12.0,0.4,sz=12,italic=True,col=BLUE) bbs=[ "1. Sitting to standing","2. Standing unsupported","3. Sitting unsupported (feet on floor)", "4. Standing to sitting","5. Transfers","6. Standing with eyes closed", "7. Standing with feet together","8. Reaching forward with outstretched arm", "9. Retrieving object from the floor","10. Turning to look behind over shoulders", "11. Turning 360 degrees","12. Placing alternate foot on a stool", "13. Standing with one foot in front (tandem)","14. Standing on one foot", ] cols=[bbs[:7], bbs[7:]] for ci,col_items in enumerate(cols): x=0.65+ci*6.0 for ri,item in enumerate(col_items): bg=LBGB if ri%2==0 else WHITE rect(s,x,2.18+ri*0.59,5.7,0.56,bg) tb(s,item,x+0.1,2.23+ri*0.59,5.5,0.48,sz=12,col=NAVY) rect(s,0.65,6.35,12.0,0.4,NAVY) tb(s,"Score: 0–20 = High fall risk | 21–40 = Moderate fall risk | 41–56 = Low fall risk (Validated for stroke, PD, elderly)", 0.7,6.38,11.8,0.34,sz=11,bold=True,col=GOLD,align=PP_ALIGN.CENTER) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 11 – TUG & TINETTI # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"TIMED UP AND GO (TUG) & TINETTI POMA","11") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Sources: Podsiadlo & Richardson 1991 (TUG); Tinetti 1986 (POMA) | Referenced in neurological physiotherapy texts", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) # TUG rect(s,0.65,1.75,5.9,0.42,BLUE); rect(s,0.65,1.75,0.10,0.42,GOLD) tb(s,"Timed Up and Go (TUG) Test",0.82,1.79,5.6,0.35,sz=13,bold=True,col=WHITE) rect(s,0.65,2.22,5.9,4.7,WHITE); rect(s,0.65,2.22,0.10,4.7,TEAL) tug=[ "Standard chair with armrests", "Patient stands, walks 3 m, turns, walks back, sits", "Timed from 'Go' to seated position", "","Score (time in seconds):", "< 10 sec Normal mobility – community independent", "10–19 sec Good – independent; some fall risk", "20–29 sec Moderate risk – variable community access", "> 30 sec Poor – dependent; high fall risk", "","Uses: Stroke, Parkinson's, elderly, MS, TBI", ] mltb(s,tug,0.82,2.3,5.6,4.5,sz=12,col=NAVY,sa=5) # Tinetti rect(s,6.8,1.75,5.9,0.42,BLUE); rect(s,6.8,1.75,0.10,0.42,GOLD) tb(s,"Tinetti POMA (Performance Oriented Mobility Assessment)",6.97,1.79,5.6,0.35,sz=12,bold=True,col=WHITE) rect(s,6.8,2.22,5.9,4.7,WHITE); rect(s,6.8,2.22,0.10,4.7,TEAL) tin=[ "Developed by Tinetti ME, 1986", "Total score: 28 points","", "Balance sub-scale (16 pts) – 9 items:", " Sitting balance, arising, standing balance,", " nudge, eyes closed, turning, sitting down", "","Gait sub-scale (12 pts) – 7 items:", " Initiation, step length, step height,", " step symmetry, continuity, path, trunk, stance", "","Score < 19 = High fall risk", "Score 19–24 = Moderate fall risk", "Score 25–28 = Low fall risk", ] mltb(s,tin,6.97,2.3,5.6,4.5,sz=12,col=NAVY,sa=4) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 12 – MoCA # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"MONTREAL COGNITIVE ASSESSMENT (MoCA)","12") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Source: Nasreddine ZS et al. JAGS 2005 | Referenced in Bradley & Daroff's Neurology in Clinical Practice", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) tb(s,"Rapid MCI screening | Total: 30 pts | Cut-off ≥ 26 = Normal | Takes ~10 min | 100+ languages", 0.7,1.72,12.0,0.4,sz=12,italic=True,col=BLUE) moca=[ ("Visuospatial / Executive","Trail test (1pt), cube copy (1pt), clock drawing (3pt)","5"), ("Naming","Name 3 animals (lion, camel, rhinoceros)","3"), ("Memory (Delayed Recall)","5 words recalled after 5-min delay","5"), ("Attention","Digit span forward/backward, tapping, serial 7s","6"), ("Language","Sentence repetition (2 pts), verbal fluency (1 pt)","3"), ("Abstraction","Similarities between 2 pairs of items","2"), ("Orientation","Date, month, year, day, place, city","6"), ] for txt,x,w in [("Domain",0.65,3.0),("Task Description",3.7,7.0),("Pts",10.75,0.9)]: rect(s,x,2.18,w,0.4,NAVY) tb(s,txt,x+0.05,2.22,w-0.1,0.34,sz=11,bold=True,col=WHITE,align=PP_ALIGN.CENTER) for i,(dom,task,pts) in enumerate(moca): bg=LBGB if i%2==0 else WHITE y=2.62+i*0.54 rect(s,0.65,y,3.0,0.52,bg); rect(s,3.7,y,7.0,0.52,bg); rect(s,10.75,y,0.9,0.52,bg) tb(s,dom,0.7,y+0.06,2.9,0.44,sz=11,bold=True,col=NAVY) tb(s,task,3.75,y+0.06,6.85,0.44,sz=11,col=NAVY) tb(s,pts,10.77,y+0.06,0.82,0.44,sz=12,bold=True,col=TEAL,align=PP_ALIGN.CENTER) rect(s,0.65,6.44,11.0,0.38,NAVY) tb(s,"≥26 = Normal | 18–25 = Mild CI | 10–17 = Moderate CI | <10 = Severe CI | +1 pt if education < 12 yrs", 0.7,6.47,10.8,0.32,sz=11,bold=True,col=GOLD,align=PP_ALIGN.CENTER) # Right panel rect(s,11.85,2.18,0.9,4.65,NAVY) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 13 – MODIFIED ASHWORTH + FUNCTIONAL AMBULATION # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"MODIFIED ASHWORTH SCALE (MAS) & FUNCTIONAL AMBULATION CATEGORY (FAC)","13") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Sources: Bohannon & Smith 1987 (MAS) | Holden et al. 1984 (FAC) | Referenced in Neurological Rehabilitation texts", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) # MAS left rect(s,0.65,1.75,5.9,0.42,BLUE); rect(s,0.65,1.75,0.10,0.42,GOLD) tb(s,"Modified Ashworth Scale (Spasticity)",0.82,1.79,5.6,0.35,sz=13,bold=True,col=WHITE) mas=[ ("0","No increase in muscle tone",TEAL), ("1","Slight increase — catch/release OR minimal resistance at end of ROM",TEAL), ("1+","Slight increase — catch in less than half of ROM",GREEN), ("2","More marked increase — through most of ROM but easily moved",ORANGE), ("3","Considerable increase — passive movement difficult",RED), ("4","Affected part rigid in flexion or extension",RGBColor(0x60,0x00,0x00)), ] y=2.22 for gr,desc,col in mas: rect(s,0.65,y,0.72,0.56,col) tb(s,gr,0.67,y+0.07,0.68,0.44,sz=14,bold=True,col=WHITE,align=PP_ALIGN.CENTER) bg=LBGB if mas.index((gr,desc,col))%2==0 else WHITE rect(s,1.37,y,5.18,0.56,bg) tb(s,desc,1.42,y+0.07,5.1,0.44,sz=11,col=NAVY) y+=0.635 # FAC right rect(s,6.8,1.75,5.9,0.42,BLUE); rect(s,6.8,1.75,0.10,0.42,GOLD) tb(s,"Functional Ambulation Category (FAC)",6.97,1.79,5.6,0.35,sz=13,bold=True,col=WHITE) fac=[ ("0","Non-functional ambulation — cannot walk or needs help of 2+",RGBColor(0x60,0x00,0x00)), ("1","Ambulation with continuous manual contact of one person",RED), ("2","Ambulation with intermittent contact for balance / coordination",ORANGE), ("3","Ambulation with supervision (close but no contact)",GREEN), ("4","Independent on level surfaces only",TEAL), ("5","Fully independent including stairs & uneven terrain",RGBColor(0x0A,0x60,0x3A)), ] y=2.22 for gr,desc,col in fac: rect(s,6.8,y,0.62,0.56,col) tb(s,str(gr),6.82,y+0.07,0.58,0.44,sz=14,bold=True,col=WHITE,align=PP_ALIGN.CENTER) bg=LBGB if fac.index((gr,desc,col))%2==0 else WHITE rect(s,7.42,y,5.28,0.56,bg) tb(s,desc,7.47,y+0.07,5.2,0.44,sz=11,col=NAVY) y+=0.635 # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 14 – FIM # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"FUNCTIONAL INDEPENDENCE MEASURE (FIM)","14") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Source: Granger et al. 1986 | Referenced in Bradley & Daroff's Neurology in Clinical Practice", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) tb(s,"18 items | Each rated 1–7 | Total: 18–126 | Motor domain: 91 pts | Cognitive domain: 35 pts", 0.7,1.72,12.0,0.4,sz=12,italic=True,col=BLUE) motor=[("Self Care (6 items)","Eating, Grooming, Bathing, Dressing-Upper, Dressing-Lower, Toileting"), ("Sphincter Control (2)","Bladder management, Bowel management"), ("Transfers (3)","Bed/Chair/Wheelchair, Toilet, Tub/Shower"), ("Locomotion (2)","Walk / Wheelchair, Stairs")] cog=[("Communication (2)","Comprehension, Expression"), ("Social Cognition (3)","Social interaction, Problem solving, Memory")] rect(s,0.65,2.18,7.2,0.4,NAVY) tb(s,"Motor Domain (13 items — max 91 pts)",0.7,2.22,7.1,0.34,sz=12,bold=True,col=WHITE) y=2.62 for cat,items in motor: rect(s,0.65,y,2.3,0.54,BLUE) tb(s,cat,0.7,y+0.06,2.2,0.44,sz=11,bold=True,col=WHITE) rect(s,2.95,y,4.9,0.54,LBGB) tb(s,items,3.0,y+0.06,4.8,0.44,sz=11,col=NAVY) y+=0.62 rect(s,0.65,4.75,7.2,0.4,BLUE) tb(s,"Cognitive Domain (5 items — max 35 pts)",0.7,4.79,7.1,0.34,sz=12,bold=True,col=WHITE) y=5.18 for cat,items in cog: rect(s,0.65,y,2.3,0.54,NAVY) tb(s,cat,0.7,y+0.06,2.2,0.44,sz=11,bold=True,col=WHITE) rect(s,2.95,y,4.9,0.54,LBGB) tb(s,items,3.0,y+0.06,4.8,0.44,sz=11,col=NAVY) y+=0.62 # FIM levels right rect(s,8.1,2.18,4.8,5.0,NAVY); rect(s,8.1,2.18,0.10,5.0,GOLD) tb(s,"7-Level Independence Rating",8.3,2.26,4.4,0.38,sz=12,bold=True,col=GOLD) fim_lvls=[("7","Complete independence",TEAL),("6","Modified independence",TEAL), ("5","Supervision / Setup",GREEN),("4","Minimal assist (≥75% effort by patient)",GREEN), ("3","Moderate assist (≥50%)",ORANGE),("2","Maximal assist (≥25%)",RED), ("1","Total assist (<25%)",RGBColor(0x60,0x00,0x00))] for j,(n,lb,col) in enumerate(fim_lvls): rect(s,8.25,2.72+j*0.62,0.55,0.55,col) tb(s,n,8.27,2.76+j*0.62,0.51,0.48,sz=14,bold=True,col=WHITE,align=PP_ALIGN.CENTER) tb(s,lb,8.85,2.76+j*0.62,3.9,0.48,sz=11,col=SILVER) rect(s,8.1,7.1,4.8,0.0,NAVY) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 15 – EDSS (MS) # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"EXPANDED DISABILITY STATUS SCALE (EDSS)","15") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) tb(s,"Source: Kurtzke JF. Neurology 1983 | Referenced in Bradley & Daroff's Neurology in Clinical Practice", 0.7,1.32,12.0,0.38,sz=9,italic=True,col=TEAL) tb(s,"Standard outcome measure for Multiple Sclerosis (MS) | 0.0–10.0 in 0.5 steps | 8 Functional Systems (FS) assessed", 0.7,1.72,12.0,0.4,sz=12,italic=True,col=BLUE) edss=[ ("0.0","Normal neurological exam; all FS grade 0",TEAL), ("1.0–1.5","No disability; minimal signs in 1 or 2 FS",TEAL), ("2.0–2.5","Minimal disability in 1–2 FS",RGBColor(0x1A,0x8A,0x4A)), ("3.0–3.5","Moderate disability in 1 FS or mild disability in 3–4 FS; fully ambulatory",RGBColor(0x1A,0x8A,0x4A)), ("4.0–4.5","Relatively severe disability; fully ambulatory ≥ 500m without aid",ORANGE), ("5.0–5.5","Ambulatory ≥ 200m without aid; disability severe enough to impair full daily activities",ORANGE), ("6.0–6.5","Intermittent or constant unilateral/bilateral assistance required to walk ≥ 100m",RED), ("7.0–7.5","Unable to walk ≥ 5m; restricted to wheelchair; able to self-transfer",RED), ("8.0–8.5","Essentially restricted to bed or chair; retains many self-care functions",RGBColor(0x60,0x00,0x00)), ("9.0–9.5","Helpless bed patient; can communicate and eat",RGBColor(0x40,0x00,0x00)), ("10.0","Death due to MS",RGBColor(0x20,0x00,0x00)), ] y=2.18 for score,desc,col in edss: rect(s,0.65,y,1.55,0.43,col) tb(s,score,0.67,y+0.05,1.51,0.35,sz=11,bold=True,col=WHITE,align=PP_ALIGN.CENTER) bg=LBGB if edss.index((score,desc,col))%2==0 else WHITE rect(s,2.2,y,10.4,0.43,bg) tb(s,desc,2.25,y+0.05,10.3,0.35,sz=12,col=NAVY) y+=0.455 # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 16 – ADVANTAGES & LIMITATIONS # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"ADVANTAGES & LIMITATIONS","16") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) rect(s,0.65,1.42,5.9,0.42,TEAL) tb(s,"ADVANTAGES",0.7,1.46,5.8,0.34,sz=14,bold=True,col=WHITE,align=PP_ALIGN.CENTER) adv=["Provide standardized, objective, reproducible assessments", "Allow comparison across patients, settings, and time", "Essential for evidence-based clinical trials", "Support multidisciplinary team communication", "Facilitate patient-centred goal-setting", "Many are freely available and validated internationally", "Sensitive to clinically meaningful change", "Patient-reported outcomes capture subjective experience"] mltb(s,adv,0.7,1.9,5.8,5.0,sz=13,col=NAVY,bullet=True,sa=8) rect(s,6.8,1.42,5.9,0.42,NAVY) tb(s,"LIMITATIONS",6.85,1.46,5.8,0.34,sz=14,bold=True,col=WHITE,align=PP_ALIGN.CENTER) lim=["Some are time-consuming (FMA ~30–45 min)", "Require trained examiners for validity (e.g., NIHSS)", "Ceiling / floor effects (e.g., mRS in mild/severe patients)", "Subjectivity in patient-reported tools", "Scales are categorical — not truly continuous (NIHSS)", "Cultural and language barriers in self-report tools", "May not capture all dimensions of neurological function", "Scales derived from one condition may not generalize"] mltb(s,lim,6.85,1.9,5.8,5.0,sz=13,col=NAVY,bullet=True,sa=8) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 17 – REFERENCES # ═══════════════════════════════════════════════════════════════════════════════ s=content_slide(prs,"REFERENCES","17") rect(s,0.55,1.28,12.3,5.55,WHITE) rect(s,0.55,1.28,0.10,5.55,TEAL) refs=[ "1. Adams & Victor's Principles of Neurology, 12th ed. Table 33-4: Scoring Systems in Ischemic Stroke Trials.", "2. Bradley and Daroff's Neurology in Clinical Practice, 8th ed. — Neurological Assessment Tools.", "3. Tintinalli's Emergency Medicine, 9th ed. Table 167-6: National Institutes of Health Stroke Scale (NIHSS).", "4. Mahoney FI, Barthel DW. Functional evaluation: The Barthel Index. Maryland State Med J. 1965;14:61–65.", "5. Fugl-Meyer AR, Jääskö L, Leyman I, et al. The post-stroke hemiplegic patient. Scand J Rehabil Med. 1975;7:13–31.", "6. Berg KO, Wood-Dauphinee SL, Williams JI, Maki B. Measuring balance in the elderly. Can J Public Health. 1992;83:S7–S11.", "7. Nasreddine ZS, et al. The Montreal Cognitive Assessment (MoCA). JAGS. 2005;53:695–699.", "8. Kurtzke JF. Rating neurologic impairment in MS: The EDSS. Neurology. 1983;33:1444–1452.", "9. Bohannon RW, Smith MB. Interrater reliability of modified Ashworth scale. Phys Ther. 1987;67(2):206–207.", "10. Holden MK, et al. Clinical gait assessment in neurologically impaired patients. Phys Ther. 1984;64(1):35–40.", ] mltb(s,refs,0.7,1.45,12.0,5.4,sz=11,col=NAVY,sa=6) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 18 – THANK YOU # ═══════════════════════════════════════════════════════════════════════════════ s=prs.slides.add_slide(blank) rect(s,0,0,13.333,7.5,NAVY) rect(s,0,0,13.333,0.10,TEAL) rect(s,0,7.40,13.333,0.10,TEAL) rect(s,0,0,0.32,7.5,BLUE) tb(s,"THANK YOU",0.5,2.3,12.5,1.6,sz=56,bold=True,col=WHITE,align=PP_ALIGN.CENTER,fn="Calibri") rect(s,3.2,4.1,6.9,0.07,GOLD) tb(s,"Questions & Discussion",0.5,4.3,12.5,0.65,sz=20,col=LTEAL,align=PP_ALIGN.CENTER,italic=True) tb(s,"MGM Allied Health Science Institute | Department of Physiotherapy", 0.5,5.4,12.5,0.5,sz=13,col=LTEAL,align=PP_ALIGN.CENTER) prs.save("/tmp/workspace/neuro-outcome-measures/Neuro_Outcome_Measures_v2.pptx") print("Done! Slides:", len(prs.slides)) PYEOF
python3 -c " from pptx import Presentation import os prs = Presentation('/tmp/workspace/neuro-outcome-measures/Neuro_Outcome_Measures_v2.pptx') print(f'Slides: {len(prs.slides)}') size=os.path.getsize('/tmp/workspace/neuro-outcome-measures/Neuro_Outcome_Measures_v2.pptx') print(f'Size: {size/1024:.1f} KB') for i,slide in enumerate(prs.slides,1): texts=[] for shape in slide.shapes: if shape.has_text_frame: t=shape.text_frame.text.strip() if t: texts.append(t[:60]) print(f'Slide {i}: {texts[0] if texts else \"(empty)\"}') "
Neuro Outcome Measures v2
Presentation · PPTX
| Slide | Tool | Book Source & Key Details |
|---|---|---|
| 1 | Title | MGM AHS Institute branding |
| 2 | Introduction | Adams & Victor 12e; Bradley & Daroff |
| 3 | Classification | 7 categories with proper tool names |
| 4 | NIHSS | Adams & Victor Table 33-4 + Tintinalli Table 167-6 — all 13 items (15 sub-items), range 0–42, severity levels (>25 very severe; 15–24 severe; 5–14 mild-mod; <5 mild) |
| 5 | Modified Rankin Scale (mRS) | Adams & Victor Table 33-4 — all 7 grades (0–6); note on 0–2 vs 0–3 "good outcome" in trials |
| 6 | Barthel Index | Adams & Victor Table 33-4 — all 10 ADL items with exact point values; 0–100 range |
| 7 | ABCD² Score + Hunt & Hess | Adams & Victor Table 33-4 — ABCD² for TIA stroke risk; Hunt & Hess for SAH grading |
| 8 | Glasgow Coma Scale (GCS) | Adams & Victor — E+V+M components; 3–15 range; TBI severity thresholds |
| 9 | Fugl-Meyer Assessment (FMA) | Bradley & Daroff — 6 domains, total 226 pts, per-item 0/1/2 scoring |
| 10 | Berg Balance Scale (BBS) | Berg 1992 — all 14 tasks; 0–56; fall risk cut-offs |
| 11 | TUG + Tinetti POMA | Podsiadlo 1991 + Tinetti 1986 — balance (16 pts) + gait (12 pts) sub-scales |
| 12 | MoCA | Nasreddine 2005 / Bradley & Daroff — all 7 domains, 30 pts, cut-offs |
| 13 | Modified Ashworth Scale + FAC | Bohannon 1987 (MAS) + Holden 1984 (FAC) — full grading for both |
| 14 | FIM | Granger 1986 / Bradley & Daroff — 18 items, 7-level rating, motor + cognitive |
| 15 | EDSS | Kurtzke 1983 / Bradley & Daroff — full 0.0–10.0 scale in 0.5 steps |
| 16 | Advantages & Limitations | Book-derived insights (e.g., NIHSS categorical bias, FMA time) |
| 17 | References | 10 primary textbook + journal citations |
| 18 | Thank You | - |