I need a project work about rheumatoid arthritis for final year physiotherapy students
"rheumatoid arthritis"[MeSH Terms] AND "physical therapy"[MeSH Terms]
"rheumatoid arthritis"[MeSH Terms] AND "exercise therapy"[MeSH Terms]
"rheumatoid arthritis" AND "physiotherapy" OR "physical therapy" AND "exercise"
"rheumatoid arthritis"[MeSH Terms] AND "rehabilitation"[MeSH Terms]
"rheumatoid arthritis"[MeSH Terms] AND "hand therapy" OR "occupational therapy" OR "aerobic exercise"
"rheumatoid arthritis"[MeSH Terms] AND "pain"[MeSH Terms] AND "exercise"[MeSH Terms]
mkdir -p /tmp/workspace/ra-project && ls /tmp/workspace/ra-project/
~/ra-project/generate_ra_report.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
PageBreak, HRFlowable, ListFlowable, ListItem, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.pdfgen import canvas
import datetime
OUTPUT_PATH = "/tmp/workspace/ra-project/Rheumatoid_Arthritis_Physiotherapy_Project.pdf"
# ── Colour palette ────────────────────────────────────────────────────────────
DEEP_BLUE = colors.HexColor("#1A3A5C")
MID_BLUE = colors.HexColor("#2E6DA4")
LIGHT_BLUE = colors.HexColor("#EBF4FB")
ACCENT_TEAL = colors.HexColor("#1A7F7F")
DARK_GRAY = colors.HexColor("#2D2D2D")
MID_GRAY = colors.HexColor("#555555")
LIGHT_GRAY = colors.HexColor("#F5F5F5")
WHITE = colors.white
TABLE_HEAD = colors.HexColor("#1A3A5C")
TABLE_ALT = colors.HexColor("#D6EAF8")
GOLD = colors.HexColor("#D4A017")
# ── Document setup ─────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT_PATH,
pagesize=A4,
leftMargin=2.2*cm, rightMargin=2.2*cm,
topMargin=2.5*cm, bottomMargin=2.5*cm,
title="Rheumatoid Arthritis - A Comprehensive Project for Final Year Physiotherapy Students",
author="Orris Medical Education",
subject="Physiotherapy Management of Rheumatoid Arthritis"
)
W, H = A4
styles = getSampleStyleSheet()
# ── Custom styles ──────────────────────────────────────────────────────────────
def mks(name, parent="Normal", **kw):
s = ParagraphStyle(name, parent=styles[parent], **kw)
return s
cover_title = mks("CoverTitle", fontSize=28, textColor=WHITE, alignment=TA_CENTER, leading=36, fontName="Helvetica-Bold")
cover_sub = mks("CoverSub", fontSize=14, textColor=LIGHT_BLUE, alignment=TA_CENTER, leading=20, fontName="Helvetica")
cover_info = mks("CoverInfo", fontSize=11, textColor=WHITE, alignment=TA_CENTER, leading=18, fontName="Helvetica")
h1_style = mks("H1", parent="Heading1", fontSize=16, textColor=WHITE, spaceBefore=14, spaceAfter=6, fontName="Helvetica-Bold", alignment=TA_LEFT)
h2_style = mks("H2", parent="Heading2", fontSize=13, textColor=DEEP_BLUE, spaceBefore=12, spaceAfter=4, fontName="Helvetica-Bold", borderPad=3)
h3_style = mks("H3", parent="Heading3", fontSize=11, textColor=ACCENT_TEAL, spaceBefore=8, spaceAfter=3, fontName="Helvetica-Bold")
body_style = mks("Body", fontSize=10.5, textColor=DARK_GRAY, leading=16, spaceAfter=5, alignment=TA_JUSTIFY, fontName="Helvetica")
bullet_style = mks("Bullet", fontSize=10.5, textColor=DARK_GRAY, leading=15, leftIndent=14, firstLineIndent=-10, spaceAfter=3, fontName="Helvetica")
bold_body = mks("BoldBody", fontSize=10.5, textColor=DARK_GRAY, leading=16, spaceAfter=4, fontName="Helvetica-Bold")
caption_style = mks("Caption", fontSize=9, textColor=MID_GRAY, alignment=TA_CENTER, spaceAfter=4, fontName="Helvetica-Oblique")
ref_style = mks("Ref", fontSize=9, textColor=MID_GRAY, leading=13, spaceAfter=2, fontName="Helvetica")
toc_style = mks("TOC", fontSize=11, textColor=DEEP_BLUE, leading=18, leftIndent=0, fontName="Helvetica")
toc_sub_style = mks("TOCSub", fontSize=10, textColor=MID_GRAY, leading=15, leftIndent=20, fontName="Helvetica")
note_style = mks("Note", fontSize=9.5, textColor=DARK_GRAY, leading=14, leftIndent=10, spaceAfter=4,
backColor=LIGHT_BLUE, borderPad=6, fontName="Helvetica-Oblique")
highlight_style = mks("Highlight", fontSize=10.5, textColor=DEEP_BLUE, leading=16, spaceAfter=5,
backColor=LIGHT_BLUE, leftIndent=8, rightIndent=8, borderPad=6, fontName="Helvetica")
story = []
# ══════════════════════════════════════════════════════════════════════════════
# COVER PAGE
# ══════════════════════════════════════════════════════════════════════════════
def cover_block():
# Big blue banner table
banner_data = [[Paragraph("RHEUMATOID ARTHRITIS", cover_title)]]
banner = Table(banner_data, colWidths=[16.1*cm])
banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DEEP_BLUE),
("TOPPADDING", (0,0), (-1,-1), 28),
("BOTTOMPADDING",(0,0),(-1,-1), 28),
("LEFTPADDING", (0,0), (-1,-1), 16),
("RIGHTPADDING",(0,0), (-1,-1), 16),
("ROUNDEDCORNERS", [8]),
]))
story.append(Spacer(1, 1.5*cm))
story.append(banner)
story.append(Spacer(1, 0.4*cm))
sub_data = [[Paragraph("A COMPREHENSIVE PROJECT REPORT", cover_sub)]]
sub_tbl = Table(sub_data, colWidths=[16.1*cm])
sub_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), MID_BLUE),
("TOPPADDING", (0,0),(-1,-1), 10),
("BOTTOMPADDING",(0,0),(-1,-1),10),
("LEFTPADDING", (0,0),(-1,-1), 16),
("RIGHTPADDING",(0,0),(-1,-1), 16),
]))
story.append(sub_tbl)
story.append(Spacer(1, 0.8*cm))
story.append(Paragraph("For Final Year Physiotherapy Students (B.P.T. / M.P.T.)", mks("X", fontSize=13, textColor=MID_BLUE, alignment=TA_CENTER, fontName="Helvetica-Bold")))
story.append(Spacer(1, 1.2*cm))
# Information box
info_rows = [
["Subject", "Musculoskeletal Physiotherapy / Rheumatology"],
["Level", "Final Year Undergraduate / Postgraduate"],
["Date", datetime.date.today().strftime("%B %Y")],
["Sources", "Firestein & Kelley's Textbook of Rheumatology (2022);\nRheumatology 2-Vol Set (Elsevier, 2022);\nRobbins & Kumar Basic Pathology (2023);\nHarrison's Principles of Internal Medicine (2025)"],
]
info_tbl = Table(info_rows, colWidths=[4.5*cm, 11.6*cm])
info_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,-1), DEEP_BLUE),
("BACKGROUND", (1,0),(1,-1), LIGHT_GRAY),
("TEXTCOLOR", (0,0),(0,-1), WHITE),
("TEXTCOLOR", (1,0),(1,-1), DARK_GRAY),
("FONTNAME", (0,0),(0,-1), "Helvetica-Bold"),
("FONTNAME", (1,0),(1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 8),
("BOTTOMPADDING",(0,0),(-1,-1), 8),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING",(0,0),(-1,-1), 10),
("ROWBACKGROUNDS",(1,0),(1,-1),[LIGHT_GRAY, WHITE, LIGHT_GRAY, WHITE]),
("GRID", (0,0),(-1,-1), 0.5, colors.HexColor("#CCCCCC")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(info_tbl)
story.append(Spacer(1, 2.2*cm))
story.append(HRFlowable(width="100%", thickness=2, color=DEEP_BLUE))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph(
"\"Exercise is safe and beneficial in people with rheumatoid arthritis — "
"the role of physiotherapy is to restore function, reduce pain, and empower patients.\"",
mks("Quote", fontSize=10, textColor=MID_BLUE, alignment=TA_CENTER, fontName="Helvetica-Oblique")
))
story.append(PageBreak())
cover_block()
# ══════════════════════════════════════════════════════════════════════════════
# HELPER: section header with blue banner
# ══════════════════════════════════════════════════════════════════════════════
def section_header(text, number):
data = [[Paragraph(f"{number}. {text}", h1_style)]]
tbl = Table(data, colWidths=[16.1*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), DEEP_BLUE),
("TOPPADDING", (0,0),(-1,-1), 10),
("BOTTOMPADDING", (0,0),(-1,-1), 10),
("LEFTPADDING", (0,0),(-1,-1), 14),
("RIGHTPADDING", (0,0),(-1,-1), 14),
]))
story.append(Spacer(1, 0.4*cm))
story.append(tbl)
story.append(Spacer(1, 0.2*cm))
def sub_header(text):
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(text, h2_style))
story.append(HRFlowable(width="100%", thickness=1, color=MID_BLUE, spaceAfter=4))
def sub_sub_header(text):
story.append(Paragraph(text, h3_style))
def body(text):
story.append(Paragraph(text, body_style))
def bullets(items):
for item in items:
story.append(Paragraph(f"<bullet>•</bullet> {item}", bullet_style))
def highlight(text):
story.append(Paragraph(text, highlight_style))
story.append(Spacer(1, 0.1*cm))
def spacer(n=0.2):
story.append(Spacer(1, n*cm))
# ══════════════════════════════════════════════════════════════════════════════
# TABLE OF CONTENTS
# ══════════════════════════════════════════════════════════════════════════════
section_header("TABLE OF CONTENTS", "")
toc_items = [
("1.", "Introduction and Definition"),
("2.", "Epidemiology"),
("3.", "Etiology and Risk Factors"),
("4.", "Pathophysiology"),
("5.", "Clinical Features"),
("6.", "Extra-Articular Manifestations"),
("7.", "Disease Staging"),
("8.", "Diagnosis and Investigations"),
("9.", "ACR/EULAR 2010 Classification Criteria"),
("10.","Medical Management"),
("11.","Physiotherapy Assessment"),
("12.","Physiotherapy Management"),
("13.","Outcome Measures and Functional Scales"),
("14.","Evidence-Based Interventions"),
("15.","Patient Education and Self-Management"),
("16.","Prognosis"),
("17.","References"),
]
toc_data = [[Paragraph(n, toc_style), Paragraph(t, toc_style)] for n, t in toc_items]
toc_tbl = Table(toc_data, colWidths=[1.5*cm, 14.6*cm])
toc_tbl.setStyle(TableStyle([
("FONTNAME", (0,0),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 10.5),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1), 5),
("ROWBACKGROUNDS",(0,0),(-1,-1),[WHITE, LIGHT_GRAY]),
("GRID", (0,0),(-1,-1), 0.3, colors.HexColor("#DDDDDD")),
("LEFTPADDING", (0,0),(-1,-1), 8),
]))
story.append(toc_tbl)
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 1: INTRODUCTION AND DEFINITION
# ══════════════════════════════════════════════════════════════════════════════
section_header("INTRODUCTION AND DEFINITION", 1)
body(
"Rheumatoid arthritis (RA) is a chronic, systemic autoimmune disorder that principally attacks "
"the joints, producing a non-suppurative proliferative and inflammatory synovitis. It often "
"progresses to the destruction of articular cartilage and, in some cases, joint fusion (ankylosis). "
"Extra-articular lesions may occur in the skin, heart, blood vessels, and lungs, making RA a "
"truly systemic disease beyond its joint manifestations."
)
body(
"The hallmark of RA is the presence of highly specific autoantibodies, most notably "
"anti-citrullinated protein antibodies (ACPAs) and rheumatoid factor (RF). The disease follows "
"a relapsing-remitting course in most patients, and without appropriate treatment, leads to "
"progressive joint destruction, physical disability, and significant reduction in quality of life."
)
highlight(
"Key Definition (Robbins & Kumar Basic Pathology, 2023): \"RA is a chronic autoimmune disorder "
"that principally attacks the joints, producing a nonsuppurative proliferative and inflammatory "
"synovitis... The prevalence in the United States is 0.25% to 1%, and it is three times more "
"common in women than in men. The peak incidence is in the third to fifth decades of life.\""
)
body(
"For the physiotherapist, RA presents unique challenges: active inflammation requires careful "
"exercise dosing; joint deformities affect biomechanics; fatigue and pain fluctuate with disease "
"activity; and the long-term, relapsing nature demands sustained rehabilitation strategies. "
"This project comprehensively covers every domain that a final year physiotherapy student "
"must master to deliver evidence-based care to people living with RA."
)
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 2: EPIDEMIOLOGY
# ══════════════════════════════════════════════════════════════════════════════
section_header("EPIDEMIOLOGY", 2)
body(
"RA is a global disease affecting all ethnicities. Its epidemiological profile has major "
"implications for the physiotherapy workload and health system planning."
)
epi_data = [
["Parameter", "Details"],
["Global prevalence", "0.5 - 1.0% of the adult population worldwide"],
["Prevalence (USA)", "0.25% - 1%"],
["Sex ratio", "Women affected 2-3x more than men"],
["Peak incidence", "Third to fifth decade of life (30-50 years)"],
["Can affect", "Any age group, including juvenile RA (JIA)"],
["Disability", "50% of patients develop significant functional disability within 10 years if untreated"],
["Mortality", "Life expectancy reduced by 5-10 years, mainly due to cardiovascular disease"],
["Work disability", "Substantial; occupational rehabilitation is a key component of management"],
]
epi_tbl = Table(epi_data, colWidths=[5.5*cm, 10.6*cm])
epi_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 7),
("BOTTOMPADDING", (0,0),(-1,-1), 7),
("LEFTPADDING", (0,0),(-1,-1), 8),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.5, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story.append(epi_tbl)
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 3: ETIOLOGY AND RISK FACTORS
# ══════════════════════════════════════════════════════════════════════════════
section_header("ETIOLOGY AND RISK FACTORS", 3)
body(
"The etiology of RA is multifactorial, involving a complex interplay of genetic predisposition, "
"environmental triggers, and immune dysregulation. It is estimated that approximately 50% of the "
"risk of developing RA is related to inherited genetic susceptibility (Firestein & Kelley, 2022)."
)
sub_header("3.1 Genetic Factors")
bullets([
"HLA-DR4 allele: Strongly associated with ACPA-positive RA. The 'shared epitope' hypothesis "
"describes how specific HLA-DRB1 alleles present citrullinated peptides to autoreactive T cells.",
"Molecular mimicry: An epitope on citrullinated vinculin mimics an epitope on many microbes and "
"is presented by the HLA-DR4 molecule, suggesting a link between infection and autoimmunity.",
"Non-HLA genes: PTPN22, STAT4, CTLA4, and IRF5 are among the non-HLA genes contributing to RA susceptibility.",
"Genetic risk accounts for ~50% of ACPA-positive RA.",
])
sub_header("3.2 Environmental Risk Factors")
bullets([
"Cigarette smoking: The most important modifiable environmental risk factor. Smokers have "
"higher levels of citrullinated peptides (57% vs 7%; P<.05) and increased PAD2 enzyme "
"expression. RA-related autoantibodies are detectable in the sputum of 39% of at-risk patients.",
"Periodontal disease: Porphyromonas gingivalis produces PAD enzymes, causing citrullination "
"of bacterial and host proteins, thereby generating ACPAs in susceptible individuals.",
"Gut microbiome: Prevotella copri enrichment has been shown in patients with positive "
"autoantibodies and in new-onset untreated RA.",
"Silica dust exposure: Occupational exposure is a risk factor.",
"Hormonal factors: Female predominance and relationship with pregnancy (remission during "
"pregnancy, flares postpartum) suggest hormonal influences.",
"Obesity: Associated with increased risk and worse outcomes.",
"Low vitamin D: Inversely associated with RA incidence in some studies.",
])
sub_header("3.3 Immunological Triggers")
bullets([
"Post-translational modification (citrullination) of self-proteins (fibrinogen, collagen type II, "
"alpha-enolase, vimentin) generates novel epitopes that break immune tolerance.",
"The mucosal origin hypothesis: Autoimmunity may begin at mucosal surfaces (lungs, oral "
"cavity) long before joint disease is clinically apparent.",
])
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 4: PATHOPHYSIOLOGY
# ══════════════════════════════════════════════════════════════════════════════
section_header("PATHOPHYSIOLOGY", 4)
body(
"The pathophysiology of RA involves a cascade of immunological events that ultimately lead "
"to chronic joint inflammation and destruction. Understanding this mechanism is essential for "
"physiotherapists to appreciate why certain interventions work and how to time them safely."
)
sub_header("4.1 Immune Activation")
bullets([
"CD4+ helper T cells react against joint antigens (citrullinated peptides) presented by "
"HLA-DR4 molecules on antigen-presenting cells.",
"Th1 and Th17 cell subsets are major drivers: Th1 cells produce IFN-gamma; Th17 cells "
"produce IL-17, which recruits neutrophils and monocytes.",
"B cells differentiate into plasma cells producing rheumatoid factor (RF) and ACPAs. "
"ACPAs are detectable in up to 70% of patients and can precede clinical disease by years.",
"RANKL expressed on activated T cells stimulates osteoclasts, causing bone resorption "
"and the characteristic peri-articular erosions seen on X-ray.",
])
sub_header("4.2 Cytokine Storm")
body(
"The synovium in RA is driven by a network of pro-inflammatory cytokines. Understanding these "
"is the basis for targeted biologic therapies:"
)
cyto_data = [
["Cytokine", "Source", "Key Role in RA"],
["TNF-alpha", "Macrophages, FLS", "Master regulator of inflammation; stimulates protease release; key target of biologics (infliximab, etanercept)"],
["IL-1", "Macrophages", "Recruits leukocytes; stimulates cartilage destruction; induces fever"],
["IL-6", "Macrophages, FLS, T cells", "Drives acute-phase response (CRP, ESR elevation); systemic effects (fatigue, anemia)"],
["IL-17", "Th17 cells", "Recruits neutrophils and monocytes; amplifies inflammation"],
["IL-23", "Macrophages, DCs", "Drives Th17 cell differentiation; key upstream regulator"],
["RANKL", "T cells, FLS", "Stimulates osteoclast formation leading to bone erosion"],
]
cyto_tbl = Table(cyto_data, colWidths=[2.5*cm, 3.5*cm, 10.1*cm])
cyto_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 9.5),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 7),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
("WORDWRAP", (0,0),(-1,-1), True),
]))
story.append(cyto_tbl)
spacer(0.3)
sub_header("4.3 Synovial Changes and Pannus Formation")
body(
"The synovium becomes edematous, thickened, and hyperplastic. Characteristic histologic features "
"include: (1) synoviocyte hyperplasia and proliferation; (2) dense inflammatory infiltrates of "
"CD4+ T cells, B cells, plasma cells, and macrophages; (3) increased vascularity from angiogenesis; "
"(4) neutrophils and fibrin aggregates on synovial surfaces; (5) osteoclastic activity causing "
"peri-articular erosions."
)
highlight(
"PANNUS: A mass of edematous synovium, inflammatory cells, granulation tissue, and fibroblasts "
"that grows over and erodes the articular cartilage. In advanced cases, pannus bridges bones "
"causing fibrous ankylosis, which may ossify into bony ankylosis."
)
sub_header("4.4 Neutrophil Extracellular Traps (NETs)")
body(
"Neutrophils are abundant in inflamed RA joints, especially in synovial effusions in early "
"disease. NET formation releases PAD isoforms that citrullinate extra-cellular histones and "
"fibrinogen, generating additional ACPA-triggering antigens. NETs also activate synovial "
"fibroblast-like synoviocytes (FLS), which release pro-inflammatory cytokines, further "
"amplifying the inflammatory cascade."
)
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 5: CLINICAL FEATURES
# ══════════════════════════════════════════════════════════════════════════════
section_header("CLINICAL FEATURES", 5)
sub_header("5.1 Mode of Onset")
bullets([
"Insidious onset (most common, ~70%): Gradual development over weeks to months, beginning "
"with malaise, fatigue, and generalized musculoskeletal pain before joint involvement.",
"Palindromic onset: Episodic attacks of acute joint pain and swelling that completely resolve "
"between episodes; may progress to persistent RA.",
"Acute onset: Sudden onset with rapid joint involvement over days.",
"Systemic onset: Fever, weight loss, and malaise dominating the initial presentation.",
])
sub_header("5.2 Articular Manifestations")
body(
"The pattern of joint involvement is characteristic: <b>symmetric polyarthritis</b> predominantly "
"affecting the small joints of the hands and feet, wrists, ankles, elbows, and knees. "
"The metacarpophalangeal (MCP) and proximal interphalangeal (PIP) joints are frequently involved "
"(distinguishing RA from OA, which favors DIP joints)."
)
body("<b>Cardinal signs of active inflammation at affected joints:</b>")
bullets([
"Pain (arthralgia) - often worst in the morning",
"Swelling (synovial thickening and/or joint effusion)",
"Warmth and erythema overlying the joint",
"Stiffness - characteristically prolonged MORNING STIFFNESS lasting >1 hour (a key diagnostic feature)",
"Reduced range of motion",
])
sub_header("5.3 Characteristic Deformities")
deform_data = [
["Deformity", "Joint Affected", "Description", "PT Significance"],
["Ulnar deviation (drift)", "MCP joints", "Fingers deviate ulnarly due to altered tendon mechanics and joint laxity", "Splinting, hand exercises, joint protection"],
["Swan-neck deformity", "PIP/DIP joints", "PIP hyperextension + DIP flexion, due to intrinsic muscle imbalance", "Splinting; corrective exercise"],
["Boutonniere deformity", "PIP/DIP joints", "PIP flexion + DIP hyperextension, due to central slip rupture", "Extension splinting of PIP; tendon exercises"],
["Z-deformity of thumb", "CMC/MCP/IP joints", "MCP hyperextension + IP flexion, adducted first metacarpal", "Thumb spica splint; functional training"],
["Valgus deformity", "Knee/ankle/foot", "Valgus at knee; subtalar joint valgus (flat foot)", "Orthotics, strengthening, gait training"],
["Hammer toes / metatarsalgia", "MTP joints", "Subluxation at MTP joints causing toe deformities and forefoot pain", "Custom footwear, insoles, toe exercises"],
["Caput ulnae", "Distal radio-ulnar joint", "Dorsal subluxation of distal ulna causing 'piano key' sign", "Wrist splinting; functional training"],
]
def_tbl = Table(deform_data, colWidths=[3.2*cm, 3.2*cm, 4.7*cm, 5.0*cm])
def_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 8.5),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(def_tbl)
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 6: EXTRA-ARTICULAR MANIFESTATIONS
# ══════════════════════════════════════════════════════════════════════════════
section_header("EXTRA-ARTICULAR MANIFESTATIONS", 6)
body(
"RA is a systemic disease. Extra-articular manifestations occur more commonly in patients with "
"high RF titers, high ACPA levels, and severe joint disease. These have direct implications for "
"physiotherapy management."
)
extra_data = [
["System", "Manifestation", "Physiotherapy Implication"],
["Skin", "Rheumatoid nodules (forearm, elbows, occiput, sacrum); vasculitic lesions", "Pressure offloading; positioning"],
["Cardiovascular", "Pericarditis, myocarditis, accelerated atherosclerosis, increased CVD risk", "Monitor vitals; cardiac precautions during exercise"],
["Pulmonary", "Interstitial lung disease (ILD), pleural effusion, rheumatoid nodules in lungs, bronchiectasis", "Breathing exercises; SpO2 monitoring; avoid high-intensity if ILD"],
["Neurological", "Peripheral neuropathy (mononeuritis multiplex); cervical myelopathy (C1-C2 instability); carpal tunnel syndrome", "Neurological assessment; avoid cervical manipulation; C-spine precautions"],
["Ocular", "Keratoconjunctivitis sicca (Sjogren's overlap); scleritis; episcleritis", "Referral; eye protection"],
["Haematological", "Anemia of chronic disease; thrombocytosis; neutropenia (Felty syndrome)", "Monitor fatigue; adjust exercise intensity"],
["Renal", "Amyloidosis; drug-induced nephrotoxicity (NSAIDs, gold)", "Monitor fluid status; exercise guidelines"],
["Felty Syndrome", "RA + splenomegaly + neutropenia (rare but severe)", "Infection precautions; splenic rupture precaution"],
["Sjogren's Overlap", "Dry eyes, dry mouth; common overlap", "Patient education; hydration"],
]
extra_tbl = Table(extra_data, colWidths=[3.0*cm, 5.5*cm, 7.6*cm])
extra_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 8.8),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(extra_tbl)
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 7: DISEASE STAGING
# ══════════════════════════════════════════════════════════════════════════════
section_header("DISEASE STAGING", 7)
body(
"Staging RA guides physiotherapy prescription - particularly in deciding exercise intensity, "
"modality selection, and goals."
)
stage_data = [
["Stage", "Pathology", "X-Ray Findings", "Functional Status", "PT Approach"],
["Stage I\n(Early)", "Synovial inflammation; no erosions", "Periarticular osteopenia; soft tissue swelling; no erosions", "No functional impairment or minor limitations", "ROM exercises; pain management; education; splinting"],
["Stage II\n(Moderate)", "Cartilage thinning; periarticular erosions begin", "Joint space narrowing; subchondral erosions; juxtaarticular osteopenia", "Moderate limitation; joint mobility restricted", "Strengthening; aerobic conditioning; splinting; joint protection"],
["Stage III\n(Severe)", "Major cartilage and bone destruction; deformities present", "Major joint space loss; extensive erosions; deformities visible", "Significant functional limitations; may need aids", "Adaptive equipment; functional retraining; gait aids; intensive exercise"],
["Stage IV\n(Terminal)", "Fibrous or bony ankylosis", "Complete joint destruction; ankylosis", "Severe disability; joint fusion", "Maintain remaining function; ADL training; ergonomics; splinting"],
]
stage_tbl = Table(stage_data, colWidths=[2.0*cm, 3.5*cm, 3.5*cm, 3.5*cm, 3.6*cm])
stage_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 8.5),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(stage_tbl)
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 8: DIAGNOSIS AND INVESTIGATIONS
# ══════════════════════════════════════════════════════════════════════════════
section_header("DIAGNOSIS AND INVESTIGATIONS", 8)
sub_header("8.1 Laboratory Investigations")
lab_data = [
["Investigation", "Finding in RA", "Clinical Significance"],
["Rheumatoid Factor (RF)", "Positive in ~80% of RA patients", "IgM/IgA autoantibodies binding Fc of IgG; associated with extra-articular disease; also positive in other conditions"],
["Anti-CCP (ACPA)", "Positive in ~70% of RA patients", "Highly specific (>95%); appears years before clinical disease; predicts erosive disease"],
["ESR", "Elevated", "Reflects acute-phase response; useful for monitoring disease activity"],
["CRP", "Elevated", "More sensitive acute-phase reactant than ESR for monitoring; directly correlates with disease activity"],
["FBC", "Anemia of chronic disease; thrombocytosis", "Anemia correlates with disease severity; thrombocytosis in active disease"],
["Synovial fluid analysis", "Inflammatory fluid (WBC >2000/mm3, predominantly neutrophils)", "Excludes septic arthritis and crystal arthropathies"],
["Anti-nuclear antibody (ANA)", "Positive in ~30%", "Not specific; overlap with SLE"],
["Complement levels", "Normal or elevated (unlike SLE)", "Helps differentiate from SLE"],
["Serum uric acid", "Normal", "Excludes gout"],
]
lab_tbl = Table(lab_data, colWidths=[3.8*cm, 4.5*cm, 7.8*cm])
lab_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 9),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(lab_tbl)
spacer(0.3)
sub_header("8.2 Imaging")
img_data = [
["Imaging Modality", "Findings", "Role in RA"],
["X-Ray", "Periarticular osteopenia; joint space narrowing; marginal erosions; deformities", "First-line; monitors disease progression; Larsen and Sharp scores used"],
["Ultrasound (MSK)", "Synovial thickening; effusion; power Doppler for active synovitis; erosions", "Sensitive for early synovitis; guides injections; monitors treatment response"],
["MRI", "Bone marrow edema; synovitis; tenosynovitis; early erosions before X-ray changes", "Most sensitive; detects pre-erosive disease; RAMRIS score used"],
["CT Scan", "Detailed bone erosions", "Used when X-ray findings are equivocal"],
["Bone scan (scintigraphy)", "Increased uptake at inflamed joints", "Rarely used; useful when multiple joints need assessment simultaneously"],
]
img_tbl = Table(img_data, colWidths=[3.5*cm, 5.5*cm, 7.1*cm])
img_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 9),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(img_tbl)
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 9: ACR/EULAR 2010 CLASSIFICATION CRITERIA
# ══════════════════════════════════════════════════════════════════════════════
section_header("ACR/EULAR 2010 CLASSIFICATION CRITERIA", 9)
body(
"The 2010 ACR/EULAR classification criteria replaced the older 1987 criteria. "
"A score of >=6/10 points is required for classification as definite RA. "
"These criteria apply to patients with at least one swollen joint not explained by another diagnosis."
)
acr_data = [
["Domain", "Criteria", "Score"],
["Joint Involvement\n(0-5 points)",
"1 medium-large joint\n2-10 medium-large joints\n1-3 small joints\n4-10 small joints\n>10 joints (at least 1 small)",
"0\n1\n2\n3\n5"],
["Serology\n(0-3 points)",
"Negative RF AND negative ACPA\nLow positive RF OR low positive ACPA (< 3x ULN)\nHigh positive RF OR high positive ACPA (>=3x ULN)",
"0\n2\n3"],
["Acute Phase Reactants\n(0-1 point)",
"Normal CRP AND normal ESR\nAbnormal CRP OR abnormal ESR",
"0\n1"],
["Duration of Symptoms\n(0-1 point)",
"< 6 weeks\n>= 6 weeks",
"0\n1"],
]
acr_tbl = Table(acr_data, colWidths=[4.0*cm, 9.5*cm, 2.6*cm])
acr_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 9.5),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 8),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(acr_tbl)
spacer(0.2)
highlight("Scoring: A total score >=6/10 = 'definite RA'. Small joints refer to MCP, PIP, MTP 2-5, thumb IP, wrist joints.")
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 10: MEDICAL MANAGEMENT
# ══════════════════════════════════════════════════════════════════════════════
section_header("MEDICAL MANAGEMENT", 10)
body(
"Medical management of RA aims to achieve remission or low disease activity using a "
"'treat-to-target' (T2T) strategy. Physiotherapists must understand the pharmacological "
"agents their patients are taking, as side effects directly impact rehabilitation planning."
)
sub_header("10.1 DMARDs (Disease-Modifying Anti-Rheumatic Drugs)")
med_data = [
["Drug Class", "Examples", "Mechanism", "PT Implications"],
["Conventional DMARDs (csDMARDs)", "Methotrexate (first-line), Sulfasalazine, Hydroxychloroquine, Leflunomide", "Immunosuppression; anti-inflammatory", "Monitor for myelosuppression (fatigue, infection risk); avoid aggressive exercise during infection"],
["Biologic DMARDs - TNF inhibitors", "Etanercept, Infliximab, Adalimumab, Certolizumab", "Block TNF-alpha signaling", "Increased infection risk (TB reactivation); advise hygiene; monitor for fever before sessions"],
["Biologic DMARDs - IL-6 inhibitors", "Tocilizumab, Sarilumab", "Block IL-6 receptor", "Masks fever; monitor for infection; may affect lipid profile"],
["Biologic DMARDs - Abatacept", "Abatacept", "Blocks T cell co-stimulation (CTLA4-Ig)", "Infection precautions; avoid live vaccines"],
["Biologic DMARDs - Rituximab", "Rituximab", "Depletes CD20+ B cells", "Increased infection risk; immunoglobulin levels monitored"],
["JAK inhibitors (tsDMARDs)", "Tofacitinib, Baricitinib, Upadacitinib", "Inhibit intracellular JAK-STAT pathway", "Increased DVT/PE risk; increased infection risk; monitor cardiovascular status"],
["Glucocorticoids", "Prednisolone, Methylprednisolone", "Broad anti-inflammatory; bridge therapy", "Long-term use causes osteoporosis; weight gain; myopathy; hypertension; exercise is critical counterpart"],
["NSAIDs", "Ibuprofen, Naproxen, Diclofenac, COX-2 inhibitors", "Anti-inflammatory; analgesic (symptom relief only)", "Renal and GI side effects; does not modify disease course; helps with pain control around PT sessions"],
]
med_tbl = Table(med_data, colWidths=[3.2*cm, 3.0*cm, 3.8*cm, 6.1*cm])
med_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 8.5),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(med_tbl)
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 11: PHYSIOTHERAPY ASSESSMENT
# ══════════════════════════════════════════════════════════════════════════════
section_header("PHYSIOTHERAPY ASSESSMENT", 11)
body(
"A comprehensive physiotherapy assessment of the RA patient must be biopsychosocial, "
"patient-centered, and informed by current disease activity. The International Classification "
"of Functioning, Disability and Health (ICF) framework provides the ideal structure."
)
sub_header("11.1 Subjective Assessment (History)")
sub_sub_header("A. Chief Complaint and History of Present Illness")
bullets([
"Duration of symptoms; pattern of onset (insidious/acute/palindromic)",
"Joints affected: which joints, symmetry, pattern",
"Morning stiffness: duration (key diagnostic marker - >1 hour suggests active inflammation)",
"Pain characteristics: VAS/NRS score; location; aggravating and relieving factors",
"Fatigue: severity (Fatigue NRS 0-10); impact on daily function",
"Disease activity: recent flares, hospitalizations",
"Functional limitations: ADLs, work, leisure, mobility",
])
sub_sub_header("B. Past Medical and Drug History")
bullets([
"Current medications (DMARDs, biologics, steroids, NSAIDs) - note side effects relevant to PT",
"Previous joint surgery or injections",
"Comorbidities: cardiovascular disease, osteoporosis, diabetes, depression",
"Previous physiotherapy treatment and response",
])
sub_sub_header("C. Social and Occupational History")
bullets([
"Employment status; job demands (manual vs sedentary)",
"Home environment; social support",
"Physical activity levels; barriers to exercise",
"Smoking status; alcohol use",
"Psychological status: depression/anxiety screening (PHQ-4, GAD-7)",
])
sub_header("11.2 Objective Assessment")
sub_sub_header("A. Observation")
bullets([
"Posture: thoracic kyphosis, forward head posture, valgus deformities at knees/feet",
"Gait: antalgic gait, Trendelenburg sign, use of walking aids",
"Joint inspection: swelling (synovial vs bony); deformities (ulnar drift, swan-neck, boutonniere); muscle wasting; skin changes (rheumatoid nodules, vasculitis)",
"Hand inspection: MCP/PIP involvement; grip pattern; thenar/hypothenar wasting",
])
sub_sub_header("B. Palpation")
bullets([
"Joint line tenderness; warmth (active synovitis); synovial thickening vs effusion",
"Tender Joint Count (TJC) - typically 28-joint count (DAS28 joints)",
"Swollen Joint Count (SJC) - 28-joint count",
"Rheumatoid nodules at elbows, sacrum, occiput",
"Tenosynovitis: tendon sheaths at wrist/fingers/ankle",
])
sub_sub_header("C. Range of Motion")
bullets([
"Goniometry: active and passive ROM at all affected joints",
"Wrist: flexion/extension/radial-ulnar deviation",
"Hand: MCP/PIP/DIP flexion and extension; thumb opposition",
"Shoulder, elbow, hip, knee, ankle, foot as indicated",
"Cervical spine: cautiously, especially with suspected C1-C2 instability",
])
sub_sub_header("D. Muscle Strength Testing")
bullets([
"Manual muscle testing (MMT) - Oxford Scale 0-5",
"Hand grip strength (dynamometer, Jamar) - critical for RA monitoring",
"Pinch strength (key pinch, tip-to-tip pinch)",
"Quadriceps strength (knee extension dynamometry)",
"Lower limb strength: hip abductors, knee extensors/flexors",
])
sub_sub_header("E. Special Tests and Functional Assessments")
bullets([
"Squeeze test: transverse pressure across MCP heads - pain indicates active MCP synovitis",
"Finkelstein test: if de Quervain's tenosynovitis co-exists",
"Neurological assessment: upper and lower limb if peripheral neuropathy or cervical myelopathy suspected",
"Timed Up and Go (TUG) test: mobility and fall risk",
"30-second Chair Stand Test: lower limb strength and functional mobility",
"6-Minute Walk Test (6MWT): aerobic capacity",
"Balance assessment: single leg stance, Berg Balance Scale if elderly",
])
sub_sub_header("F. Cervical Spine Screening (Critical Safety Assessment)")
highlight(
"SAFETY: Cervical spine instability (atlantoaxial subluxation) occurs in up to 25-40% of patients "
"with severe RA due to erosion of transverse ligament of C1. Screen ALL RA patients: Sharp-Purser "
"test; assess for upper motor neuron signs (hyperreflexia, Babinski, clonus, proprioceptive loss). "
"CONTRAINDICATION to cervical manipulation."
)
sub_header("11.3 Disease Activity Measurement")
das_data = [
["Tool", "Components", "Interpretation"],
["DAS28-CRP", "28 TJC + 28 SJC + CRP + Patient Global Assessment (VAS)", "Remission <2.6; Low <3.2; Moderate 3.2-5.1; High >5.1"],
["DAS28-ESR", "28 TJC + 28 SJC + ESR + Patient Global Assessment (VAS)", "Remission <2.6; Low <3.2; Moderate 3.2-5.1; High >5.1"],
["SDAI (Simplified Disease Activity Index)", "28 TJC + 28 SJC + CRP + PGA + EGA", "Remission <=3.3; Low <=11; Moderate <=26; High >26"],
["CDAI (Clinical Disease Activity Index)", "28 TJC + 28 SJC + PGA + EGA (no lab required)", "Remission <=2.8; Low <=10; Moderate <=22; High >22"],
["RAPID3 (Routine Assessment of Patient Index Data 3)", "Function (FN) + Pain + Patient Global (all 0-10 each)", "Remission <=3; Low <=6; Moderate <=12; High >12"],
]
das_tbl = Table(das_data, colWidths=[4.0*cm, 6.0*cm, 6.1*cm])
das_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 9),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 8),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(das_tbl)
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 12: PHYSIOTHERAPY MANAGEMENT
# ══════════════════════════════════════════════════════════════════════════════
section_header("PHYSIOTHERAPY MANAGEMENT", 12)
highlight(
"Overarching Principle (Rheumatology, Elsevier 2022): Rehabilitation is patient-centered, "
"delivered within a multidisciplinary team using a biopsychosocial approach. "
"Self-management is integral. Passive interventions supplement, not substitute, "
"active patient-led approaches."
)
sub_header("12.1 Goals of Physiotherapy in RA")
bullets([
"Reduce pain and joint stiffness",
"Maintain and improve joint range of motion",
"Strengthen periarticular muscles to protect joints",
"Improve cardiovascular fitness and aerobic capacity",
"Prevent and manage deformities",
"Optimize functional ability (ADLs, work, leisure)",
"Educate patient in self-management and joint protection",
"Prevent disability and maintain quality of life",
"Reduce falls risk",
])
sub_header("12.2 Exercise Therapy (Core Intervention)")
body(
"Exercise is the cornerstone of physiotherapy management for RA. Strong evidence demonstrates "
"that exercise is SAFE and BENEFICIAL in people with both early and established RA, even during "
"moderate disease activity. Exercise improves functional ability, aerobic capacity, strength, "
"and quality of life without increasing disease activity or joint damage."
)
sub_sub_header("A. Range of Motion (ROM) Exercises")
bullets([
"Indication: All stages of RA; essential in acute phase to prevent contractures",
"Type: Active-assistive ROM during acute phase; active ROM as inflammation subsides",
"Joints: All affected joints - hands, wrists, elbows, shoulders, hips, knees, ankles",
"Duration: 1-2 sets of 10 repetitions per joint, twice daily",
"Special consideration: Gentle ROM in warm water (hydrotherapy) is particularly effective in early/active disease",
])
sub_sub_header("B. Strengthening Exercises")
bullets([
"Indication: All stages; particularly important in subacute and stable disease",
"Progressive resistance training (PRT): shown to improve strength without worsening joint inflammation",
"Start with isometric exercises during active flares (no joint movement; minimal joint stress)",
"Progress to isotonic (concentric/eccentric) and functional exercises as disease settles",
"Focus: Quadriceps, hip abductors (for knee protection); wrist/finger extensors and intrinsics; "
"shoulder rotator cuff; core stabilizers",
"Grip strength training: crucial for hand function",
"Dosage: 2-3 sets of 8-15 repetitions; 2-3 sessions per week; progressive overload",
])
sub_sub_header("C. Aerobic / Cardiovascular Exercise")
bullets([
"Strong evidence: Cardiorespiratory aerobic exercise improves VO2max, fatigue, depression, "
"and quality of life in RA without increasing disease activity",
"Modes: Walking, cycling, swimming, aquatic exercise, treadmill training, dancing",
"Dosage: 150 min/week of moderate-intensity aerobic activity (WHO guidelines); "
"or 75 min/week of vigorous-intensity",
"High-intensity interval training (HIIT): emerging evidence for superior cardiorespiratory "
"benefits; use with caution and careful monitoring",
"Begin at low intensity; progress gradually based on tolerance and disease activity",
])
sub_sub_header("D. Aquatic / Hydrotherapy")
bullets([
"Warm water (34-36°C) reduces pain, muscle spasm, and morning stiffness",
"Buoyancy reduces joint loading - ideal for patients who cannot tolerate land-based exercise",
"Pool-based ROM, strengthening, and aerobic exercises are well-tolerated even in active disease",
"Balneotherapy: Spa-based thermal bathing; some evidence for short-term pain relief",
"Contraindications: Open wounds; urinary/bowel incontinence; severe cardiac/respiratory disease; aquaphobia",
])
sub_sub_header("E. Tai Chi and Yoga")
bullets([
"Tai chi: Improves balance, flexibility, pain, and psychological well-being in RA",
"Yoga: Improves disease activity, functional disability, and quality of life",
"Both are gentle, low-impact and suitable for moderate-severe disease",
"May be delivered in group settings (added social benefit)",
])
sub_header("12.3 Manual Therapy")
body(
"Manual therapy has a limited but supportive role in RA management. Evidence is generally "
"of low to moderate quality (Rheumatology, Elsevier 2022)."
)
bullets([
"Joint mobilization (Maitland Grades I-II): indicated for pain relief and gentle ROM improvement "
"in peripheral joints; one RCT showed improvements in pain and joint outcomes in RA hands",
"Soft tissue massage: reduces muscle spasm, pain, and anxiety; improves sleep quality",
"Myofascial release and trigger point therapy: for secondary muscle pain and spasm",
"CONTRAINDICATION: Cervical manipulation is absolutely contraindicated in RA due to risk of "
"atlantoaxial instability and vertebral artery compromise",
"Caution: Avoid high-velocity thrust techniques at any joint with active synovitis or erosions",
])
sub_header("12.4 Physical Modalities / Electrotherapy")
mod_data = [
["Modality", "Evidence", "Application in RA", "Precautions"],
["TENS (Transcutaneous Electrical Nerve Stimulation)", "Conflicting results for pain; Grade B recommendation", "Pain control and muscle stimulation; useful adjunct to exercise", "Avoid over active inflammatory joints; avoid near pacemakers"],
["Low-Level Laser Therapy (LLLT)", "Grade A recommendation for short-term pain and morning stiffness relief", "Applied to inflamed joints, particularly hands and wrists", "Avoid over eyes; pregnancy precaution; limited long-term evidence"],
["Therapeutic Ultrasound", "Limited evidence when used alone on hands (grip strength, wrist motion, morning stiffness); not beneficial when combined with exercise and other modalities in systematic review", "Pulsed ultrasound to hand and wrist joints", "Avoid over actively inflamed joints; avoid metallic implants (implant US)"],
["Cryotherapy (Cold therapy)", "Systematic review (6 studies, 257 participants): reduces pain", "Ice packs, cold gel packs applied post-exercise; cooling during acute flares", "Never apply directly to skin; avoid circulatory compromise"],
["Thermotherapy (Heat therapy)", "Palliative role; paraffin wax + exercise for arthritic hands (short-term benefit)", "Moist heat packs before exercise; paraffin wax bath for hands", "Avoid in acute inflammation; avoid over malignancy areas"],
["NMES/FES (Neuromuscular Electrical Stimulation)", "Limited evidence; may help with quadriceps weakness", "Quadriceps strengthening (post-flare); muscle re-education", "Avoid over active synovitis; electrode placement precautions"],
["Interferential Therapy (IFT)", "Limited evidence; may provide pain relief", "Deep pain relief; used for large joints", "Standard electrotherapy precautions"],
["Microwave Diathermy", "Limited use in RA", "Deep heating of large joints", "Avoid in active inflammation; metallic implants contraindicated"],
]
mod_tbl = Table(mod_data, colWidths=[3.2*cm, 3.2*cm, 4.5*cm, 5.2*cm])
mod_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 8.5),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(mod_tbl)
spacer(0.3)
sub_header("12.5 Orthoses, Splints, and Assistive Devices")
bullets([
"Wrist resting splint: reduces pain and supports wrist; worn at night or during painful activities",
"Wrist working splint: allows functional use while providing support during activities",
"Ring splints (Silver Ring Splints): correct and prevent swan-neck and boutonniere deformities at PIP joints",
"Thumb spica splint: supports CMC joint in Z-deformity and CMC arthritis",
"Foot orthotics / insoles: metatarsal bars/pads for MTP joint pain; prefabricated or custom orthoses for flat foot/valgus",
"Extra-depth footwear with wide toe box: accommodates toe deformities; reduces MTP pressure",
"Knee bracing: unloader brace for compartmental arthritis; neoprene sleeve for proprioception",
"Walking aids: forearm crutches (preferred over axillary - less wrist/hand stress); rollator walkers; tripod/quad canes",
"Adaptive equipment: jar openers, built-up handles, lever door handles, electric can openers - reduces joint stress during ADLs",
])
sub_header("12.6 Management by Disease Phase")
phase_data = [
["Phase", "Disease Activity", "PT Focus", "Exercise Prescription"],
["Acute Flare", "High disease activity, significant pain and swelling", "Rest affected joints; cold therapy; gentle AROM; position of comfort; anti-inflammatory modalities; patient education", "Gentle AROM 1-2x daily; isometrics only at inflamed joints; avoid resistance training on inflamed joints; hydrotherapy if available"],
["Subacute Phase", "Moderate disease activity, improving", "Progress ROM; begin low-resistance strengthening; aerobic conditioning begins; joint protection education; splinting", "AROM + PROM; isometric to isotonic progression; low-impact aerobics (pool, cycling) 3-4x/week; gradually increase resistance"],
["Remission / Stable", "Low disease activity or remission", "Maximize strength, fitness, function; prevent relapse; vocational rehabilitation; community integration", "Progressive resistance training; moderate-vigorous aerobics (150 min/week); balance and coordination; sports participation if desired"],
["Post-Surgery (e.g., joint arthroplasty)", "Variable; recovery phase", "Post-op rehabilitation protocol; wound care; DVT prevention; early mobilization; functional restoration", "Specific joint-replacement protocol; immediate CPM/AROM; progress weight-bearing and strengthening per surgical protocol"],
]
phase_tbl = Table(phase_data, colWidths=[2.5*cm, 3.0*cm, 4.5*cm, 6.1*cm])
phase_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 8.8),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(phase_tbl)
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 13: OUTCOME MEASURES
# ══════════════════════════════════════════════════════════════════════════════
section_header("OUTCOME MEASURES AND FUNCTIONAL SCALES", 13)
body(
"Standardized outcome measures are essential for monitoring treatment response, setting goals, "
"and communicating within the multidisciplinary team. The following tools are validated for use "
"in RA physiotherapy practice."
)
out_data = [
["Scale / Tool", "Domain Measured", "Description", "Score Interpretation"],
["HAQ-DI\n(Health Assessment Questionnaire - Disability Index)", "Physical function / disability", "20 questions across 8 domains (dressing, eating, walking, hygiene, reach, grip, activity); patient-reported", "0 = no disability; 3 = complete disability; Minimal clinically important difference (MCID) = 0.22"],
["MHAQ\n(Modified HAQ)", "Physical function", "Shortened version of HAQ; 8 items", "0 = no limitation; 3 = complete limitation"],
["SF-36 / SF-12", "Health-Related Quality of Life", "36/12-item generic HRQoL questionnaire; physical and mental component summaries", "Higher scores = better QoL; 0-100 scale for each domain"],
["EQ-5D", "General health / HRQoL", "5 dimensions + VAS; generic preference-based measure", "Index value; 1.0 = perfect health"],
["AIMS2\n(Arthritis Impact Measurement Scales 2)", "Comprehensive QoL in arthritis", "57 items across 12 domains including physical, affect, social interaction, symptoms, work, satisfaction", "Higher score = worse QoL; arthritis-specific"],
["DASH\n(Disabilities of Arm, Shoulder, Hand)", "Upper limb function", "30-item questionnaire about upper limb disability and symptoms", "0 = no disability; 100 = complete disability; MCID = 10.83"],
["FIHOA\n(Functional Index for Hand Osteoarthritis)", "Hand function in arthritis", "10 items on hand functional tasks; validated for RA and OA", "0-30; higher = worse"],
["DAS28", "Disease activity", "Clinical composite score (TJC28, SJC28, CRP/ESR, PGA)", "Remission <2.6; MCID = 1.2"],
["RAPID3", "Disease activity + function", "3-item patient-reported: function, pain, global estimate", "0-30; remission <=3; quick screening tool"],
["6-Minute Walk Test", "Aerobic capacity / endurance", "Distance walked in 6 minutes on a flat surface", "Higher = better aerobic capacity; reference values exist by age/sex"],
["Timed Up and Go (TUG)", "Mobility and fall risk", "Time to rise from chair, walk 3m, return, sit down", "<10 sec = normal; >12 sec = increased fall risk in elderly"],
["Grip Strength (Dynamometer)", "Hand strength", "3 trials, dominant hand; Jamar dynamometer standard", "Age/sex-matched normative values; MCID ~6 kg"],
["30-Second Chair Stand Test", "Lower limb strength / functional mobility", "Number of sit-to-stand repetitions in 30 seconds", "Age/sex normative data; lower = worse lower limb function"],
]
out_tbl = Table(out_data, colWidths=[3.5*cm, 3.0*cm, 4.5*cm, 5.1*cm])
out_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 8.5),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(out_tbl)
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 14: EVIDENCE-BASED INTERVENTIONS
# ══════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
section_header("EVIDENCE-BASED INTERVENTIONS", 14)
body(
"Current evidence supporting physiotherapy interventions in RA is summarized below. "
"The evidence base for exercise therapy in RA is robust, with systematic reviews and "
"meta-analyses demonstrating safety and efficacy."
)
evid_data = [
["Intervention", "Evidence Level", "Key Findings"],
["Progressive Resistance Training (PRT)", "Strong (multiple RCTs and meta-analyses)", "Improves muscle strength and physical function without increasing disease activity or joint damage in stable RA; safe in moderate disease activity"],
["Aerobic Exercise", "Strong (systematic reviews and meta-analyses)", "Cardiorespiratory fitness improves significantly; no increase in disease activity markers; reduces fatigue, depression, cardiovascular risk; recommended in EULAR guidelines"],
["Aquatic / Hydrotherapy", "Moderate (RCTs)", "Improves pain, function, psychological well-being; particularly beneficial in high disease activity; warm water reduces stiffness; superior to no exercise"],
["Tai Chi", "Moderate (RCTs)", "Improves balance, flexibility, pain scores, and QoL; safe; suitable for elderly RA patients; particularly useful when high-intensity exercise is not feasible"],
["LLLT (Low Level Laser Therapy)", "Moderate (Cochrane reviews)", "Short-term relief of pain and morning stiffness; few side effects; recommended as short-term adjunct; insufficient long-term evidence"],
["TENS", "Low-Moderate (conflicting results)", "May reduce pain in some patients; adjunct to exercise; not superior to sham TENS in all studies; individual response varies"],
["Wrist Splinting", "Moderate (RCTs)", "Resting splints reduce night pain and morning stiffness; functional splints maintain ADL performance; do not significantly improve grip strength alone"],
["Foot Orthoses / Insoles", "Moderate (RCTs)", "Prefabricated and custom foot orthoses reduce foot pain and improve foot function; metatarsal pads reduce forefoot plantar pressure"],
["Joint Protection Education", "Moderate (RCTs)", "Reduces joint stress; improves function; effective when combined with exercise; behavior change principles enhance adherence"],
["Self-Management Education Programs", "Strong (systematic reviews)", "Improves self-efficacy, coping, pain, and psychological outcomes; Arthritis Self-Management Program (ASMP) is the most studied; group delivery is cost-effective"],
["Cryotherapy", "Moderate (systematic review 6 studies)", "Improves pain; useful post-exercise and in acute flares; easy to self-apply"],
["Hand Therapy (combined)", "Moderate (RCTs)", "Combined hand exercise + splinting + education improves grip strength, hand function, and dexterity; superior to splinting alone"],
]
evid_tbl = Table(evid_data, colWidths=[3.8*cm, 3.2*cm, 9.1*cm])
evid_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 9),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(evid_tbl)
spacer(0.3)
highlight(
"EULAR Recommendations for Physical Activity in RA (Rheumatology, Elsevier 2022): "
"Promoting physical activity consistent with general WHO recommendations should be an integral "
"part of standard care throughout the disease course. All healthcare providers should "
"cooperate to ensure that people with RA receive appropriate physical activity interventions."
)
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 15: PATIENT EDUCATION AND SELF-MANAGEMENT
# ══════════════════════════════════════════════════════════════════════════════
section_header("PATIENT EDUCATION AND SELF-MANAGEMENT", 15)
body(
"Education is a core physiotherapy responsibility and is integral to effective RA self-management. "
"The aim is to empower patients with knowledge, skills, and confidence to manage their condition "
"independently, between physiotherapy sessions and long-term."
)
sub_header("15.1 Joint Protection Principles")
bullets([
"Respect pain: avoid activities that cause or exacerbate joint pain for >1-2 hours after activity",
"Reduce force: use larger/stronger joints to carry loads (e.g., carry bags over shoulders not in hands)",
"Avoid sustained grip: use built-up handles; spread load across the palm",
"Avoid positions of deformity: maintain functional alignment, especially of wrists and fingers",
"Balance rest and activity: pacing strategies to manage fatigue and prevent flares",
"Use adaptive equipment: modify tools to reduce joint stress",
"Ergonomic assessment: workplace and home modifications",
])
sub_header("15.2 Activity Pacing")
bullets([
"Pacing is the deliberate alternation of activity and rest to prevent boom-bust cycles",
"Set baseline activity levels below pain threshold and gradually increase",
"Incorporate regular short rest breaks during prolonged tasks",
"Use fatigue diaries to identify patterns and triggers",
])
sub_header("15.3 Exercise Adherence Strategies")
bullets([
"Goal setting (SMART goals: Specific, Measurable, Achievable, Relevant, Time-bound)",
"Self-monitoring: exercise diaries, pedometers, activity trackers",
"Problem solving: identifying and overcoming barriers",
"Social support: exercise buddy, group exercise classes",
"Motivational interviewing techniques",
"Action planning: specific plans for when, where, and how to exercise",
"Digital health: apps and online programs for home exercise monitoring",
])
sub_header("15.4 Psychological Support")
bullets([
"Depression and anxiety affect up to 40% of RA patients - screen with PHQ-9 or GAD-7",
"Cognitive behavioral therapy (CBT) principles can be incorporated by physiotherapists",
"Pain education (explain pain science to reduce fear-avoidance behavior)",
"Mindfulness-based stress reduction (MBSR) has emerging evidence in RA",
"Referral to clinical psychology or counseling when indicated",
"Group-based rehabilitation: peer support reduces isolation and improves psychological outcomes",
])
sub_header("15.5 Occupational Rehabilitation")
bullets([
"Work disability is substantial in RA - address employment issues in every working-age patient",
"Workplace ergonomic assessment: desk height, keyboard position, tools",
"Job task modification and graduated return to work programs",
"Liaison with employers and occupational health departments",
"Legal rights: Disability Discrimination legislation protects RA patients in many countries",
])
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 16: PROGNOSIS
# ══════════════════════════════════════════════════════════════════════════════
section_header("PROGNOSIS", 16)
body(
"RA prognosis has improved dramatically in the biologic era, but significant variability exists. "
"Several factors predict worse outcomes and should guide the intensity of physiotherapy intervention."
)
prog_data = [
["Prognostic Indicator", "Good Prognosis", "Poor Prognosis"],
["Serology", "Seronegative (RF-/ACPA-)", "High-titer RF+ and ACPA+ (especially >3x ULN)"],
["Imaging", "No erosions at presentation", "Early erosions within first 2 years"],
["Disease activity", "Low DAS28; rapid response to treatment", "Persistently high DAS28; treatment-refractory disease"],
["Functional status", "HAQ-DI <0.5 at baseline", "HAQ-DI >1.0 at baseline; rapid HAQ deterioration"],
["Smoking", "Non-smoker", "Active smoker (worse treatment response and outcomes)"],
["Extra-articular disease", "Absent", "Rheumatoid nodules; vasculitis; ILD; Felty syndrome"],
["Gender", "Male (generally milder disease)", "Female (generally more severe)"],
["Early treatment", "DMARD started within 3-6 months of symptom onset", "Delayed diagnosis and treatment"],
["Physical activity", "High; maintains exercise program", "Sedentary; low adherence to exercise"],
["Psychosocial", "High self-efficacy; strong social support", "Depression; anxiety; low self-efficacy; poor coping"],
]
prog_tbl = Table(prog_data, colWidths=[4.0*cm, 5.5*cm, 6.6*cm])
prog_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 9),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, TABLE_ALT]),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0),(-1,-1), "TOP"),
("BACKGROUND", (1,1),(-1,-1), None),
]))
story.append(prog_tbl)
spacer(0.3)
highlight(
"Physiotherapy Impact on Prognosis: Regular exercise and rehabilitation interventions are "
"independently associated with better functional outcomes, lower disability rates, improved "
"cardiovascular risk profiles, and better psychological well-being in RA patients over time."
)
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 17: REFERENCES
# ══════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
section_header("REFERENCES", 17)
refs = [
"1. Firestein GS, Budd RC, Gabriel SE, et al. Firestein & Kelley's Textbook of Rheumatology, "
"2-Volume Set. 11th ed. Elsevier; 2022. ISBN: 9780323935364.",
"2. Bijlsma JWJ, Hachulla E, et al. Rheumatology, 2-Volume Set. 7th ed. Elsevier; 2022. "
"ISBN: 9780702081330. [Chapters 53, 102 - Rehabilitation, RA Management]",
"3. Kumar V, Abbas AK, Aster JC. Robbins & Kumar Basic Pathology. 10th ed. Elsevier; 2023. "
"ISBN: 9780323790185. [Chapter 19 - Bones, Joints and Soft Tissue Tumors]",
"4. Loscalzo J, Fauci A, Kasper D, et al. Harrison's Principles of Internal Medicine. "
"22nd ed. McGraw-Hill Medical; 2025. ISBN: 9781265977061.",
"5. Aletaha D, Neogi T, Silman AJ, et al. 2010 Rheumatoid arthritis classification criteria: "
"an American College of Rheumatology/European League Against Rheumatism collaborative initiative. "
"Arthritis Rheum. 2010;62(9):2569-2581.",
"6. Smolen JS, Landewe RBM, Bijlsma JWJ, et al. EULAR recommendations for the management of "
"rheumatoid arthritis with synthetic and biological disease-modifying antirheumatic drugs: "
"2019 update. Ann Rheum Dis. 2020;79(6):685-699.",
"7. Baillet A, Zeboulon N, Gossec L, et al. Efficacy of cardiorespiratory aerobic exercise "
"in rheumatoid arthritis: meta-analysis of randomized controlled trials. "
"Arthritis Care Res (Hoboken). 2010;62(7):984-992.",
"8. Hurkmans E, van der Giesen FJ, Vliet Vlieland TP, et al. Dynamic exercise programs "
"(aerobic capacity and/or muscle strength training) in patients with rheumatoid arthritis. "
"Cochrane Database Syst Rev. 2009;(4):CD006853.",
"9. Brosseau L, Wells GA, Tugwell P, et al. Ottawa Panel evidence-based clinical practice "
"guidelines for aerobic fitness exercises in the management of fibromyalgia: part 1. "
"Phys Ther. 2008;88:857-871.",
"10. Ottawa Panel. Ottawa Panel Evidence-Based Clinical Practice Guidelines for Therapeutic "
"Exercises in the Management of Rheumatoid Arthritis in Adults. Phys Ther. 2004;84(10):934-972.",
"11. Verhoeven F, Tordi N, Prati C, et al. Physical activity in patients with rheumatoid arthritis. "
"Joint Bone Spine. 2016;83(3):265-270.",
"12. Rongen-van Dartel SA, Repping-Wuts H, Flendrie M, et al. Effect of aerobic exercise training "
"on fatigue in rheumatoid arthritis: a meta-analysis. Arthritis Care Res (Hoboken). 2015;67(8):1054-1062.",
"13. World Health Organization. Rehabilitation 2030: A Call for Action. Geneva: WHO; 2017.",
"14. Hinman RS, Nicolson PJ, Bennell KL. Rehabilitation in Rheumatic Disease. In: Bijlsma JWJ, "
"Hachulla E, eds. Rheumatology. 7th ed. Elsevier; 2022:473-484.",
]
for i, ref in enumerate(refs, 1):
story.append(Paragraph(ref, ref_style))
story.append(Spacer(1, 0.1*cm))
spacer(0.5)
story.append(HRFlowable(width="100%", thickness=1.5, color=DEEP_BLUE))
spacer(0.2)
story.append(Paragraph(
"This project report was compiled for final year physiotherapy students using "
"authoritative medical textbook content. For clinical practice, always refer to current "
"national and international guidelines and individual patient assessment.",
mks("Footer", fontSize=9, textColor=MID_GRAY, alignment=TA_CENTER, fontName="Helvetica-Oblique")
))
# ══════════════════════════════════════════════════════════════════════════════
# PAGE NUMBERING
# ══════════════════════════════════════════════════════════════════════════════
def add_page_number(canvas_obj, doc_obj):
canvas_obj.saveState()
canvas_obj.setFont("Helvetica", 8)
canvas_obj.setFillColor(MID_GRAY)
# Footer line
canvas_obj.setStrokeColor(MID_BLUE)
canvas_obj.setLineWidth(0.5)
canvas_obj.line(2.2*cm, 1.8*cm, W - 2.2*cm, 1.8*cm)
# Page number
page_num = canvas_obj.getPageNumber()
text = f"Rheumatoid Arthritis — Physiotherapy Project Report | Page {page_num}"
canvas_obj.drawCentredString(W / 2.0, 1.4*cm, text)
canvas_obj.restoreState()
# ══════════════════════════════════════════════════════════════════════════════
# BUILD
# ══════════════════════════════════════════════════════════════════════════════
doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number)
print(f"PDF successfully created: {OUTPUT_PATH}")
cd /tmp/workspace/ra-project && python generate_ra_report.py 2>&1
Rheumatoid Arthritis Physiotherapy Project
PDF Document · PDF
| Section | Content |
|---|---|
| 1. Introduction & Definition | WHO definition; what RA means for physiotherapists |
| 2. Epidemiology | Prevalence, sex ratio, age of onset, disability statistics - formatted as table |
| 3. Etiology & Risk Factors | Genetic (HLA-DR4, shared epitope); environmental (smoking, periodontal disease, gut microbiome); immunological triggers |
| 4. Pathophysiology | CD4+ T cell activation; cytokine cascade table (TNF, IL-1, IL-6, IL-17, RANKL); pannus formation; NETs |
| 5. Clinical Features | Mode of onset; articular signs; characteristic deformities table (ulnar drift, swan-neck, boutonniere, Z-thumb, valgus) with PT significance |
| 6. Extra-Articular Manifestations | 9-system table with PT implications (CV, pulmonary, neurological, Felty syndrome) |
| 7. Disease Staging | Steinbrocker Stages I-IV with X-ray findings and PT approach per stage |
| 8. Diagnosis & Investigations | Lab investigations table (RF, ACPA, ESR, CRP, FBC); imaging table (X-ray, MSK ultrasound, MRI, CT) |
| 9. ACR/EULAR 2010 Criteria | Full scoring table; interpretation note |
| 10. Medical Management | Full DMARD table (csDMARDs, TNF inhibitors, IL-6 inhibitors, JAK inhibitors, steroids, NSAIDs) with PT implications of each drug |
| 11. Physiotherapy Assessment | Full subjective (SOCRATES, drug history, psychosocial); objective (observation, palpation, ROM, MMT, special tests); cervical spine safety screening alert; DAS28/SDAI/CDAI/RAPID3 disease activity tools table |
| 12. Physiotherapy Management | Goals; exercise therapy (ROM, strengthening, aerobic, hydrotherapy, Tai Chi/Yoga); manual therapy + contraindications; electrotherapy/modalities table (TENS, LLLT, ultrasound, cryotherapy); splints and assistive devices; phase-based management table (acute/subacute/remission/post-surgery) |
| 13. Outcome Measures | 13-tool table: HAQ-DI, MHAQ, SF-36, EQ-5D, AIMS2, DASH, DAS28, RAPID3, 6MWT, TUG, Grip Strength, 30-sec Chair Stand |
| 14. Evidence-Based Interventions | 12-row evidence summary table with evidence levels for each intervention |
| 15. Patient Education & Self-Management | Joint protection principles; activity pacing; exercise adherence strategies; psychological support; occupational rehabilitation |
| 16. Prognosis | Good vs poor prognostic indicators table; note on PT impact on prognosis |
| 17. References | 14 formatted references including textbooks and key guideline papers |