Amyotrophic lateral scloresuis details answer with pt mangement and assessment
"amyotrophic lateral sclerosis"[MeSH Terms] AND management
| Feature | Data |
|---|---|
| Incidence | ~2 per 100,000/year |
| Prevalence | 5-8 per 100,000 |
| Peak age at onset | 55-74 years |
| Male:Female ratio | ~1.6:1 (slight female predominance in bulbar-onset) |
| Sporadic vs Familial | ~90% sporadic, 5-10% familial |
| Mean survival | 2-5 years from symptom onset |
| Familial inheritance | Usually autosomal dominant |

| Diagnostic Level | Criteria |
|---|---|
| Clinically Definite ALS | Clinical or electrophysiologic UMN and LMN signs in ≥3 regions |
| Clinically Probable ALS | UMN and LMN signs in ≥2 regions, with some UMN signs rostral to LMN signs |
| Clinically Possible ALS | UMN and LMN in only 1 region, OR UMN signs alone in ≥2 regions, OR LMN signs rostral to UMN signs |
| Drug | Mechanism | Effect |
|---|---|---|
| Riluzole (sodium glutamate antagonist) | Blocks glutamate release, reduces excitotoxicity | Extends survival ~2-3 months; slows decline; standard of care |
| Edaravone | Free radical scavenger, reduces oxidative stress | Confirmed in double-blind RCT; slows functional decline in selected patients |
| Tofersen (antisense oligonucleotide) | Targets SOD1 mRNA; reduces mutant SOD1 protein | For SOD1-ALS; emerging gene therapy approach |
| AMX0035 (sodium phenylbutyrate + taurursodiol) | Anti-apoptotic, mitochondrial protective | FDA approved 2022 for ALS |
| Symptom | Pharmacotherapy | Non-pharmacological |
|---|---|---|
| Spasticity | Baclofen, tizanidine, dantrolene, diazepam | Physiotherapy, range-of-motion exercises, botulinum toxin |
| Muscle cramps | Quinine sulfate, baclofen, vitamin E, clonazepam | Massage, physiotherapy |
| Fatigue | Pyridostigmine, amantadine, modafinil, methylphenidate, antidepressants | Energy conservation, work modification, BiPAP if sleep apnea |
| Sialorrhea (drooling) | Hyoscyamine, glycopyrrolate, scopolamine patch, diphenhydramine, atropine | Suction machine, botulinum toxin into salivary glands, parotid gland radiation |
| Thick phlegm | Nebulized N-acetylcysteine, nebulized saline, propranolol | Insufflation-exsufflation (cough assist), cool mist humidifier |
| Pseudobulbar affect | TCAs, SSRIs, lithium, mirtazapine, quinidine/dextromethorphan (Nuedexta) | |
| Depression/anxiety | TCAs, SSRIs, venlafaxine, mirtazapine, bupropion | Counseling, support groups |
| Pain/joint pain | NSAIDs, analgesics | Range-of-motion exercises, heat |
| Fasciculations | Carbamazepine | Reassurance |
| Jaw clenching | Benzodiazepines | Botulinum toxin into masseters |
| Aspiration | Cisapride | Modified food consistency, thickened liquids, tracheostomy in severe cases |
| Insomnia | Zolpidem, zopiclone, TCAs | Sleep hygiene, BiPAP |
Physiotherapy assessment and management
"amyotrophic lateral sclerosis"[MeSH Terms] AND "physical therapy"[MeSH Terms]
"amyotrophic lateral sclerosis" AND "exercise" AND rehabilitation
PMID: 38762656
PMID: 40273110
PMID: 41375893
PMID: 39182937
PMID: 40488544
PMID: 42038869
| Stage | Features | Physio Focus |
|---|---|---|
| Stage 1 | Diagnosis; independently ambulant; minor deficits | Exercise, education, prevention |
| Stage 2a | Independent but with some functional limitation | Adaptive exercise, orthotics |
| Stage 2b | Dependent for some ADLs; still ambulant | Energy conservation, wheelchair |
| Stage 3 | Wheelchair dependent; upper limb function reduced | Positioning, passive ROM, respiratory |
| Stage 4 | Dependent for most ADLs | Pressure care, carer training |
| Stage 5 | End-stage; respiratory support, minimal movement | Comfort, palliative, communication |
| ALS Stage | Primary Physio Goals | Key Interventions |
|---|---|---|
| Early | Maintain function, prevent deconditioning | Moderate aerobic + strengthening exercise, education, gait assessment, respiratory baseline |
| Middle | Maximise independence, prevent falls, respiratory support | AFO, walking aids, ROM exercises, airway clearance techniques, NIV planning, fatigue management |
| Late | Maintain comfort and dignity, prevent complications | Wheelchair, positioning, pressure care, cough assist/NIV, carer training |
| End-stage | Comfort, symptom control | Palliative positioning, secretion management, family support |
| Measure | What it Assesses |
|---|---|
| ALSFRS-R | Overall function (0-48) |
| MRC Sum Score | Global muscle strength |
| FVC (seated and supine) | Respiratory function |
| SNIP / MIP / MEP | Respiratory muscle strength |
| Peak Cough Flow (PCF) | Cough effectiveness |
| Fatigue Severity Scale (FSS) | Fatigue severity |
| Berg Balance Scale (BBS) | Balance |
| Timed Up and Go (TUG) | Mobility |
| 10-Metre Walk Test | Gait speed |
| Visual Analog Scale (VAS) | Pain |
| McGill Quality of Life Questionnaire | QoL |
| Study | Finding |
|---|---|
| Li & Kang, Sci Rep 2024 (Network meta-analysis, 12 RCTs) | Exercise intervention had the greatest benefit on ALSFRS-R, FVC, QoL and MRC sum score among all non-pharmacological ALS interventions |
| Silva et al., BMJ Open 2024 (Systematic review) | Physiotherapy may improve short-term global function; no serious adverse events; evidence quality still low |
| Souza et al., PLoS One 2025 (Systematic review + meta-analysis) | Strengthening exercise is safe in ALS; no serious adverse events; inconclusive superiority vs. control due to small study sizes |
| Benzo-Iglesias et al., Ther Adv Respir Dis 2025 (Systematic review + meta-analysis, 5 RCTs) | Respiratory muscle training improves MIP and MEP; one study shows inspiratory training may predict survival |
| Gratzer et al., J Clin Med 2025 (Clinical review) | Evidence supports moderate tailored exercise, early respiratory therapy, spasticity and mobility management as key physiotherapy elements in ALS |
Create a structured physiotherapy intake form for ALS assessment
mkdir -p /home/daytona/workspace/als-intake-form && ls /home/daytona/workspace/a…
~/als-intake-form/generate_form.js
const {
Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
AlignmentType, HeadingLevel, BorderStyle, WidthType, ShadingType,
VerticalAlign, PageNumber, Header, Footer, PageBreak,
UnderlineType
} = require('docx');
const fs = require('fs');
// ─── Helpers ────────────────────────────────────────────────────────────────
const TEAL = "1A7A8A";
const TEAL_LIGHT = "E6F4F6";
const GREY_LIGHT = "F5F5F5";
const WHITE = "FFFFFF";
const DARK = "1A1A2E";
const MID_GREY = "CCCCCC";
function sectionHeader(text) {
return new Paragraph({
heading: HeadingLevel.HEADING_1,
spacing: { before: 280, after: 100 },
shading: { type: ShadingType.SOLID, color: TEAL },
children: [
new TextRun({
text: text,
color: WHITE,
bold: true,
size: 24,
font: "Calibri",
}),
],
});
}
function subHeader(text) {
return new Paragraph({
spacing: { before: 200, after: 60 },
children: [
new TextRun({
text: text,
bold: true,
color: TEAL,
size: 22,
font: "Calibri",
underline: { type: UnderlineType.SINGLE, color: TEAL },
}),
],
});
}
function label(text) {
return new TextRun({ text, bold: true, size: 20, font: "Calibri", color: DARK });
}
function field(width = 3500) {
return new TextRun({ text: "_".repeat(Math.floor(width / 80)), size: 20, font: "Calibri", color: MID_GREY });
}
function labelLine(labelText, extraField = "") {
return new Paragraph({
spacing: { before: 80, after: 60 },
children: [
label(labelText + " "),
field(),
...(extraField ? [new TextRun({ text: " " }), label(extraField + " "), field()] : []),
],
});
}
function checkboxLine(labelText, options) {
const runs = [label(labelText + ": ")];
options.forEach((opt) => {
runs.push(new TextRun({ text: "\u25A1 " + opt + " ", size: 20, font: "Calibri" }));
});
return new Paragraph({ spacing: { before: 80, after: 60 }, children: runs });
}
function yesNoLine(labelText) {
return checkboxLine(labelText, ["Yes", "No"]);
}
function multiLine(labelText) {
return [
new Paragraph({
spacing: { before: 80, after: 20 },
children: [label(labelText)],
}),
new Paragraph({
spacing: { before: 0, after: 40 },
children: [new TextRun({ text: "_".repeat(120), size: 20, font: "Calibri", color: MID_GREY })],
}),
new Paragraph({
spacing: { before: 0, after: 60 },
children: [new TextRun({ text: "_".repeat(120), size: 20, font: "Calibri", color: MID_GREY })],
}),
];
}
function smallNote(text) {
return new Paragraph({
spacing: { before: 40, after: 40 },
children: [new TextRun({ text, size: 17, font: "Calibri", color: "888888", italics: true })],
});
}
function spacer() {
return new Paragraph({ spacing: { before: 60, after: 60 }, children: [new TextRun("")] });
}
// ─── Scoring Table ───────────────────────────────────────────────────────────
function scoreTable(title, rows) {
const headerRow = new TableRow({
tableHeader: true,
children: ["Domain", "Score", "Notes"].map((h) =>
new TableCell({
shading: { type: ShadingType.SOLID, color: TEAL },
children: [new Paragraph({
children: [new TextRun({ text: h, bold: true, color: WHITE, size: 20, font: "Calibri" })],
alignment: AlignmentType.CENTER,
})],
verticalAlign: VerticalAlign.CENTER,
})
),
});
const dataRows = rows.map((r, i) =>
new TableRow({
children: [
new TableCell({
shading: { type: ShadingType.SOLID, color: i % 2 === 0 ? GREY_LIGHT : WHITE },
width: { size: 40, type: WidthType.PERCENTAGE },
children: [new Paragraph({ children: [new TextRun({ text: r, size: 19, font: "Calibri" })] })],
}),
new TableCell({
shading: { type: ShadingType.SOLID, color: i % 2 === 0 ? GREY_LIGHT : WHITE },
width: { size: 20, type: WidthType.PERCENTAGE },
children: [new Paragraph({ children: [new TextRun({ text: "___/___", size: 19, font: "Calibri", color: MID_GREY })] })],
}),
new TableCell({
shading: { type: ShadingType.SOLID, color: i % 2 === 0 ? GREY_LIGHT : WHITE },
width: { size: 40, type: WidthType.PERCENTAGE },
children: [new Paragraph({ children: [new TextRun({ text: "________________________________", size: 19, font: "Calibri", color: MID_GREY })] })],
}),
],
})
);
return [
subHeader(title),
new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
rows: [headerRow, ...dataRows],
}),
spacer(),
];
}
// ─── Two-column row helper ────────────────────────────────────────────────────
function twoColRow(left, right) {
return new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.NONE }, bottom: { style: BorderStyle.NONE },
left: { style: BorderStyle.NONE }, right: { style: BorderStyle.NONE },
insideH: { style: BorderStyle.NONE }, insideV: { style: BorderStyle.NONE },
},
rows: [
new TableRow({
children: [
new TableCell({ width: { size: 50, type: WidthType.PERCENTAGE }, children: [left] }),
new TableCell({ width: { size: 50, type: WidthType.PERCENTAGE }, children: [right] }),
],
}),
],
});
}
// ─── Muscle Strength Table ───────────────────────────────────────────────────
function muscleTable() {
const muscles = [
["Shoulder Abductors", "", ""],
["Elbow Flexors", "", ""],
["Elbow Extensors", "", ""],
["Wrist Extensors", "", ""],
["Finger Flexors", "", ""],
["Intrinsic Hand / Thenar", "", ""],
["Hip Flexors", "", ""],
["Knee Extensors", "", ""],
["Knee Flexors", "", ""],
["Ankle Dorsiflexors", "", ""],
["Ankle Plantar Flexors", "", ""],
["Neck Flexors", "", ""],
["Neck Extensors", "", ""],
];
const headerRow = new TableRow({
tableHeader: true,
children: ["Muscle Group", "R (MRC 0-5)", "L (MRC 0-5)", "Notes"].map((h) =>
new TableCell({
shading: { type: ShadingType.SOLID, color: TEAL },
children: [new Paragraph({
children: [new TextRun({ text: h, bold: true, color: WHITE, size: 19, font: "Calibri" })],
alignment: AlignmentType.CENTER,
})],
})
),
});
const dataRows = muscles.map((m, i) =>
new TableRow({
children: [
new TableCell({
shading: { type: ShadingType.SOLID, color: i % 2 === 0 ? GREY_LIGHT : WHITE },
width: { size: 40, type: WidthType.PERCENTAGE },
children: [new Paragraph({ children: [new TextRun({ text: m[0], size: 19, font: "Calibri" })] })],
}),
...["R", "L", "Notes"].map(() =>
new TableCell({
shading: { type: ShadingType.SOLID, color: i % 2 === 0 ? GREY_LIGHT : WHITE },
width: { size: 20, type: WidthType.PERCENTAGE },
children: [new Paragraph({ children: [new TextRun({ text: "________", size: 19, font: "Calibri", color: MID_GREY })] })],
})
),
],
})
);
return new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
rows: [headerRow, ...dataRows],
});
}
// ─── ALSFRS-R Table ──────────────────────────────────────────────────────────
function alsfrTable() {
const items = [
"1. Speech",
"2. Salivation",
"3. Swallowing",
"4. Handwriting",
"5. Cutting Food / Utensils",
"6. Dressing / Hygiene",
"7. Turning in Bed",
"8. Walking",
"9. Climbing Stairs",
"10. Dyspnea",
"11. Orthopnea",
"12. Respiratory Insufficiency",
];
const headerRow = new TableRow({
tableHeader: true,
children: ["ALSFRS-R Item", "Score (0-4)", "Notes"].map((h) =>
new TableCell({
shading: { type: ShadingType.SOLID, color: TEAL },
children: [new Paragraph({
children: [new TextRun({ text: h, bold: true, color: WHITE, size: 19, font: "Calibri" })],
alignment: AlignmentType.CENTER,
})],
})
),
});
const dataRows = items.map((item, i) =>
new TableRow({
children: [
new TableCell({
shading: { type: ShadingType.SOLID, color: i % 2 === 0 ? GREY_LIGHT : WHITE },
width: { size: 50, type: WidthType.PERCENTAGE },
children: [new Paragraph({ children: [new TextRun({ text: item, size: 19, font: "Calibri" })] })],
}),
new TableCell({
shading: { type: ShadingType.SOLID, color: i % 2 === 0 ? GREY_LIGHT : WHITE },
width: { size: 15, type: WidthType.PERCENTAGE },
children: [new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: "___/4", size: 19, font: "Calibri", color: MID_GREY })] })],
}),
new TableCell({
shading: { type: ShadingType.SOLID, color: i % 2 === 0 ? GREY_LIGHT : WHITE },
width: { size: 35, type: WidthType.PERCENTAGE },
children: [new Paragraph({ children: [new TextRun({ text: "________________________________", size: 19, font: "Calibri", color: MID_GREY })] })],
}),
],
})
);
const totalRow = new TableRow({
children: [
new TableCell({
shading: { type: ShadingType.SOLID, color: TEAL_LIGHT },
children: [new Paragraph({ children: [new TextRun({ text: "TOTAL SCORE", bold: true, size: 20, font: "Calibri" })] })],
}),
new TableCell({
shading: { type: ShadingType.SOLID, color: TEAL_LIGHT },
children: [new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: "___/48", bold: true, size: 20, font: "Calibri", color: TEAL })] })],
}),
new TableCell({
shading: { type: ShadingType.SOLID, color: TEAL_LIGHT },
children: [new Paragraph({ children: [new TextRun({ text: "Rate of change: ___ pts/month", size: 19, font: "Calibri", italics: true })] })],
}),
],
});
return new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
rows: [headerRow, ...dataRows, totalRow],
});
}
// ─── Respiratory Table ───────────────────────────────────────────────────────
function respiratoryTable() {
const params = [
["FVC Seated (%predicted)", "____%", "Normal >80%"],
["FVC Supine (%predicted)", "____%", "Drop >25% from seated = significant"],
["SNIP (cmH₂O)", "____", "<40 = significant impairment"],
["MIP (cmH₂O)", "____", "<60 = inspiratory muscle weakness"],
["MEP (cmH₂O)", "____", "<60 = impaired cough"],
["Peak Cough Flow (L/min)", "____", "<270 = retention risk; <160 = ineffective cough"],
["Oxygen Saturation (SpO₂)", "____%", ""],
["Respiratory Rate (/min)", "____", "Normal 12-20"],
["Nocturnal symptoms", "\u25A1 Yes \u25A1 No", "Headache / somnolence / orthopnea"],
];
const headerRow = new TableRow({
tableHeader: true,
children: ["Parameter", "Value", "Clinical Threshold"].map((h) =>
new TableCell({
shading: { type: ShadingType.SOLID, color: TEAL },
children: [new Paragraph({ children: [new TextRun({ text: h, bold: true, color: WHITE, size: 19, font: "Calibri" })] })],
})
),
});
const dataRows = params.map((p, i) =>
new TableRow({
children: p.map((cell) =>
new TableCell({
shading: { type: ShadingType.SOLID, color: i % 2 === 0 ? GREY_LIGHT : WHITE },
children: [new Paragraph({ children: [new TextRun({ text: cell, size: 19, font: "Calibri" })] })],
})
),
})
);
return new Table({ width: { size: 100, type: WidthType.PERCENTAGE }, rows: [headerRow, ...dataRows] });
}
// ─── Title Page ──────────────────────────────────────────────────────────────
function titleBlock() {
return [
new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { before: 200, after: 60 },
shading: { type: ShadingType.SOLID, color: TEAL },
children: [
new TextRun({ text: " PHYSIOTHERAPY INTAKE & ASSESSMENT FORM", bold: true, size: 34, color: WHITE, font: "Calibri" }),
],
}),
new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { before: 0, after: 40 },
shading: { type: ShadingType.SOLID, color: "155F6B" },
children: [
new TextRun({ text: " AMYOTROPHIC LATERAL SCLEROSIS (ALS / MND)", bold: true, size: 24, color: WHITE, font: "Calibri" }),
],
}),
new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { before: 60, after: 160 },
children: [
new TextRun({ text: "Multidisciplinary ALS Clinic | Neurological Physiotherapy Department", size: 19, font: "Calibri", italics: true, color: "555555" }),
],
}),
];
}
// ─── Build Document ──────────────────────────────────────────────────────────
const children = [
// Title
...titleBlock(),
// ═══════════════════════════════════════════
// SECTION 1 – Patient Demographics
// ═══════════════════════════════════════════
sectionHeader("SECTION 1 — PATIENT DEMOGRAPHICS"),
spacer(),
labelLine("Patient Name:", "Date of Birth:"),
labelLine("MRN / Hospital No.:", "Date of Assessment:"),
labelLine("Referring Physician:", "Diagnosis Date:"),
labelLine("ALS Clinic / Centre:", "Therapist Name:"),
checkboxLine("ALS Type", ["Sporadic", "Familial"]),
checkboxLine("Onset Region", ["Spinal – Upper Limb", "Spinal – Lower Limb", "Bulbar", "Respiratory", "Unknown"]),
checkboxLine("Genetic Testing", ["Not done", "SOD1", "C9ORF72", "FUS/TLS", "TARDBP", "Other: ________"]),
labelLine("Emergency Contact Name:", "Relationship:"),
labelLine("Emergency Contact Phone:", ""),
spacer(),
// ═══════════════════════════════════════════
// SECTION 2 – Subjective History
// ═══════════════════════════════════════════
sectionHeader("SECTION 2 — SUBJECTIVE HISTORY"),
spacer(),
subHeader("2.1 Presenting Complaints"),
...multiLine("Chief complaint (in patient's own words):"),
labelLine("Date of first symptom:", "Body region first affected:"),
labelLine("Disease duration (months):", ""),
spacer(),
subHeader("2.2 Symptom Profile"),
checkboxLine("Current Symptoms", ["Weakness", "Fasciculations", "Muscle cramps", "Spasticity", "Fatigue"]),
checkboxLine("", ["Dysphagia", "Dysarthria", "Sialorrhea", "Dyspnea", "Orthopnea"]),
checkboxLine("", ["Foot drop", "Head drop", "Pain / joint stiffness", "Mood changes", "Sleep disturbance"]),
checkboxLine("Cognitive Changes", ["None", "Mild frontal", "Formal FTD diagnosis"]),
...multiLine("Other symptoms / notes:"),
spacer(),
subHeader("2.3 Functional History"),
checkboxLine("Mobility Status", ["Independently ambulant", "Ambulant with aid", "Wheelchair part-time", "Wheelchair full-time", "Bedbound"]),
checkboxLine("Walking Aid Used", ["None", "Walking stick", "Quad stick", "Rollator", "Forearm crutches", "Walker frame"]),
checkboxLine("Wheelchair", ["None", "Manual – self-propelled", "Manual – carer-propelled", "Powered – joystick", "Powered – alternative control"]),
labelLine("Approximate walking distance:", "Falls in past 3 months:"),
checkboxLine("ADL Independence", ["Fully independent", "Independent with aids", "Requires some assistance", "Fully dependent"]),
...multiLine("Activities most limited by ALS (patient-stated priorities):"),
spacer(),
subHeader("2.4 Fatigue Assessment"),
labelLine("Fatigue Severity Scale (FSS) Score:", "(threshold: >36 = significant fatigue)"),
checkboxLine("Post-exercise fatigue >30 minutes", ["Yes – reduce activity load", "No"]),
...multiLine("Fatigue pattern / triggers:"),
spacer(),
subHeader("2.5 Pain Assessment"),
yesNoLine("Current pain"),
labelLine("Pain location:", "NRS Score (0-10):"),
checkboxLine("Pain type", ["Spasticity-related", "Joint / mechanical", "Cramps", "Pressure area", "Neuropathic", "Other"]),
spacer(),
subHeader("2.6 Respiratory Symptoms"),
yesNoLine("Dyspnea on exertion"),
yesNoLine("Orthopnea (breathlessness when lying flat)"),
yesNoLine("Morning headaches"),
yesNoLine("Excessive daytime sleepiness"),
yesNoLine("Interrupted / poor-quality sleep"),
yesNoLine("Currently on NIV / BiPAP"),
labelLine("If on NIV – hours/night:", "Interface type:"),
spacer(),
subHeader("2.7 Social and Home Environment"),
checkboxLine("Living Situation", ["Alone", "With spouse/partner", "With family", "Supported accommodation", "Residential care"]),
checkboxLine("Home Type", ["Single storey", "Multi-storey – lift", "Multi-storey – stairs only", "Other"]),
yesNoLine("Home modifications in place (grab rails, ramp, stairlift, hospital bed)"),
labelLine("Primary carer:", "Carer availability (hrs/day):"),
yesNoLine("Carer trained in manual handling"),
checkboxLine("Employment Status", ["Working full-time", "Working part-time", "Reduced duties", "Unable to work", "Retired"]),
spacer(),
subHeader("2.8 Medical History & Medications"),
...multiLine("Relevant past medical history:"),
labelLine("Current medications relevant to PT:", ""),
checkboxLine("Disease-modifying therapy", ["Riluzole", "Edaravone", "Tofersen", "AMX0035", "None", "Clinical trial"]),
checkboxLine("Medications affecting PT", ["Baclofen", "Tizanidine", "Opioids", "Benzodiazepines", "None"]),
spacer(),
subHeader("2.9 Patient Goals"),
...multiLine("Short-term goals (1-3 months):"),
...multiLine("Long-term goals (3-12 months):"),
...multiLine("Priority activities to maintain:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 3 – Objective Assessment
// ═══════════════════════════════════════════
new Paragraph({ children: [new PageBreak()] }),
sectionHeader("SECTION 3 — OBJECTIVE ASSESSMENT"),
spacer(),
subHeader("3.1 General Observations"),
...multiLine("Posture, affect, nutritional status, communication, resting respiratory pattern:"),
spacer(),
subHeader("3.2 ALS Functional Rating Scale – Revised (ALSFRS-R)"),
smallNote("Score each item 0 (unable) to 4 (normal). Total score /48. Rate of decline >1 pt/month = faster progression."),
spacer(),
alsfrTable(),
spacer(),
// ═══════════════════════════════════════════
// SECTION 4 – Muscle Strength
// ═══════════════════════════════════════════
sectionHeader("SECTION 4 — MUSCLE STRENGTH (MRC SCALE)"),
smallNote("MRC Grade: 0 = No contraction | 1 = Flicker | 2 = Movement with gravity eliminated | 3 = Movement against gravity | 4 = Movement against resistance | 5 = Normal"),
spacer(),
muscleTable(),
spacer(),
labelLine("Grip Strength R (kg):", "Grip Strength L (kg):"),
labelLine("Pinch Strength R:", "Pinch Strength L:"),
...multiLine("Notes on asymmetry, fatigue, pattern of weakness:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 5 – Tone & Spasticity
// ═══════════════════════════════════════════
sectionHeader("SECTION 5 — TONE & SPASTICITY"),
spacer(),
checkboxLine("UMN Signs Present", ["Hyperreflexia", "Clonus", "Babinski sign", "Hoffman sign", "Spasticity"]),
checkboxLine("LMN Signs Present", ["Hyporeflexia/areflexia", "Fasciculations", "Muscle wasting"]),
...scoreTable("Modified Ashworth Scale (MAS)", [
"Shoulder / Elbow (R)",
"Shoulder / Elbow (L)",
"Wrist / Finger flexors (R)",
"Wrist / Finger flexors (L)",
"Hip flexors / Adductors (R)",
"Hip flexors / Adductors (L)",
"Ankle plantar flexors (R)",
"Ankle plantar flexors (L)",
]),
...multiLine("Functional impact of spasticity:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 6 – Range of Motion
// ═══════════════════════════════════════════
sectionHeader("SECTION 6 — RANGE OF MOTION"),
spacer(),
labelLine("Shoulder Flexion R:", "L:"),
labelLine("Shoulder Abduction R:", "L:"),
labelLine("Elbow Extension R:", "L:"),
labelLine("Wrist Extension R:", "L:"),
labelLine("Finger Extension R:", "L:"),
labelLine("Hip Extension R:", "L:"),
labelLine("Knee Extension R:", "L:"),
labelLine("Ankle Dorsiflexion R:", "L:"),
checkboxLine("Contractures Present", ["None", "Shoulder", "Elbow", "Wrist", "Finger", "Hip", "Knee", "Ankle"]),
...multiLine("Notes:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 7 – Respiratory Assessment
// ═══════════════════════════════════════════
new Paragraph({ children: [new PageBreak()] }),
sectionHeader("SECTION 7 — RESPIRATORY ASSESSMENT"),
spacer(),
respiratoryTable(),
spacer(),
checkboxLine("Paradoxical breathing (abdominal wall movement)", ["Present", "Absent"]),
checkboxLine("Cough effectiveness", ["Effective", "Weak but functional", "Ineffective – cough assist needed"]),
checkboxLine("Secretion management", ["Independent", "Requires airway clearance", "Cough assist device in use"]),
checkboxLine("NIV / BiPAP Recommendation", ["Not yet indicated", "Discuss / plan for initiation", "Initiate – FVC <50% / symptomatic", "Already established"]),
...multiLine("Respiratory notes / plan:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 8 – Functional Mobility & Balance
// ═══════════════════════════════════════════
sectionHeader("SECTION 8 — FUNCTIONAL MOBILITY & BALANCE"),
spacer(),
...scoreTable("Functional Outcome Measures", [
"Timed Up and Go (TUG) – seconds",
"10-Metre Walk Test – seconds / speed (m/s)",
"6-Minute Walk Test – metres (if safe)",
"Berg Balance Scale (BBS) – /56",
"Sit-to-Stand (5 times) – seconds",
]),
checkboxLine("Gait Deviations", ["Foot drop / steppage gait", "Trendelenburg (hip abductor weakness)", "Head drop affecting balance", "Trunk instability", "Reduced arm swing", "None"]),
checkboxLine("Falls Risk", ["Low (BBS >45)", "Moderate (BBS 36-45)", "High (BBS <36)"]),
...multiLine("Fall history details / near-misses:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 9 – Posture & Pressure Care
// ═══════════════════════════════════════════
sectionHeader("SECTION 9 — POSTURE & PRESSURE CARE"),
spacer(),
checkboxLine("Head Drop", ["Absent", "Mild", "Moderate – collar considered", "Severe – collar required"]),
checkboxLine("Trunk Control", ["Good", "Mildly impaired", "Significantly impaired – supports required"]),
checkboxLine("Pressure Areas", ["Intact", "Red areas – at risk", "Grade 1 pressure injury", "Grade 2+", "Refer to tissue viability"]),
checkboxLine("Seating", ["Standard chair adequate", "Adapted seating", "Tilt-in-space wheelchair", "Custom moulded seating"]),
checkboxLine("Mattress", ["Standard", "Pressure-relieving foam", "Dynamic air mattress"]),
...multiLine("Postural management plan:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 10 – Staging
// ═══════════════════════════════════════════
sectionHeader("SECTION 10 — ALS STAGING (KING'S CLINICAL STAGING)"),
spacer(),
checkboxLine("Current Stage", [
"Stage 1 – Ambulant, minor deficits",
"Stage 2a – Independent, some functional limitation",
"Stage 2b – Dependent for some ADLs",
"Stage 3 – Wheelchair, reduced upper limb",
"Stage 4 – Dependent most ADLs",
"Stage 5 – End-stage / palliative",
]),
labelLine("ALSFRS-R decline rate (pts/month):", "King's stage at last visit:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 11 – Problem List
// ═══════════════════════════════════════════
new Paragraph({ children: [new PageBreak()] }),
sectionHeader("SECTION 11 — PHYSIOTHERAPY PROBLEM LIST"),
spacer(),
...["1.", "2.", "3.", "4.", "5.", "6."].flatMap((n) => [
new Paragraph({
spacing: { before: 60, after: 80 },
children: [
new TextRun({ text: n + " ", bold: true, size: 20, font: "Calibri", color: TEAL }),
new TextRun({ text: "_".repeat(110), size: 20, font: "Calibri", color: MID_GREY }),
],
}),
]),
spacer(),
// ═══════════════════════════════════════════
// SECTION 12 – Physiotherapy Goals
// ═══════════════════════════════════════════
sectionHeader("SECTION 12 — PHYSIOTHERAPY GOALS (SMART)"),
spacer(),
subHeader("Short-Term Goals (1-3 months)"),
...["1.", "2.", "3."].flatMap((n) => [
new Paragraph({
spacing: { before: 60, after: 80 },
children: [
new TextRun({ text: n + " ", bold: true, size: 20, font: "Calibri", color: TEAL }),
new TextRun({ text: "_".repeat(110), size: 20, font: "Calibri", color: MID_GREY }),
],
}),
]),
spacer(),
subHeader("Long-Term Goals (3-12 months)"),
...["1.", "2.", "3."].flatMap((n) => [
new Paragraph({
spacing: { before: 60, after: 80 },
children: [
new TextRun({ text: n + " ", bold: true, size: 20, font: "Calibri", color: TEAL }),
new TextRun({ text: "_".repeat(110), size: 20, font: "Calibri", color: MID_GREY }),
],
}),
]),
spacer(),
// ═══════════════════════════════════════════
// SECTION 13 – Intervention Plan
// ═══════════════════════════════════════════
sectionHeader("SECTION 13 — PHYSIOTHERAPY INTERVENTION PLAN"),
spacer(),
subHeader("13.1 Exercise Program"),
checkboxLine("Aerobic Exercise", ["Stationary cycling", "Walking program", "Hydrotherapy", "Arm ergometer", "None currently"]),
checkboxLine("Strengthening", ["Moderate resistance – preserved muscles", "Functional strengthening", "None – too weak / fatigued"]),
checkboxLine("Flexibility / Stretching", ["Active stretching", "Active-assisted ROM", "Passive ROM", "Carer-assisted home program"]),
labelLine("Exercise frequency (days/week):", "Session duration (mins):"),
smallNote("Safety rule: post-exercise fatigue must resolve within 30 minutes. Reduce load if this is exceeded."),
spacer(),
subHeader("13.2 Respiratory Physiotherapy"),
checkboxLine("Interventions Planned", ["Inspiratory Muscle Training (IMT)", "Expiratory Muscle Training (EMT)", "Manually Assisted Cough (MAC)"]),
checkboxLine("", ["Mechanical Insufflation-Exsufflation (Cough Assist)", "Air stacking / LVR", "HFCWO vest therapy"]),
checkboxLine("", ["NIV education and mask fitting", "Breathing pattern retraining", "Carer education in airway clearance"]),
spacer(),
subHeader("13.3 Mobility & Orthotics"),
checkboxLine("Orthotics / Aids", ["Ankle-foot orthosis (AFO) – R/L", "Cervical collar / head support", "Wrist splint", "Resting hand splint"]),
checkboxLine("", ["Walking stick", "Rollator", "Forearm crutches", "Manual wheelchair", "Powered wheelchair"]),
checkboxLine("", ["Stair rail installation advised", "Home modifications referral (OT)", "Ceiling hoist referral"]),
spacer(),
subHeader("13.4 Spasticity Management"),
checkboxLine("Physiotherapy Approach", ["Slow sustained stretching", "Positioning program", "Cryotherapy", "Hydrotherapy", "Splinting"]),
checkboxLine("Referral for", ["Botulinum toxin (focal spasticity)", "Intrathecal baclofen review", "None"]),
spacer(),
subHeader("13.5 Fatigue & Pain Management"),
checkboxLine("Fatigue Strategies", ["Activity pacing", "Energy conservation education", "Prioritisation of high-energy tasks to morning", "Sleep hygiene"]),
checkboxLine("Pain Management", ["Heat therapy", "TENS", "Joint ROM for stiffness", "Positioning / offloading", "Referral to pain team"]),
spacer(),
subHeader("13.6 Carer / Family Education"),
checkboxLine("Education Provided On", ["Safe manual handling", "Passive ROM home program", "Cough assist technique", "NIV use and care", "Pressure area prevention"]),
checkboxLine("", ["Fall prevention", "Adaptive equipment use", "Signs of respiratory deterioration", "Caregiver self-care / respite resources"]),
spacer(),
subHeader("13.7 Telehealth / Home Program"),
yesNoLine("Telehealth appropriate for this patient"),
yesNoLine("Written home exercise program provided"),
labelLine("Home program frequency:", "Review via telehealth:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 14 – MDT Referrals
// ═══════════════════════════════════════════
sectionHeader("SECTION 14 — MDT REFERRALS & COORDINATION"),
spacer(),
checkboxLine("Referrals Made", ["Occupational Therapy", "Speech & Language Therapy", "Dietitian / Nutritionist", "Respiratory Physician"]),
checkboxLine("", ["Palliative Care", "Psychology / Psychiatry", "Social Work", "Orthotics", "Community / Home PT"]),
...multiLine("Referral notes / reason:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 15 – Follow-Up Plan
// ═══════════════════════════════════════════
sectionHeader("SECTION 15 — FOLLOW-UP & REVIEW PLAN"),
spacer(),
checkboxLine("Follow-up Frequency", ["Every 2 weeks", "Monthly", "Every 2 months", "Every 3 months", "As needed"]),
labelLine("Next review date:", "Next ALSFRS-R to be completed:"),
labelLine("Next respiratory function test:", "Planned reassessment of goals:"),
...multiLine("Additional notes / special considerations:"),
spacer(),
// ═══════════════════════════════════════════
// SECTION 16 – Signature
// ═══════════════════════════════════════════
sectionHeader("SECTION 16 — CLINICIAN SIGN-OFF"),
spacer(),
labelLine("Physiotherapist Name (Print):", "Designation:"),
labelLine("Signature:", "Date:"),
labelLine("Countersigned (if applicable):", "Date:"),
smallNote("This form is a clinical record. Handle in accordance with patient data protection and confidentiality guidelines."),
spacer(),
];
// ─── Assemble Document ───────────────────────────────────────────────────────
const doc = new Document({
creator: "ALS Physiotherapy Clinic",
title: "ALS Physiotherapy Intake & Assessment Form",
description: "Structured physiotherapy intake and assessment form for patients with Amyotrophic Lateral Sclerosis",
styles: {
default: {
document: {
run: { font: "Calibri", size: 20 },
},
},
},
sections: [
{
properties: {
page: {
margin: { top: 720, bottom: 720, left: 900, right: 900 },
},
},
headers: {
default: new Header({
children: [
new Paragraph({
alignment: AlignmentType.RIGHT,
spacing: { after: 0 },
children: [
new TextRun({ text: "ALS Physiotherapy Intake Form | Page ", size: 17, font: "Calibri", color: "888888" }),
new TextRun({ children: [PageNumber.CURRENT], size: 17, font: "Calibri", color: "888888" }),
new TextRun({ text: " of ", size: 17, font: "Calibri", color: "888888" }),
new TextRun({ children: [PageNumber.TOTAL_PAGES], size: 17, font: "Calibri", color: "888888" }),
],
}),
],
}),
},
footers: {
default: new Footer({
children: [
new Paragraph({
alignment: AlignmentType.CENTER,
children: [
new TextRun({
text: "CONFIDENTIAL – Clinical Record | ALS / Motor Neuron Disease Service",
size: 16, font: "Calibri", color: "888888", italics: true,
}),
],
}),
],
}),
},
children,
},
],
});
Packer.toBuffer(doc).then((buffer) => {
fs.writeFileSync("/home/daytona/workspace/als-intake-form/ALS_Physiotherapy_Intake_Form.docx", buffer);
console.log("SUCCESS: Form generated at /home/daytona/workspace/als-intake-form/ALS_Physiotherapy_Intake_Form.docx");
});
cd /home/daytona/workspace/als-intake-form && node generate_form.js
python /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/worksp…
python -c " import zipfile, os path = '/home/daytona/workspace/als-intake-form/A…
ALS Physiotherapy Intake Form
Word Document · DOCX
| # | Section | Contents |
|---|---|---|
| 1 | Patient Demographics | Name, MRN, DOB, ALS type, onset region, genetic subtype |
| 2 | Subjective History | Presenting complaints, symptom profile, fatigue (FSS), pain (NRS), respiratory symptoms, social/home environment, medications, patient goals |
| 3 | Objective Assessment | General observations + full ALSFRS-R table (12 items, /48) with rate-of-decline field |
| 4 | Muscle Strength | Full MRC table for 13 bilateral muscle groups + grip/pinch dynamometry |
| 5 | Tone & Spasticity | UMN/LMN sign checklist + Modified Ashworth Scale table (8 regions bilaterally) |
| 6 | Range of Motion | 8 joint measurements bilaterally + contracture checklist |
| 7 | Respiratory Assessment | Full respiratory table - FVC seated/supine, SNIP, MIP, MEP, PCF with clinical thresholds annotated; NIV recommendation |
| 8 | Functional Mobility & Balance | TUG, 10MWT, 6MWT, Berg Balance Scale, 5xSTS; gait deviation checklist; falls risk stratification |
| 9 | Posture & Pressure Care | Head drop, trunk control, pressure areas, seating, mattress |
| 10 | ALS Staging | King's Clinical Staging (Stages 1-5) with ALSFRS-R decline rate |
| 11 | Problem List | 6 numbered free-text problem entries |
| 12 | SMART Goals | Short-term (1-3 months) and long-term (3-12 months) goal boxes |
| 13 | Intervention Plan | Exercise, respiratory physiotherapy, mobility/orthotics, spasticity, fatigue/pain, carer education, telehealth |
| 14 | MDT Referrals | OT, SLT, Dietitian, Respiratory, Palliative, Psychology, Social Work |
| 15 | Follow-up Plan | Frequency, next review dates, reassessment schedule |
| 16 | Clinician Sign-Off | Signature, designation, countersign, confidentiality notice |