~/recovery-plan/make_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm, cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/recovery-plan/Lumbar_Recovery_Plan_Iqbal_Mir.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm,
leftMargin=2*cm,
topMargin=2.2*cm,
bottomMargin=2*cm,
title="Lumbar Spine Recovery Plan — Iqbal Mir",
author="Orris Medical AI"
)
W, H = A4
NAVY = colors.HexColor("#1a3a5c")
BLUE = colors.HexColor("#2c6fad")
LBLUE = colors.HexColor("#ddeeff")
LGREEN = colors.HexColor("#e8f5e9")
LRED = colors.HexColor("#fdecea")
LYELL = colors.HexColor("#fffde7")
LGREY = colors.HexColor("#f5f5f5")
RED = colors.HexColor("#c0392b")
GREEN = colors.HexColor("#1b7a34")
GREY = colors.HexColor("#555555")
BLACK = colors.black
WHITE = colors.white
styles = getSampleStyleSheet()
def S(name, **kw):
base = styles[name] if name in styles else styles["Normal"]
return ParagraphStyle(name+"_custom_"+str(id(kw)), parent=base, **kw)
# ── Style definitions ────────────────────────────────────────────────────────
TITLE_S = S("Title",
fontSize=22, leading=28, textColor=NAVY, alignment=TA_CENTER,
fontName="Helvetica-Bold", spaceAfter=4)
SUB_S = S("Normal",
fontSize=11, leading=15, textColor=GREY, alignment=TA_CENTER,
fontName="Helvetica", spaceAfter=2)
DISCLAIMER_S = S("Normal",
fontSize=8.5, leading=12, textColor=RED, alignment=TA_CENTER,
fontName="Helvetica-Oblique", spaceAfter=6)
H1_S = S("Heading1",
fontSize=14, leading=18, textColor=WHITE, fontName="Helvetica-Bold",
spaceAfter=0, spaceBefore=10, leftIndent=0)
H2_S = S("Heading2",
fontSize=12, leading=16, textColor=NAVY, fontName="Helvetica-Bold",
spaceAfter=2, spaceBefore=8)
H3_S = S("Heading3",
fontSize=10.5, leading=14, textColor=BLUE, fontName="Helvetica-Bold",
spaceAfter=2, spaceBefore=5)
BODY_S = S("Normal",
fontSize=9.5, leading=14, textColor=BLACK, fontName="Helvetica",
spaceAfter=3, alignment=TA_JUSTIFY)
BULLET_S = S("Normal",
fontSize=9.5, leading=14, textColor=BLACK, fontName="Helvetica",
leftIndent=14, firstLineIndent=-10, spaceAfter=2,
bulletIndent=4)
WARN_S = S("Normal",
fontSize=9.5, leading=14, textColor=RED, fontName="Helvetica-Bold",
leftIndent=14, firstLineIndent=-10, spaceAfter=2)
SMALL_S = S("Normal",
fontSize=8, leading=11, textColor=GREY, fontName="Helvetica-Oblique",
alignment=TA_CENTER)
def h1(text):
"""Section header with blue background bar."""
tbl = Table([[Paragraph(text, H1_S)]], colWidths=[W - 4*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("ROUNDEDCORNERS", [4,4,4,4]),
]))
return tbl
def h2(text):
return Paragraph(text, H2_S)
def h3(text):
return Paragraph(text, H3_S)
def body(text):
return Paragraph(text, BODY_S)
def bullet(text, warn=False):
st = WARN_S if warn else BULLET_S
return Paragraph(f"• {text}", st)
def sp(n=4):
return Spacer(1, n)
def hr(color=BLUE, thickness=0.5):
return HRFlowable(width="100%", thickness=thickness, color=color, spaceAfter=4, spaceBefore=4)
def info_box(text, bg=LBLUE, border=BLUE):
tbl = Table([[Paragraph(text, BODY_S)]], colWidths=[W - 4*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 1, border),
("ROUNDEDCORNERS",[4,4,4,4]),
]))
return tbl
def warn_box(text):
return info_box(text, bg=LRED, border=RED)
def green_box(text):
return info_box(text, bg=LGREEN, border=GREEN)
def yellow_box(text):
return info_box(text, bg=LYELL, border=colors.HexColor("#f9a825"))
def col_table(headers, rows, col_widths=None, header_bg=NAVY, row_bgs=(WHITE, LGREY)):
if col_widths is None:
n = len(headers)
col_widths = [(W - 4*cm) / n] * n
h_style = ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=9,
textColor=WHITE, leading=12)
r_style = ParagraphStyle("td", fontName="Helvetica", fontSize=9,
textColor=BLACK, leading=12)
data = [[Paragraph(str(h), h_style) for h in headers]]
for row in rows:
data.append([Paragraph(str(c), r_style) for c in row])
tbl = Table(data, colWidths=col_widths, repeatRows=1)
style_cmds = [
("BACKGROUND", (0,0), (-1,0), header_bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#bbbbbb")),
("VALIGN", (0,0), (-1,-1), "TOP"),
]
for i in range(1, len(data)):
bg = row_bgs[i % 2]
style_cmds.append(("BACKGROUND", (0,i), (-1,i), bg))
tbl.setStyle(TableStyle(style_cmds))
return tbl
# ════════════════════════════════════════════════════════════════════════════
# BUILD CONTENT
# ════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER ──────────────────────────────────────────────────────────────────
story.append(Spacer(1, 1.5*cm))
story.append(Paragraph("LUMBAR SPINE RECOVERY PLAN", TITLE_S))
story.append(Paragraph("Personalised for Iqbal Mir", SUB_S))
story.append(Paragraph("Age: Early 20s | MRI Date: 20 May 2026 | Report Date: 2 June 2026", SUB_S))
story.append(sp(6))
story.append(hr(NAVY, 1.5))
story.append(sp(6))
story.append(Paragraph(
"Goals: NEET Preparation • Taekwondo Training • Commando Force-Level Fitness",
S("Normal", fontSize=11, leading=15, textColor=BLUE, alignment=TA_CENTER,
fontName="Helvetica-Bold")))
story.append(sp(10))
story.append(warn_box(
"⚠ IMPORTANT DISCLAIMER: This document is educational information only. "
"It does not replace examination by a qualified spine specialist. "
"A one-time consultation with an orthopaedic spine surgeon or neurosurgeon "
"is strongly recommended before beginning any structured exercise program."))
story.append(sp(8))
# ── MRI FINDINGS ──────────────────────────────────────────────────────────
story.append(h1("SECTION 1 — YOUR MRI FINDINGS (Plain Language)"))
story.append(sp(6))
story.append(body(
"MRI done at Shafiee MRI Unit, Barzula on 20 May 2026. "
"Reported by Dr. Naseer Khan MD (Radiodiagnosis), Associated Professor GMC Srinagar."))
story.append(sp(4))
findings = [
["Finding", "What It Means", "Severity"],
["Grade III-IV Disc Desiccation\nL4/L5 and L5/S1",
"Your two lowest discs have lost water content and are working less effectively as shock absorbers. Cannot be reversed but can be stabilised.",
"Moderate\n(Manageable)"],
["Loss of Lumbar Lordosis",
"Your natural inward lower-back curve is reduced. Usually caused by muscle spasm and poor posture. Reversible with physiotherapy.",
"Moderate\n(Reversible)"],
["Spondylotic Changes\nLumbar Spine",
"Early wear-and-tear changes in the discs, joints, and vertebrae. Unusual at your age. Can be halted with exercise and lifestyle.",
"Mild-Moderate"],
["L2/L3 and L3/L4\nSubtle Posterior Disc Bulges",
"Small, gentle backward bulging of the upper two lumbar discs. Word 'subtle' means minimal significance. Many people have these with zero symptoms.",
"MILD"],
["L4/L5 Posterior Disc Bulge\nThecal sac 11.1 mm\nMild nerve compression",
"Disc bulging pressing on the nerve sac. Mildly reduced from normal (12-18 mm). Nerves are touched, not severely crushed.",
"Moderate\n(Most Significant)"],
["L5/S1 Posterior Disc Bulge\nThecal sac 9.6 mm\nMild nerve compression",
"Slightly more compressed than L4/L5. The nerve roots that go to your legs, feet, and pelvic area pass here. Still mild, responds well to conservative care.",
"Moderate\n(Most Significant)"],
["Mild Facet Joint Arthropathy\nL4/L5 and L5/S1",
"Small joints at the back of the spine show mild wear. Responds well to core strengthening.",
"MILD"],
["Conus Medullaris & Spinal Cord",
"COMPLETELY NORMAL. Your spinal cord ending is healthy.",
"✓ Normal"],
["SI Joints & Paravertebral Muscles",
"Both sacroiliac joints normal. No sacroiliitis. Muscles normal.",
"✓ Normal"],
]
story.append(col_table(
findings[0], findings[1:],
col_widths=[4.5*cm, 9.5*cm, 3*cm]
))
story.append(sp(6))
story.append(green_box(
"OVERALL VERDICT: Multi-level early degenerative disc disease with mild nerve compression at L4/L5 and L5/S1. "
"This responds EXCELLENTLY to conservative management in young patients. "
"Over 90% of patients with these findings recover within 1-3 months with proper physiotherapy. "
"Surgery is NOT indicated at this stage."
))
story.append(PageBreak())
# ── TIMELINE OVERVIEW ─────────────────────────────────────────────────────
story.append(h1("SECTION 2 — COMPLETE RECOVERY TIMELINE AT A GLANCE"))
story.append(sp(6))
timeline = [
["Period", "Phase", "Main Focus"],
["20 May 2026", "MRI Done", "Diagnosis obtained"],
["21–23 May", "Pre-treatment (3 days)", "Rest, avoid rough roads, no lifting"],
["24 May (Day 1 of treatment)", "Physiotherapy Begins", "IFT started. This is Day 1 of your real recovery."],
["24 May – 30 May\nWeek 1", "Acute Protection", "IFT 3x, gentle walking, heat therapy, correct sleep position, study breaks"],
["31 May – 6 June\nWeek 2", "Early Mobilisation", "Add first exercises (pelvic tilts, glute bridge), walks increase, continue IFT"],
["7 June – 13 June\nWeek 3", "Rehabilitation Begins", "Add bird-dog, dead bug, cat-cow. Book spine specialist. Ask about traction."],
["14 June – 20 June\nWeek 4", "Subacute Phase", "Spine specialist visit. Add prone exercises. Swimming begins if available."],
["July 2026\nMonth 2", "Core Activation", "Core muscle strengthening, cycling, balance work, pain mostly managed"],
["August 2026\nMonth 3", "Stabilisation", "Core endurance, walk-jog intervals, Taekwondo stances begin"],
["September 2026\nMonth 4", "Sports Prep Phase 1", "Taekwondo poomsae, low kicks, light gym work"],
["October 2026\nMonth 5", "Sports Prep Phase 2", "Mid-height kicks, gentle jumps, progressive training"],
["November 2026\nMonth 6", "Return to Sport Phase 1", "Partner drills, high kicks, spine specialist re-review"],
["Dec 2026 – Feb 2027\nMonths 7-9", "Return to Sport Phase 2", "Light sparring, running 35-45 min, moderate gym"],
["March – May 2027\nMonths 10-12", "Full Activity", "Full Taekwondo, Commando-level conditioning, full sport clearance"],
]
story.append(col_table(
timeline[0], timeline[1:],
col_widths=[4*cm, 4.5*cm, 8.5*cm]
))
story.append(PageBreak())
# ── DAY BY DAY ─────────────────────────────────────────────────────────────
story.append(h1("SECTION 3 — DAY-BY-DAY PLAN (20 May to 30 May)"))
story.append(sp(6))
# May 20
story.append(h2("20 MAY 2026 (Wednesday) — MRI Day [Day Zero]"))
story.append(body(
"MRI completed. No treatment yet. You now have your diagnosis. "
"Rest at home. Lie flat on your back with a pillow under both knees whenever possible. "
"Avoid sitting for long periods. Avoid scooter rides on rough roads. "
"Read the MRI report carefully. Do not panic — the findings are manageable."))
story.append(sp(4))
# May 21-23
story.append(h2("21–23 MAY 2026 — Three Days Before Physiotherapy"))
story.append(body(
"You had not yet started physiotherapy. You rode the scooter on bumpy roads during this period. "
"Vibration compresses already-stressed discs, which is not ideal, but since you did not develop "
"sudden leg weakness or bladder problems, no serious extra damage was done. Recovery can still begin normally."))
story.append(sp(2))
story.append(bullet("Rest as much as possible. Lying flat is best."))
story.append(bullet("If you must sit, use a lumbar support and sit for no more than 30-40 minutes at a stretch."))
story.append(bullet("Avoid picking anything heavy off the floor."))
story.append(bullet("Sleep on your back with pillow under knees — not on your stomach."))
story.append(bullet("When getting out of bed: roll to your side first, then push up with your arms. Never sit straight up from lying flat."))
story.append(sp(4))
# May 24
story.append(h2("24 MAY 2026 (Sunday) — First Physiotherapy Day [Day 1 of Treatment]"))
story.append(info_box(
"This is the true start of your recovery. Everything is counted from this day.",
bg=LBLUE, border=BLUE))
story.append(sp(4))
story.append(bullet("IFT (Interferential Therapy) session done. This reduces inflammation around the nerves, relaxes muscle spasm, and controls pain."))
story.append(bullet("After the session, rest for 20 minutes lying flat with pillow under knees."))
story.append(bullet("In the evening, do a gentle 10-15 minute walk on flat ground. Wear the lumbar support belt."))
story.append(bullet("Apply the heat belt (medium setting) for 15-20 minutes in the morning before studying and again in the evening."))
story.append(bullet("Begin study blocks of 45 minutes with 10-minute standing breaks."))
story.append(bullet("Wear the posture correction belt during all study sessions."))
story.append(bullet("Sleep on back with pillow under knees tonight."))
story.append(bullet("DO NOT use the Magic Back Support arching device yet."))
story.append(bullet("Book a spine specialist appointment today — even if it is 2 weeks away. Do not delay this."))
story.append(sp(4))
# May 25
story.append(h2("25 MAY 2026 (Monday) — Day 2"))
story.append(bullet("Second physiotherapy session if scheduled (aim for every other day — Mon, Wed, Fri pattern)."))
story.append(bullet("Morning: 15-minute walk on flat road. Wear lumbar belt."))
story.append(bullet("Study in 45-minute blocks with 10-minute standing breaks all day."))
story.append(bullet("Afternoon: lie flat for 20-30 minutes after lunch. This decompresses the discs."))
story.append(bullet("Heat therapy: morning + evening, 15-20 minutes each time."))
story.append(bullet("Evening: 15-minute slow walk."))
story.append(bullet("No bending at the waist, no lifting, no twisting."))
story.append(sp(4))
# May 26
story.append(h2("26 MAY 2026 (Tuesday) — Day 3 (Home Exercise Day)"))
story.append(body("No physiotherapy today. Do your first home exercise session after afternoon rest."))
story.append(sp(2))
story.append(col_table(
["Exercise", "How To Do It", "Reps"],
[
["Pelvic Tilt", "Lie on back, flatten lower back into mattress, hold 5 sec, release", "10 reps"],
["Knee-to-Chest Stretch", "Lie on back, pull both knees gently to chest, hold 20-30 seconds", "3 holds"],
["Glute Bridge", "Lie on back, feet flat on floor, lift hips slowly, hold 3 sec, lower", "10 reps"],
],
col_widths=[4.5*cm, 10*cm, 2.5*cm]
))
story.append(sp(2))
story.append(warn_box("Stop immediately if any exercise causes sharp pain or new tingling in the legs."))
story.append(sp(4))
# May 27
story.append(h2("27 MAY 2026 (Wednesday) — Day 4 (Physiotherapy Day)"))
story.append(bullet("Physiotherapy session — IFT continues."))
story.append(bullet("Tell your physiotherapist about any symptoms that have changed since Day 1."))
story.append(bullet("Ask the physiotherapist to begin adding guided gentle exercises alongside IFT today."))
story.append(bullet("Morning walk: 15-20 minutes. Evening walk: 15 minutes."))
story.append(bullet("All other rules same as previous days."))
story.append(sp(4))
# May 28
story.append(h2("28 MAY 2026 (Thursday) — Day 5 (Home Exercise Day)"))
story.append(bullet("Repeat the 3 exercises from Day 3."))
story.append(bullet("Add one new exercise today: Clamshell — lie on your side, knees bent, feet together, lift the top knee like a clamshell opening. 10 reps each side."))
story.append(bullet("Evening walk: 20 minutes if feeling okay."))
story.append(sp(4))
# May 29
story.append(h2("29 MAY 2026 (Friday) — Day 6 (Physiotherapy Day)"))
story.append(bullet("Third physiotherapy session this week."))
story.append(bullet("Tell PT: 'I want to add lumbar traction in coming sessions — is this appropriate for my MRI findings?'"))
story.append(bullet("Continue same routine. Pain should be slightly less than Day 1."))
story.append(sp(4))
# May 30
story.append(h2("30 MAY 2026 (Saturday) — Day 7"))
story.append(bullet("Home exercise day. Do all 4 exercises (pelvic tilt, knee-to-chest, glute bridge, clamshell)."))
story.append(bullet("Walk: 20 minutes morning, 20 minutes evening."))
story.append(bullet("Rest well tonight. Tomorrow is your first full rest day."))
story.append(sp(4))
story.append(PageBreak())
# ── WEEK 1 SUMMARY ───────────────────────────────────────────────────────
story.append(h1("SECTION 4 — WEEK-BY-WEEK PLAN"))
story.append(sp(6))
story.append(h2("WEEK 1: 24–30 May 2026 — PROTECT & SETTLE"))
story.append(sp(3))
story.append(col_table(
["Category", "What To Do", "What To Avoid"],
[
["Physiotherapy", "3 sessions (IFT). Mon, Wed, Fri pattern.", "Missing sessions"],
["Walking", "10-20 min, flat ground, 2x daily", "Rough roads, scooter on bumps"],
["Heat Therapy", "15-20 min, 2-3x daily, medium setting", "High setting, sleeping with it on"],
["Sleep", "Back with pillow under knees, or side with pillow between knees", "Sleeping on stomach"],
["Getting out of bed", "Roll to side, push up with arms", "Sitting straight up from lying"],
["Study", "45-min blocks with 10-min standing breaks", "Sitting more than 45 min straight"],
["Equipment", "Lumbar belt during activity, posture belt during study", "Magic Back Support device"],
["Lifting", "Nothing over 3-5 kg", "Any heavy bags, gym weights"],
["Exercises", "3 gentle home exercises (see Day 3)", "Situps, crunches, leg raises"],
["Spine Specialist", "Book appointment this week", "Delaying the appointment"],
],
col_widths=[3.5*cm, 8*cm, 5.5*cm]
))
story.append(sp(4))
story.append(yellow_box(
"Expected by end of Week 1: Morning stiffness slightly less. Getting in and out of bed slightly easier. "
"Pain may still be significant — this is completely normal. Do not expect dramatic change in Week 1."
))
story.append(sp(8))
# Week 2
story.append(h2("WEEK 2: 31 May – 6 June 2026 — GENTLE MOBILISATION"))
story.append(sp(3))
story.append(bullet("Physiotherapy: 3 sessions. IFT continues. Ask PT to add guided exercises alongside IFT."))
story.append(bullet("Morning walk increases to 20-25 minutes. Evening walk 15-20 minutes."))
story.append(bullet("Add 2 new home exercises:"))
story.append(sp(2))
story.append(col_table(
["New Exercise", "How To Do It", "Reps"],
[
["Bird-Dog", "On all fours. Extend opposite arm and leg together. Hold 3 sec. Bring back. Alternate sides.", "8 each side"],
["Cat-Cow Stretch", "On all fours. Arch back up slowly (cat), then let back drop slowly (cow). Go slowly.", "10 cycles"],
],
col_widths=[4*cm, 10*cm, 3*cm]
))
story.append(sp(3))
story.append(bullet("Study blocks: try 50 minutes if sitting feels more comfortable. Keep breaks."))
story.append(bullet("Heat therapy: continue 2-3 times daily."))
story.append(bullet("Lying-down rest after lunch: still important every day."))
story.append(sp(4))
story.append(yellow_box(
"Expected by end of Week 2: Noticeable improvement over Week 1. Morning stiffness reducing. "
"Pain beginning to settle. Walking feels easier. Some pain on movement is still normal."
))
story.append(sp(8))
# Week 3
story.append(h2("WEEK 3: 7–13 June 2026 — REHABILITATION BEGINS"))
story.append(sp(3))
story.append(bullet("Physiotherapy: 3 sessions. Ask PT specifically about intermittent LUMBAR TRACTION — this gently stretches the spine and takes pressure off L4/L5 and L5/S1 discs. Very suitable for your findings."))
story.append(bullet("Ask PT about McKenzie extension exercises (press-up lying on stomach) — only do these if PT approves after assessing your pain pattern."))
story.append(bullet("Morning walk: 25-30 minutes. Evening walk: 20 minutes."))
story.append(bullet("Add 2 more home exercises:"))
story.append(sp(2))
story.append(col_table(
["New Exercise", "How To Do It", "Reps"],
[
["Prone Hip Extension", "Lie face down. Lift one straight leg slightly off the floor. Hold 3 sec. Lower. Alternate.", "10 each side"],
["Standing Wall Posture", "Stand with back against wall, heels 2 cm from wall. Hold for 2 minutes.", "2 min hold"],
],
col_widths=[4.5*cm, 9.5*cm, 3*cm]
))
story.append(sp(3))
story.append(bullet("Study blocks: try 55 minutes if comfortable."))
story.append(warn_box("Book your SPINE SPECIALIST appointment this week if not already done. Aim for this week or next week."))
story.append(sp(4))
story.append(yellow_box(
"Expected by end of Week 3: Most people notice — morning stiffness significantly reduced. "
"Walking feels much better. Sitting tolerance improving. Pain present but clearly better than Week 1."
))
story.append(sp(8))
# Week 4
story.append(h2("WEEK 4: 14–20 June 2026 — ONE MONTH MARK"))
story.append(sp(3))
story.append(bullet("Physiotherapy may reduce to 2 sessions this week if you are progressing well — your PT will advise."))
story.append(bullet("Spine specialist appointment should happen this week."))
story.append(bullet("Morning walk: 30-35 minutes. Evening walk: 25 minutes."))
story.append(bullet("Add: Stationary abdominal brace — stand normally, pull navel gently inward, breathe normally, hold 10 seconds, release. 10 reps."))
story.append(bullet("Add: Single-leg balance — stand on one leg for 10 seconds. Alternate. This trains your spine's stabilising muscles."))
story.append(bullet("If a swimming pool is available, begin swimming this week — 20 minutes easy freestyle or backstroke. Swimming is the single best exercise for disc problems."))
story.append(bullet("Study blocks: 60 minutes if sitting tolerance allows."))
story.append(sp(4))
story.append(green_box(
"YOU ARE NOW 1 MONTH INTO RECOVERY. Pain should be noticeably improved. Daily activities feel much easier. "
"Prolonged sitting may still aggravate — the study break system remains important. You are on track."
))
story.append(PageBreak())
# Month 2
story.append(h1("SECTION 5 — MONTH-BY-MONTH PLAN"))
story.append(sp(6))
story.append(h2("MONTH 2 — July 2026: CORE ACTIVATION"))
story.append(sp(3))
story.append(body(
"The acute pain phase is largely over. You are now in active rehabilitation. "
"The goal is building core muscle strength so your muscles support your spine "
"instead of relying entirely on the discs and bones."))
story.append(sp(3))
story.append(bullet("Physiotherapy: 2 sessions per week, progressive exercises."))
story.append(bullet("Home exercises: 25-30 minutes daily — all previous exercises plus new additions from PT."))
story.append(bullet("Morning walk: 35-40 minutes, can increase pace slightly."))
story.append(bullet("Swimming: 2-3 times per week if available."))
story.append(bullet("Stationary cycling (upright, not hunched): 20-25 minutes."))
story.append(bullet("Study blocks: 60 minutes with 10-minute breaks."))
story.append(bullet("Lumbar support belt: now mainly for activities and travel, not all day at home."))
story.append(sp(3))
story.append(col_table(
["New Exercise This Month", "Purpose"],
[
["Modified bodyweight squats (very shallow, 30 degrees, spine neutral)", "Functional leg and core strength"],
["Resistance band hip exercises (abduction, extension)", "Gluteal and hip stabiliser strength"],
["Balance board standing (at PT clinic)", "Spine proprioception and stability"],
["McKenzie press-up (if PT approved)", "Reduce posterior disc bulge pressure"],
],
col_widths=[9*cm, 8*cm]
))
story.append(sp(4))
story.append(yellow_box(
"Expected by end of Month 2: Pain is minimal on most days. "
"Core muscles noticeably stronger. Sitting 60 minutes comfortably. "
"Walking 40 minutes without difficulty."
))
story.append(sp(8))
# Month 3
story.append(h2("MONTH 3 — August 2026: STABILISATION & RUNNING BEGINS"))
story.append(sp(3))
story.append(bullet("Physiotherapy: 1-2 times per week for monitoring and progression."))
story.append(bullet("Running begins: walk-jog intervals. Walk 3 min, jog 1 min, repeat 5 times. Every other day on flat soft ground."))
story.append(bullet("Swimming continues."))
story.append(bullet("Begin very basic Taekwondo: STANCES ONLY (front stance, back stance, horse stance) and stepping patterns."))
story.append(warn_box("NO kicks, NO jumps, NO sparring, NO turning kicks, NO spinning techniques in Month 3."))
story.append(bullet("Study blocks: 60-70 minutes if comfortable."))
story.append(bullet("By end of Month 3 you should be largely pain-free on most days."))
story.append(sp(4))
story.append(info_box(
"CHECKPOINT — End of Month 3: Ask yourself honestly:\n"
"• Is pain mostly gone? • Can you walk 40+ minutes without pain?\n"
"• Can you sit 60 minutes comfortably? • Are your legs free of tingling?\n"
"If YES to all — proceed to Month 4. If NO — repeat Month 3 for 4 more weeks before advancing.",
bg=LBLUE, border=BLUE))
story.append(sp(8))
# Month 4
story.append(h2("MONTH 4 — September 2026: TAEKWONDO POOMSAE BEGINS"))
story.append(sp(3))
story.append(bullet("Taekwondo: poomsae (forms/patterns) with slow, controlled movements. No explosive technique yet."))
story.append(bullet("Low kicks (front kick, side kick at below-waist height) — slow technique, no power."))
story.append(bullet("Jogging: 15-20 minutes continuous."))
story.append(bullet("Light gym: bodyweight exercises, resistance bands, light dumbbells (5-8 kg maximum)."))
story.append(warn_box("No deadlifts, no heavy squats, no Olympic lifts in Month 4."))
story.append(bullet("Physiotherapy: once every 2 weeks for monitoring."))
story.append(sp(8))
# Month 5
story.append(h2("MONTH 5 — October 2026: PROGRESSIVE SPORT TRAINING"))
story.append(sp(3))
story.append(bullet("Full Taekwondo non-contact training: all poomsae, kicks up to mid-height, footwork drills."))
story.append(bullet("Jogging: 25-30 minutes."))
story.append(bullet("Light plyometrics: two-footed gentle jumps, step-ups."))
story.append(bullet("Progressive weight training with proper form."))
story.append(bullet("Magic Back Support: ask physiotherapist if appropriate. If cleared, use LOWEST arch setting only, 2-5 minutes maximum."))
story.append(sp(8))
# Month 6
story.append(h2("MONTH 6 — November 2026: RETURN TO SPORT PHASE 1"))
story.append(sp(3))
story.append(bullet("Taekwondo: partner drills (non-sparring), high kicks with controlled technique."))
story.append(bullet("Running: 30 minutes."))
story.append(bullet("Full gym training at moderate intensity."))
story.append(bullet("Nearly fully pain-free on most days."))
story.append(bullet("Re-evaluate with spine specialist — show progress, discuss clearance for full training."))
story.append(sp(8))
# Months 7-12
story.append(h2("MONTHS 7-9 — December 2026 to February 2027: FULL SPORT RETURN"))
story.append(sp(3))
story.append(bullet("Full Taekwondo including light sparring."))
story.append(bullet("Running: 35-45 minutes."))
story.append(bullet("High kicks, jumping kicks with controlled landing."))
story.append(bullet("Moderate-heavy weight training."))
story.append(bullet("Commando Force-level physical preparation begins progressively."))
story.append(sp(6))
story.append(h2("MONTHS 10-12 — March to May 2027: FULL INTENSITY"))
story.append(sp(3))
story.append(bullet("Full-intensity Taekwondo and martial arts."))
story.append(bullet("Commando-level conditioning: running, bodyweight circuits, functional strength."))
story.append(bullet("Final spine specialist clearance review."))
story.append(bullet("You are at your goal."))
story.append(PageBreak())
# ── RULES THAT NEVER CHANGE ──────────────────────────────────────────────
story.append(h1("SECTION 6 — PERMANENT RULES (Never Change Until Month 6)"))
story.append(sp(6))
story.append(col_table(
["Rule", "Why"],
[
["Always get out of bed by rolling to your side first, then push up with arms.",
"Sitting straight up creates enormous pressure on the disc bulges."],
["Never bend at the waist with straight legs to pick something up. Always squat down.",
"Forward bending under load is the most common cause of disc re-injury."],
["Never sit more than 60 minutes without a standing or walking break.",
"Prolonged sitting increases intradiscal pressure up to 1.5x compared to standing."],
["Drink 2.5 to 3 litres of water daily.",
"Your discs are 70-90% water. Hydration directly supports disc health."],
["Sleep on back (pillow under knees) or side (pillow between knees). Never on stomach.",
"Stomach sleeping forces the spine into extension and compresses the posterior discs."],
["Heat therapy morning and evening throughout recovery.",
"Relaxes muscle spasm, improves blood flow to the healing area."],
["No situps, no crunches, no straight-leg raises — ever during recovery.",
"These movements are permanently replaced by planks, bird-dog, and dead bug."],
["No lifting over 5 kg for first 3 months.",
"Loaded bending and lifting are the highest-risk activities for disc re-injury."],
],
col_widths=[8.5*cm, 8.5*cm]
))
story.append(PageBreak())
# ── EQUIPMENT GUIDE ──────────────────────────────────────────────────────
story.append(h1("SECTION 7 — YOUR EQUIPMENT GUIDE"))
story.append(sp(6))
story.append(col_table(
["Equipment", "Phase 1 (Weeks 1-8)", "Phase 2 (Months 2-4)", "Phase 3 (Month 4+)"],
[
["Heat Therapy Belt",
"2-3x daily, 15-20 min. Medium setting only. Never sleep with it on.",
"Morning + evening.",
"As needed for soreness."],
["Lumbar Support Belt",
"Wear during ALL activities outside the house. Remove when lying down.",
"During exercise and travel only.",
"Heavy activity only."],
["Posture Correction Belt",
"During all study sessions (2-3 hr on, 1 hr off).",
"During study sessions.",
"Phase out gradually as posture becomes natural."],
["Magic Back Support\n(Arching Device)",
"DO NOT USE. Forced hyperextension risks worsening nerve compression.",
"Ask PT first. Lowest setting only, 2-5 min max.",
"Lowest arch only. Stop if any leg pain."],
],
col_widths=[3.5*cm, 4.5*cm, 4.5*cm, 4.5*cm]
))
story.append(PageBreak())
# ── DIET ─────────────────────────────────────────────────────────────────
story.append(h1("SECTION 8 — DIET & NUTRITION FOR RECOVERY"))
story.append(sp(6))
story.append(col_table(
["Eat More Of", "Why"],
[
["Turmeric with black pepper (haldi)", "Powerful anti-inflammatory. Reduces nerve swelling."],
["Walnuts, flaxseeds, fish (salmon, sardines)", "Omega-3 fatty acids reduce disc inflammation."],
["Milk, curd, paneer, ragi, sesame seeds", "Calcium for vertebral bone strength."],
["Eggs, dal, paneer, chicken, legumes", "Protein for muscle and tissue repair."],
["Spinach, nuts, seeds, dark chocolate", "Magnesium for muscle relaxation and nerve function."],
["Citrus fruits (amla, orange, lemon)", "Vitamin C supports collagen synthesis in disc annulus."],
["2.5 to 3 litres of water daily", "Discs are 70-90% water. Hydration is disc treatment."],
["Sunlight exposure 20 min daily + Vitamin D supplement", "Vitamin D deficiency is extremely common in J&K and directly linked to disc and bone problems in young people. Get blood test."],
],
col_widths=[7*cm, 10*cm]
))
story.append(sp(4))
story.append(col_table(
["Reduce or Avoid", "Why"],
[
["Processed food, junk food, chips, biscuits", "Pro-inflammatory. Accelerates disc degeneration."],
["Excess sugar and sweets", "Increases systemic inflammation."],
["Carbonated drinks (cola, soda)", "Phosphoric acid depletes calcium from bones."],
["Smoking (if applicable)", "Dramatically accelerates disc degeneration. Stop immediately if you smoke."],
["Excess salt", "Associated with disc degeneration in research."],
],
col_widths=[7*cm, 10*cm]
))
story.append(PageBreak())
# ── STUDY SETUP ──────────────────────────────────────────────────────────
story.append(h1("SECTION 9 — NEET STUDY SETUP & ERGONOMICS"))
story.append(sp(6))
story.append(h2("Chair and Desk Setup"))
story.append(sp(3))
story.append(col_table(
["Item", "Correct Setup"],
[
["Chair height", "Feet flat on floor. Knees at 90-110 degrees. Hips slightly higher than knees."],
["Seat depth", "2-3 finger widths between edge of seat and back of your knees."],
["Backrest angle", "Reclined to 100-110 degrees (not straight 90). This reduces disc pressure."],
["Lumbar support", "Small rolled towel OR lumbar roll placed at the natural curve of your lower back."],
["Armrests", "Set at elbow height so shoulders are relaxed, not raised."],
["Desk height", "Elbows bent at 90 degrees when hands rest on desk."],
["Screen/book", "Raise laptop or book so you are not looking down. Top of screen at eye level."],
],
col_widths=[4*cm, 13*cm]
))
story.append(sp(6))
story.append(h2("Daily Study Schedule Pattern"))
story.append(sp(3))
story.append(col_table(
["Block", "Study", "Break Activity"],
[
["Block 1", "45-60 minutes", "Stand up, walk around room 5-10 minutes"],
["Block 2", "45-60 minutes", "Stand, gentle hip shifts, drink water"],
["Block 3", "45-60 minutes", "Walk + heat therapy 15 min lying flat"],
["Block 4", "45-60 minutes", "Stand and walk"],
["Block 5", "45-60 minutes", "Lunch + mandatory 20-30 min lying flat"],
["Block 6-11", "45-60 minutes each", "Stand/walk break after every block"],
["Total daily", "8.5-9.5 hours", "Sustainable, spine-safe, productive"],
],
col_widths=[3*cm, 5*cm, 9*cm]
))
story.append(PageBreak())
# ── SLEEPING ─────────────────────────────────────────────────────────────
story.append(h1("SECTION 10 — SLEEPING POSITION & MATTRESS"))
story.append(sp(6))
story.append(col_table(
["Position", "Recommendation", "Reason"],
[
["On your back", "BEST — pillow under both knees",
"Reduces lumbar lordosis. Takes maximum pressure off disc bulges. Gold standard for your MRI findings."],
["On your side", "GOOD — pillow between both knees",
"Keeps spine aligned. Prevents hip rotation which twists the lumbar spine."],
["On your stomach (prone)", "AVOID COMPLETELY",
"Forces lumbar spine into extension. Compresses posterior disc structures and facet joints at L4/L5 and L5/S1."],
],
col_widths=[3.5*cm, 4.5*cm, 9*cm]
))
story.append(sp(5))
story.append(info_box(
"MATTRESS: Medium-firm orthopaedic mattress is ideal. If you cannot change your mattress immediately, "
"place a wooden board under it to firm it up, or sleep on a firm mat on the floor during the acute phase. "
"Too soft = spine sags. Too hard = no pressure relief on hips and shoulders.",
bg=LBLUE, border=BLUE))
story.append(PageBreak())
# ── WARNING SIGNS ─────────────────────────────────────────────────────────
story.append(h1("SECTION 11 — WARNING SIGNS (Read This Carefully)"))
story.append(sp(6))
story.append(warn_box(
"GO TO AN EMERGENCY HOSPITAL IMMEDIATELY — without waiting — if you develop ANY of the following:"))
story.append(sp(4))
story.append(col_table(
["Emergency Sign", "What It Could Mean"],
[
["You cannot pass urine OR suddenly cannot control urine or bowel",
"Cauda Equina Syndrome — SURGICAL EMERGENCY. Your L5/S1 compression is at the exact level that can cause this if it worsens suddenly. Every hour of delay risks permanent damage."],
["Sudden severe weakness in BOTH legs — cannot stand or walk",
"Bilateral nerve compression — Surgical Emergency."],
["Numbness in inner thighs, groin, or the area between your legs ('saddle area')",
"Cauda Equina Syndrome — Surgical Emergency."],
["Pain shoots severely down BOTH legs at the same time",
"Central disc compression — requires urgent evaluation."],
],
col_widths=[6*cm, 11*cm]
))
story.append(sp(6))
story.append(info_box(
"See a doctor within 2-3 days (non-emergency) if:\n"
"• Sudden severe increase in back pain with new leg pain\n"
"• New tingling or numbness in feet or toes not previously present\n"
"• No improvement or worsening after 6 weeks of physiotherapy\n"
"• Fever with back pain (possible infection)\n"
"• Pain wakes you from sleep repeatedly",
bg=LYELL, border=colors.HexColor("#f9a825")))
story.append(PageBreak())
# ── RECOVERY PROGNOSIS ──────────────────────────────────────────────────
story.append(h1("SECTION 12 — REALISTIC PROGNOSIS"))
story.append(sp(6))
story.append(col_table(
["Goal", "Realistic Timeline", "Probability"],
[
["Significant pain reduction", "3-6 weeks", "95%"],
["Pain-free most days", "2-4 months", "85-90%"],
["Return to normal daily activities", "4-6 weeks", "95%"],
["Return to Taekwondo (basic, non-contact)", "4-6 months", "90%"],
["Return to full-intensity martial arts", "9-12 months", "80-85%"],
["Commando Force-level training readiness", "12-18 months", "75-80%"],
],
col_widths=[6*cm, 5*cm, 6*cm]
))
story.append(sp(5))
story.append(col_table(
["What CAN Recover (High Probability)", "What CANNOT Be Reversed"],
[
["Pain — very likely to become minimal or absent",
"Grade III-IV disc desiccation — the disc cannot re-hydrate. Permanent, but manageable."],
["Functional ability — very likely to return fully",
"Spondylotic changes — cannot be reversed, but can be halted."],
["Nerve compression symptoms — highly likely to improve",
"Disc bulges — may reduce in size but rarely disappear completely on MRI."],
["Loss of lumbar lordosis — reversible with physiotherapy", ""],
],
col_widths=[9*cm, 9*cm]
))
story.append(sp(5))
story.append(green_box(
"REALISTIC OVERALL RECOVERY: 85-90% functional recovery is achievable with consistent effort over 12 months. "
"Many athletes with similar or worse MRI findings compete at very high levels. "
"Your age (early 20s) is your single biggest advantage — healing capacity at this age is exceptional. "
"The MRI shows structural findings. It does not define your functional outcome. "
"Evidence: 81.5% of athletes with lumbar disc herniation returned to full sport with conservative management "
"alone. Mean time to return: 4.11 months. (Sedrak et al., Sports Health, 2021)"
))
story.append(sp(8))
# Footer note
story.append(hr(GREY, 0.5))
story.append(Paragraph(
"Sources: Miller's Review of Orthopaedics 9th Ed • Campbell's Operative Orthopaedics 15th Ed 2026 • "
"Sedrak et al., Sports Health 2021 (PMID 33563131) — meta-analysis of 1,107 athletes with lumbar disc herniation • "
"Hsu et al., JAAOS 2025 (PMID 39888643) • Kazemi M, JCCA 1999 (Taekwondo athlete, L5/S1 disc herniation, full return to sport at 3-6 months)",
SMALL_S))
story.append(sp(2))
story.append(Paragraph(
"This document is for educational purposes only. Prepared by Orris Medical AI — June 2, 2026.",
SMALL_S))
# ── BUILD ────────────────────────────────────────────────────────────────
doc.build(story)
print("PDF created:", OUTPUT)