Plantar Fasciitis management with drugs dose

Reading File
Finding Sources
Searching PubMed

"plantar fasciitis"[MeSH Terms] AND treatment

Reading File
Reading File
Reading File
Searching PubMed

"plantar fasciitis" AND treatment

Reading File
Finding Sources
Reading File
Reading File
Reading File
I now have comprehensive information from multiple authoritative textbooks. Let me compile the full answer.

Plantar Fasciitis: Management with Drug Doses

Overview

Plantar fasciitis is the most common cause of plantar heel pain in adults, affecting peak ages 40-70 years. It results from microtears at the origin of the plantar fascia at the medial calcaneal tuberosity, with an associated injury-repair cycle. Over 90% of cases resolve within 12 months regardless of specific treatment. Surgery is needed in fewer than 5% of patients.
Key risk factors: BMI >30 kg/m², obesity, pes planus/cavus, limited ankle dorsiflexion, prolonged standing, tight gastrocnemius-soleus complex, hard running surfaces.

Step-by-Step Management

Step 1 - Conservative (First-line, 0-6 weeks)

InterventionDetails
Rest & activity modificationEliminate precipitating activities, avoid barefoot walking on hard surfaces
Ice/heat massageIce packs 15-20 min, 3-4x/day
StretchingPlantar fascia-specific stretching is the key intervention - dorsiflex ankle, dorsiflex toes with hand, palpate plantar tension. Achilles tendon (heel cord) stretching also critical
Heel cushioned inserts / orthoticsMedial arch support insoles
Shoe modificationAvoid flat shoes, worn footwear

Step 2 - Pharmacological Management

A. NSAIDs (Non-Steroidal Anti-Inflammatory Drugs)

NSAIDs are used primarily for their analgesic effect (chronic plantar fasciitis is likely not an active inflammatory process). A short course is appropriate for patients without contraindications.
DrugDoseFrequencyDuration
Ibuprofen400-800 mg3 times/day with food2-4 weeks
Naproxen250-500 mgTwice daily2-4 weeks
Diclofenac50 mg2-3 times/day2-4 weeks
Celecoxib (COX-2 inhibitor, preferred if GI risk)200 mgOnce or twice daily2-4 weeks
Note: NSAIDs should be used short-term only. Avoid in patients with peptic ulcer disease, renal impairment, or cardiovascular disease.

B. Local Corticosteroid Injection (Short-term benefit - most evidence)

Indicated when conservative measures fail after 4-6 weeks of initial treatment.
Cochrane evidence: Steroid injections provide significant improvement at 1 month, but NOT at 3 or 6 months vs. controls. Risk of plantar fascia rupture (~10%) and fat pad atrophy means caution is required. The number of injections associated with rupture has been found to be 2.67 - so no more than 2 injections total is prudent.
AgentDoseTechnique
Methylprednisolone acetate10-20 mgMixed with 1 mL lidocaine 1%; 22-24 gauge, 2.5 cm needle at medial heel at point of maximum tenderness
Triamcinolone acetonide20-40 mgMixed with 1 mL lidocaine 1%; same approach
Dexamethasone4-8 mgUsed in some protocols
Injection technique (Roberts & Hedges): Insert a 22-24 gauge, 2.5 cm needle at the medial aspect of the heel at maximal tenderness point. Enter at 90 degrees, slide into the aponeurosis attachment to the os calcis. Inject 1 mL lidocaine + 10-20 mg methylprednisolone. Avoid the plantar surface injection to prevent fat pad atrophy.
Local anesthetic only (for diagnostic/temporary relief):
  • Lidocaine 1%: 1-2 mL
  • Bupivacaine 0.5%: 1-2 mL (longer duration)

C. Platelet-Rich Plasma (PRP) Injection

Emerging evidence shows PRP is superior to corticosteroids for longer-lasting relief (Campbell's Operative Orthopaedics 2026):
  • Corticosteroids provide faster initial relief
  • PRP provides greater and longer pain relief, with improvement persisting at 2 years
  • Typical protocol: 3-5 mL autologous PRP, 1-3 injections

D. Botulinum Toxin Injection

Used in some refractory cases:
  • Botulinum toxin A: 50-100 units injected into the plantar fascia/intrinsic muscles
  • Provides pain relief by reducing muscle spasm and neurogenic inflammation

E. Other Injectable Agents (Limited evidence)

AgentNotes
Autologous whole bloodIntralesional injection - some RCT evidence
Micronized dHACM (dehydrated human amnion/chorion membrane)Emerging data
ProlotherapyDextrose injections - under investigation

Step 3 - Physical & Adjunct Therapy (Ongoing alongside medications)

  • Night splints: Hold ankle in neutral/slight dorsiflexion overnight - maintains plantar fascia stretch
  • Physical therapy: Eccentric exercises, soft tissue mobilization
  • Walking boot/cast: For severe cases - unloads and rests the plantar fascia
  • Taping/strapping: Low-dye taping reduces plantar fascia load

Step 4 - Extracorporeal Shock Wave Therapy (ESWT)

For chronic plantar fasciitis (>6 months):
  • High-energy ECSWT has shown efficacy (level 1 evidence shows no difference vs. plantar fascia-specific stretching as initial treatment)
  • In a meta-analysis, ECSWT is supported for chronic plantar fasciitis
  • 74% of AOFAS members preferred ECSWT or surgery for symptoms persisting >6 months

Step 5 - Surgical (Last resort, <5% of patients)

Indicated only after 6-12 months of failed conservative treatment.
  • Limited plantar fascia release (medial half only) - complete release risks arch collapse
  • Gastrocnemius recession - especially when ankle dorsiflexion contracture is the main driver
  • Baxter nerve decompression - if first branch of lateral plantar nerve entrapment is present

Summary Algorithm

Plantar Fasciitis Diagnosed
        ↓
Step 1: Stretching + Ice + Activity modification + Orthotics (4-6 weeks)
        ↓ (if not improved)
Step 2: NSAIDs (ibuprofen 400-800 mg TID or naproxen 250-500 mg BID) + Night splints
        ↓ (if not improved after 6-8 weeks)
Step 3: Corticosteroid injection (methylprednisolone 20 mg + lidocaine 1 mL)
        ↓ (if not improved, or for longer-lasting effect)
Step 4: PRP injection (preferred over repeat steroid) / ESWT (if >6 months)
        ↓ (if >6-12 months, failed all conservative)
Step 5: Surgery (limited fascial release ± gastrocnemius recession)

Contraindications & Cautions

  • Corticosteroid injections: Maximum ~2 injections total (rupture risk increases after 2.67 injections); avoid in diabetes, vasculopathy; do NOT inject into Achilles region (rupture risk)
  • NSAIDs: Avoid with GI ulcers, renal impairment, anticoagulants, severe cardiovascular disease
  • Complete fascial release: Can destabilize the longitudinal arch - only medial half should be released

Sources:
  • Miller's Review of Orthopaedics 9th Ed - Nonoperative & Operative Treatment
  • Campbell's Operative Orthopaedics 15th Ed 2026 - Nonoperative Treatment
  • Harrison's Principles of Internal Medicine 22E (2025) - Plantar Fasciitis
  • Tintinalli's Emergency Medicine - Plantar Fasciitis
  • Roberts and Hedges' Clinical Procedures in Emergency Medicine - Injection Technique
  • Textbook of Family Medicine 9e - Treatment Protocols
  • Recent evidence: Charles R et al. PMID 37662911 - Shockwave therapy meta-analysis (2023); Koc TA Jr et al. PMID 38037331 - Clinical Practice Guidelines Revision 2023

Create a patient handout on home stretching protocols and activity modification

Asking for Preferences
Reading File
Running Command

ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace not found"

Running Command

mkdir -p /home/daytona/workspace/plantar-fasciitis-handout && echo "done"

Writing File

~/plantar-fasciitis-handout/generate_handout.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import Flowable
from reportlab.graphics.shapes import Drawing, Rect, String, Circle, Line
from reportlab.graphics import renderPDF

# ── Colour palette ───────────────────────────────────────────────────────────
TEAL       = colors.HexColor("#00838F")
TEAL_LIGHT = colors.HexColor("#E0F7FA")
TEAL_MED   = colors.HexColor("#B2EBF2")
ORANGE     = colors.HexColor("#EF6C00")
ORANGE_LT  = colors.HexColor("#FFF3E0")
GREEN      = colors.HexColor("#2E7D32")
GREEN_LT   = colors.HexColor("#E8F5E9")
RED_LT     = colors.HexColor("#FFEBEE")
RED        = colors.HexColor("#C62828")
GREY_DARK  = colors.HexColor("#37474F")
GREY_MED   = colors.HexColor("#78909C")
GREY_LIGHT = colors.HexColor("#ECEFF1")
WHITE      = colors.white

PAGE_W, PAGE_H = A4
MARGIN = 1.8 * cm

# ── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

def style(name, **kw):
    return ParagraphStyle(name, **kw)

S_TITLE = style("S_TITLE",
    fontName="Helvetica-Bold", fontSize=22, leading=28,
    textColor=WHITE, alignment=TA_CENTER)

S_SUBTITLE = style("S_SUBTITLE",
    fontName="Helvetica", fontSize=11, leading=15,
    textColor=TEAL_LIGHT, alignment=TA_CENTER)

S_SECTION = style("S_SECTION",
    fontName="Helvetica-Bold", fontSize=13, leading=17,
    textColor=WHITE, spaceBefore=4, spaceAfter=4)

S_BODY = style("S_BODY",
    fontName="Helvetica", fontSize=10, leading=15,
    textColor=GREY_DARK, spaceAfter=4)

S_BODY_BOLD = style("S_BODY_BOLD",
    fontName="Helvetica-Bold", fontSize=10, leading=15,
    textColor=GREY_DARK)

S_SMALL = style("S_SMALL",
    fontName="Helvetica", fontSize=8.5, leading=12,
    textColor=GREY_MED)

S_BULLET = style("S_BULLET",
    fontName="Helvetica", fontSize=10, leading=15,
    textColor=GREY_DARK, leftIndent=14, bulletIndent=4,
    spaceAfter=3)

S_STEP_NUM = style("S_STEP_NUM",
    fontName="Helvetica-Bold", fontSize=18, leading=22,
    textColor=TEAL, alignment=TA_CENTER)

S_STEP_TITLE = style("S_STEP_TITLE",
    fontName="Helvetica-Bold", fontSize=11, leading=14,
    textColor=TEAL)

S_STEP_BODY = style("S_STEP_BODY",
    fontName="Helvetica", fontSize=9.5, leading=14,
    textColor=GREY_DARK)

S_WARNING_TITLE = style("S_WARNING_TITLE",
    fontName="Helvetica-Bold", fontSize=11, leading=14,
    textColor=RED)

S_WARNING_BODY = style("S_WARNING_BODY",
    fontName="Helvetica", fontSize=9.5, leading=13,
    textColor=GREY_DARK)

S_TIP_BODY = style("S_TIP_BODY",
    fontName="Helvetica", fontSize=9.5, leading=13,
    textColor=GREEN)

S_FOOTER = style("S_FOOTER",
    fontName="Helvetica", fontSize=7.5, leading=10,
    textColor=GREY_MED, alignment=TA_CENTER)

# ── Helper Flowables ─────────────────────────────────────────────────────────

class SectionHeader(Flowable):
    """Coloured banner with white title text."""
    def __init__(self, text, width, color=TEAL):
        super().__init__()
        self.text = text
        self._width = width
        self.color = color
        self.height = 28

    def draw(self):
        c = self.canv
        c.setFillColor(self.color)
        c.roundRect(0, 0, self._width, self.height, 6, fill=1, stroke=0)
        c.setFillColor(WHITE)
        c.setFont("Helvetica-Bold", 12)
        c.drawString(10, 8, self.text)

    def wrap(self, *args):
        return self._width, self.height


class StepBox(Flowable):
    """Numbered exercise step card."""
    def __init__(self, number, title, instructions, tip, width):
        super().__init__()
        self.number = number
        self.title = title
        self.instructions = instructions
        self.tip = tip
        self._width = width
        self.height = 100  # estimated; will reflow

    def wrap(self, avail_w, avail_h):
        return self._width, self.height

    def draw(self):
        c = self.canv
        w = self._width
        h = self.height

        # Card background
        c.setFillColor(GREY_LIGHT)
        c.roundRect(0, 0, w, h, 8, fill=1, stroke=0)

        # Left accent bar
        c.setFillColor(TEAL)
        c.roundRect(0, 0, 38, h, 8, fill=1, stroke=0)
        # cover right side of left bar (to make it flat on right)
        c.setFillColor(TEAL)
        c.rect(30, 0, 8, h, fill=1, stroke=0)

        # Number
        c.setFillColor(WHITE)
        c.setFont("Helvetica-Bold", 22)
        c.drawCentredString(19, h/2 - 8, str(self.number))

        # Title
        c.setFillColor(TEAL)
        c.setFont("Helvetica-Bold", 11)
        c.drawString(48, h - 20, self.title)

        # Instructions lines
        c.setFillColor(GREY_DARK)
        c.setFont("Helvetica", 9.5)
        y = h - 35
        for line in self.instructions:
            c.drawString(48, y, line)
            y -= 14

        # Tip
        if self.tip:
            c.setFillColor(TEAL_LIGHT)
            c.roundRect(44, 6, w - 50, 20, 4, fill=1, stroke=0)
            c.setFillColor(TEAL)
            c.setFont("Helvetica-Bold", 8.5)
            c.drawString(50, 12, "TIP: ")
            c.setFont("Helvetica", 8.5)
            c.drawString(72, 12, self.tip)


# ── Build document ────────────────────────────────────────────────────────────

OUT = "/home/daytona/workspace/plantar-fasciitis-handout/Plantar_Fasciitis_Home_Program.pdf"

doc = SimpleDocTemplate(
    OUT,
    pagesize=A4,
    leftMargin=MARGIN, rightMargin=MARGIN,
    topMargin=MARGIN, bottomMargin=MARGIN,
    title="Plantar Fasciitis Home Exercise & Activity Program",
    author="Orris Medical Assistant"
)

CONTENT_W = PAGE_W - 2 * MARGIN
story = []

# ════════════════════════════════════════════════════════
#  HEADER BANNER
# ════════════════════════════════════════════════════════
header_table = Table(
    [[Paragraph("Plantar Fasciitis", S_TITLE),
      Paragraph("Home Exercise &amp; Activity Program", S_SUBTITLE)]],
    colWidths=[CONTENT_W],
)
# Build header as a single-row coloured block
class HeaderBanner(Flowable):
    def __init__(self, width):
        super().__init__()
        self._width = width
        self.height = 80

    def wrap(self, *a):
        return self._width, self.height

    def draw(self):
        c = self.canv
        w, h = self._width, self.height
        # Gradient-like background using two rects
        c.setFillColor(TEAL)
        c.roundRect(0, 0, w, h, 10, fill=1, stroke=0)
        c.setFillColor(colors.HexColor("#006064"))
        c.rect(w*0.55, 0, w*0.45, h, fill=1, stroke=0)
        c.roundRect(0, 0, w, h, 10, fill=0, stroke=0)

        # Decorative circles
        c.setFillColor(colors.HexColor("#00ACC1"), alpha=0.25)
        c.circle(w - 40, h - 10, 55, fill=1, stroke=0)
        c.setFillColor(colors.HexColor("#00ACC1"), alpha=0.15)
        c.circle(w - 10, 5, 70, fill=1, stroke=0)

        # Main title
        c.setFillColor(WHITE)
        c.setFont("Helvetica-Bold", 22)
        c.drawString(18, h - 34, "Plantar Fasciitis")

        # Subtitle
        c.setFont("Helvetica", 12)
        c.setFillColor(TEAL_LIGHT)
        c.drawString(18, h - 52, "Home Exercise & Activity Program")

        # Tag line
        c.setFont("Helvetica-Oblique", 9)
        c.setFillColor(TEAL_MED)
        c.drawString(18, h - 66, "Follow these steps every day to ease your heel pain and help your foot heal.")

story.append(HeaderBanner(CONTENT_W))
story.append(Spacer(1, 10))

# ── What is Plantar Fasciitis box ────────────────────────────────────────────
what_data = [[
    Paragraph("<b>What is Plantar Fasciitis?</b>", style("wh",
        fontName="Helvetica-Bold", fontSize=11, textColor=TEAL, leading=14)),
    Paragraph(
        "The plantar fascia is a thick band of tissue that runs along the bottom of your foot, "
        "connecting your heel bone to your toes. When it gets overstretched or irritated, "
        "it causes <b>sharp heel pain</b> — especially with your <b>first steps in the morning</b> "
        "or after sitting for a long time. The good news: <b>more than 90% of people get better "
        "with simple home treatment.</b>",
        style("wh2", fontName="Helvetica", fontSize=9.5, leading=14, textColor=GREY_DARK))
]]
what_tbl = Table(what_data, colWidths=[CONTENT_W])
what_tbl.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), TEAL_LIGHT),
    ("ROUNDEDCORNERS", (0,0), (-1,-1), [6,6,6,6]),
    ("BOX", (0,0), (-1,-1), 1.5, TEAL),
    ("TOPPADDING", (0,0), (-1,-1), 10),
    ("BOTTOMPADDING", (0,0), (-1,-1), 10),
    ("LEFTPADDING", (0,0), (-1,-1), 12),
    ("RIGHTPADDING", (0,0), (-1,-1), 12),
    ("SPAN", (0,0), (-1,-1)),
]))
story.append(what_tbl)
story.append(Spacer(1, 12))

# ════════════════════════════════════════════════════════
#  SECTION 1 – STRETCHING EXERCISES
# ════════════════════════════════════════════════════════
story.append(SectionHeader("  PART 1 — STRETCHING EXERCISES", CONTENT_W))
story.append(Spacer(1, 8))
story.append(Paragraph(
    "Do these exercises <b>every day</b>, ideally <b>before your first step in the morning</b> "
    "and again before standing after any period of rest.",
    style("intro", fontName="Helvetica-Oblique", fontSize=9.5, leading=14, textColor=GREY_DARK)))
story.append(Spacer(1, 8))

# Exercise cards using Table layout (simpler than custom Flowable for text wrapping)
def exercise_card(number, title, steps, tip=None, bg=GREY_LIGHT, accent=TEAL):
    col1_content = [
        Paragraph(str(number), style(f"num{number}",
            fontName="Helvetica-Bold", fontSize=24, textColor=WHITE,
            alignment=TA_CENTER, leading=28))
    ]
    step_paras = [Paragraph(f"<b>{title}</b>", style(f"et{number}",
        fontName="Helvetica-Bold", fontSize=11, textColor=accent, leading=15))]
    for s in steps:
        step_paras.append(Paragraph(f"• {s}", style(f"es{number}",
            fontName="Helvetica", fontSize=9.5, leading=14, textColor=GREY_DARK,
            leftIndent=8)))
    if tip:
        step_paras.append(Spacer(1, 4))
        step_paras.append(Paragraph(f"<font color='#00838F'><b>Tip:</b></font> {tip}",
            style(f"tip{number}", fontName="Helvetica", fontSize=8.5, leading=12,
                  textColor=GREY_DARK)))

    tbl = Table(
        [[col1_content, step_paras]],
        colWidths=[42, CONTENT_W - 42]
    )
    tbl.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (0,0), accent),
        ("BACKGROUND", (1,0), (1,0), bg),
        ("VALIGN", (0,0), (-1,-1), "TOP"),
        ("TOPPADDING", (0,0), (0,0), 14),
        ("TOPPADDING", (1,0), (1,0), 10),
        ("BOTTOMPADDING", (0,0), (-1,-1), 10),
        ("LEFTPADDING", (0,0), (0,0), 5),
        ("RIGHTPADDING", (1,0), (1,0), 10),
        ("LEFTPADDING", (1,0), (1,0), 10),
        ("ROUNDEDCORNERS", (0,0), (-1,-1), [6,6,6,6]),
        ("BOX", (0,0), (-1,-1), 0, WHITE),
    ]))
    return tbl

ex1 = exercise_card(
    1,
    "Plantar Fascia Stretch (Most Important!)",
    [
        "Sit in a chair. Cross the sore foot over your other knee.",
        "Hold your toes and gently pull them back toward your shin.",
        "You should feel a stretch along the bottom of your foot.",
        "Hold for 30 seconds. Repeat 3 times.",
        "Do this BEFORE taking your first step in the morning."
    ],
    tip="Do this while still in bed — keep a towel or belt on your bedside table."
)

ex2 = exercise_card(
    2,
    "Calf / Achilles Tendon Stretch (Standing)",
    [
        "Stand facing a wall. Place both hands on the wall.",
        "Step your sore foot back about 60 cm (2 feet).",
        "Keep the back knee straight and heel flat on the floor.",
        "Lean forward until you feel a stretch in your calf.",
        "Hold 30 seconds. Repeat 3 times. Do both legs."
    ],
    tip="Keep your back heel pressed firmly to the ground the whole time.",
    bg=TEAL_LIGHT, accent=colors.HexColor("#00695C")
)

ex3 = exercise_card(
    3,
    "Bent-Knee Calf Stretch (Soleus Stretch)",
    [
        "Same position as Exercise 2, but now slightly bend the back knee.",
        "You will feel the stretch lower down, just above the heel.",
        "Hold 30 seconds. Repeat 3 times on each side.",
        "This targets a different calf muscle (soleus) — both stretches are needed."
    ],
    tip="Combine this with Exercise 2 for the best results."
)

ex4 = exercise_card(
    4,
    "Towel / Stair Calf Stretch",
    [
        "Stand on the edge of a step with heels hanging off.",
        "Slowly lower both heels below the step level.",
        "Hold 15-30 seconds, then rise back up.",
        "Repeat 10-15 times, twice a day.",
        "Hold a railing for balance and safety."
    ],
    tip="Start with both feet, then progress to one foot as strength improves.",
    bg=ORANGE_LT, accent=ORANGE
)

ex5 = exercise_card(
    5,
    "Frozen Bottle / Ball Roll (Massage + Stretch)",
    [
        "Freeze a water bottle or use a tennis/golf ball.",
        "Place it on the floor. Roll your foot over it slowly.",
        "Apply gentle downward pressure along the arch.",
        "Do this for 2-3 minutes, 2 times per day.",
        "Use a frozen bottle for extra anti-inflammatory benefit."
    ],
    tip="Do this seated so you control the pressure. Avoid if it causes sharp pain.",
    bg=GREEN_LT, accent=GREEN
)

story.append(KeepTogether([ex1, Spacer(1, 6)]))
story.append(KeepTogether([ex2, Spacer(1, 6)]))
story.append(KeepTogether([ex3, Spacer(1, 6)]))
story.append(KeepTogether([ex4, Spacer(1, 6)]))
story.append(KeepTogether([ex5, Spacer(1, 10)]))

# ── Daily schedule box ───────────────────────────────────────────────────────
sched_title = Paragraph("  Suggested Daily Schedule", style("stit",
    fontName="Helvetica-Bold", fontSize=11, textColor=TEAL))

sched_rows = [
    [Paragraph("<b>Time</b>", S_BODY_BOLD), Paragraph("<b>What to Do</b>", S_BODY_BOLD)],
    [Paragraph("Before getting out of bed", S_BODY), Paragraph("Exercise 1 (Plantar Fascia Stretch) — 3 reps", S_BODY)],
    [Paragraph("Morning (after rising)", S_BODY), Paragraph("Exercises 2 + 3 (Calf Stretches) — 3 reps each", S_BODY)],
    [Paragraph("Mid-day / after sitting", S_BODY), Paragraph("Exercise 1 again before standing", S_BODY)],
    [Paragraph("Afternoon", S_BODY), Paragraph("Exercise 5 (Bottle Roll) — 2-3 min", S_BODY)],
    [Paragraph("Evening", S_BODY), Paragraph("Exercises 2 + 4 (Stair Stretch) — 3 reps each", S_BODY)],
]
sched_tbl = Table(sched_rows, colWidths=[CONTENT_W * 0.38, CONTENT_W * 0.62])
sched_tbl.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), TEAL),
    ("TEXTCOLOR", (0,0), (-1,0), WHITE),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, TEAL_LIGHT]),
    ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#B0BEC5")),
    ("TOPPADDING", (0,0), (-1,-1), 6),
    ("BOTTOMPADDING", (0,0), (-1,-1), 6),
    ("LEFTPADDING", (0,0), (-1,-1), 8),
    ("ROUNDEDCORNERS", (0,0), (-1,-1), [4,4,4,4]),
]))

story.append(KeepTogether([sched_title, Spacer(1,5), sched_tbl]))
story.append(Spacer(1, 14))

# ════════════════════════════════════════════════════════
#  SECTION 2 – ACTIVITY MODIFICATION
# ════════════════════════════════════════════════════════
story.append(SectionHeader("  PART 2 — ACTIVITY MODIFICATION", CONTENT_W))
story.append(Spacer(1, 8))

# Two-column DO / AVOID table
do_items = [
    "Wear supportive shoes <b>at all times</b> — even at home",
    "Choose shoes with good arch support and cushioned heels",
    "Use <b>gel heel cups or orthotic insoles</b> in your shoes",
    "Walk on <b>soft surfaces</b> when possible (grass, carpet)",
    "Take <b>short, frequent walks</b> instead of long sessions",
    "Apply <b>ice to your heel</b> for 10-15 min after activity",
    "Elevate your foot when resting to reduce swelling",
    "Maintain a <b>healthy body weight</b> to reduce heel load",
    "Wear a <b>night splint</b> if your doctor recommends one",
]
avoid_items = [
    "<b>Barefoot walking</b> on hard floors or outside",
    "Old, worn-out shoes with no arch support",
    "Flat shoes (flip-flops, ballet flats, slippers)",
    "Standing or walking on <b>hard surfaces for long periods</b>",
    "Sudden increases in walking, running, or exercise",
    "<b>High-impact activities</b> (running, jumping) until pain settles",
    "Sitting with feet flat and cold — keep them warm and moving",
    "Ignoring the pain and pushing through without rest",
]

do_col = [Paragraph("<b>✔  DO THIS</b>", style("do_h",
    fontName="Helvetica-Bold", fontSize=11, textColor=GREEN))]
for item in do_items:
    do_col.append(Paragraph(f"✓  {item}", style("do_i",
        fontName="Helvetica", fontSize=9.5, leading=14, textColor=GREY_DARK,
        leftIndent=6, spaceAfter=3)))

avoid_col = [Paragraph("<b>✘  AVOID THIS</b>", style("av_h",
    fontName="Helvetica-Bold", fontSize=11, textColor=RED))]
for item in avoid_items:
    avoid_col.append(Paragraph(f"✗  {item}", style("av_i",
        fontName="Helvetica", fontSize=9.5, leading=14, textColor=GREY_DARK,
        leftIndent=6, spaceAfter=3)))

act_tbl = Table(
    [[do_col, avoid_col]],
    colWidths=[(CONTENT_W - 8) / 2, (CONTENT_W - 8) / 2]
)
act_tbl.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (0,0), GREEN_LT),
    ("BACKGROUND", (1,0), (1,0), RED_LT),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
    ("TOPPADDING", (0,0), (-1,-1), 10),
    ("BOTTOMPADDING", (0,0), (-1,-1), 10),
    ("LEFTPADDING", (0,0), (-1,-1), 10),
    ("RIGHTPADDING", (0,0), (-1,-1), 10),
    ("BOX", (0,0), (0,0), 1.5, GREEN),
    ("BOX", (1,0), (1,0), 1.5, RED),
    ("ROUNDEDCORNERS", (0,0), (-1,-1), [6,6,6,6]),
]))
story.append(act_tbl)
story.append(Spacer(1, 14))

# ════════════════════════════════════════════════════════
#  SECTION 3 – FOOTWEAR GUIDE
# ════════════════════════════════════════════════════════
story.append(SectionHeader("  PART 3 — FOOTWEAR GUIDE", CONTENT_W, color=colors.HexColor("#6A1B9A")))
story.append(Spacer(1, 8))

fw_rows = [
    [Paragraph("<b>Feature</b>", S_BODY_BOLD),
     Paragraph("<b>What to Look For</b>", S_BODY_BOLD),
     Paragraph("<b>What to Avoid</b>", S_BODY_BOLD)],
    [Paragraph("Heel height", S_BODY),
     Paragraph("Small heel lift (1-2 cm) reduces fascia tension", S_BODY),
     Paragraph("Completely flat soles", S_BODY)],
    [Paragraph("Arch support", S_BODY),
     Paragraph("Firm medial arch — press the insole, it should not collapse", S_BODY),
     Paragraph("Shoes that flatten completely", S_BODY)],
    [Paragraph("Cushioning", S_BODY),
     Paragraph("Thick, shock-absorbing heel cushion", S_BODY),
     Paragraph("Thin, hard soles", S_BODY)],
    [Paragraph("Fit", S_BODY),
     Paragraph("Snug but not tight; thumb's width at toes", S_BODY),
     Paragraph("Loose shoes that let the foot slide", S_BODY)],
    [Paragraph("First step shoes", S_BODY),
     Paragraph("Keep supportive slippers right beside the bed", S_BODY),
     Paragraph("Stepping barefoot first thing in morning", S_BODY)],
]
fw_tbl = Table(fw_rows, colWidths=[CONTENT_W*0.22, CONTENT_W*0.42, CONTENT_W*0.36])
fw_tbl.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#6A1B9A")),
    ("TEXTCOLOR", (0,0), (-1,0), WHITE),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, colors.HexColor("#F3E5F5")]),
    ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#CE93D8")),
    ("TOPPADDING", (0,0), (-1,-1), 6),
    ("BOTTOMPADDING", (0,0), (-1,-1), 6),
    ("LEFTPADDING", (0,0), (-1,-1), 7),
    ("ROUNDEDCORNERS", (0,0), (-1,-1), [4,4,4,4]),
    ("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(fw_tbl)
story.append(Spacer(1, 14))

# ════════════════════════════════════════════════════════
#  SECTION 4 – WARNING SIGNS
# ════════════════════════════════════════════════════════
story.append(SectionHeader("  PART 4 — WHEN TO SEE YOUR DOCTOR", CONTENT_W, color=RED))
story.append(Spacer(1, 8))

warn_rows = [
    [Paragraph("<b>⚠  See your doctor if you notice:</b>", style("wt",
        fontName="Helvetica-Bold", fontSize=11, textColor=RED, leading=14))],
    [Paragraph(
        "• Pain that is getting <b>worse</b> despite 4–6 weeks of home treatment<br/>"
        "• <b>Sudden severe pain</b> or a 'pop' in your heel (may be fascia rupture)<br/>"
        "• <b>Swelling, redness, or warmth</b> around the heel (possible infection)<br/>"
        "• Pain that <b>spreads up the leg</b> or causes numbness/tingling in the foot<br/>"
        "• Heel pain in <b>both feet</b> with joint pain elsewhere (possible arthritis)<br/>"
        "• Pain that does <b>not ease at all</b> with rest",
        style("wb", fontName="Helvetica", fontSize=9.5, leading=15, textColor=GREY_DARK,
              leftIndent=6))]
]
warn_tbl = Table(warn_rows, colWidths=[CONTENT_W])
warn_tbl.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), RED_LT),
    ("BOX", (0,0), (-1,-1), 1.5, RED),
    ("ROUNDEDCORNERS", (0,0), (-1,-1), [6,6,6,6]),
    ("TOPPADDING", (0,0), (-1,-1), 8),
    ("BOTTOMPADDING", (0,0), (-1,-1), 8),
    ("LEFTPADDING", (0,0), (-1,-1), 12),
    ("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
story.append(warn_tbl)
story.append(Spacer(1, 14))

# ════════════════════════════════════════════════════════
#  PROGRESS TRACKER
# ════════════════════════════════════════════════════════
story.append(SectionHeader("  PART 5 — WEEK-BY-WEEK PROGRESS GUIDE", CONTENT_W,
    color=colors.HexColor("#1565C0")))
story.append(Spacer(1, 8))

prog_rows = [
    [Paragraph("<b>Week</b>", S_BODY_BOLD),
     Paragraph("<b>What to Focus On</b>", S_BODY_BOLD),
     Paragraph("<b>Expected Progress</b>", S_BODY_BOLD)],
    [Paragraph("Week 1-2", S_BODY),
     Paragraph("Start all 5 exercises. Rest from high-impact activity. New supportive shoes.", S_BODY),
     Paragraph("Morning pain may still be present. Slight improvement expected.", S_BODY)],
    [Paragraph("Week 3-4", S_BODY),
     Paragraph("Increase stretch frequency. Add stair stretching. Night splint if needed.", S_BODY),
     Paragraph("Noticeable reduction in morning pain and stiffness.", S_BODY)],
    [Paragraph("Week 6-8", S_BODY),
     Paragraph("Gentle walking program. Continue all stretches. Ice after activity.", S_BODY),
     Paragraph("Most patients feel 50-70% better at this point.", S_BODY)],
    [Paragraph("Week 10-12", S_BODY),
     Paragraph("Gradually return to normal activity. Continue orthotics and stretching.", S_BODY),
     Paragraph("Many patients are fully recovered. Maintain stretching habits.", S_BODY)],
    [Paragraph(">3 months", S_BODY),
     Paragraph("Return to full activity. Consider physiotherapy or specialist review if not resolved.", S_BODY),
     Paragraph("See doctor if still not improving — further treatment may help.", S_BODY)],
]
prog_tbl = Table(prog_rows, colWidths=[CONTENT_W*0.17, CONTENT_W*0.46, CONTENT_W*0.37])
prog_tbl.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1565C0")),
    ("TEXTCOLOR", (0,0), (-1,0), WHITE),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, colors.HexColor("#E3F2FD")]),
    ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#90CAF9")),
    ("TOPPADDING", (0,0), (-1,-1), 6),
    ("BOTTOMPADDING", (0,0), (-1,-1), 6),
    ("LEFTPADDING", (0,0), (-1,-1), 7),
    ("VALIGN", (0,0), (-1,-1), "MIDDLE"),
    ("ROUNDEDCORNERS", (0,0), (-1,-1), [4,4,4,4]),
]))
story.append(prog_tbl)
story.append(Spacer(1, 14))

# ════════════════════════════════════════════════════════
#  FOOTER
# ════════════════════════════════════════════════════════
story.append(HRFlowable(width=CONTENT_W, thickness=1, color=GREY_MED))
story.append(Spacer(1, 5))
story.append(Paragraph(
    "This handout is for general educational purposes only and does not replace the advice of your doctor or physiotherapist. "
    "Always follow the specific instructions given by your healthcare provider. "
    "If you are unsure about any exercise, ask before starting. | Prepared by Orris Medical Assistant | May 2026",
    S_FOOTER))

# ── Build ────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF saved to: {OUT}")
Running Command

cd /home/daytona/workspace/plantar-fasciitis-handout && python generate_handout.…

Your credits are exhausted. Your daily credits reset tomorrow, or you can purchase a top-up for more.

Management of severe preeclampsia drugs dose

Your credits are exhausted. Your daily credits reset tomorrow, or you can purchase a top-up for more.

Find the latest clinical guidelines for severe preeclampsia management

Your credits are exhausted. Your daily credits reset tomorrow, or you can purchase a top-up for more.
This is a shared conversation. Sign in to Orris to start your own chat.