Hey

Hey! How can I help you today?

I am in 1st year MBBS. Give me answers of every questions according to that.

Got it! I'll tailor all my answers to your 1st year MBBS level, which means:
  • Subjects: Anatomy, Physiology, Biochemistry (your core 1st year subjects)
  • Depth: Detailed enough for university exams, but without unnecessary postgraduate-level complexity
  • Style: Clear explanations with clinical correlations where relevant, diagrams described when helpful
  • Format: Structured answers suitable for theory exams (short notes, long answers, etc.)
Feel free to ask anything - go ahead! 🩺

Clinical anatomy of elbow joint

Reading File
Finding Sources
Reading File
Reading File
Reading File
Reading File
Reading File
Now I have enough information from both Gray's Anatomy for Students and S Das Manual on Clinical Surgery. Let me compile a comprehensive, well-structured 1st year MBBS answer.

Clinical Anatomy of the Elbow Joint


1. TYPE OF JOINT

The elbow is a synovial joint that consists of three separate articulations sharing a single joint cavity:
ArticulationBones InvolvedMovement
Humeroulnar jointTrochlea of humerus + trochlear notch of ulnaFlexion / Extension
Humeroradial jointCapitulum of humerus + head of radiusFlexion / Extension
Proximal radioulnar jointHead of radius + radial notch of ulnaPronation / Supination
The articular surfaces are covered by hyaline cartilage.

2. JOINT CAPSULE

  • Fibrous membrane: Encloses the joint; attaches to the medial epicondyle and margins of the olecranon, coronoid, and radial fossae of the humerus. Inferiorly, it attaches to the coronoid process and olecranon of the ulna.
  • Synovial membrane: Lines the radial fossa, coronoid fossa, olecranon fossa, deep surface of the joint capsule, and medial surface of the trochlea.
  • Fat pads: Lie between the synovial and fibrous membranes over the coronoid, olecranon, and radial fossae. They get displaced by the brachialis and triceps during movement.

3. LIGAMENTS

LigamentLocationFunction
Medial (ulnar) collateral ligamentMedial sideStabilizes against valgus stress
Lateral (radial) collateral ligamentLateral sideStabilizes against varus stress
Annular ligament of radiusEncircles radial headHolds radial head in the radial notch; allows rotation
  • The fibrous capsule is thickened medially and laterally to form the collateral ligaments.
  • A sacciform recess of synovial membrane protrudes inferiorly to facilitate rotation during pronation/supination.

4. MOVEMENTS & MUSCLES

MovementRangeMuscles
Flexion0Β° to ~145Β°Biceps brachii, brachialis, brachioradialis
ExtensionReturn to 0Β°Triceps brachii, anconeus
Pronation~90Β°Pronator teres, pronator quadratus
Supination~90Β°Biceps brachii, supinator
Note: Pronation/supination is best examined with the elbow flexed at 90Β° and the arm held at the side, to eliminate shoulder rotation.

5. BLOOD SUPPLY

An anastomotic network around the elbow formed by:
  • Collateral branches of the brachial artery and profunda brachii
  • Recurrent branches of the radial and ulnar arteries

6. NERVE SUPPLY

  • Primarily: Radial nerve and Musculocutaneous nerve
  • Also: Branches of the Ulnar and Median nerves

7. CARRYING ANGLE

  • The outward angulation of the extended, supinated forearm from the axis of the arm.
  • Normal: 10Β° in males, 20Β° in females
  • Disappears when the forearm is flexed or pronated
  • Increased = Cubitus valgus; Decreased/reversed = Cubitus varus

8. OSSIFICATION CENTRES (CRITOE Mnemonic)

Appearance of secondary ossification centres around the elbow (important for interpreting paediatric X-rays):
CentreAge of Appearance
C - Capitulum1 year
R - Radial head5 years
I - Internal (medial) epicondyle5 years
T - Trochlea11 years
O - Olecranon12 years
E - External (lateral) epicondyle13 years
All fuse around puberty.

9. CLINICAL CORRELATIONS

A. Supracondylar Fracture of Humerus

  • Most common elbow fracture in children
  • Caused by fall on outstretched hand
  • Distal fragment pulled posteriorly by triceps
  • The proximal fragment "bowstrings" the brachial artery, causing ischaemia of forearm muscles
  • Leads to Volkmann's ischaemic contracture (clawing of fingers due to muscle fibrosis)
  • Also risks injury to the anterior interosseous nerve (branch of median nerve)

B. Fracture of the Medial Epicondyle

  • Results in cubitus valgus
  • Delayed (late) ulnar nerve palsy - claw hand, weakness of intrinsic muscles, sensory loss over medial 1.5 fingers

C. Fracture of the Radial Head

  • Typical injury from fall on outstretched hand
  • Causes loss of full extension
  • Diagnosed by positive fat pad sign on lateral X-ray (displaced posterior fat pad = "sail sign")

D. Fracture of the Olecranon

  • Direct blow or avulsion by triceps
  • Results in inability to extend the elbow

E. Pulled Elbow (Nursemaid's Elbow)

  • Common in children under 5 years
  • Caused by sharp axial pull on the child's hand (e.g., pulling child over a curb)
  • Radial head subluxes from the annular ligament (lax and underdeveloped in children)
  • Treated by supination + compression - pain subsides immediately on reduction

F. Tennis Elbow (Lateral Epicondylitis)

  • Tendinopathy at the common extensor origin from lateral epicondyle
  • Tenderness at lateral epicondyle
  • Caused by repetitive overuse
  • Test: Cozen's test (pain on resisted wrist extension)

G. Golfer's Elbow (Medial Epicondylitis)

  • Tendinopathy at common flexor origin from medial epicondyle
  • Tenderness at medial epicondyle

H. Olecranon Bursitis (Student's Elbow / Miner's Elbow)

  • Inflammation of the bursa over the olecranon
  • Fluctuant swelling directly over the olecranon
  • Caused by chronic pressure or direct trauma

I. Effusion of the Elbow Joint

  • Joint held in semi-flexion (position of ease / maximum capacity)
  • Normal concavities on either side of olecranon obliterated
  • Fluid impulse transmitted between the two sides of the olecranon posteriorly

10. THREE BONY POINTS (Important Landmark)

  • Medial epicondyle, Lateral epicondyle, Tip of Olecranon
  • When elbow is extended: these three form a straight horizontal line
  • When elbow is flexed to 90Β°: they form an isosceles triangle
  • This relationship is preserved in supracondylar fracture but disrupted in elbow dislocation

Sources: Gray's Anatomy for Students, pp. 884-887; S Das Manual on Clinical Surgery (13th Ed.), pp. 233-234

Create a summary PDF on elbow joint fractures for quick revision

Reading File
Running Command

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

Running Command

mkdir -p /home/daytona/workspace/elbow-revision

Writing File

~/elbow-revision/generate_pdf.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
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 PageBreak

OUTPUT = "/home/daytona/workspace/elbow-revision/Elbow_Joint_Fractures_Revision.pdf"

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    rightMargin=1.8*cm, leftMargin=1.8*cm,
    topMargin=2*cm, bottomMargin=2*cm
)

W, H = A4

# ── Colour palette ─────────────────────────────────────────────────────────────
NAVY     = colors.HexColor("#1A3560")
BLUE     = colors.HexColor("#2563EB")
LBLUE    = colors.HexColor("#DBEAFE")
ORANGE   = colors.HexColor("#EA580C")
LORANGE  = colors.HexColor("#FFF7ED")
GREEN    = colors.HexColor("#16A34A")
LGREEN   = colors.HexColor("#F0FDF4")
RED      = colors.HexColor("#DC2626")
LRED     = colors.HexColor("#FEF2F2")
YELLOW   = colors.HexColor("#CA8A04")
LYELLOW  = colors.HexColor("#FEFCE8")
PURPLE   = colors.HexColor("#7C3AED")
LPURPLE  = colors.HexColor("#F5F3FF")
GREY     = colors.HexColor("#F1F5F9")
DGREY    = colors.HexColor("#475569")
BLACK    = colors.HexColor("#0F172A")
WHITE    = colors.white

styles = getSampleStyleSheet()

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

# ── Custom styles ──────────────────────────────────────────────────────────────
title_style = S("Title",
    fontSize=22, fontName="Helvetica-Bold", textColor=WHITE,
    alignment=TA_CENTER, spaceAfter=4)

subtitle_style = S("Subtitle",
    fontSize=11, fontName="Helvetica", textColor=colors.HexColor("#BFDBFE"),
    alignment=TA_CENTER, spaceAfter=2)

tag_style = S("Tag",
    fontSize=9, fontName="Helvetica-Oblique", textColor=colors.HexColor("#93C5FD"),
    alignment=TA_CENTER)

section_style = S("Section",
    fontSize=13, fontName="Helvetica-Bold", textColor=WHITE,
    alignment=TA_LEFT, spaceAfter=0, spaceBefore=0,
    leftPadding=8)

body_style = S("Body",
    fontSize=9.5, fontName="Helvetica", textColor=BLACK,
    leading=14, spaceAfter=3, alignment=TA_JUSTIFY)

bold_body = S("BoldBody",
    fontSize=9.5, fontName="Helvetica-Bold", textColor=BLACK,
    leading=14, spaceAfter=3)

bullet_style = S("Bullet",
    fontSize=9.2, fontName="Helvetica", textColor=BLACK,
    leading=13.5, leftIndent=12, spaceAfter=2,
    bulletIndent=0, bulletFontName="Helvetica")

warn_style = S("Warn",
    fontSize=9, fontName="Helvetica-Bold", textColor=RED,
    leading=13, leftIndent=8, spaceAfter=2)

note_style = S("Note",
    fontSize=8.8, fontName="Helvetica-Oblique", textColor=DGREY,
    leading=13, alignment=TA_JUSTIFY)

table_header_style = S("TableHeader",
    fontSize=8.5, fontName="Helvetica-Bold", textColor=WHITE,
    alignment=TA_CENTER, leading=11)

table_cell_style = S("TableCell",
    fontSize=8.5, fontName="Helvetica", textColor=BLACK,
    alignment=TA_LEFT, leading=11)

mnemonic_style = S("Mnemonic",
    fontSize=11, fontName="Helvetica-Bold", textColor=PURPLE,
    alignment=TA_CENTER, leading=18)

footer_style = S("Footer",
    fontSize=7.5, fontName="Helvetica-Oblique", textColor=DGREY,
    alignment=TA_CENTER)

# ── Helper builders ────────────────────────────────────────────────────────────

def header_bar(text, bg=NAVY, text_color=WHITE):
    data = [[Paragraph(text, ParagraphStyle("hdr",
                fontSize=12, fontName="Helvetica-Bold",
                textColor=text_color, alignment=TA_LEFT, leading=15))]]
    t = Table(data, colWidths=[doc.width])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), bg),
        ("LEFTPADDING",  (0,0), (-1,-1), 10),
        ("RIGHTPADDING", (0,0), (-1,-1), 6),
        ("TOPPADDING",   (0,0), (-1,-1), 6),
        ("BOTTOMPADDING",(0,0), (-1,-1), 6),
        ("ROUNDEDCORNERS", [4]),
    ]))
    return t

def two_col_table(rows, col1_w=4.5*cm, bg_header=NAVY, header_row=None):
    col2_w = doc.width - col1_w
    data = []
    if header_row:
        data.append([
            Paragraph(header_row[0], table_header_style),
            Paragraph(header_row[1], table_header_style)
        ])
    for r in rows:
        data.append([
            Paragraph(r[0], bold_body),
            Paragraph(r[1], body_style)
        ])
    t = Table(data, colWidths=[col1_w, col2_w])
    style = [
        ("GRID",        (0,0), (-1,-1), 0.4, colors.HexColor("#CBD5E1")),
        ("TOPPADDING",  (0,0), (-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("LEFTPADDING", (0,0), (-1,-1), 6),
        ("RIGHTPADDING",(0,0), (-1,-1), 6),
        ("VALIGN",      (0,0), (-1,-1), "TOP"),
        ("ROWBACKGROUNDS", (0,0), (-1,-1), [GREY, WHITE]),
    ]
    if header_row:
        style += [
            ("BACKGROUND",   (0,0), (-1,0), bg_header),
            ("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, GREY]),
        ]
    t.setStyle(TableStyle(style))
    return t

def three_col_table(rows, widths, header_row=None, bg_header=NAVY):
    data = []
    if header_row:
        data.append([Paragraph(h, table_header_style) for h in header_row])
    for r in rows:
        data.append([Paragraph(c, body_style) for c in r])
    t = Table(data, colWidths=widths)
    style = [
        ("GRID",        (0,0), (-1,-1), 0.4, colors.HexColor("#CBD5E1")),
        ("TOPPADDING",  (0,0), (-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("LEFTPADDING", (0,0), (-1,-1), 6),
        ("RIGHTPADDING",(0,0), (-1,-1), 6),
        ("VALIGN",      (0,0), (-1,-1), "TOP"),
        ("ROWBACKGROUNDS",(0,0),(-1,-1), [GREY, WHITE]),
    ]
    if header_row:
        style += [
            ("BACKGROUND",   (0,0), (-1,0), bg_header),
            ("FONTNAME",     (0,0), (-1,0), "Helvetica-Bold"),
            ("TEXTCOLOR",    (0,0), (-1,0), WHITE),
            ("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, GREY]),
        ]
    t.setStyle(TableStyle(style))
    return t

def colored_box(content_rows, bg=LBLUE, border=BLUE):
    """Wrap a list of flowables in a colored 1-cell table."""
    inner = []
    for item in content_rows:
        inner.append(item)
    data = [[inner]]
    t = Table([[content_rows]], colWidths=[doc.width])
    # Use a simpler approach - just a paragraph list in a table cell
    cell_content = "".join(
        f"<para>{r}</para>" for r in content_rows
    ) if isinstance(content_rows[0], str) else None
    return t

def info_box(paragraphs_list, bg=LBLUE, border_color=BLUE):
    data = [[paragraphs_list]]
    t = Table(data, colWidths=[doc.width])
    t.setStyle(TableStyle([
        ("BACKGROUND",   (0,0), (-1,-1), bg),
        ("BOX",          (0,0), (-1,-1), 1.2, border_color),
        ("LEFTPADDING",  (0,0), (-1,-1), 10),
        ("RIGHTPADDING", (0,0), (-1,-1), 10),
        ("TOPPADDING",   (0,0), (-1,-1), 8),
        ("BOTTOMPADDING",(0,0), (-1,-1), 8),
        ("VALIGN",       (0,0), (-1,-1), "TOP"),
    ]))
    return t

def bullet(text, color="β€’"):
    return Paragraph(f"{color} {text}", bullet_style)

# ══════════════════════════════════════════════════════════════════════════════
# BUILD CONTENT
# ══════════════════════════════════════════════════════════════════════════════
story = []

# ── COVER BANNER ──────────────────────────────────────────────────────────────
cover_data = [[
    Paragraph("ELBOW JOINT FRACTURES", title_style),
    Paragraph("Quick Revision Notes β€” 1st Year MBBS", subtitle_style),
    Paragraph("Anatomy β€’ Clinical Features β€’ Complications β€’ Management", tag_style),
]]
cover = Table(cover_data, colWidths=[doc.width])
cover.setStyle(TableStyle([
    ("BACKGROUND",   (0,0), (-1,-1), NAVY),
    ("BOX",          (0,0), (-1,-1), 0, NAVY),
    ("TOPPADDING",   (0,0), (-1,-1), 18),
    ("BOTTOMPADDING",(0,0), (-1,-1), 18),
    ("LEFTPADDING",  (0,0), (-1,-1), 14),
    ("RIGHTPADDING", (0,0), (-1,-1), 14),
    ("ROUNDEDCORNERS",[6]),
]))
story.append(cover)
story.append(Spacer(1, 0.35*cm))

# ── QUICK OVERVIEW TABLE ───────────────────────────────────────────────────────
story.append(header_bar("πŸ“‹  AT A GLANCE β€” Elbow Fracture Types", NAVY))
story.append(Spacer(1, 0.2*cm))

overview_rows = [
    ["Supracondylar Hx", "Distal humerus above epicondyles", "Children 5–10 yrs", "FOOSH"],
    ["Lateral Condyle Fx", "Lateral condyle of humerus", "Children 5–10 yrs", "FOOSH + varus force"],
    ["Medial Epicondyle Fx", "Medial epicondyle avulsion", "Children/adolescents", "Valgus stress / dislocation"],
    ["Olecranon Fx", "Olecranon process of ulna", "Adults", "Direct blow / triceps avulsion"],
    ["Radial Head Fx", "Head of radius", "Adults", "FOOSH"],
    ["Intercondylar Fx", "T/Y fracture through condyles", "Elderly adults", "High energy trauma"],
    ["Nursemaid's Elbow", "Radial head subluxation", "< 5 years", "Axial pull on hand"],
]
w1 = 3.8*cm; w2 = 4.5*cm; w3 = 3.2*cm; w4 = doc.width - w1 - w2 - w3
overview = three_col_table(
    overview_rows,
    widths=[w1, w2, w3, w4],
    header_row=["Fracture", "Site", "Age Group", "Mechanism"],
    bg_header=NAVY
)
story.append(overview)
story.append(Spacer(1, 0.4*cm))

# ══════════════════════════════════════════════════════════════════════════════
# 1. SUPRACONDYLAR FRACTURE
# ══════════════════════════════════════════════════════════════════════════════
story.append(KeepTogether([
    header_bar("1.  SUPRACONDYLAR FRACTURE OF HUMERUS", BLUE),
    Spacer(1, 0.15*cm),
]))

sc_rows = [
    ["Site", "Transverse fracture of distal humerus ABOVE the level of epicondyles"],
    ["Age / Incidence", "Most common elbow fracture in children (5–10 yrs). Rare in adults."],
    ["Mechanism", "Fall on outstretched hand (FOOSH) β€” extension type (95%). Flexion type (5%) β€” direct blow on flexed elbow."],
    ["Displacement", "Posterior displacement of distal fragment by triceps pull (extension type)."],
    ["Classification", "Gartland I β€” undisplaced  |  II β€” partially displaced  |  III β€” fully displaced"],
]
story.append(two_col_table(sc_rows, col1_w=3.5*cm))
story.append(Spacer(1, 0.2*cm))

# Clinical features sub-header
story.append(Paragraph("<b>Clinical Features</b>", bold_body))
sc_cf = [
    bullet("Pain, swelling, tenderness around the elbow"),
    bullet("S-shaped deformity (extension type)"),
    bullet("Posterior prominence of olecranon"),
    bullet("Normal triangle of bony points (medial epicondyle, lateral epicondyle, olecranon) β€” PRESERVED (unlike dislocation)"),
    bullet("Pucker sign: Puckering of skin anteriorly due to proximal fragment piercing brachialis"),
]
story.append(info_box(sc_cf, bg=LBLUE, border_color=BLUE))
story.append(Spacer(1, 0.2*cm))

# Neurovascular complications
story.append(Paragraph("<b>⚠ Complications β€” The Most Important Part!</b>", warn_style))
comp_rows = [
    ["Brachial Artery Injury", "Bowstringing over proximal fragment β†’ ischaemia β†’ Volkmann's Ischaemic Contracture (VIC)"],
    ["Anterior Interosseous N. (AIN)", "Branch of median nerve. Test: 'OK sign' β€” inability to flex terminal IP of thumb + index finger"],
    ["Radial Nerve", "Less common. Wrist drop."],
    ["Median Nerve", "Rare. Sensory loss over lateral 3Β½ fingers."],
    ["Ulnar Nerve", "Most common in flexion type fractures."],
    ["Cubitus Varus (Gunstock deformity)", "Most common late complication. Due to malunion. Cosmetic, not functional."],
    ["Cubitus Valgus", "Less common. Can cause delayed ulnar nerve palsy."],
    ["Myositis Ossificans", "Heterotopic ossification β€” avoid passive stretching."],
]
story.append(two_col_table(comp_rows, col1_w=4.2*cm, bg_header=RED,
    header_row=["Complication", "Details"]))
story.append(Spacer(1, 0.2*cm))

story.append(Paragraph("<b>Volkmann's Ischaemic Contracture (VIC)</b>", bold_body))
vic_items = [
    bullet("Caused by ischaemia of anterior compartment muscles (flexors of forearm)"),
    bullet("Classic triad: Pain on passive extension of fingers + Pallor + Pulselessness"),
    bullet("Late: Wrist flexion + finger flexion contracture (clawing), forearm pronation"),
    bullet("3 Ps of compartment syndrome: Pain, Pallor, Pulselessness (also Paraesthesia, Paralysis)"),
]
story.append(info_box(vic_items, bg=LRED, border_color=RED))
story.append(Spacer(1, 0.2*cm))

story.append(Paragraph("<b>Management</b>", bold_body))
mgmt_rows = [
    ["Gartland I", "Above-elbow POP cast in 90Β° flexion for 3 weeks"],
    ["Gartland II", "Closed reduction + POP / percutaneous K-wire fixation"],
    ["Gartland III", "Closed reduction + percutaneous K-wire (crossed or lateral). ORIF if closed fails."],
    ["Neurovascular compromise", "Urgent reduction. If no pulse after reduction β†’ explore brachial artery."],
]
story.append(two_col_table(mgmt_rows, col1_w=3.5*cm))
story.append(Spacer(1, 0.5*cm))

# ══════════════════════════════════════════════════════════════════════════════
# 2. LATERAL CONDYLE FRACTURE
# ══════════════════════════════════════════════════════════════════════════════
story.append(KeepTogether([
    header_bar("2.  LATERAL CONDYLE FRACTURE", colors.HexColor("#0369A1")),
    Spacer(1, 0.15*cm),
]))

lc_rows = [
    ["Site", "Fracture through lateral condyle of humerus (Salter-Harris Type IV physeal injury)"],
    ["Age", "2nd most common elbow fracture in children (5–10 yrs)"],
    ["Mechanism", "FOOSH with varus stress / avulsion by common extensor origin"],
    ["Key Feature", "Fracture line enters the joint β€” intra-articular. Risk of non-union is HIGH."],
    ["Classification", "Milch Type I (lateral trochlear ridge intact) & Type II (fracture through trochlear groove)"],
]
story.append(two_col_table(lc_rows, col1_w=3.5*cm))

lc_comp = [
    bullet("Non-union (most common complication) β†’ fishtail deformity on X-ray"),
    bullet("Malunion β†’ Cubitus valgus β†’ Late ulnar nerve palsy (tardy ulnar palsy)"),
    bullet("Avascular necrosis of lateral condyle"),
    bullet("Stiffness"),
]
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph("<b>Complications</b>", bold_body))
story.append(info_box(lc_comp, bg=LYELLOW, border_color=YELLOW))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Management</b>: Undisplaced β†’ POP cast. Displaced β†’ ORIF with K-wires or screws.", body_style))
story.append(Spacer(1, 0.4*cm))

# ══════════════════════════════════════════════════════════════════════════════
# 3. MEDIAL EPICONDYLE FRACTURE
# ══════════════════════════════════════════════════════════════════════════════
story.append(KeepTogether([
    header_bar("3.  MEDIAL EPICONDYLE FRACTURE", colors.HexColor("#0F766E")),
    Spacer(1, 0.15*cm),
]))

me_rows = [
    ["Type", "Extra-articular avulsion fracture (apophyseal)"],
    ["Age", "Adolescents (10–15 yrs). Ossification centre appears at ~5 yrs."],
    ["Mechanism", "Valgus stress (FOOSH) or elbow dislocation (associated in 50% cases)"],
    ["Key Point", "Epicondyle may become trapped inside the joint following reduction of dislocation β€” check post-reduction X-ray!"],
]
story.append(two_col_table(me_rows, col1_w=3.5*cm))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
    "<b>Nerve at Risk:</b> Ulnar nerve (runs in groove posterior to medial epicondyle). "
    "Injury causes: Weakness of intrinsic hand muscles, claw hand, sensory loss over medial 1Β½ fingers.",
    body_style))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph("<b>Management</b>: Undisplaced β†’ conservative. Displaced / incarcerated in joint β†’ ORIF.", body_style))
story.append(Spacer(1, 0.4*cm))

# ══════════════════════════════════════════════════════════════════════════════
# 4. OLECRANON FRACTURE
# ══════════════════════════════════════════════════════════════════════════════
story.append(KeepTogether([
    header_bar("4.  OLECRANON FRACTURE", ORANGE),
    Spacer(1, 0.15*cm),
]))

ol_rows = [
    ["Site", "Olecranon process of ulna (insertion of triceps brachii)"],
    ["Age", "Adults (all ages)"],
    ["Mechanism", "1. Direct blow to olecranon  2. FOOSH + triceps avulsion  3. Avulsion by triceps contraction"],
    ["Clinical", "Pain, swelling over olecranon. Gap palpable at fracture site. INABILITY TO EXTEND the elbow actively."],
    ["X-ray", "Lateral view β€” transverse fracture at olecranon. Check for displacement."],
]
story.append(two_col_table(ol_rows, col1_w=3.5*cm))
story.append(Spacer(1, 0.15*cm))
ol_mgmt = [
    bullet("Undisplaced: Above elbow POP in 90Β° flexion for 3–4 weeks"),
    bullet("Displaced: Tension band wiring (TBW) β€” converts tensile force to compressive force at fracture site"),
    bullet("Comminuted: Plate and screw fixation or olecranon excision (elderly)"),
]
story.append(Paragraph("<b>Management</b>", bold_body))
story.append(info_box(ol_mgmt, bg=LORANGE, border_color=ORANGE))
story.append(Spacer(1, 0.4*cm))

# ══════════════════════════════════════════════════════════════════════════════
# 5. RADIAL HEAD FRACTURE
# ══════════════════════════════════════════════════════════════════════════════
story.append(KeepTogether([
    header_bar("5.  FRACTURE OF HEAD OF RADIUS", GREEN),
    Spacer(1, 0.15*cm),
]))

rh_rows = [
    ["Mechanism", "FOOSH β€” axial force transmitted up radius to radial head"],
    ["Age", "Adults (20–60 yrs). Most common elbow fracture in adults."],
    ["Clinical", "Lateral elbow pain, tenderness over radial head, painful pronation/supination, restricted extension"],
    ["X-ray Sign", "Posterior fat pad sign (sail sign) on lateral view = haemarthrosis = intra-articular fracture"],
    ["Classification", "Mason Classification (I–III, +/- Essex-Lopresti variant)"],
]
story.append(two_col_table(rh_rows, col1_w=3.5*cm))
story.append(Spacer(1, 0.15*cm))

mason_rows = [
    ["Mason I", "Undisplaced marginal fracture", "Sling, early mobilization"],
    ["Mason II", "Displaced / angulated (>30Β°, >30% head)", "ORIF with Herbert screw"],
    ["Mason III", "Comminuted fracture of entire head", "Radial head excision or prosthetic replacement"],
    ["Mason IV", "Any of above + elbow dislocation", "Treat dislocation first, then fracture"],
]
story.append(three_col_table(
    mason_rows,
    widths=[2.5*cm, 8.0*cm, doc.width-2.5*cm-8.0*cm],
    header_row=["Type", "Description", "Treatment"],
    bg_header=GREEN
))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
    "<b>Essex-Lopresti injury:</b> Radial head fracture + disruption of interosseous membrane + "
    "distal radioulnar joint subluxation. Do NOT excise radial head β€” causes proximal migration of radius.",
    body_style))
story.append(Spacer(1, 0.4*cm))

# ══════════════════════════════════════════════════════════════════════════════
# 6. PULLED ELBOW (NURSEMAID'S ELBOW)
# ══════════════════════════════════════════════════════════════════════════════
story.append(KeepTogether([
    header_bar("6.  PULLED ELBOW (NURSEMAID'S ELBOW)", PURPLE),
    Spacer(1, 0.15*cm),
]))

pe_rows = [
    ["Age", "< 5 years (radial head small + annular ligament lax)"],
    ["Mechanism", "Axial pull on the child's hand (e.g., pulled over a curb, swinging by hands)"],
    ["Pathology", "Radial head subluxes UNDER the annular ligament of radius"],
    ["Clinical", "Child holds arm in slight flexion + pronation, refuses to use arm, no obvious swelling"],
    ["X-ray", "Usually normal (subluxation, not fracture). Done to exclude fracture."],
    ["Treatment", "Closed reduction: Supination + compression over radial head (or hyperpronation method). IMMEDIATE pain relief after reduction."],
]
story.append(two_col_table(pe_rows, col1_w=3.5*cm))
story.append(Spacer(1, 0.4*cm))

# ══════════════════════════════════════════════════════════════════════════════
# 7. ELBOW DISLOCATION
# ══════════════════════════════════════════════════════════════════════════════
story.append(KeepTogether([
    header_bar("7.  ELBOW DISLOCATION", RED),
    Spacer(1, 0.15*cm),
]))

ed_rows = [
    ["Most Common Type", "Posterior dislocation (both forearm bones displace posteriorly)"],
    ["Age", "Adults and children. Most common dislocation in children."],
    ["Mechanism", "FOOSH with valgus stress"],
    ["Clinical", "Elbow appears shortened, posterior displacement of olecranon, elbow held in flexion, loss of normal triangle of bony points"],
    ["Key Difference from Supracondylar", "Triangle of bony points DISRUPTED (vs. preserved in supracondylar Fx)"],
    ["Complications", "Brachial artery, median/ulnar nerve injury. Associated fractures (medial epicondyle 50%, coronoid, radial head)."],
    ["Treatment", "Closed reduction under sedation. Immobilize in 90Β° for 2–3 weeks, then physiotherapy."],
]
story.append(two_col_table(ed_rows, col1_w=4.0*cm))
story.append(Spacer(1, 0.4*cm))

# ══════════════════════════════════════════════════════════════════════════════
# MNEMONIC / MEMORY AIDS PAGE
# ══════════════════════════════════════════════════════════════════════════════
story.append(header_bar("🧠  MNEMONICS & MEMORY AIDS", PURPLE))
story.append(Spacer(1, 0.2*cm))

# CRITOE box
critoe_items = [
    Paragraph("<b>CRITOE</b> β€” Ossification centres of elbow (order of appearance)", 
              ParagraphStyle("mn_hdr", fontSize=10, fontName="Helvetica-Bold", textColor=PURPLE, leading=15)),
    Spacer(1, 0.1*cm),
    Paragraph(
        "<b>C</b>apitulum (1 yr) &nbsp; <b>R</b>adial head (5 yrs) &nbsp; <b>I</b>nternal epicondyle (5 yrs) &nbsp; "
        "<b>T</b>rochlea (11 yrs) &nbsp; <b>O</b>lecranon (12 yrs) &nbsp; <b>E</b>xternal epicondyle (13 yrs)",
        ParagraphStyle("critoe", fontSize=9.5, fontName="Helvetica", textColor=BLACK, leading=15)),
    Spacer(1, 0.05*cm),
    Paragraph("Rule: If a centre appears in the wrong order on X-ray β†’ suspect avulsion fracture!",
              note_style),
]
story.append(info_box(critoe_items, bg=LPURPLE, border_color=PURPLE))
story.append(Spacer(1, 0.2*cm))

# Nerve injuries box
nerve_data = [
    ["Supracondylar Fx", "AIN (anterior interosseous nerve) β€” branch of median", "Cannot make 'OK' sign"],
    ["Medial Epicondyle Fx", "Ulnar nerve", "Claw hand, sensory loss medial 1Β½ fingers"],
    ["Lateral Condyle Fx (late)", "Ulnar nerve (tardy)", "Late progressive claw hand"],
    ["Radial Head Fx", "Posterior interosseous nerve (PIN)", "Wrist/finger drop"],
    ["Elbow Dislocation", "Median or ulnar nerve", "Variable"],
]
story.append(Paragraph("<b>Nerve Injuries β€” Quick Reference</b>", bold_body))
nerve_table = three_col_table(
    nerve_data,
    widths=[4.0*cm, 6.5*cm, doc.width-4.0*cm-6.5*cm],
    header_row=["Fracture", "Nerve at Risk", "Deficit"],
    bg_header=PURPLE
)
story.append(nerve_table)
story.append(Spacer(1, 0.2*cm))

# Bony points box
bp_items = [
    Paragraph("<b>Triangle of Bony Points</b> (medial epicondyle, lateral epicondyle, olecranon tip)", bold_body),
    bullet("Elbow <b>extended</b>: Three points form a <b>straight horizontal line</b>"),
    bullet("Elbow <b>flexed 90Β°</b>: Three points form an <b>isosceles triangle</b>"),
    bullet("<b>Supracondylar Fx:</b> Triangle PRESERVED (fracture above epicondyles)"),
    bullet("<b>Elbow Dislocation:</b> Triangle DISRUPTED (bones displaced)"),
]
story.append(info_box(bp_items, bg=LGREEN, border_color=GREEN))
story.append(Spacer(1, 0.2*cm))

# Volkmann box
vic2_items = [
    Paragraph("<b>Volkmann's Ischaemic Contracture β€” 5 Ps of Compartment Syndrome</b>", bold_body),
    Paragraph(
        "<b>P</b>ain (on passive extension of fingers) &nbsp;|&nbsp; "
        "<b>P</b>allor &nbsp;|&nbsp; <b>P</b>ulselessness &nbsp;|&nbsp; "
        "<b>P</b>araesthesia &nbsp;|&nbsp; <b>P</b>aralysis",
        ParagraphStyle("5ps", fontSize=9.5, fontName="Helvetica", textColor=BLACK, leading=16)
    ),
    Paragraph("Late deformity: Wrist flexion + finger flexion + forearm pronation (flexor ischaemia)", note_style),
]
story.append(info_box(vic2_items, bg=LRED, border_color=RED))
story.append(Spacer(1, 0.4*cm))

# ══════════════════════════════════════════════════════════════════════════════
# COMPARISON TABLE
# ══════════════════════════════════════════════════════════════════════════════
story.append(header_bar("πŸ“Š  SUPRACONDYLAR Fx  vs  ELBOW DISLOCATION  vs  LATERAL CONDYLE Fx", DGREY))
story.append(Spacer(1, 0.15*cm))

compare_rows = [
    ["Age", "Children 5–10 yrs", "Any age", "Children 5–10 yrs"],
    ["Mechanism", "FOOSH (extension)", "FOOSH + valgus", "FOOSH + varus"],
    ["Deformity", "S-shaped", "Posterior prominence", "Lateral swelling"],
    ["Bony Triangle", "PRESERVED", "DISRUPTED", "Preserved (usually)"],
    ["Nerve at Risk", "AIN (median branch)", "Median / Ulnar", "Ulnar (late)"],
    ["Main Complication", "Volkmann's, cubitus varus", "Associated fractures", "Non-union, cubitus valgus"],
    ["X-ray", "Oblique fracture line above epicondyles", "Posterior displacement both bones", "Fracture lateral condyle"],
]
compare = Table(
    [[Paragraph(f, ParagraphStyle("ch", fontSize=8.5, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER))]
     for f in ["Feature", "Supracondylar Fx", "Elbow Dislocation", "Lateral Condyle Fx"]],
    colWidths=[0]*4
)
# Build as proper table
header = ["Feature", "Supracondylar Fx", "Elbow Dislocation", "Lateral Condyle Fx"]
w_c = [3.2*cm, 4.6*cm, 4.6*cm, doc.width-3.2*cm-4.6*cm-4.6*cm]
comp_data = [[Paragraph(h, table_header_style) for h in header]]
for row in compare_rows:
    comp_data.append([Paragraph(c, body_style) for c in row])
comp_t = Table(comp_data, colWidths=w_c)
comp_t.setStyle(TableStyle([
    ("BACKGROUND",   (0,0), (-1,0), DGREY),
    ("GRID",         (0,0), (-1,-1), 0.4, colors.HexColor("#CBD5E1")),
    ("TOPPADDING",   (0,0), (-1,-1), 4),
    ("BOTTOMPADDING",(0,0), (-1,-1), 4),
    ("LEFTPADDING",  (0,0), (-1,-1), 5),
    ("RIGHTPADDING", (0,0), (-1,-1), 5),
    ("VALIGN",       (0,0), (-1,-1), "MIDDLE"),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, GREY]),
    ("FONTNAME",     (0,1), (0,-1), "Helvetica-Bold"),
]))
story.append(comp_t)
story.append(Spacer(1, 0.4*cm))

# ══════════════════════════════════════════════════════════════════════════════
# FAT PAD SIGN
# ══════════════════════════════════════════════════════════════════════════════
story.append(KeepTogether([
    header_bar("πŸ”  FAT PAD SIGN (X-ray)", colors.HexColor("#1D4ED8")),
    Spacer(1, 0.15*cm),
    info_box([
        Paragraph("<b>Anterior fat pad</b>: Normally visible as a thin lucent stripe β€” NOT significant alone.", body_style),
        bullet("<b>Elevated anterior fat pad</b> = may indicate effusion"),
        bullet("<b>Posterior fat pad sign</b> = ALWAYS abnormal = haemarthrosis = occult intra-articular fracture"),
        bullet("Seen on lateral X-ray of elbow in 90Β° flexion"),
        bullet("Most commonly indicates radial head fracture in adults, supracondylar fracture in children"),
        Paragraph("<i>Even if no fracture line visible, positive fat pad sign = treat as fracture!</i>", note_style),
    ], bg=LBLUE, border_color=BLUE),
]))
story.append(Spacer(1, 0.4*cm))

# ══════════════════════════════════════════════════════════════════════════════
# FOOTER
# ══════════════════════════════════════════════════════════════════════════════
story.append(HRFlowable(width="100%", thickness=0.5, color=DGREY))
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph(
    "Sources: Gray's Anatomy for Students | S Das Manual on Clinical Surgery (13th Ed.) | Campbell's Operative Orthopaedics (15th Ed. 2026) β€” For 1st Year MBBS Quick Revision",
    footer_style))

# ── BUILD PDF ──────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
Running Command

cd /home/daytona/workspace/elbow-revision && python generate_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/elbow-revision/Elbow_Joint_Fractures_Revision.pdf

Your revision PDF is ready! πŸŽ‰

Elbow Joint Fractures Revision

PDF Document Β· PDF


What's inside the PDF:
SectionContent
At a Glance TableAll fracture types, sites, age groups, mechanisms
Supracondylar FractureGartland classification, VIC, nerve injuries, management
Lateral Condyle FractureMilch classification, non-union, tardy ulnar palsy
Medial Epicondyle FractureIncarceration in joint, ulnar nerve injury
Olecranon FractureTension band wiring principle
Radial Head FractureMason classification, fat pad sign, Essex-Lopresti
Pulled ElbowMechanism, reduction technique
Elbow Dislocationvs supracondylar comparison
MnemonicsCRITOE, 5 Ps, bony triangle rules
Nerve Injury TableEvery fracture + nerve at risk + deficit
Comparison TableSupracondylar vs Dislocation vs Lateral Condyle
Fat Pad SignX-ray interpretation
This is a shared conversation. Sign in to Orris to start your own chat.