Jouberd syndrome
Joubert syndrome ciliopathy
Joubert syndrome molar tooth sign clinical features genetics 2025
| Feature | Description |
|---|---|
| Cerebellar vermis aplasia/hypoplasia | Structural brain malformation |
| Hypotonia | Neonatal/infantile decreased muscle tone |
| Episodic hyperpnea | Irregular breathing pattern; neonatal tachypnea/apnea alternating |
| Oculomotor apraxia | Jerky, abnormal eye movements |
| Ataxia | Cerebellar gait and limb ataxia |
| Intellectual disability | Variable degree of cognitive impairment |
Recent literature note: A 2024 systematic review on CEP290-associated ciliopathy (PMID 39213781) describes the spectrum of extraocular features in this important JS-related gene subgroup, confirming the broad multisystem involvement pattern described above.
Bells palsy
"Bell palsy" treatment corticosteroids
Bell's palsy diagnosis treatment guidelines 2025
| Symptom | Approximate Incidence |
|---|---|
| Facial/retroauricular pain | 60% |
| Dysgeusia (taste impairment) | 57% |
| Hyperacusis (stapedius muscle paralysis) | 30% |
| Hypesthesia/dysesthesia (glossopharyngeal/trigeminal) | 80% |
| Decreased tearing | 17% |
| Hypesthesia of C2 | 20% |

| Condition | Distinguishing Features |
|---|---|
| Ramsay Hunt syndrome (Herpes zoster oticus) | Severe palsy + vesicular rash in external ear canal, auricle, palate/tongue; CN VIII often involved |
| Lyme disease | Endemic area exposure; can be bilateral; serology |
| Sarcoidosis | Often bilateral; systemic features; raised ACE |
| Guillain-Barré syndrome | Bilateral facial palsy; ascending weakness |
| Parotid/CPA tumors | Progressive (not abrupt) onset - a key red flag |
| Melkersson-Rosenthal syndrome | Recurrent facial palsy + facial edema (labial) + fissured tongue |
| HIV seroconversion | Risk factor history |
| Diabetes, amyloidosis, Sjögren's | Systemic context |
| Central (UMN) lesion (stroke, MS) | Forehead spared; other CNS signs |
Red flag: Progressive facial paralysis is NOT Bell's palsy - must prompt imaging to exclude neoplasm.
Generate a patient handout on Bell's palsy recovery timeline and eye care
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && ls -la /tmp/workspace/
mkdir -p /tmp/workspace/bells-palsy-handout && cat > /tmp/workspace/bells-palsy-handout/create_handout.py << 'PYEOF' 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 import copy doc = Document() # ── Page margins (narrow for handout feel) ────────────────────────────────── section = doc.sections[0] section.top_margin = Inches(0.75) section.bottom_margin = Inches(0.75) section.left_margin = Inches(0.9) section.right_margin = Inches(0.9) # ── Default body style ─────────────────────────────────────────────────────── normal = doc.styles["Normal"] normal.font.name = "Arial" normal.font.size = Pt(11) # ── Helper: add a horizontal rule ─────────────────────────────────────────── def add_hr(document): p = document.add_paragraph() p.paragraph_format.space_before = Pt(2) p.paragraph_format.space_after = Pt(2) pPr = p._p.get_or_add_pPr() pBdr = OxmlElement("w:pBdr") bottom = OxmlElement("w:bottom") bottom.set(qn("w:val"), "single") bottom.set(qn("w:sz"), "6") bottom.set(qn("w:space"), "1") bottom.set(qn("w:color"), "2E86AB") pBdr.append(bottom) pPr.append(pBdr) # ── Helper: coloured heading ───────────────────────────────────────────────── TEAL = RGBColor(0x2E, 0x86, 0xAB) # section headings ORANGE = RGBColor(0xE6, 0x77, 0x22) # warnings / call-outs DARK = RGBColor(0x1A, 0x1A, 0x2E) # dark body text def add_section_heading(document, text, color=TEAL): p = document.add_paragraph() p.paragraph_format.space_before = Pt(10) p.paragraph_format.space_after = Pt(2) run = p.add_run(text.upper()) run.bold = True run.font.size = Pt(12) run.font.color.rgb = color run.font.name = "Arial" return p def add_body(document, text, bold=False, italic=False, color=None, size=11, space_after=4): p = document.add_paragraph() p.paragraph_format.space_before = Pt(1) p.paragraph_format.space_after = Pt(space_after) run = p.add_run(text) run.bold = bold run.italic = italic run.font.size = Pt(size) run.font.name = "Arial" if color: run.font.color.rgb = color return p def add_bullet(document, text, level=0, bold_prefix=None): p = document.add_paragraph(style="List Bullet") p.paragraph_format.left_indent = Inches(0.3 + level * 0.2) p.paragraph_format.space_before = Pt(1) p.paragraph_format.space_after = Pt(2) if bold_prefix: r1 = p.add_run(bold_prefix) r1.bold = True r1.font.name = "Arial" r1.font.size = Pt(11) r2 = p.add_run(text) r2.font.name = "Arial" r2.font.size = Pt(11) else: run = p.add_run(text) run.font.name = "Arial" run.font.size = Pt(11) def add_callout(document, title, body_text, bg_color=RGBColor(0xE8, 0xF4, 0xFD), border_color="2E86AB"): """Add a shaded callout box using a table with one cell.""" tbl = document.add_table(rows=1, cols=1) tbl.style = "Table Grid" cell = tbl.cell(0, 0) # shade tcPr = cell._tc.get_or_add_tcPr() shd = OxmlElement("w:shd") shd.set(qn("w:val"), "clear") shd.set(qn("w:color"), "auto") r, g, b = bg_color shd.set(qn("w:fill"), f"{r:02X}{g:02X}{b:02X}") tcPr.append(shd) p1 = cell.paragraphs[0] p1.paragraph_format.space_before = Pt(2) p1.paragraph_format.space_after = Pt(2) r1 = p1.add_run(title + " ") r1.bold = True r1.font.color.rgb = ORANGE r1.font.name = "Arial" r1.font.size = Pt(11) r2 = p1.add_run(body_text) r2.font.name = "Arial" r2.font.size = Pt(11) document.add_paragraph().paragraph_format.space_after = Pt(2) # ═══════════════════════════════════════════════════════════════════════════ # HEADER BLOCK # ═══════════════════════════════════════════════════════════════════════════ title_p = doc.add_paragraph() title_p.alignment = WD_ALIGN_PARAGRAPH.CENTER title_p.paragraph_format.space_before = Pt(0) title_p.paragraph_format.space_after = Pt(4) tr = title_p.add_run("BELL'S PALSY") tr.bold = True tr.font.size = Pt(22) tr.font.color.rgb = TEAL tr.font.name = "Arial" sub_p = doc.add_paragraph() sub_p.alignment = WD_ALIGN_PARAGRAPH.CENTER sub_p.paragraph_format.space_after = Pt(2) sr = sub_p.add_run("Patient Information Guide: Recovery & Eye Care") sr.font.size = Pt(13) sr.font.color.rgb = DARK sr.font.name = "Arial" sr.italic = True add_hr(doc) intro = doc.add_paragraph() intro.paragraph_format.space_before = Pt(4) intro.paragraph_format.space_after = Pt(6) ri = intro.add_run( "You have been diagnosed with Bell's palsy, a temporary weakness or paralysis of the muscles on one side " "of your face. This handout explains what to expect during your recovery and how to protect your eye." ) ri.font.name = "Arial" ri.font.size = Pt(11) # ═══════════════════════════════════════════════════════════════════════════ # SECTION 1 – What Is Bell's Palsy? # ═══════════════════════════════════════════════════════════════════════════ add_section_heading(doc, "1. What Is Bell's Palsy?") add_hr(doc) add_body(doc, "Bell's palsy is caused by inflammation of the facial nerve (cranial nerve 7), most often triggered by " "reactivation of the herpes simplex virus (the same virus that causes cold sores). The nerve runs through " "a narrow bony canal in your skull; when it swells, it becomes compressed, causing weakness or complete " "paralysis of one side of your face." ) add_body(doc, "It is NOT a stroke. A stroke usually only affects the lower face; Bell's palsy affects the entire side " "including your forehead and eyelid.", bold=False, color=RGBColor(0x33, 0x33, 0x33) ) # ═══════════════════════════════════════════════════════════════════════════ # SECTION 2 – Recovery Timeline # ═══════════════════════════════════════════════════════════════════════════ add_section_heading(doc, "2. Recovery Timeline") add_hr(doc) add_body(doc, "Recovery varies from person to person, but most people recover well. Here is what is typical:", space_after=4) # Timeline table tbl = doc.add_table(rows=6, cols=2) tbl.style = "Table Grid" headers = ["Timeframe", "What to Expect"] header_row = tbl.rows[0] for i, h in enumerate(headers): cell = header_row.cells[i] p = cell.paragraphs[0] run = p.add_run(h) run.bold = True run.font.name = "Arial" run.font.size = Pt(11) run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) # shade header tcPr = cell._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"), "2E86AB") tcPr.append(shd) rows_data = [ ("Days 1-3", "Weakness reaches its worst. Pain behind the ear may be present. This is normal."), ("Days 3-10", "Inflammation peaks. Eye closure may be most difficult at this stage. Follow eye care steps carefully."), ("Weeks 2-4", "Most patients begin to notice small improvements - taste may return first, then some flicker of movement."), ("Weeks 4-8", "About 70-80% of patients recover completely by this point. Facial movements gradually strengthen."), ("3-6 Months", "Nearly 85% achieve near-normal function. A small number (about 10%) have partial or slow recovery."), ] alt_fill = RGBColor(0xEA, 0xF4, 0xFB) for i, (timeframe, detail) in enumerate(rows_data): row = tbl.rows[i + 1] # Timeframe cell c0 = row.cells[0] p0 = c0.paragraphs[0] r0 = p0.add_run(timeframe) r0.bold = True r0.font.name = "Arial" r0.font.size = Pt(11) r0.font.color.rgb = TEAL if i % 2 == 0: tcPr = c0._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"), "EAF4FB") tcPr.append(shd) # Detail cell c1 = row.cells[1] p1 = c1.paragraphs[0] r1 = p1.add_run(detail) r1.font.name = "Arial" r1.font.size = Pt(11) if i % 2 == 0: tcPr = c1._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"), "EAF4FB") tcPr.append(shd) doc.add_paragraph().paragraph_format.space_after = Pt(4) add_body(doc, "Good signs of recovery:", bold=True, color=TEAL, space_after=2) add_bullet(doc, "Some movement returning in the first 5-7 days") add_bullet(doc, "Taste sensation returning in the first 1-2 weeks") add_bullet(doc, "Incomplete (partial) paralysis at the start is a very good sign") # ═══════════════════════════════════════════════════════════════════════════ # SECTION 3 – Eye Care (CRITICAL) # ═══════════════════════════════════════════════════════════════════════════ add_section_heading(doc, "3. Eye Care - This Is the Most Important Part", color=ORANGE) add_hr(doc) add_body(doc, "Because your eyelid may not close fully, your eye cannot protect itself. Tears evaporate faster, " "and the cornea (clear front surface of your eye) can become dry, scratched, or infected. This can " "cause permanent vision damage if not managed carefully.", space_after=6 ) add_callout(doc, "WARNING:", " Never go to sleep without protecting your eye. A dry or scratched cornea can cause permanent scarring.", bg_color=RGBColor(0xFF, 0xF3, 0xE0) ) add_body(doc, "Your daily eye care routine:", bold=True, color=TEAL, space_after=2) add_bullet(doc, " Artificial tear eye drops (preservative-free preferred) - use every 1-2 hours while awake, or whenever your eye feels dry or gritty.", bold_prefix="During the day:") add_bullet(doc, " Apply a thick lubricating eye ointment (e.g., Lacri-Lube or equivalent) before sleeping. This stays in longer than drops.", bold_prefix="At bedtime:") add_bullet(doc, " Use a moisture chamber goggle or firmly tape your eyelid shut with micropore tape to keep it closed overnight.", bold_prefix="Eye protection at night:") add_bullet(doc, " Wear sunglasses or protective glasses when outdoors or in windy conditions.", bold_prefix="When outdoors:") add_bullet(doc, " Tilt your head slightly upward and manually close the eye using a clean finger when eating, laughing, or coughing, if your eye tends to water or open.", bold_prefix="During meals/activity:") doc.add_paragraph().paragraph_format.space_after = Pt(2) add_body(doc, "How to tape your eyelid shut at night:", bold=True, space_after=2) add_bullet(doc, "Apply lubricating ointment first.") add_bullet(doc, "Gently close your eye.") add_bullet(doc, "Place a strip of micropore (paper) tape horizontally across the eyelid.") add_bullet(doc, "Do not pull the skin tight - just enough to keep the lid closed.") add_bullet(doc, "Remove gently in the morning using warm water or a damp cloth.") # ═══════════════════════════════════════════════════════════════════════════ # SECTION 4 – Seek Help Immediately If... # ═══════════════════════════════════════════════════════════════════════════ add_section_heading(doc, "4. Seek Medical Help Immediately If...", color=ORANGE) add_hr(doc) warning_items = [ "Your eye becomes red, painful, or your vision changes - this may mean a corneal injury", "You develop a rash or blisters around your ear, mouth, or scalp (may indicate Ramsay Hunt syndrome requiring stronger antiviral treatment)", "Both sides of your face are affected", "Your weakness is getting worse after 3 weeks, or you see no improvement at all by 3 months", "You develop new symptoms such as difficulty swallowing, hearing loss, or limb weakness", ] for item in warning_items: add_bullet(doc, item) # ═══════════════════════════════════════════════════════════════════════════ # SECTION 5 – Your Medications # ═══════════════════════════════════════════════════════════════════════════ add_section_heading(doc, "5. Your Medications") add_hr(doc) add_body(doc, "Your doctor may have prescribed one or both of the following. Take them exactly as directed - they work " "best when started within 72 hours of your symptoms beginning.", space_after=4 ) add_bullet(doc, " Reduces inflammation of the facial nerve. Take with food. Do not stop suddenly - finish the full course.", bold_prefix="Corticosteroids (e.g., prednisolone): ") add_bullet(doc, " Targets the herpes virus that may be triggering the inflammation. Take all doses as prescribed.", bold_prefix="Antiviral medication (e.g., acyclovir/valacyclovir): ") # ═══════════════════════════════════════════════════════════════════════════ # SECTION 6 – Facial Exercises # ═══════════════════════════════════════════════════════════════════════════ add_section_heading(doc, "6. Facial Exercises") add_hr(doc) add_body(doc, "Once movement begins to return (usually after week 2-3), gentle facial exercises can help stimulate " "nerve recovery. Do each exercise slowly, 5-10 times, 2-3 times per day:", space_after=4 ) exercises = [ ("Eyebrow raise", "Raise both eyebrows as high as you can, hold 2 seconds, relax."), ("Eyelid squeeze", "Gently try to close both eyes tightly, hold 2 seconds. Do NOT strain."), ("Smile", "Try to smile broadly showing teeth, hold 2 seconds, relax."), ("Puff cheeks", "Puff out both cheeks with air, hold 2 seconds, release."), ("Nose wrinkle", "Wrinkle your nose as if smelling something bad, hold 2 seconds."), ("Lower lip pull", "Pull down the lower lip on the affected side, hold 2 seconds."), ] for name, desc in exercises: add_bullet(doc, f" {desc}", bold_prefix=f"{name}: ") add_callout(doc, "Note:", " Do not force movements that are not yet returning. Gentle stimulation only - overexertion will not speed recovery.", bg_color=RGBColor(0xE8, 0xF8, 0xE8) ) # ═══════════════════════════════════════════════════════════════════════════ # SECTION 7 – Long-Term: What to Watch For # ═══════════════════════════════════════════════════════════════════════════ add_section_heading(doc, "7. Long-Term Recovery: What to Watch For") add_hr(doc) add_body(doc, "Most people recover fully. However, in a small number of cases, the nerve may not regenerate perfectly, leading to:" ) add_bullet(doc, " When you move your mouth (smile, chew), your eye involuntarily blinks on the same side. This is normal nerve regrowth and can improve with physiotherapy.", bold_prefix="Synkinesis (co-contraction): ") add_bullet(doc, " Tearing on one side when you eat or smell food. This happens when nerve fibres regrow along the wrong path.", bold_prefix="'Crocodile tears': ") add_bullet(doc, " Tightness or pulling sensation in the face.", bold_prefix="Hemifacial spasm: ") add_body(doc, "If any of these develop, discuss them with your doctor. Physiotherapy and in some cases Botulinum toxin (Botox) injections can help.", italic=True, color=RGBColor(0x55, 0x55, 0x55) ) # ═══════════════════════════════════════════════════════════════════════════ # SECTION 8 – Follow-Up # ═══════════════════════════════════════════════════════════════════════════ add_section_heading(doc, "8. Your Follow-Up Appointments") add_hr(doc) add_bullet(doc, "See your GP or neurologist at 4 weeks to assess progress.") add_bullet(doc, "If no improvement by 3 months, a nerve conduction study (EMG) or MRI may be arranged.") add_bullet(doc, "See an ophthalmologist (eye doctor) early if you have any eye pain, redness, or vision changes.") # ═══════════════════════════════════════════════════════════════════════════ # FOOTER # ═══════════════════════════════════════════════════════════════════════════ add_hr(doc) footer_p = doc.add_paragraph() footer_p.alignment = WD_ALIGN_PARAGRAPH.CENTER footer_p.paragraph_format.space_before = Pt(4) fr = footer_p.add_run( "This handout is for general information only and does not replace your doctor's advice. " "Always follow the specific instructions given to you by your healthcare team." ) fr.font.size = Pt(9) fr.font.color.rgb = RGBColor(0x88, 0x88, 0x88) fr.font.name = "Arial" fr.italic = True out = "/tmp/workspace/bells-palsy-handout/Bells_Palsy_Patient_Handout.docx" doc.save(out) print(f"Saved: {out}") PYEOF python3 /tmp/workspace/bells-palsy-handout/create_handout.py
Bells Palsy Patient Handout
Word Document · DOCX