Case 3: Breaking Bad News to a Patient with Amyotrophic Lateral Sclerosis (ALS) Patient Information: Name: Mr. David Martinez Age: 55 Medical History: Mr. Martinez has been experiencing progressive weakness and muscle atrophy in his limbs over the past year. After undergoing neurological evaluations and electromyography (EMG) testing, he has been diagnosed with amyotrophic lateral sclerosis (ALS). Family Background: Mr. Martinez is married with three school-aged children. His wife works full-time, and they rely on her income to support their family. Financial and Social Status: Mr. Martinez works as a mechanic but has been on medical leave due to his symptoms. He is concerned about his ability to provide for his family and worries about the financial implications of his diagnosis. Treatment Plan: There is currently no cure for ALS, so treatment focuses on managing symptoms and optimizing quality of life. Mr. Martinez will require comprehensive support services, including physical therapy, occupational therapy, and respiratory support, as his condition progresses. Possible Complications: ALS is a progressive neurodegenerative disease that leads to muscle weakness, difficulty speaking, swallowing, and breathing. Mr. Martinez may experience significant disability and loss of independence over time, requiring extensive support from his family and healthcare providers. This is my case for which i have to perform with my patient so write a doc patient it should be in easy english The script should be in medical terms and more information about case the treatment plan
mkdir -p /tmp/workspace/als-script && ls /tmp/workspace/als-script/
~/als-script/generate_script.py
from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
doc = Document()
# --- Page margins ---
section = doc.sections[0]
section.top_margin = Inches(1)
section.bottom_margin = Inches(1)
section.left_margin = Inches(1.2)
section.right_margin = Inches(1.2)
# --- Default font ---
style = doc.styles["Normal"]
style.font.name = "Arial"
style.font.size = Pt(11)
# Helper: colored heading
def add_heading(doc, text, level=1, color=None):
h = doc.add_heading(text, level=level)
h.alignment = WD_ALIGN_PARAGRAPH.LEFT
if color:
for run in h.runs:
run.font.color.rgb = RGBColor(*color)
return h
# Helper: add labeled paragraph
def add_speaker(doc, speaker, dialogue, speaker_color=(0,70,127)):
p = doc.add_paragraph()
run_name = p.add_run(f"{speaker}: ")
run_name.bold = True
run_name.font.color.rgb = RGBColor(*speaker_color)
run_name.font.size = Pt(11)
run_dialogue = p.add_run(dialogue)
run_dialogue.font.size = Pt(11)
return p
def add_note(doc, text):
p = doc.add_paragraph()
p.paragraph_format.left_indent = Inches(0.3)
run = p.add_run(f"[{text}]")
run.italic = True
run.font.color.rgb = RGBColor(100, 100, 100)
run.font.size = Pt(10)
return p
def add_divider(doc):
p = doc.add_paragraph("─" * 70)
p.runs[0].font.color.rgb = RGBColor(180,180,180)
p.runs[0].font.size = Pt(9)
# =====================================================================
# TITLE BLOCK
# =====================================================================
title = doc.add_heading("DOCTOR–PATIENT COMMUNICATION SCRIPT", level=1)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in title.runs:
run.font.color.rgb = RGBColor(0, 70, 127)
sub = doc.add_paragraph("Breaking Bad News: Diagnosis of Amyotrophic Lateral Sclerosis (ALS)")
sub.alignment = WD_ALIGN_PARAGRAPH.CENTER
sub.runs[0].bold = True
sub.runs[0].font.size = Pt(12)
doc.add_paragraph("")
# Patient info box
info_table = doc.add_table(rows=5, cols=2)
info_table.style = "Table Grid"
info_data = [
("Patient Name", "Mr. David Martinez"),
("Age", "55 years"),
("Diagnosis", "Amyotrophic Lateral Sclerosis (ALS)"),
("Setting", "Neurology Outpatient Clinic"),
("Present", "Dr. [Your Name], Mr. Martinez (patient), Mrs. Martinez (wife) — optional"),
]
for i, (label, value) in enumerate(info_data):
row = info_table.rows[i]
row.cells[0].text = label
row.cells[1].text = value
row.cells[0].paragraphs[0].runs[0].bold = True
row.cells[0].paragraphs[0].runs[0].font.color.rgb = RGBColor(0,70,127)
doc.add_paragraph("")
# =====================================================================
# SECTION 1 — BACKGROUND / MEDICAL OVERVIEW
# =====================================================================
add_heading(doc, "SECTION 1: CLINICAL BACKGROUND (For the Doctor's Reference)", level=2, color=(0,100,0))
doc.add_paragraph(
"Before entering the consultation room, the clinician should be familiar with the following "
"medical facts about ALS so that explanations to the patient are accurate and grounded in evidence."
)
add_heading(doc, "What Is ALS?", level=3)
doc.add_paragraph(
"Amyotrophic lateral sclerosis (ALS) is a progressive neurodegenerative disorder that primarily "
"affects motor neurons — the nerve cells that control voluntary muscle movement. "
"\"Amyotrophy\" means muscle wasting; \"lateral sclerosis\" refers to the hardening (gliosis) of "
"the lateral and anterior corticospinal tracts of the spinal cord. It affects both:"
)
ul = doc.add_paragraph(style="List Bullet")
ul.add_run("Upper motor neurons (UMN)").bold = True
ul.add_run(" — in the motor cortex of the brain (causing spasticity, hyperreflexia, Babinski sign)")
ul2 = doc.add_paragraph(style="List Bullet")
ul2.add_run("Lower motor neurons (LMN)").bold = True
ul2.add_run(" — in the brainstem and spinal cord (causing weakness, muscle atrophy, fasciculations, hyporeflexia)")
add_heading(doc, "Epidemiology", level=3)
doc.add_paragraph(
"Incidence: ~2 per 100,000 population per year. Prevalence: 5–8 per 100,000. "
"Mean age of onset: 54–60 years. Male-to-female ratio: ~1.4:1 (spinal-onset). "
"Approximately 90–95% of cases are sporadic (no genetic inheritance); 5–10% are familial. "
"Mr. Martinez's age and symptom profile are consistent with the typical presentation."
)
add_heading(doc, "Pathobiology (Simplified)", level=3)
doc.add_paragraph(
"More than 40 ALS susceptibility genes have been identified. In familial cases, the most common "
"genetic cause is a GGGGCC hexanucleotide repeat expansion in the C9ORF72 gene (accounts for "
"40–50% of familial ALS). SOD1 mutations account for ~20% of familial cases. "
"In sporadic ALS (like Mr. Martinez's likely case), the exact cause is unknown — possible "
"environmental factors include strenuous physical labor, head trauma, and chemical exposures. "
"The core pathological process involves protein aggregation (TDP-43 inclusions), excitotoxicity, "
"oxidative stress, and progressive motor neuron death."
)
add_heading(doc, "Clinical Features", level=3)
features = [
("Progressive limb weakness", "Usually starts asymmetrically and distally (hand clumsiness, foot drop). Spreads to adjacent muscle groups over time."),
("Muscle atrophy & fasciculations", "Visible muscle wasting and spontaneous muscle twitching due to dying lower motor neurons."),
("Spasticity & hyperreflexia", "Stiff, tight muscles and brisk reflexes from upper motor neuron involvement."),
("Bulbar symptoms", "Dysarthria (slurred speech), dysphagia (difficulty swallowing) — present in ~25% at onset, eventually in most patients."),
("Respiratory compromise", "Weakness of the diaphragm and intercostal muscles leads to hypoventilation. Most common cause of death."),
("Cognitive changes", "Frontotemporal dysfunction in ~50% of patients; frank frontotemporal dementia in ~5–10%."),
("Preserved functions", "Bowel/bladder control and eye movements are typically spared until very late stages."),
]
feat_table = doc.add_table(rows=len(features)+1, cols=2)
feat_table.style = "Table Grid"
hdr = feat_table.rows[0].cells
hdr[0].text = "Feature"
hdr[1].text = "Details"
for c in hdr:
c.paragraphs[0].runs[0].bold = True
c.paragraphs[0].runs[0].font.color.rgb = RGBColor(255,255,255)
# shade header
tc = c._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear')
shd.set(qn('w:color'), 'auto')
shd.set(qn('w:fill'), '00468B')
tcPr.append(shd)
for i, (feat, detail) in enumerate(features):
row = feat_table.rows[i+1]
row.cells[0].text = feat
row.cells[0].paragraphs[0].runs[0].bold = True
row.cells[1].text = detail
doc.add_paragraph("")
add_heading(doc, "Diagnosis", level=3)
doc.add_paragraph(
"The diagnosis of ALS is clinical, supported by electromyography (EMG). EMG findings in ALS "
"include active denervation (fibrillation potentials, positive sharp waves) and chronic "
"reinnervation (large, long-duration motor unit potentials) in multiple body regions. "
"The El Escorial / Awaji criteria require evidence of progressive UMN and LMN degeneration in "
"at least two of four regions (bulbar, cervical, thoracic, lumbosacral). MRI of the brain and "
"spine is performed to exclude structural mimics."
)
add_heading(doc, "Prognosis", level=3)
doc.add_paragraph(
"ALS is relentlessly progressive. Median survival from symptom onset is 2–5 years; however, "
"~10% of patients survive >10 years (e.g., late Stephen Hawking survived >50 years). "
"Bulbar-onset ALS carries a worse prognosis (median ~2–3 years from onset). "
"Cause of death is most commonly respiratory failure."
)
add_heading(doc, "Treatment Overview", level=3)
rx = [
("Riluzole (Rilutek)", "Only FDA-approved oral disease-modifying drug. Glutamate antagonist that slows progression. Extends survival by ~2–3 months on average. Dose: 50 mg twice daily."),
("Edaravone (Radicava)", "IV or oral antioxidant. FDA-approved (2017) for patients meeting specific functional criteria. May slow functional decline in a subset of patients."),
("AMX0035 (Relyvrio)", "Combination of sodium phenylbutyrate and taurursodiol. Approved by FDA in 2022; shown to slow functional decline and extend survival in trials."),
("Non-Invasive Ventilation (NIV/BiPAP)", "Prolongs survival and improves quality of life. Initiated when forced vital capacity (FVC) drops to <50–75%."),
("Percutaneous Endoscopic Gastrostomy (PEG)", "Feeding tube placed when swallowing becomes unsafe or weight loss >10%. Prolongs survival and prevents aspiration pneumonia."),
("Physical Therapy (PT)", "Maintains strength, prevents contractures, assists with adaptive equipment, and prolongs mobility."),
("Occupational Therapy (OT)", "Adaptive tools for daily activities (utensils, communication devices, home modifications)."),
("Speech-Language Therapy (SLT)", "Manages dysarthria and dysphagia; introduces augmentative and alternative communication (AAC) devices."),
("Respiratory Therapy", "Monitors pulmonary function (FVC, SNIP), manages secretions (cough assist devices), manages ventilator settings."),
("Palliative Care", "Integrated from diagnosis — manages pain, dyspnea, anxiety, depression, and existential distress. Advance care planning (DNR/DNI, POLST)."),
("Social Work / Support", "Financial aid, disability benefits, caregiver support, community resources (ALS Association, MDA)."),
]
rx_table = doc.add_table(rows=len(rx)+1, cols=2)
rx_table.style = "Table Grid"
rx_hdr = rx_table.rows[0].cells
rx_hdr[0].text = "Intervention"
rx_hdr[1].text = "Details"
for c in rx_hdr:
c.paragraphs[0].runs[0].bold = True
c.paragraphs[0].runs[0].font.color.rgb = RGBColor(255,255,255)
tc = c._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear')
shd.set(qn('w:color'), 'auto')
shd.set(qn('w:fill'), '006633')
tcPr.append(shd)
for i, (rx_name, rx_det) in enumerate(rx):
row = rx_table.rows[i+1]
row.cells[0].text = rx_name
row.cells[0].paragraphs[0].runs[0].bold = True
row.cells[1].text = rx_det
doc.add_paragraph("")
# =====================================================================
# SECTION 2 — SPIKES FRAMEWORK
# =====================================================================
add_heading(doc, "SECTION 2: COMMUNICATION FRAMEWORK — SPIKES PROTOCOL", level=2, color=(127, 0, 0))
doc.add_paragraph(
"Use the SPIKES protocol to structure breaking bad news. SPIKES = Setting, Perception, "
"Invitation, Knowledge, Empathy, Strategy & Summary."
)
spikes = [
("S — Setting", "Ensure privacy. Arrange seating so doctor and patient are at the same level (no desk barrier). Invite the spouse/support person. Minimize interruptions. Turn off pager/phone."),
("P — Perception", "Before giving information, ask what the patient already knows or suspects. This reveals their baseline understanding and emotional readiness."),
("I — Invitation", "Ask how much information the patient wishes to receive. Respect their autonomy. Some patients want all details; others prefer family-mediated disclosure."),
("K — Knowledge", "Give the diagnosis clearly and honestly. Use a \"warning shot\" first. Avoid medical jargon. Provide information in small chunks. Pause frequently."),
("E — Empathy", "Acknowledge emotions. Validate the patient's reaction. Do not rush through distress. Use silence when appropriate."),
("S — Strategy & Summary", "Outline the treatment plan and next steps. Offer hope (within honest limits). Provide written materials and contact information. Schedule follow-up."),
]
for s_title, s_detail in spikes:
p = doc.add_paragraph(style="List Bullet")
p.add_run(s_title + ": ").bold = True
p.add_run(s_detail)
doc.add_paragraph("")
# =====================================================================
# SECTION 3 — SCRIPT
# =====================================================================
add_heading(doc, "SECTION 3: CONSULTATION SCRIPT", level=2, color=(0, 70, 127))
doc.add_paragraph(
"The following is a sample script for the consultation. "
"Text in [square brackets] are stage directions or optional additions. "
"The script is written in plain English for the patient, while the doctor's explanations include "
"accurate medical terminology."
)
add_divider(doc)
# --- PART 1: SETTING ---
add_heading(doc, "PART 1 — SETTING THE SCENE", level=3)
add_note(doc, "Doctor enters the room. Mr. Martinez is seated. His wife may be present. Doctor sits at eye level, no desk barrier.")
add_speaker(doc, "Dr. [Name]",
"Good morning, Mr. Martinez. Thank you for coming in today. I am Dr. [Name], your neurologist. "
"Is it alright if we talk here in this room? I have asked the nurse to hold any calls so we will "
"not be disturbed.")
add_speaker(doc, "Mr. Martinez", "Yes, of course, Doctor. I have been waiting to hear the results.")
add_note(doc, "Doctor offers a seat to the patient's wife if present.")
add_speaker(doc, "Dr. [Name]",
"I am glad your wife could join us today. What I have to share affects the whole family, "
"and having support with you is important.")
doc.add_paragraph("")
# --- PART 2: PERCEPTION ---
add_heading(doc, "PART 2 — CHECKING PERCEPTION", level=3)
add_speaker(doc, "Dr. [Name]",
"Before I go through the test results, I would like to understand what you already know. "
"What did the doctors tell you before this appointment? What have you been thinking "
"might be going on?")
add_speaker(doc, "Mr. Martinez",
"They told me there is something wrong with my nerves. My hands and legs keep getting weaker. "
"I could not even use my wrench last month. I was hoping it was something that could be fixed "
"with an operation or medication.")
add_speaker(doc, "Dr. [Name]",
"I understand. You have noticed the weakness getting worse over time. That is very important "
"information. Thank you for telling me.")
doc.add_paragraph("")
# --- PART 3: INVITATION ---
add_heading(doc, "PART 3 — INVITATION", level=3)
add_speaker(doc, "Dr. [Name]",
"Mr. Martinez, I now have all the results from your nerve tests — the electromyography (EMG) — "
"and the neurological examinations. Would you like me to go through everything in detail, "
"or would you prefer I give you a summary first?")
add_speaker(doc, "Mr. Martinez", "Please, tell me everything, Doctor. I want to know.")
add_speaker(doc, "Dr. [Name]",
"Of course. I will explain everything as clearly as I can, and please stop me at any time "
"if something is not clear, or if you need a moment.")
doc.add_paragraph("")
# --- PART 4: KNOWLEDGE / DIAGNOSIS ---
add_heading(doc, "PART 4 — DELIVERING THE DIAGNOSIS", level=3)
add_note(doc, "Use a warning shot before stating the diagnosis.")
add_speaker(doc, "Dr. [Name]",
"Mr. Martinez, I have to be honest with you — the results are serious. "
"The tests show a condition that affects the nerve cells that control your muscles. "
"I want to explain what we found and what it means for you.")
add_note(doc, "Pause. Allow the patient to prepare.")
add_speaker(doc, "Dr. [Name]",
"The diagnosis is a condition called Amyotrophic Lateral Sclerosis — most people know it as "
"ALS, or sometimes \"Lou Gehrig's disease.\" "
"It is a disease of the motor neurons — those are the nerve cells in your brain and spinal cord "
"that send signals to your muscles telling them to move.")
add_speaker(doc, "Mr. Martinez", "ALS... I have heard of that. Is that the one where you... [voice breaking]")
add_note(doc, "Doctor leans forward slightly, maintaining eye contact. Speaks gently.")
add_speaker(doc, "Dr. [Name]",
"Yes. I know this is very difficult to hear. Take all the time you need. "
"[Pause 10-15 seconds.] "
"I am here, and I am not going anywhere. We are going to go through all of this together.")
add_note(doc, "Allow silence. Do not rush.")
doc.add_paragraph("")
add_heading(doc, "Explaining the Disease in Simple Language", level=4)
add_speaker(doc, "Dr. [Name]",
"Let me explain what ALS actually does, so you understand what is happening in your body. "
"Think of your nervous system like an electrical wiring system. Your brain sends electrical "
"signals down through your spinal cord to the muscles, telling them what to do — to lift a "
"wrench, to walk, to swallow, to breathe. "
"In ALS, the nerve cells — the motor neurons — that carry these signals slowly stop working "
"and eventually die. When the nerves stop working, the muscles do not get the signals they "
"need, so they become weak and thin out — this is what we call muscle atrophy. "
"The medical term 'amyotrophic' literally means 'no muscle nourishment.' "
"'Lateral sclerosis' refers to the scarring that forms in the sides of your spinal cord "
"where these nerve fibres run.")
add_speaker(doc, "Mr. Martinez", "So the nerves are dying?")
add_speaker(doc, "Dr. [Name]",
"Yes — they are progressively degenerating. Your EMG — the nerve and muscle test — showed "
"that multiple regions of your body have evidence of active denervation. This means nerve "
"fibres are currently affected in your arms and legs. The test also showed signs of both "
"upper and lower motor neuron involvement, which is the hallmark pattern of ALS. "
"This is consistent with the progressive weakness and muscle wasting you have noticed over "
"the past year.")
doc.add_paragraph("")
add_heading(doc, "Prognosis — Honest but Compassionate", level=4)
add_speaker(doc, "Dr. [Name]",
"I want to be honest with you, because you deserve the truth. ALS is a progressive disease — "
"which means it does not go into remission and it will continue to advance. "
"There is currently no cure for ALS.")
add_note(doc, "Pause. Allow this to land.")
add_speaker(doc, "Mr. Martinez", "[In distress] No cure? How long do I have?")
add_speaker(doc, "Dr. [Name]",
"This is a completely understandable question, and I want to answer it honestly. "
"On average, most patients with ALS live 2 to 5 years from the time symptoms begin. "
"However — and this is important — there is significant variation. "
"About 10% of patients live 10 years or more. Stephen Hawking, the famous physicist, "
"lived over 50 years with ALS. We cannot predict exactly how fast or slow it will progress "
"in your individual case. What we can do — and this is critical — is work as a team to "
"slow the progression, protect your quality of life, and support you and your family at every step.")
add_speaker(doc, "Mrs. Martinez", "[Tearfully] Is this because of his job? The chemicals?")
add_speaker(doc, "Dr. [Name]",
"That is a very thoughtful question. In approximately 90–95% of ALS cases, we do not find "
"a single clear cause. Strenuous physical work and certain chemical exposures have been "
"studied as possible environmental risk factors, but they are not proven causes. "
"This is not something David did wrong. It is not preventable by anything he could have "
"done differently. The disease can affect anyone.")
doc.add_paragraph("")
# --- PART 5: EMPATHY ---
add_heading(doc, "PART 5 — EMPATHY AND EMOTIONAL ACKNOWLEDGMENT", level=3)
add_note(doc, "Doctor addresses the patient directly with empathy before moving to treatment.")
add_speaker(doc, "Dr. [Name]",
"Mr. Martinez, I am genuinely sorry to be sharing this news with you today. "
"I can see how much this means — your family, your work, your ability to provide for your "
"children. These are not small things. They are everything. "
"Your feelings right now — the shock, the fear, the anger — all of that is completely normal "
"and understandable. You do not have to hold it together for me.")
add_speaker(doc, "Mr. Martinez", "My kids... they are still in school. What am I going to tell them?")
add_speaker(doc, "Dr. [Name]",
"We will help you with that conversation too. Our social worker and counselor work with families "
"to help parents talk to their children about serious illness in an age-appropriate way. "
"You are not alone in this. We will be with you at every step.")
doc.add_paragraph("")
# --- PART 6: TREATMENT PLAN ---
add_heading(doc, "PART 6 — TREATMENT PLAN AND MANAGEMENT", level=3)
add_note(doc, "Transition to the management plan — provide hope within honest boundaries.")
add_speaker(doc, "Dr. [Name]",
"Now I want to talk about what we are going to do — because there is a lot we can do. "
"Even though we cannot cure ALS, we can work hard to slow its course, keep you as "
"comfortable and independent as possible for as long as possible, and ensure you and "
"your family are supported throughout. Let me walk you through the plan:")
# Riluzole
add_heading(doc, "1. Disease-Modifying Medication", level=4)
add_speaker(doc, "Dr. [Name]",
"The first medication is called Riluzole — brand name Rilutek. It is the first drug "
"ever approved specifically for ALS. It works by reducing glutamate excitotoxicity — "
"in simple terms, it calms down the excessive electrical activity that is damaging your "
"motor neurons. Studies show it extends survival by approximately 2–3 months on average "
"and slows the rate of deterioration. The dose is 50 mg twice daily by mouth. "
"Side effects include nausea and liver enzyme elevation, so we will monitor your liver "
"function tests every 3 months.")
add_speaker(doc, "Dr. [Name]",
"There is also a newer medication called Edaravone — brand name Radicava — which is "
"an antioxidant that may slow functional decline in certain patients. We will assess "
"whether you qualify for it based on your ALS Functional Rating Scale score. "
"A third agent, AMX0035 (Relyvrio), targets mitochondrial stress and programmed cell "
"death pathways. It showed benefit in a clinical trial and has received FDA approval. "
"We will discuss these options in detail and decide together what is right for you.")
# PT/OT
add_heading(doc, "2. Physical and Occupational Therapy", level=4)
add_speaker(doc, "Dr. [Name]",
"You will see a physiotherapist who will work with you to maintain your muscle strength "
"and flexibility. They will also help you with exercises that prevent stiffness and "
"contractures — that is when joints get fixed in a bent position. "
"An occupational therapist will assess your work and home environment and provide "
"adaptive equipment — things like special tools for your hands, raised chairs, grab bars, "
"and later, a wheelchair when needed. The goal is to keep you functioning and safe.")
# Speech
add_heading(doc, "3. Speech and Swallowing Therapy", level=4)
add_speaker(doc, "Dr. [Name]",
"A speech-language pathologist will monitor your speech and swallowing regularly. "
"As the disease progresses, you may experience dysarthria — that is slurred or difficult "
"speech — and dysphagia — difficulty swallowing. "
"The therapist will teach you techniques to make swallowing safer and modify food "
"consistencies when needed. When speech becomes very difficult, we can set up "
"augmentative communication devices — like a tablet or eye-gaze computer — so you can "
"always communicate with your family.")
# Respiratory
add_heading(doc, "4. Respiratory Support", level=4)
add_speaker(doc, "Dr. [Name]",
"ALS eventually affects the breathing muscles — the diaphragm and the muscles between "
"your ribs. We will monitor your lung function regularly with a test called spirometry — "
"measuring your forced vital capacity, or FVC. When your breathing begins to decline, "
"we will introduce a non-invasive ventilator called BiPAP — bi-level positive airway "
"pressure. You wear a mask at night, and it helps your lungs breathe more easily while "
"you sleep. This has been shown to extend survival and significantly improve comfort and "
"quality of life. We will also use assisted cough devices to help you clear secretions "
"from your lungs and prevent chest infections.")
# Nutrition
add_heading(doc, "5. Nutrition and Feeding", level=4)
add_speaker(doc, "Dr. [Name]",
"Maintaining good nutrition is very important. A dietitian will work with you. "
"If swallowing becomes unsafe or you are losing significant weight, we may discuss "
"a procedure called a PEG — percutaneous endoscopic gastrostomy — which places a small "
"tube directly into the stomach through the abdominal wall. This allows you to be fed "
"directly and prevents the risk of food entering the lungs, which can cause pneumonia. "
"Many patients manage well at home with a PEG and continue their daily activities.")
# Palliative
add_heading(doc, "6. Palliative Care and Mental Health", level=4)
add_speaker(doc, "Dr. [Name]",
"We will involve our palliative care team early — not because you are dying soon, "
"but because they are experts at managing symptoms like pain, muscle cramps, spasticity, "
"excessive saliva, and breathlessness. They also provide emotional and psychological "
"support. You and your wife and children will also be offered counseling. "
"Depression and anxiety are common in ALS and are very treatable — we will screen for "
"them and manage them proactively.")
# Social / Financial
add_heading(doc, "7. Social Work and Financial Support", level=4)
add_speaker(doc, "Dr. [Name]",
"I understand that your family's finances are a major concern. You have been on medical "
"leave and you are worried about providing for your three children. "
"Our medical social worker will meet with you and your wife to help you navigate: "
"disability benefit applications, Social Security Disability Insurance (SSDI), "
"the Family and Medical Leave Act (FMLA), and community programs offered through "
"the ALS Association. The ALS Association provides free equipment loans, home visits, "
"support groups, and financial aid. Many patients are also eligible for participation in "
"clinical trials for new ALS therapies — which are fully funded.")
add_speaker(doc, "Mr. Martinez", "There are trials going on? New treatments?")
add_speaker(doc, "Dr. [Name]",
"Yes. ALS research is one of the most active areas in neurology right now. "
"There are currently multiple clinical trials exploring gene silencing therapy (for SOD1 "
"and C9ORF72 mutations), stem cell therapy, and novel neuroprotective agents. "
"We will check whether you carry any specific genetic mutations and see if you qualify "
"for any current trials. The ALS Therapy Development Institute and the Northeast ALS "
"Consortium coordinate many of these.")
doc.add_paragraph("")
# --- PART 7: ADVANCE CARE PLANNING ---
add_heading(doc, "PART 7 — ADVANCE CARE PLANNING (Gentle Introduction)", level=3)
add_note(doc, "Introduce this sensitively — not today's focus, but important to mention.")
add_speaker(doc, "Dr. [Name]",
"Mr. Martinez, I want to mention one more thing — not to alarm you, but because it is "
"important for your sense of control over your own life. "
"As we go through this journey together, we will at some point talk about advance care "
"planning — this means documenting your wishes about medical care in advance, so that if "
"the time comes when you cannot communicate them, your family and your medical team know "
"exactly what you want. This includes decisions about artificial ventilation, resuscitation, "
"and the kind of care you wish to receive at the end of life. "
"We will not rush into these conversations today — but I want you to know it is something "
"we take seriously, and your voice and values will guide every decision.")
doc.add_paragraph("")
# --- PART 8: STRATEGY AND SUMMARY ---
add_heading(doc, "PART 8 — STRATEGY AND SUMMARY", level=3)
add_speaker(doc, "Dr. [Name]",
"Let me summarize what we have discussed today.")
doc.add_paragraph(
"Summary given by doctor to patient — cover these key points in your own words:"
)
summary_points = [
"The diagnosis is ALS — a progressive motor neuron disease affecting both upper and lower motor neurons.",
"ALS has no cure, but several treatments are available to slow progression and manage symptoms.",
"You will be started on Riluzole (50 mg twice daily) as the primary disease-modifying medication.",
"You will be referred to: physiotherapy, occupational therapy, speech-language therapy, respiratory therapy, dietitian, palliative care, and a medical social worker.",
"Your lung function will be monitored regularly, and BiPAP will be introduced when needed.",
"You and your family will receive psychological support and counseling.",
"Financial and disability assistance resources will be coordinated through social work.",
"You will be considered for clinical trial participation.",
"Advance care planning will be discussed at a future appointment.",
]
for pt in summary_points:
p = doc.add_paragraph(style="List Number")
p.add_run(pt)
doc.add_paragraph("")
add_speaker(doc, "Dr. [Name]",
"I know this is an enormous amount of information to take in at one time. "
"I am giving you a written summary today to take home. I have also listed the contact "
"number for the ALS Association and for our nurse specialist who is your main point "
"of contact between appointments. "
"Our next appointment will be in two weeks, where we will begin the referrals and "
"review any questions that come up. Is there anything you want to ask me right now?")
add_speaker(doc, "Mr. Martinez", "[Long pause] Will I still be able to see my kids grow up?")
add_speaker(doc, "Dr. [Name]",
"I cannot promise you a specific timeline, David — that would not be honest. "
"What I can promise you is that we will fight for every day of quality, of presence, "
"of connection with your family. With good treatment and support, many patients with "
"ALS remain at home with their families for years. "
"Your children need you — and we are going to do everything we can so you can be "
"there for them, in the way that matters most.")
add_note(doc, "End of consultation. Doctor shakes patient's hand. Offers a follow-up appointment card. Connects with nurse specialist.")
doc.add_paragraph("")
add_divider(doc)
# =====================================================================
# SECTION 4 — RESOURCE LIST
# =====================================================================
add_heading(doc, "SECTION 4: PATIENT RESOURCE LIST", level=2, color=(127, 60, 0))
resources = [
("ALS Association", "www.als.org", "Equipment, financial aid, support groups, research trials"),
("Muscular Dystrophy Association (MDA)", "www.mda.org", "Clinical care and research support"),
("ALS Therapy Development Institute", "www.als.net", "Clinical trial enrollment and research"),
("Social Security Disability Insurance (SSDI)", "www.ssa.gov", "Disability income support"),
("National ALS Registry (CDC)", "www.cdc.gov/als", "Registry, research studies"),
("Northeast ALS Consortium (NEALS)", "www.neals.org", "Clinical trials for ALS patients"),
]
res_table = doc.add_table(rows=len(resources)+1, cols=3)
res_table.style = "Table Grid"
res_hdr = res_table.rows[0].cells
for c, txt in zip(res_hdr, ["Organization", "Website", "Purpose"]):
c.text = txt
c.paragraphs[0].runs[0].bold = True
for i, (org, web, purp) in enumerate(resources):
row = res_table.rows[i+1]
row.cells[0].text = org
row.cells[1].text = web
row.cells[2].text = purp
doc.add_paragraph("")
# =====================================================================
# SECTION 5 — COMPLICATIONS CHART
# =====================================================================
add_heading(doc, "SECTION 5: ANTICIPATED COMPLICATIONS AND MANAGEMENT", level=2, color=(100, 0, 100))
complications = [
("Respiratory failure", "Diaphragm/intercostal weakness", "BiPAP, cough assist, eventually tracheostomy (patient choice)"),
("Dysphagia / aspiration", "Bulbar muscle weakness", "Dietary modification, PEG tube, thickened liquids, speech therapy"),
("Dysarthria", "Bulbar LMN + UMN involvement", "AAC devices (speech-generating device, eye-gaze tech)"),
("Muscle cramps / fasciculations", "Active denervation", "Baclofen, quinine, mexiletine, magnesium"),
("Spasticity", "UMN involvement", "Baclofen (oral or intrathecal), tizanidine, physiotherapy"),
("Sialorrhea (drooling)", "Bulbar weakness, loss of lip seal", "Glycopyrrolate, anticholinergics, botulinum toxin injection"),
("Depression / anxiety", "Psychological response to diagnosis", "SSRI/SNRI antidepressants, counseling, support groups"),
("Pseudobulbar affect", "UMN bulbar involvement (emotional lability)", "Dextromethorphan/quinidine (Nuedexta)"),
("Malnutrition / weight loss", "Dysphagia + hypermetabolism", "High-calorie diet, dietitian, PEG when needed"),
("Deep vein thrombosis (DVT)", "Immobility in advanced disease", "Compression stockings, anticoagulation if indicated"),
("Pain", "Muscle cramps, joint pain from immobility", "NSAIDs, opioids (palliative stage), physiotherapy"),
]
comp_table = doc.add_table(rows=len(complications)+1, cols=3)
comp_table.style = "Table Grid"
comp_hdr = comp_table.rows[0].cells
for c, txt in zip(comp_hdr, ["Complication", "Mechanism", "Management"]):
c.text = txt
c.paragraphs[0].runs[0].bold = True
tc = c._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear')
shd.set(qn('w:color'), 'auto')
shd.set(qn('w:fill'), '640064')
tcPr.append(shd)
c.paragraphs[0].runs[0].font.color.rgb = RGBColor(255,255,255)
for i, (comp, mech, mgmt) in enumerate(complications):
row = comp_table.rows[i+1]
row.cells[0].text = comp
row.cells[0].paragraphs[0].runs[0].bold = True
row.cells[1].text = mech
row.cells[2].text = mgmt
doc.add_paragraph("")
# Footer note
foot = doc.add_paragraph(
"References: Bradley and Daroff's Neurology in Clinical Practice (9780323642613); "
"Goldman-Cecil Medicine International Edition (9780323930345); "
"Sleisenger and Fordtran's Gastrointestinal and Liver Disease (9780323609623). "
"All clinical content reflects current standard-of-care guidelines."
)
foot.runs[0].italic = True
foot.runs[0].font.size = Pt(9)
foot.runs[0].font.color.rgb = RGBColor(130,130,130)
# Save
out_path = "/tmp/workspace/als-script/ALS_Doctor_Patient_Script.docx"
doc.save(out_path)
print(f"Saved: {out_path}")
cd /tmp/workspace/als-script && python3 generate_script.py
ALS Doctor Patient Script
Word Document · DOCX