Give me a 15 minute microteaching on presentation to the topic is Hemorrhoids
"About 75% of people will experience hemorrhoids at some point in their lives - yet it remains one of the most underdiagnosed and undertreated conditions. Today in 15 minutes you will be able to define hemorrhoids, classify them, describe their clinical features, and outline their management from conservative to surgical."
β οΈ Teaching tip: Draw a clock face on the board. Mark 3, 7, 11. Relate to posterior midline, left lateral, and right anterior.
| Factor | Mechanism |
|---|---|
| Upright posture | Gravity increases venous pressure |
| Portal venous system (no valves) | No pressure relief mechanism |
| Abdominal pressure (raised) | Straining, constipation, pregnancy |
| Venous plexus engorgement | Pooling β varicosities |
Straining / raised intra-abdominal pressure
β
Venous plexus engorgement
β
Shearing forces β mucosal trauma β BLEEDING
β
Caudal displacement of anal cushions β PROLAPSE
β
Impaired venous drainage β fluid transudation β PRURITUS
β
Fragmentation of supporting structures (ageing)
β
Loss of elasticity β cushions no longer retract
| Degree | Features | Key Point |
|---|---|---|
| 1st | Bleed only, no prolapse | "Bleed but stay in" |
| 2nd | Prolapse but reduce spontaneously | "Come out, go back on their own" |
| 3rd | Prolapse, require manual reduction | "Need to push back in" |
| 4th | Permanently prolapsed, irreducible | "Always out" |
π‘ Memory trick: "1-2-3-4 = Bleed-Spontaneous-Manual-Permanent"
β οΈ RED FLAG: Pain should alert you to another diagnosis - think anal fissure, perianal abscess, or thrombosed external hemorrhoid
| Symptom | Characteristic |
|---|---|
| Bleeding | Bright red, painless, separate from stool |
| Discharge | Mucus - causes pruritus |
| Lump | Soft, reducible (depends on degree) |
| Pain | ABSENT in uncomplicated internal hemorrhoids |
Always rule out colorectal malignancy first before attributing rectal bleeding to hemorrhoids.
| Procedure | Mechanism | Notes |
|---|---|---|
| Injection sclerotherapy | 5% phenol in arachis/almond oil β submucosal fibrosis | Inject at apex of pedicle (3-5 mL), NOT into hemorrhoid itself. Pain = wrong position |
| Rubber band ligation (Barron's) | Elastic bands cause ischaemic necrosis β sloughing in 10 days | Band must be above dentate line - below causes intense pain |
| Infrared photocoagulation | Coagulates tissue | Less commonly used |
| Cryotherapy | Tissue destruction by freezing | Not commonly used |
π‘ Rubber band ligation has largely superseded injection sclerotherapy due to risk of prostatitis/pelvic sepsis with deep injection.
ALL PATIENTS β Exclude malignancy β Conservative measures
β (if fails)
Grade 1 & 2 β Sclerotherapy / Rubber band ligation
β (if fails or Grade 3/4)
Haemorrhoidectomy / HAL / Stapled haemorrhoidopexy
| Condition | Distinguishing Feature |
|---|---|
| Anal fissure | Pain (severe, tearing), especially with defecation; fissure visible at 6 or 12 o'clock |
| Colorectal cancer | Change in bowel habit, weight loss, dark blood mixed with stool |
| Rectal prolapse | Full-thickness prolapse, concentric rings |
| Anal skin tags | Not true hemorrhoids; no vascular component |
| Perianal abscess | Throbbing pain, fever, induration |
| Inflammatory bowel disease | Mucus, altered bowel habit, systemic features |
A: Second degree
A: Placed the band BELOW the dentate line (must be above)
A: Thrombosed external hemorrhoid (perianal hematoma). Within 48 hours β evacuate clot under local anaesthesia
A: Exclude colorectal malignancy
Create a PowerPoint presentation of this microteaching
mkdir -p /tmp/workspace/hemorrhoids-pptx && ls /tmp/workspace/
~/hemorrhoids-pptx/build_pptx.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
from io import BytesIO
# ββ Colour palette ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DARK_BLUE = RGBColor(0x1A, 0x3A, 0x5C) # navy
MID_BLUE = RGBColor(0x25, 0x6D, 0xA8) # primary blue
LIGHT_BLUE = RGBColor(0xD6, 0xE8, 0xF7) # pale blue bg
ACCENT_RED = RGBColor(0xC0, 0x39, 0x2B) # alert / red
ACCENT_GREEN= RGBColor(0x1E, 0x8B, 0x4C) # green
GOLD = RGBColor(0xF3, 0x9C, 0x12) # gold / highlight
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
DARK_GREY = RGBColor(0x2C, 0x3E, 0x50)
LIGHT_GREY = RGBColor(0xEC, 0xF0, 0xF1)
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
BLANK = prs.slide_layouts[6]
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Helper utilities
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def bg(slide, color):
"""Fill slide background with a solid colour."""
bg_shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE,
0, 0,
prs.slide_width, prs.slide_height)
bg_shape.fill.solid()
bg_shape.fill.fore_color.rgb = color
bg_shape.line.fill.background()
bg_shape.shadow.inherit = False
return bg_shape
def rect(slide, x, y, w, h, fill_color, line_color=None, line_pt=0):
shp = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE,
Inches(x), Inches(y), Inches(w), Inches(h))
shp.fill.solid()
shp.fill.fore_color.rgb = fill_color
if line_color:
shp.line.color.rgb = line_color
shp.line.width = Pt(line_pt)
else:
shp.line.fill.background()
shp.shadow.inherit = False
return shp
def rounded_rect(slide, x, y, w, h, fill_color, line_color=None, line_pt=1):
shp = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,
Inches(x), Inches(y), Inches(w), Inches(h))
shp.fill.solid()
shp.fill.fore_color.rgb = fill_color
if line_color:
shp.line.color.rgb = line_color
shp.line.width = Pt(line_pt)
else:
shp.line.fill.background()
shp.shadow.inherit = False
return shp
def textbox(slide, x, y, w, h, text, font_size, color=DARK_GREY,
bold=False, italic=False, align=PP_ALIGN.LEFT,
v_anchor=MSO_ANCHOR.TOP, wrap=True,
font_name="Calibri", margin_lr=0.05, margin_tb=0.05):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = wrap
tf.vertical_anchor = v_anchor
tf.margin_left = Inches(margin_lr)
tf.margin_right = Inches(margin_lr)
tf.margin_top = Inches(margin_tb)
tf.margin_bottom= Inches(margin_tb)
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.name = font_name
run.font.size = Pt(font_size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
return tb, tf
def add_para(tf, text, font_size, color=DARK_GREY, bold=False, italic=False,
align=PP_ALIGN.LEFT, level=0, font_name="Calibri"):
p = tf.add_paragraph()
p.alignment = align
p.level = level
run = p.add_run()
run.text = text
run.font.name = font_name
run.font.size = Pt(font_size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
return p
def header_bar(slide, title, subtitle=None):
"""Dark blue top bar with title and optional subtitle."""
rect(slide, 0, 0, 13.333, 1.15, DARK_BLUE)
rect(slide, 0, 1.15, 13.333, 0.08, GOLD)
tb, tf = textbox(slide, 0.35, 0.1, 12.6, 0.75,
title, 28, WHITE, bold=True,
align=PP_ALIGN.LEFT,
v_anchor=MSO_ANCHOR.MIDDLE,
margin_lr=0.1, margin_tb=0.05)
if subtitle:
textbox(slide, 0.35, 0.75, 12.6, 0.38,
subtitle, 14, LIGHT_BLUE, italic=True,
align=PP_ALIGN.LEFT, margin_lr=0.1, margin_tb=0)
def footer(slide, text="Bailey & Love's Short Practice of Surgery, 28th Ed."):
rect(slide, 0, 7.2, 13.333, 0.3, DARK_BLUE)
textbox(slide, 0.3, 7.2, 13.0, 0.3, text,
9, LIGHT_BLUE, align=PP_ALIGN.LEFT,
v_anchor=MSO_ANCHOR.MIDDLE, margin_lr=0.1, margin_tb=0)
def pill(slide, x, y, w, h, fill, text, text_size=13, text_color=WHITE,
bold=True):
shp = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,
Inches(x), Inches(y), Inches(w), Inches(h))
shp.fill.solid()
shp.fill.fore_color.rgb = fill
shp.line.fill.background()
shp.shadow.inherit = False
tf = shp.text_frame
tf.word_wrap = True
tf.vertical_anchor = MSO_ANCHOR.MIDDLE
tf.margin_left = tf.margin_right = Inches(0.08)
tf.margin_top = tf.margin_bottom = Inches(0.02)
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
run = p.add_run()
run.text = text
run.font.name = "Calibri"
run.font.size = Pt(text_size)
run.font.bold = bold
run.font.color.rgb = text_color
return shp
def table_slide(slide, headers, rows, x, y, col_widths, row_h=0.45,
hdr_fill=MID_BLUE, hdr_text=WHITE,
alt_fill=LIGHT_BLUE, base_fill=WHITE,
font_size=13):
"""Draw a manual table using rectangles + textboxes."""
n_cols = len(headers)
# header row
cx = x
for i, (hdr, cw) in enumerate(zip(headers, col_widths)):
r = rect(slide, cx, y, cw - 0.02, row_h, hdr_fill)
tb = slide.shapes.add_textbox(Inches(cx+0.05), Inches(y+0.04),
Inches(cw-0.12), Inches(row_h-0.06))
tf = tb.text_frame
tf.word_wrap = True
tf.vertical_anchor = MSO_ANCHOR.MIDDLE
tf.margin_left = tf.margin_right = Inches(0.05)
tf.margin_top = tf.margin_bottom = Inches(0.02)
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
run = p.add_run()
run.text = hdr
run.font.name = "Calibri"
run.font.size = Pt(font_size)
run.font.bold = True
run.font.color.rgb = hdr_text
cx += cw
# data rows
for ri, row in enumerate(rows):
ry = y + row_h * (ri + 1)
fill = alt_fill if ri % 2 == 0 else base_fill
cx = x
for ci, (cell, cw) in enumerate(zip(row, col_widths)):
rect(slide, cx, ry, cw - 0.02, row_h, fill)
tb = slide.shapes.add_textbox(Inches(cx+0.05), Inches(ry+0.04),
Inches(cw-0.12), Inches(row_h-0.06))
tf = tb.text_frame
tf.word_wrap = True
tf.vertical_anchor = MSO_ANCHOR.MIDDLE
tf.margin_left = tf.margin_right = Inches(0.05)
tf.margin_top = tf.margin_bottom = Inches(0.02)
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.LEFT
run = p.add_run()
run.text = cell
run.font.name = "Calibri"
run.font.size = Pt(font_size - 1)
run.font.bold = False
run.font.color.rgb = DARK_GREY
cx += cw
# =============================================================================
# SLIDE 1 β Title Slide
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, DARK_BLUE)
# gold accent stripe
rect(slide, 0, 2.8, 13.333, 0.12, GOLD)
# main title
textbox(slide, 1.0, 1.0, 11.333, 1.6,
"HEMORRHOIDS", 72, WHITE, bold=True,
align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE,
font_name="Calibri Light")
# subtitle box
rounded_rect(slide, 3.5, 3.1, 6.3, 0.65, MID_BLUE)
textbox(slide, 3.5, 3.1, 6.3, 0.65,
"A 15-Minute Microteaching", 20, WHITE, bold=False, italic=True,
align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
# details
textbox(slide, 1.0, 4.0, 11.333, 0.45,
"Bailey & Love's Short Practice of Surgery, 28th Edition",
16, LIGHT_BLUE, italic=True, align=PP_ALIGN.CENTER)
textbox(slide, 1.0, 4.55, 11.333, 0.45,
"Colorectal Surgery | Chapter 80",
14, GOLD, bold=False, align=PP_ALIGN.CENTER)
# speaker label
textbox(slide, 1.0, 5.4, 11.333, 0.4,
"Orris Medical Education", 13, LIGHT_BLUE, align=PP_ALIGN.CENTER)
# =============================================================================
# SLIDE 2 β Learning Objectives
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, WHITE)
rect(slide, 0, 0, 0.18, 7.5, MID_BLUE)
header_bar(slide, "Learning Objectives", "By the end of this session, you will be able to:")
footer(slide)
objs = [
("1", "Define hemorrhoids and explain their anatomical basis"),
("2", "Classify hemorrhoids (Internal vs. External; 4 degrees)"),
("3", "Describe the pathophysiology"),
("4", "Recognize clinical features and complications"),
("5", "Outline management from conservative to surgical"),
]
for i, (num, text) in enumerate(objs):
yy = 1.45 + i * 0.96
pill(slide, 0.5, yy, 0.55, 0.65, MID_BLUE, num, 22, WHITE, True)
rounded_rect(slide, 1.25, yy, 11.4, 0.65, LIGHT_BLUE)
textbox(slide, 1.4, yy, 11.1, 0.65, text, 17, DARK_GREY,
bold=False, align=PP_ALIGN.LEFT,
v_anchor=MSO_ANCHOR.MIDDLE)
# =============================================================================
# SLIDE 3 β Definition & Anatomy
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, WHITE)
rect(slide, 0, 0, 0.18, 7.5, MID_BLUE)
header_bar(slide, "Definition & Anatomy")
footer(slide)
# Definition box
rounded_rect(slide, 0.4, 1.35, 12.5, 0.82, LIGHT_BLUE, MID_BLUE, 1.5)
textbox(slide, 0.55, 1.35, 12.2, 0.82,
"Haemorrhoids are symptomatic enlargements of the internal haemorrhoidal "
"venous plexus (Greek: haima = blood, rhos = flowing; synonym: PILES)",
15, DARK_GREY, italic=True, v_anchor=MSO_ANCHOR.MIDDLE, wrap=True)
# two columns
# Left: Internal
rounded_rect(slide, 0.4, 2.35, 5.9, 4.35, LIGHT_BLUE)
pill(slide, 0.5, 2.35, 5.7, 0.48, MID_BLUE, "INTERNAL HAEMORRHOIDS", 14)
bullets_int = [
"Arise from internal haemorrhoidal plexus",
"Located ABOVE the dentate line",
"Classically: 3, 7 & 11 o'clock positions (lithotomy)",
"Covered by mucosa (visceral innervation) β PAINLESS",
"Secondary haemorrhoids between primary positions",
]
tb, tf = textbox(slide, 0.55, 2.95, 5.6, 3.65, bullets_int[0],
14, DARK_GREY, wrap=True)
for b in bullets_int[1:]:
add_para(tf, b, 14, DARK_GREY)
# Right: External
rounded_rect(slide, 6.65, 2.35, 6.2, 4.35, LIGHT_BLUE)
pill(slide, 6.75, 2.35, 6.0, 0.48, ACCENT_RED, "EXTERNAL HAEMORRHOIDS", 14)
bullets_ext = [
"Arise from external haemorrhoidal plexus",
"Located BELOW the dentate line",
"Deep in perianal skin around anal verge",
"Covered by skin (somatic innervation) β PAINFUL",
"Often confused with anal skin tags (not true haemorrhoids)",
]
tb, tf = textbox(slide, 6.8, 2.95, 5.9, 3.65, bullets_ext[0],
14, DARK_GREY, wrap=True)
for b in bullets_ext[1:]:
add_para(tf, b, 14, DARK_GREY)
# =============================================================================
# SLIDE 4 β Pathophysiology
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, WHITE)
rect(slide, 0, 0, 0.18, 7.5, MID_BLUE)
header_bar(slide, "Pathophysiology", "Why do haemorrhoids develop?")
footer(slide)
# UPAV acronym boxes
factors = [
(DARK_BLUE, "U", "Upright Posture", "Gravity increases venous pressure in lower rectum"),
(MID_BLUE, "P", "Portal Venous System", "No valves β no pressure relief mechanism"),
(ACCENT_RED, "A", "Abdominal Pressure β", "Straining, constipation, pregnancy, obesity"),
(ACCENT_GREEN,"V", "Venous Engorgement", "Pooling of blood β varicosities form"),
]
for i, (col, letter, title, desc) in enumerate(factors):
xx = 0.4 + i * 3.22
rounded_rect(slide, xx, 1.35, 3.05, 2.85, LIGHT_BLUE)
pill(slide, xx + 0.1, 1.35, 0.7, 0.7, col, letter, 26, WHITE, True)
textbox(slide, xx + 0.05, 2.15, 2.92, 0.5, title,
14, col, bold=True, wrap=True)
textbox(slide, xx + 0.05, 2.7, 2.92, 1.3, desc,
12, DARK_GREY, wrap=True)
# Cascade flow
rect(slide, 0.4, 4.38, 12.5, 0.05, GOLD)
textbox(slide, 0.4, 4.47, 12.5, 0.35,
"The Progressive Cascade:", 14, DARK_GREY, bold=True)
cascade = [
("Straining", MID_BLUE),
("Venous Engorgement", MID_BLUE),
("Mucosal Trauma", ACCENT_RED),
("Prolapse + Pruritus", ACCENT_RED),
("Loss of Elasticity", DARK_BLUE),
]
for i, (label, col) in enumerate(cascade):
xx = 0.4 + i * 2.58
pill(slide, xx, 4.9, 2.45, 0.58, col, label, 12, WHITE, True)
if i < 4:
textbox(slide, xx + 2.45, 5.05, 0.18, 0.3, "β", 16, GOLD, bold=True)
# =============================================================================
# SLIDE 5 β Classification (4 Degrees)
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, WHITE)
rect(slide, 0, 0, 0.18, 7.5, MID_BLUE)
header_bar(slide, "Classification of Internal Haemorrhoids",
"Four Degrees of Severity")
footer(slide)
degrees = [
("1st Degree", MID_BLUE, "Bleed Only\nNo Prolapse",
"Earliest stage. Bright red painless rectal bleeding. "
"Haemorrhoids remain within the anal canal."),
("2nd Degree", ACCENT_GREEN, "Prolapse\nSpontaneous Reduction",
"Prolapse occurs during defecation but spontaneously returns to canal "
"on completion."),
("3rd Degree", GOLD, "Prolapse\nManual Reduction",
"Prolapse occurs and MUST be pushed back manually by the patient. "
"Represents significant disease."),
("4th Degree", ACCENT_RED, "Permanently\nProlapsed",
"Irreducible prolapse. May develop mixed haemorrhoids with external "
"cutaneous component."),
]
for i, (deg, col, key, desc) in enumerate(degrees):
xx = 0.38 + i * 3.23
# card
rounded_rect(slide, xx, 1.35, 3.08, 5.35, LIGHT_BLUE, col, 2)
# degree pill
pill(slide, xx + 0.08, 1.38, 2.9, 0.6, col, deg, 15, WHITE, True)
# key phrase
textbox(slide, xx + 0.1, 2.1, 2.88, 1.1, key,
18, col, bold=True, align=PP_ALIGN.CENTER,
v_anchor=MSO_ANCHOR.MIDDLE)
# description
textbox(slide, xx + 0.1, 3.3, 2.88, 2.8, desc,
12.5, DARK_GREY, wrap=True)
# memory trick
rounded_rect(slide, 0.38, 6.75, 12.55, 0.35, DARK_BLUE)
textbox(slide, 0.5, 6.75, 12.3, 0.35,
"Memory: 1=Bleed Only | 2=Spontaneous | 3=Manual | 4=Permanent",
13, GOLD, bold=True, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
# =============================================================================
# SLIDE 6 β Clinical Features
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, WHITE)
rect(slide, 0, 0, 0.18, 7.5, MID_BLUE)
header_bar(slide, "Clinical Features", "Symptoms & Signs")
footer(slide)
# Left column: main symptoms
textbox(slide, 0.4, 1.35, 6.2, 0.4, "Key Symptoms",
16, MID_BLUE, bold=True)
syms = [
("Bleeding", ACCENT_RED,
"Bright red, painless, SEPARATE from stool. Seen on paper or 'splash' in pan. Rarely causes anaemia."),
("Pruritus", GOLD,
"Mucus discharge causes perianal skin irritation and itching."),
("Prolapse", MID_BLUE,
"Soft lump at anal orifice during defecation (degree-dependent)."),
("Discharge", ACCENT_GREEN,
"Mucus discharge leading to soiling and discomfort."),
]
for i, (name, col, desc) in enumerate(syms):
yy = 1.85 + i * 1.2
pill(slide, 0.4, yy, 2.1, 0.45, col, name, 13, WHITE, True)
textbox(slide, 2.6, yy, 4.1, 0.45, desc, 12, DARK_GREY, wrap=True)
# RED FLAG box
rounded_rect(slide, 0.4, 6.6, 6.2, 0.52, ACCENT_RED)
textbox(slide, 0.55, 6.6, 5.9, 0.52,
"RED FLAG: Pain is NOT a feature of uncomplicated internal haemorrhoids! "
"Pain β think fissure, abscess, thrombosis.",
12, WHITE, bold=True, v_anchor=MSO_ANCHOR.MIDDLE, wrap=True)
# Right column: table
table_slide(slide,
["Feature", "Characteristic"],
[
["Onset", "Gradual, chronic"],
["Blood colour","Bright red (not dark)"],
["Relation to stool","Separate from motion"],
["Pain", "ABSENT in internal haemorrhoids"],
["Associated", "Mucus, pruritus, prolapse"],
["Age", "Any adult; peak 45-65 yrs"],
],
x=6.75, y=1.35,
col_widths=[2.6, 3.9],
row_h=0.76,
hdr_fill=DARK_BLUE, font_size=13)
# =============================================================================
# SLIDE 7 β Complications
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, WHITE)
rect(slide, 0, 0, 0.18, 7.5, MID_BLUE)
header_bar(slide, "Complications of Haemorrhoids")
footer(slide)
comps = [
("Strangulation\n& Thrombosis", ACCENT_RED,
"Circumferential prolapse. Severe discomfort. Impending mucosal necrosis. Urgent Hx or conservative Rx."),
("Ulceration", GOLD,
"Mucosal ulceration from ischaemia or trauma. May cause persistent bleeding."),
("Gangrene", DARK_BLUE,
"Progressive ischaemia leading to tissue necrosis. Requires urgent surgical intervention."),
("Portal Pyaemia", MID_BLUE,
"Rare but life-threatening. Septic emboli via portal vein to liver. Give systemic antibiotics."),
("Haemorrhage", ACCENT_RED,
"Severe bleeding; usually linked to bleeding diathesis or anticoagulation. May need transfusion or EUA."),
]
for i, (title, col, desc) in enumerate(comps):
xx = 0.4 + (i % 3) * 4.28
yy = 1.38 if i < 3 else 4.18
rounded_rect(slide, xx, yy, 4.1, 2.55, LIGHT_BLUE, col, 2)
textbox(slide, xx + 0.12, yy + 0.08, 3.86, 0.7,
title, 15, col, bold=True, v_anchor=MSO_ANCHOR.MIDDLE)
textbox(slide, xx + 0.12, yy + 0.85, 3.86, 1.55, desc,
12, DARK_GREY, wrap=True)
# Thrombosed external haemorrhoid note
rounded_rect(slide, 0.4, 6.78, 12.5, 0.38, DARK_BLUE)
textbox(slide, 0.55, 6.78, 12.1, 0.38,
"Thrombosed External Haemorrhoid (Perianal Haematoma): Sudden, olive-shaped, painful blue swelling at anal margin. "
"If <48 hrs: evacuate clot under LA. If >48 hrs: conservative management.",
11, WHITE, v_anchor=MSO_ANCHOR.MIDDLE, wrap=True)
# =============================================================================
# SLIDE 8 β Management Overview
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, WHITE)
rect(slide, 0, 0, 0.18, 7.5, MID_BLUE)
header_bar(slide, "Management", "Step-Up Approach: Conservative β Office β Surgical")
footer(slide)
# Step 0: Exclude malignancy banner
rounded_rect(slide, 0.4, 1.38, 12.5, 0.52, ACCENT_RED)
textbox(slide, 0.6, 1.38, 12.1, 0.52,
"FIRST PRIORITY: Exclude colorectal malignancy before attributing rectal bleeding to haemorrhoids",
16, WHITE, bold=True, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
steps = [
("STEP 1", MID_BLUE, "Conservative (All Grades)",
[
"High-fibre diet & adequate fluid intake",
"Improve defecatory habits, avoid straining",
"Stool softeners & bulking agents",
"Topical creams / suppositories",
"Phlebotonics (flavonoid extracts)",
]),
("STEP 2", ACCENT_GREEN, "Office-Based Procedures\n(Grades 1 & 2)",
[
"Injection sclerotherapy: 5% phenol in arachis oil",
"Rubber band ligation (Barron's) β FIRST LINE",
"Infrared photocoagulation",
"Band must be ABOVE dentate line",
]),
("STEP 3", ACCENT_RED, "Surgical (Grades 3 & 4,\nFailed office Rx)",
[
"Haemorrhoidectomy (open or closed)",
"Stapled haemorrhoidopexy (PPH)",
"Haemorrhoidal artery ligation (HAL)",
"Bleeding causing anaemia",
]),
]
for i, (step, col, title, bullets) in enumerate(steps):
xx = 0.4 + i * 4.3
rounded_rect(slide, xx, 2.1, 4.1, 4.6, LIGHT_BLUE, col, 2)
pill(slide, xx + 0.1, 2.1, 3.88, 0.55, col, step, 15, WHITE, True)
textbox(slide, xx + 0.12, 2.75, 3.84, 0.65, title,
13, col, bold=True, wrap=True)
tb, tf = textbox(slide, xx + 0.12, 3.5, 3.84, 3.0,
bullets[0], 12, DARK_GREY, wrap=True)
for b in bullets[1:]:
add_para(tf, b, 12, DARK_GREY)
# =============================================================================
# SLIDE 9 β Surgical Details
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, WHITE)
rect(slide, 0, 0, 0.18, 7.5, MID_BLUE)
header_bar(slide, "Surgical Options in Detail",
"Indications and Techniques")
footer(slide)
# Indications
rounded_rect(slide, 0.4, 1.38, 5.9, 3.5, LIGHT_BLUE, MID_BLUE, 1.5)
textbox(slide, 0.55, 1.38, 5.6, 0.45,
"Indications for Haemorrhoidectomy", 14, MID_BLUE, bold=True)
ind = [
"3rd and 4th degree haemorrhoids",
"2nd degree failed non-operative treatment",
"Mixed haemorrhoids with well-defined external component",
"Bleeding causing anaemia",
"Uncertainty about diagnosis β EUA Β± endoscopy",
]
tb, tf = textbox(slide, 0.55, 1.88, 5.6, 2.85, ind[0], 13, DARK_GREY, wrap=True)
for item in ind[1:]:
add_para(tf, item, 13, DARK_GREY)
# Techniques table
table_slide(slide,
["Technique", "Principle", "Key Points"],
[
["Open (Milligan-Morgan)", "Excise haemorrhoidal tissue; wound left open", "Most common in UK"],
["Closed (Ferguson)", "Excise & close wound primarily", "Common in USA"],
["Stapled (PPH)", "Circular stapler repositions prolapsed mucosa", "Less pain; higher recurrence"],
["HAL (Haemorrhoidal\nArtery Ligation)", "Doppler-guided ligation of feeding arteries", "Minimal tissue excision"],
],
x=6.6, y=1.38,
col_widths=[3.0, 3.0, 2.8],
row_h=0.82,
font_size=12)
# Post-op care
rounded_rect(slide, 0.4, 5.05, 5.9, 1.72, LIGHT_BLUE, ACCENT_GREEN, 1.5)
textbox(slide, 0.55, 5.05, 5.6, 0.4,
"Postoperative Care", 14, ACCENT_GREEN, bold=True)
postop = ("Warm baths x2 daily | Bulk laxatives | Adequate analgesia | "
"Metronidazole 5 days (reduces pain) | Follow-up at 3-4 weeks | "
"Beware: pain, retention, reactionary haemorrhage, anal stricture")
textbox(slide, 0.55, 5.5, 5.6, 1.2, postop, 12, DARK_GREY, wrap=True)
# =============================================================================
# SLIDE 10 β Differential Diagnosis
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, WHITE)
rect(slide, 0, 0, 0.18, 7.5, MID_BLUE)
header_bar(slide, "Differential Diagnosis",
"Conditions that mimic or coexist with haemorrhoids")
footer(slide)
table_slide(slide,
["Condition", "Key Distinguishing Feature", "Action"],
[
["Anal Fissure",
"Severe tearing pain during defecation; fissure at 6 or 12 o'clock",
"Examination; GTN / botulinum / surgery"],
["Colorectal Cancer",
"Change in bowel habit, weight loss, dark blood mixed with stool",
"Urgent colonoscopy"],
["Rectal Prolapse",
"Full-thickness prolapse; concentric mucosal rings",
"Examine fully; surgical repair"],
["Anal Skin Tags",
"Soft, fleshy; no vascular component; not true haemorrhoids",
"Reassurance; excision if symptomatic"],
["Perianal Abscess",
"Throbbing pain, fever, induration, erythema",
"Urgent incision & drainage"],
["IBD",
"Mucus, diarrhoea, altered bowel habit, systemic features",
"Colonoscopy; gastroenterology referral"],
],
x=0.38, y=1.38,
col_widths=[2.6, 5.5, 4.8],
row_h=0.72,
font_size=12)
# =============================================================================
# SLIDE 11 β Quiz Time
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, DARK_BLUE)
rect(slide, 0, 1.2, 13.333, 0.1, GOLD)
textbox(slide, 0.5, 0.15, 12.3, 0.95,
"Quick Quiz", 40, WHITE, bold=True,
align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
textbox(slide, 0.5, 0.9, 12.3, 0.35,
"Test your understanding!", 16, GOLD,
italic=True, align=PP_ALIGN.CENTER)
footer(slide, "Click to reveal answers")
qs = [
("Q1", "A patient has painless PR bleeding and prolapse that reduces spontaneously on its own. What degree?",
"Answer: 2nd Degree", MID_BLUE),
("Q2", "You apply a rubber band and the patient screams in pain. What went wrong?",
"Answer: Band placed BELOW dentate line (must be ABOVE)", ACCENT_RED),
("Q3", "A patient with a tense, blue, olive-shaped swelling at the anal margin β 36 hours after lifting a box. Dx?",
"Answer: Thrombosed external haemorrhoid. Within 48 hrs: evacuate clot under LA.", ACCENT_GREEN),
("Q4", "What is the FIRST priority before treating haemorrhoids?",
"Answer: Exclude colorectal malignancy", GOLD),
]
for i, (qnum, qtext, ans, col) in enumerate(qs):
xx = 0.35 + (i % 2) * 6.55
yy = 1.45 if i < 2 else 4.15
rounded_rect(slide, xx, yy, 6.28, 2.5, RGBColor(0x1E, 0x4A, 0x7A), col, 2)
pill(slide, xx + 0.1, yy + 0.08, 0.75, 0.48, col, qnum, 13, WHITE, True)
textbox(slide, xx + 0.12, yy + 0.62, 6.0, 1.05, qtext,
13, WHITE, wrap=True)
rounded_rect(slide, xx + 0.12, yy + 1.72, 6.0, 0.58, col)
textbox(slide, xx + 0.2, yy + 1.72, 5.84, 0.58,
ans, 12, WHITE, bold=True, v_anchor=MSO_ANCHOR.MIDDLE, wrap=True)
# =============================================================================
# SLIDE 12 β Summary & Take-Home Points
# =============================================================================
slide = prs.slides.add_slide(BLANK)
bg(slide, WHITE)
rect(slide, 0, 0, 0.18, 7.5, ACCENT_GREEN)
header_bar(slide, "Summary & Take-Home Points", "What you must remember")
footer(slide)
points = [
(MID_BLUE, "1",
"Definition",
"Haemorrhoids = symptomatic enlargements of anal cushions at 3, 7 & 11 o'clock"),
(ACCENT_GREEN,"2",
"Classification",
"Internal (above dentate) vs External (below dentate). 4 Degrees: Bleed / Spontaneous / Manual / Permanent"),
(GOLD, "3",
"Pathophysiology",
"Upright posture + no portal valves + raised abdominal pressure β venous engorgement β bleeding + prolapse"),
(ACCENT_RED, "4",
"Key Symptom",
"Bright red, painless, separate-from-stool rectal bleeding. PAIN = another diagnosis"),
(MID_BLUE, "5",
"Management Ladder",
"Conservative β Sclerotherapy / Band Ligation β Haemorrhoidectomy / HAL / Stapled"),
(DARK_BLUE, "6",
"First Priority",
"Always EXCLUDE COLORECTAL MALIGNANCY before attributing rectal bleeding to haemorrhoids"),
]
for i, (col, num, title, desc) in enumerate(points):
xx = 0.4 + (i % 2) * 6.4
yy = 1.35 + (i // 2) * 1.82
rounded_rect(slide, xx, yy, 6.15, 1.65, LIGHT_BLUE, col, 1.5)
pill(slide, xx + 0.1, yy + 0.1, 0.58, 0.58, col, num, 18, WHITE, True)
textbox(slide, xx + 0.82, yy + 0.12, 5.2, 0.42,
title, 14, col, bold=True, v_anchor=MSO_ANCHOR.MIDDLE)
textbox(slide, xx + 0.82, yy + 0.6, 5.2, 0.9,
desc, 12, DARK_GREY, wrap=True)
# =============================================================================
# Save
# =============================================================================
out_path = "/tmp/workspace/hemorrhoids-pptx/Hemorrhoids_Microteaching.pptx"
prs.save(out_path)
print(f"Saved: {out_path}")
cd /tmp/workspace/hemorrhoids-pptx && python build_pptx.py
ls -lh /tmp/workspace/hemorrhoids-pptx/Hemorrhoids_Microteaching.pptx
cd /tmp/workspace/hemorrhoids-pptx && python -c " from pptx import Presentation prs = Presentation('Hemorrhoids_Microteaching.pptx') print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): texts = [s.text_frame.text.strip()[:60] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] print(f' Slide {i}: {texts[0] if texts else \"(no text)\"}') "
Hemorrhoids Microteaching
Presentation Β· PPTX
| Slide | Title | Content |
|---|---|---|
| 1 | Title Slide | Hemorrhoids - A 15-Minute Microteaching |
| 2 | Learning Objectives | 5 numbered objectives with pill design |
| 3 | Definition & Anatomy | Internal vs. External comparison cards |
| 4 | Pathophysiology | UPAV acronym cards + progressive cascade flow |
| 5 | Classification | 4-degree colour-coded cards with memory trick |
| 6 | Clinical Features | Symptom pills + feature table + red flag banner |
| 7 | Complications | 5 complication cards + thrombosed EH note |
| 8 | Management | 3-step ladder (Conservative / Office / Surgical) |
| 9 | Surgical Options | Indications, techniques table, post-op care |
| 10 | Differential Diagnosis | 6-row comparison table |
| 11 | Quick Quiz | 4 interactive Q&A cards |
| 12 | Summary | 6 take-home point cards |
Microteaching topic is hemorrhoids. Give me a presentation on this topic
What format would you like the presentation in? Β· Who is the target audience?
ls -lh /tmp/workspace/hemorrhoids-pptx/
Hemorrhoids Microteaching
Presentation Β· PPTX
"Good morning everyone. Today's microteaching topic is Hemorrhoids - or Haemorrhoids as we say in British surgical tradition. It's sometimes called 'piles.' This is one of the most common anorectal conditions you'll encounter in general practice, emergency medicine, and surgery. About 75% of people will experience it at some point in their lives. Let's spend the next 15 minutes making sure you understand it thoroughly."
"By the end of this session, you should be able to:
- Define hemorrhoids and explain their anatomical basis
- Classify them - internal vs. external, and the four degrees of internal hemorrhoids
- Describe the pathophysiology
- Recognize clinical features and complications
- Outline management from conservative all the way to surgical
Let's go."
"First - what exactly are hemorrhoids? The word comes from Greek: haima = blood, rhos = flowing. Clinically, hemorrhoids are symptomatic enlargements of the anal cushions - the internal hemorrhoidal venous plexus.Now - important point. Anal cushions are normal structures. Every one of us has them. They sit submucosally in the anal canal and actually serve a function - they contribute to sealing the anal canal. They only become 'hemorrhoids' when they become symptomatic and enlarged.We divide them into two types based on their relationship to the dentate line - this is the crucial anatomical landmark:
Internal hemorrhoids arise ABOVE the dentate line, from the internal hemorrhoidal plexus. They are covered by mucosa. Because the mucosa has visceral innervation, internal hemorrhoids are painless. External hemorrhoids arise BELOW the dentate line. They are covered by skin, which has somatic innervation. So these are painful.Internal hemorrhoids classically lie at the 3, 7, and 11 o'clock positions when the patient is in the lithotomy position. Secondary hemorrhoids can develop between these primary positions."
"Why do hemorrhoids develop? Remember the acronym UPAV:U - Upright Posture: Unlike four-legged animals, we're upright. Gravity continuously increases venous pressure in the lower rectum.P - Portal venous system: There are NO valves in the portal venous system. So there's no pressure relief mechanism. Any increase in upstream pressure transmits directly to the anal plexus.A - Raised Abdominal Pressure: This is the big one - straining during constipation, pregnancy, chronic cough, obesity. Every Valsalva maneuver pushes blood down into that plexus.V - Venous engorgement: The result of all of the above. Blood pools, varicosities form.And then the cascade begins:
- Shearing forces from straining cause mucosal trauma β bleeding
- The anal cushions get pushed downward β prolapse
- Prolapse impairs venous drainage β fluid transudation β pruritus
- Over time, the supporting structures fragment - partly from ageing, partly accelerated by the condition itself - and the cushions lose elasticity. They no longer retract after defecation. Now you have permanent prolapse."
"Internal hemorrhoids are classified into four degrees. This guides treatment - so you MUST know this.First degree - They bleed but do not prolapse. The hemorrhoids remain inside the anal canal. Earliest stage.Second degree - They prolapse through the anal canal during defecation, but spontaneously reduce by themselves afterwards. The patient may notice a lump that 'disappears.'Third degree - They prolapse and require manual reduction - the patient has to push them back in with their finger. This is significant disease.Fourth degree - Permanently prolapsed. Cannot be reduced at all. Often at this stage there is a significant cutaneous component - these are called 'mixed' hemorrhoids.Memory aid: 1 = Bleed | 2 = Spontaneous | 3 = Manual | 4 = Permanent
External hemorrhoids sit outside this classification. The most important presentation of external hemorrhoids is the thrombosed external hemorrhoid - also called a perianal haematoma. Sudden onset, severe pain, olive-shaped, blue-tinged, tense swelling at the anal margin. Usually happens after straining, heavy lifting, or coughing."
"Now let's talk about what brings the patient to you. The key symptoms are:1. Bleeding - This is the EARLIEST symptom. Characteristically bright red, separate from the stool - not mixed in with it. It's seen on the toilet paper on wiping, or as a fresh 'splash' in the pan. It is usually painless. It is rarely enough to cause anaemia on its own.2. Pruritus - itching around the anus. Caused by mucus discharge from the prolapsing mucosa, which irritates the perianal skin.3. Prolapse - the patient notices a lump at the anal orifice, degree-dependent as we just discussed.4. Mucus discharge - soiling, discomfort.Now I want to highlight the single most important clinical pearl about hemorrhoids:"
"PAIN is NOT a feature of uncomplicated internal hemorrhoids. Internal hemorrhoids are above the dentate line - visceral innervation - they do not cause pain. If your patient has significant anorectal pain and you're thinking hemorrhoids, stop and reconsider. Think: anal fissure, perianal abscess, thrombosed external hemorrhoid, or something more serious. Pain should always make you look harder."
"Complications of hemorrhoids - four to know:Strangulation and thrombosis - circumferential prolapse with vascular compromise. The patient presents in severe distress with an enormous, irreducible, oedematous prolapse. You must distinguish this from rectal prolapse. Treatment is either urgent haemorrhoidectomy or conservative management - adequate analgesia, bed rest, cold saline compresses, laxatives. Resolution usually occurs in 3-4 days. Give systemic antibiotics to reduce risk of portal pyaemia.Ulceration - ischaemic mucosal breakdown.Gangrene - end-stage ischaemia. Rare but a surgical emergency.Portal pyaemia - rare but potentially fatal. Septic emboli travel via the portal vein to the liver. This is why we give antibiotics in strangulation.Back to the thrombosed external hemorrhoid - if the patient presents within 48 hours, evacuate the clot under local anaesthesia. After 48 hours, most surgeons manage conservatively as the clot begins to resolve anyway."
"Management follows a step-up ladder. But before any of this:"
"First priority: EXCLUDE COLORECTAL MALIGNANCY. Never, ever assume rectal bleeding is due to hemorrhoids without excluding cancer. If there is any clinical doubt, you colonoscope the patient.Step 1 - Conservative (for ALL grades, always the first step):
- High-fibre diet and good fluid intake
- Improve defecatory habits - advise against prolonged straining or sitting on the toilet reading
- Stool softeners and bulking agents like ispaghula husk
- Topical creams and suppositories for symptom relief
- Phlebotonics - these are plant-based flavonoid extracts that reduce capillary permeability and increase lymphatic drainage. Some evidence for symptomatic benefit.
Step 2 - Office-based procedures (for grades 1 and 2 that fail conservative):The main two are:
Injection sclerotherapy: 3-5 mL of 5% phenol in arachis oil is injected into the apex (the base) of the hemorrhoidal pedicle - NOT into the hemorrhoid itself. This causes fibrosis that obliterates the vascular channels. If the patient feels pain during injection, the needle is in the wrong place. Major warning: if injected too deeply, you can cause prostatitis or pelvic sepsis. Rubber band ligation (Barron's banding) - this has largely superseded sclerotherapy. A tight elastic band is slipped onto the base of the hemorrhoid pedicle. The band causes ischaemic necrosis - the pile sloughs off in about 10 days. CRITICAL POINT: The band MUST be placed above the dentate line. Below the dentate line = somatic pain = the patient will be in agony. You can treat all three primary hemorrhoids in one session.Step 3 - Surgical (grades 3 and 4, failed office procedures, bleeding causing anaemia):
Haemorrhoidectomy - open (Milligan-Morgan, most common in the UK) or closed (Ferguson, popular in the USA). The hemorrhoidal tissue is excised. Main complications: postoperative pain, urinary retention, reactionary haemorrhage, and late anal stricture. Stapled haemorrhoidopexy (PPH - Procedure for Prolapse and Haemorrhoids) - a circular stapler repositions the prolapsed mucosa rather than excising it. Less postoperative pain but higher recurrence rates. HAL (Haemorrhoidal Artery Ligation) - Doppler-guided ligation of the feeding arteries. Minimal tissue excision."
"Quick run through the differentials - these are conditions you must not miss when a patient presents with rectal bleeding or a perianal lump:
- Anal fissure - tearing pain on defecation, fissure visible at 6 or 12 o'clock. Treated differently.
- Colorectal cancer - change in bowel habit, dark blood mixed with stool, weight loss, family history.
- Rectal prolapse - full-thickness prolapse, concentric rings of mucosa, more common in elderly women.
- Anal skin tags - soft, fleshy, no vascular component. Not true hemorrhoids. Reassurance only.
- Perianal abscess - throbbing pain, fever, induration. Needs urgent drainage.
- Inflammatory bowel disease - mucus, altered bowel habit, systemic features. Colonoscopy and gastroenterology referral."
"Right - let's test what you've learned. Four quick questions:"
"To summarise the six things you must take away today:
- Hemorrhoids are symptomatic enlargements of normal anal cushions at 3, 7, 11 o'clock.
- Internal = above dentate line = painless. External = below = painful.
- Four degrees: Bleed - Spontaneous - Manual - Permanent.
- Key symptom: bright red, painless, rectal bleeding separate from stool. Pain = look for another diagnosis.
- Management ladder: Conservative first, then office procedures (band ligation preferred), then surgery.
- ALWAYS exclude colorectal malignancy before attributing rectal bleeding to hemorrhoids.
Thank you. Any questions?"
Es topic ko nursing student ko kaise samjhu hindi and english me
"Good morning everyone! Aaj hum ek aisa topic padhenge jo bahut common hai - aapke future patients mein se kaafi logon ko yeh problem hogi - lekin log iske baare mein baat karne mein sharminda hote hain. Topic hai - Hemorrhoids, jise hum Hindi mein Bawaseer ya Piles bhi kehte hain.Ek baat batao - kya aapne kabhi kisi ko kehte suna hai 'mere piles hain'? (pause) Bilkul! Bahut common hai. Toh aaj hum is topic ko clearly samajhenge taki aap apne patients ki proper care kar sako."
"Toh sabse pehle - Hemorrhoids hote kya hain?"
"Dekhiye - hamare anus ke andar kuch normal blood vessels hote hain jo cushion ki tarah kaam karte hain. Yeh seal karte hain anal canal ko. Jab yeh cushions suj jaate hain aur symptoms dene lagte hain, tab inhe Hemorrhoids kehte hain."
| Internal Hemorrhoids | External Hemorrhoids | |
|---|---|---|
| Kahan | Dentate line ke UPAR | Dentate line ke NEECHE |
| Covering | Mucosa (andar ki layer) | Skin (bahar ki layer) |
| Pain | NAHI hota (visceral nerve) | HOTA HAI (somatic nerve) |
| Hindi mein | Andar ke bawaseer | Bahar ke bawaseer |
"Yahan ek important baat - Dentate line ek imaginary line hai jo anus ke andar hoti hai. Iske upar ke hemorrhoids mein DARD NAHI hota - kyunki wahan ki nerves pain feel nahi karti. Neeche ke hemorrhoids mein DARD HOTA HAI - kyunki wahan ki skin ki nerves sensitive hoti hain.Internal hemorrhoids teen jagah hote hain - 3, 7 aur 11 baje - jaise ghadi ki dial hoti hai - lithotomy position mein patient ko rakhke dekha jaye toh."
"Ab samajhte hain ki yeh kyon hota hai. Main aapko ek simple tarika batata/batati hun - yaad karo 'PCCP'"
"Jab hum zor lagaate hain - toilet mein strain karte hain - ya pregnancy mein baby ka weight hota hai - toh neeche pressure badh jaata hai. Blood vessels pe zyada pressure padta hai."
"Jo log toilet mein zyada time bithate hain, phone chalate hain - (students haste hain) - haan yeh sach mein ek reason hai! Zyada strain = zyada problem."
"Portal venous system mein koi valves nahi hote. Matlab jab bhi pressure badhe - directly neeche aa jaata hai. Koi rokne wala nahi."
"Hum insaan seedhe khade rehte hain - gravity ki wajah se blood neeche ki taraf aa jaata hai. Yeh bhi ek reason hai."
"Ek baar yeh shuru ho jaaye toh:"
Zor lagana / Pressure badhna
β
Blood vessels sujh jaati hain
β
Straining se mucosa pe chot lagti hai β KHOON AATA HAI
β
Cushions neeche khisak jaati hain β PROLAPSE (bahar aana)
β
Drainage ruk jaati hai β Fluid β KHUJLI (PRURITUS)
β
Elasticity khatam β Permanently bahar aa jaati hain
"Internal Hemorrhoids ko hum 4 degrees mein divide karte hain. Yeh bahut important hai - treatment isi pe depend karta hai!"
| Degree | Kya Hota Hai | Ek Line Mein |
|---|---|---|
| 1st Degree | Sirf khoon aata hai, bahar nahi aata | "Khoon aata hai, andar rehta hai" |
| 2nd Degree | Bahar aata hai toilet ke time, khud andar chala jaata hai | "Bahar aata hai, khud jaata hai" |
| 3rd Degree | Bahar aata hai, haath se andar karna padta hai | "Haath se daalna padta hai" |
| 4th Degree | Hamesha bahar rehta hai, andar nahi jaata | "Permanently bahar" |
"Yaad karne ka trick: 1-2-3-4 = Khoon - Khud - Haath - Hamesha(Audience se poochho) Ek patient bolta hai - 'Doctor sahab, toilet ke time ek gadda bahar aata hai lekin apne aap andar chala jaata hai.' Yeh konsa degree hai?" (pause) "Bilkul sahi - 2nd Degree!"
"Ab dekhte hain ki patient kya complaints lekar aata hai:"
"Yeh pehla aur sabse common symptom hai. Khoon ka color - bright red hota hai. Yeh stool ke saath mix nahi hota - alag hota hai. Tissue paper pe dikhai deta hai ya pan mein splash hota hai. Aur important baat - DARD NAHI HOTA iske saath."
"Andar se mucus discharge hota hai jo skin ko irritate karta hai. Patient kehta hai 'wahan bahut khujli hoti hai.' Yeh embarrassing hota hai patient ke liye - toh compassionate rehna apne communication mein."
"Toilet ke time ek lump bahar aata hai. Degree ke hisaab se - ya toh khud jaata hai ya haath se dalna padta hai."
"Mucus discharge hota hai. Patient ko undergarments mein daag ki problem hoti hai."
"DARD hemorrhoids ka symptom NAHI hai! Agar kisi internal hemorrhoid wale patient ko zyada dard ho - toh ruko aur sochho - kya aur kuch hai? Anal fissure? Abscess? Kuch aur? Yeh bahut important hai exam mein bhi aur practice mein bhi."
"Agar treatment na ho toh kya complications ho sakte hain?"
"Pile ka khoon supply band ho jaata hai - tissue marne lagta hai. Patient severe pain mein hota hai. Emergency situation."
"Tissue ki death se ulcer ban jaata hai - bleeding aur badi ho jaati hai."
"Tissue completely mar jaata hai. Bahut rare but serious."
"Infection blood mein jaake liver tak pahunch sakta hai. Life-threatening. Isliye strangulation mein antibiotics dete hain."
"Ek important emergency - Thrombosed External Hemorrhoid ya Perianal Haematoma. Patient achanak bahut tez dard ke saath aata hai. Anus ke bahar ek olive jaise shape ka, neela-sa, tana hua gadda hota hai. Yeh straining, heavy lifting ya coughing ke baad hota hai. Agar 48 ghante ke andar hai - clot nikaala ja sakta hai local anaesthesia se. Baad mein conservative treatment."
"Ab sabse important part - treatment aur apka nursing role kya hoga."
"Colorectal cancer rule out karna - pehle. Kabhi bhi directly assume mat karo ki rectal bleeding sirf piles ki wajah se hai. Cancer bhi ho sakta hai. Doctor pehle investigate karenge."
"Sabse pehle simple changes:"
| Kya Karna Hai | Kyun |
|---|---|
| High fibre diet - sabzi, fruits, whole wheat | Stool soft rehta hai |
| Paani zyada pina - 8-10 glass | Constipation nahi hota |
| Straining mat karo toilet mein | Pressure nahi badhta |
| Toilet pe zyada time mat baitho | Venous pressure kam rehti hai |
| Topical creams / suppositories | Symptom relief |
"Patient ko counselling karo - diet ke baare mein, lifestyle ke baare mein. Yeh bahut important nursing role hai. Patient aksar embarrassed hote hain - comfortable feel karao unhe."
"Ek chemical - phenol in oil - inject karte hain hemorrhoid ke base mein. Yeh tissue ko scar banata hai aur blood supply band ho jaati hai. Nurse ka role - procedure mein assist karna, patient ko position mein rakhna (lithotomy position), aur baad mein observe karna."
"Ek tight rubber band hemorrhoid ke base pe lagaate hain. Khoon supply band ho jaati hai. 10 din mein pile khud gir jaata hai.CRITICAL NURSING POINT: Band dentate line ke UPAR lagni chahiye. Neeche lagi toh - patient ko bahut tez dard hoga! Agar patient band lagane ke baad cheekhe - nurse ko immediately doctor ko batana hai - galat jagah band lag gayi."
"Jab conservative aur office procedures kaam na aayein:"
| Surgery | Kya Hota Hai | Nurse ka Role |
|---|---|---|
| Haemorrhoidectomy | Pile ko surgically remove karna | Pre-op prep, post-op wound care |
| Stapled Haemorrhoidopexy | Stapler se mucosa reposition | Less pain, monitor bleeding |
| HAL (Artery Ligation) | Feeding artery ko band karna | Post-op observation |
"Urine retention - especially men mein - common post-op complication hai. Observe karo.""Secondary haemorrhage - 7-8 din ke baad hoti hai. Patient ko warn karo.""Anal stricture - late complication hai - regular follow-up zaroori hai."
"Jab bhi patient rectal problem lekar aaye - sirf piles mat socho:"
| Condition | Kaise Alag Pehchanein |
|---|---|
| Anal Fissure | Tez dard defecation mein, fissure dikhai deta hai |
| Colorectal Cancer | Dark blood, bowel habit change, weight loss |
| Perianal Abscess | Fever, throbbing pain, swelling, redness |
| Rectal Prolapse | Poori rectal wall bahar aati hai, elderly mein zyada |
| Anal Skin Tags | Soft, flabby - true hemorrhoids nahi |
| IBD | Mucus, diarrhea, systemic symptoms |
β 1st Degree
β Band dentate line ke neeche lag gayi - upar lagni chahiye thi
β Thrombosed external hemorrhoid - 48 hrs ke andar hai - local anaesthesia se clot evacuate karo
β High fibre diet, zyada paani, straining avoid karo
| # | Yaad Rakho |
|---|---|
| 1 | Hemorrhoids = Anal cushions ka symptomatic enlargement |
| 2 | Internal (upar, painless) vs External (neeche, painful) |
| 3 | 4 Degrees: Khoon - Khud - Haath - Hamesha |
| 4 | Main symptom: Bright red, painless, separate bleeding. Dard = kuch aur sochho |
| 5 | Treatment: Conservative β Band Ligation β Surgery |
| 6 | Pehle cancer rule out karo |
"Nursing practice mein yeh topic bahut important hai - isliye ki:
- Patient education aap hi doge - diet, hygiene, lifestyle
- Post-op care aap hi karoge
- Patient aksar embarrassed hote hain - aapka compassionate attitude unhe open karne mein help karega
- Red flags - pain, dark blood, weight loss - inhe kabhi ignore mat karo
Koi questions? Shukriya!"
| Assessment | Kya Poochho |
|---|---|
| Bleeding | Kab se? Kitna? Bright red ya dark? |
| Pain | Hota hai? Kab zyada? |
| Prolapse | Bahar aata hai? Khud jaata hai ya haath se? |
| Bowel habit | Constipation? Straining? |
| Diet | Fibre intake? Paani? |
| Nursing Action | Kab |
|---|---|
| Patient education - diet/lifestyle | Hamesha, every patient |
| Sitz bath teach karna | Post-procedure / post-op |
| Pain assessment | Har shift |
| Bleeding/discharge monitor | Post-op regularly |
| Urine output monitor | Post-op (retention risk) |
| Wound care - clean & dry | Daily |
Give me a summary of hemorrhoid
| Internal | External | |
|---|---|---|
| Location | Above dentate line | Below dentate line |
| Covering | Mucosa | Skin |
| Pain | NO (visceral nerve) | YES (somatic nerve) |
| Position | 3, 7, 11 o'clock (lithotomy) | Perianal skin |
| Degree | Feature | Memory |
|---|---|---|
| 1st | Bleeding only, no prolapse | "Bleed only" |
| 2nd | Prolapse β spontaneous reduction | "Goes back itself" |
| 3rd | Prolapse β manual reduction needed | "Push it back" |
| 4th | Permanently prolapsed, irreducible | "Always out" |
| Symptom | Description |
|---|---|
| Bleeding | Bright red, painless, separate from stool |
| Pruritus | Mucus discharge irritates perianal skin |
| Prolapse | Lump at anal orifice (degree-dependent) |
| Discharge | Mucus, soiling |
| Pain | β NOT a feature of internal hemorrhoids |
π¨ RED FLAG: Pain = look for another diagnosis (fissure, abscess, thrombosis, cancer)
| Complication | Key Point |
|---|---|
| Strangulation & Thrombosis | Severe pain, circumferential prolapse, emergency |
| Ulceration | Mucosal breakdown, persistent bleeding |
| Gangrene | Rare, surgical emergency |
| Portal Pyaemia | Septic emboli to liver, life-threatening |
| Severe Haemorrhage | Usually with bleeding disorder or anticoagulants |
β οΈ FIRST: Always exclude colorectal malignancy
| Procedure | Key Point |
|---|---|
| Rubber Band Ligation β First choice | Band MUST be above dentate line |
| Injection Sclerotherapy | 5% phenol; inject at apex, not the hemorrhoid itself |
| Infrared photocoagulation | Less commonly used |
| Surgery | Note |
|---|---|
| Haemorrhoidectomy (Milligan-Morgan / Ferguson) | Gold standard |
| Stapled Haemorrhoidopexy (PPH) | Less pain, higher recurrence |
| Haemorrhoidal Artery Ligation (HAL) | Doppler-guided, minimal excision |
Create a quick reference PDF cheat sheet for hemorrhoids
mkdir -p /tmp/workspace/hemorrhoids-pdf && ls /tmp/workspace/
~/hemorrhoids-pdf/build_cheatsheet.py
"""
Hemorrhoids Quick Reference Cheat Sheet
Single A4 page, rich colour layout using reportlab canvas (absolute positioning).
"""
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
from reportlab.platypus import Table, TableStyle
from reportlab.lib.colors import HexColor
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# ββ Page setup ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
W, H = A4 # 595.27 x 841.89 points
OUT = "/tmp/workspace/hemorrhoids-pdf/Hemorrhoids_Cheatsheet.pdf"
# ββ Colour palette βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
NAVY = HexColor("#1A3A5C")
BLUE = HexColor("#256DA8")
LBLUE = HexColor("#D6E8F7")
RED = HexColor("#C0392B")
LRED = HexColor("#FADBD8")
GREEN = HexColor("#1E8B4C")
LGREEN = HexColor("#D5F5E3")
GOLD = HexColor("#F39C12")
LGOLD = HexColor("#FEF9E7")
PURPLE = HexColor("#7D3C98")
LPURPLE = HexColor("#F4ECF7")
GREY = HexColor("#2C3E50")
LGREY = HexColor("#ECF0F1")
WHITE = colors.white
BLACK = colors.black
# ββ Canvas βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
c = canvas.Canvas(OUT, pagesize=A4)
c.setTitle("Hemorrhoids Quick Reference Cheat Sheet")
c.setAuthor("Orris Medical Education")
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Utility helpers
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def filled_rect(x, y, w, h, fill, stroke=None, radius=0):
c.saveState()
c.setFillColor(fill)
if stroke:
c.setStrokeColor(stroke)
c.setLineWidth(0.8)
else:
c.setStrokeColor(fill)
c.setLineWidth(0)
if radius:
c.roundRect(x, y, w, h, radius, fill=1, stroke=1 if stroke else 0)
else:
c.rect(x, y, w, h, fill=1, stroke=1 if stroke else 0)
c.restoreState()
def txt(x, y, text, size=8, color=GREY, bold=False, align="left"):
c.saveState()
c.setFillColor(color)
font = "Helvetica-Bold" if bold else "Helvetica"
c.setFont(font, size)
if align == "center":
c.drawCentredString(x, y, text)
elif align == "right":
c.drawRightString(x, y, text)
else:
c.drawString(x, y, text)
c.restoreState()
def wrapped_txt(x, y, w, text, size=7.5, color=GREY, bold=False, leading=10):
"""Draw wrapped text within width w, returns final y after last line."""
from reportlab.lib.utils import simpleSplit
font = "Helvetica-Bold" if bold else "Helvetica"
c.saveState()
c.setFillColor(color)
c.setFont(font, size)
lines = simpleSplit(text, font, size, w)
yy = y
for line in lines:
c.drawString(x, yy, line)
yy -= leading
c.restoreState()
return yy
def section_header(x, y, w, h, title, bg=NAVY, fg=WHITE, size=9):
filled_rect(x, y, w, h, bg)
txt(x + 4*mm, y + h/2 - size*0.35, title, size=size, color=fg, bold=True)
def pill(x, y, w, h, text, bg, fg=WHITE, size=7.5):
filled_rect(x, y, w, h, bg, radius=3)
txt(x + w/2, y + h/2 - size*0.38, text, size=size, color=fg, bold=True, align="center")
def mini_table(x, y, col_widths, rows,
hdr_bg=NAVY, hdr_fg=WHITE,
alt_bg=LBLUE, base_bg=WHITE,
font_size=7, row_h=13, hdr_h=14):
"""Draw a table with absolute positioning."""
n_cols = len(col_widths)
# header
cx = x
for i, (hdr, cw) in enumerate(zip(rows[0], col_widths)):
filled_rect(cx, y - hdr_h, cw, hdr_h, hdr_bg)
c.saveState()
c.setFillColor(hdr_fg)
c.setFont("Helvetica-Bold", font_size)
c.drawString(cx + 2*mm, y - hdr_h + hdr_h/2 - font_size*0.38, hdr)
c.restoreState()
cx += cw
# data rows
for ri, row in enumerate(rows[1:]):
ry = y - hdr_h - row_h * (ri + 1)
bg = alt_bg if ri % 2 == 0 else base_bg
cx = x
for ci, (cell, cw) in enumerate(zip(row, col_widths)):
filled_rect(cx, ry, cw, row_h, bg)
c.saveState()
c.setFillColor(GREY)
c.setFont("Helvetica", font_size)
# truncate if needed
max_w = cw - 4*mm
while c.stringWidth(cell, "Helvetica", font_size) > max_w and len(cell) > 3:
cell = cell[:-4] + "..."
c.drawString(cx + 2*mm, ry + row_h/2 - font_size*0.38, cell)
c.restoreState()
cx += cw
total_h = hdr_h + row_h * (len(rows) - 1)
return total_h
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# BACKGROUND
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
filled_rect(0, 0, W, H, WHITE)
# Top banner
filled_rect(0, H - 28*mm, W, 28*mm, NAVY)
# Gold stripe
filled_rect(0, H - 30*mm, W, 2*mm, GOLD)
# Title
txt(W/2, H - 13*mm, "HEMORRHOIDS", size=22, color=WHITE, bold=True, align="center")
txt(W/2, H - 20*mm, "Quick Reference Cheat Sheet", size=10, color=GOLD, align="center")
txt(W/2, H - 25.5*mm, "Bailey & Love's Short Practice of Surgery, 28th Ed. | Orris Medical Education",
size=7, color=HexColor("#A9CCE3"), align="center")
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Layout: 3 columns
# M = margin, CW = column width, GAP = gap between columns
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
M = 8*mm
GAP = 4*mm
CW = (W - 2*M - 2*GAP) / 3 # ~58mm each
TOP = H - 33*mm # start below banner
C1x = M
C2x = M + CW + GAP
C3x = M + 2*CW + 2*GAP
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# COLUMN 1
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
y = TOP
# --- DEFINITION ---
section_header(C1x, y - 7*mm, CW, 7*mm, " DEFINITION", NAVY)
filled_rect(C1x, y - 7*mm - 22*mm, CW, 22*mm, LBLUE)
txt(C1x + 2*mm, y - 7*mm - 5*mm,
"Symptomatic enlargement of the", size=7.5, color=GREY)
txt(C1x + 2*mm, y - 7*mm - 9.5*mm,
"anal cushions / internal haem-", size=7.5, color=GREY)
txt(C1x + 2*mm, y - 7*mm - 14*mm,
"orrhoidal venous plexus.", size=7.5, color=GREY)
txt(C1x + 2*mm, y - 7*mm - 19*mm,
"Synonym: Piles | Bawaseer", size=7, color=BLUE, bold=True)
y -= (7 + 22 + 2)*mm
# --- TYPES ---
section_header(C1x, y - 7*mm, CW, 7*mm, " TYPES", BLUE)
y -= 7*mm
# Internal pill
filled_rect(C1x, y - 33*mm, CW, 33*mm, LBLUE)
pill(C1x + 2*mm, y - 6*mm, CW - 4*mm, 5.5*mm, "INTERNAL", BLUE)
rows_int = [
("Location:", "Above dentate line"),
("Covering:", "Mucosa"),
("Pain:", "NONE (visceral nerve)"),
("Position:", "3, 7, 11 o'clock"),
]
yy = y - 7.5*mm
for label, val in rows_int:
txt(C1x + 2*mm, yy, label, size=6.5, color=NAVY, bold=True)
txt(C1x + 22*mm, yy, val, size=6.5, color=GREY)
yy -= 5.5*mm
y -= 34*mm
# External pill
filled_rect(C1x, y - 30*mm, CW, 30*mm, LRED)
pill(C1x + 2*mm, y - 6*mm, CW - 4*mm, 5.5*mm, "EXTERNAL", RED)
rows_ext = [
("Location:", "Below dentate line"),
("Covering:", "Skin"),
("Pain:", "YES (somatic nerve)"),
("Key:", "Thrombosis -> perianal haematoma"),
]
yy = y - 7.5*mm
for label, val in rows_ext:
txt(C1x + 2*mm, yy, label, size=6.5, color=RED, bold=True)
txt(C1x + 22*mm, yy, val, size=6.5, color=GREY)
yy -= 5.5*mm
y -= 31*mm
# --- PATHOPHYSIOLOGY ---
section_header(C1x, y - 7*mm, CW, 7*mm, " PATHOPHYSIOLOGY", PURPLE)
filled_rect(C1x, y - 7*mm - 48*mm, CW, 48*mm, LPURPLE)
causes = [
(BLUE, "P", "Pressure raised", "Constipation, pregnancy"),
(NAVY, "C", "Chronic straining", "Prolonged toilet sitting"),
(RED, "C", "Circulation", "No portal valves"),
(PURPLE, "P", "Posture", "Upright = gravity effect"),
]
yy = y - 7*mm - 4*mm
for col, letter, title, detail in causes:
pill(C1x + 2*mm, yy - 5*mm, 6*mm, 5*mm, letter, col, size=7)
txt(C1x + 10*mm, yy - 1.5*mm, title, size=7, color=col, bold=True)
txt(C1x + 10*mm, yy - 5.5*mm, detail, size=6.5, color=GREY)
yy -= 11.5*mm
# cascade arrow
txt(C1x + 2*mm, yy + 4*mm, "Cascade: Engorgement -> Bleed ->", size=6.5, color=GREY)
txt(C1x + 2*mm, yy - 0.5*mm, "Prolapse -> Pruritus -> Elasticity loss", size=6.5, color=GREY)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# COLUMN 2
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
y = TOP
# --- 4 DEGREES ---
section_header(C2x, y - 7*mm, CW, 7*mm, " 4 DEGREES (Internal)", GREEN)
y -= 7*mm
degree_data = [
("1st", "Bleed only, no prolapse", GREEN, LGREEN),
("2nd", "Prolapse -> spontaneous reduction", BLUE, LBLUE),
("3rd", "Prolapse -> manual reduction", GOLD, LGOLD),
("4th", "Permanently prolapsed", RED, LRED),
]
for deg, desc, col, bg in degree_data:
filled_rect(C2x, y - 13*mm, CW, 12*mm, bg, stroke=col)
pill(C2x + 1.5*mm, y - 10.5*mm, 12*mm, 8*mm, deg, col, size=8)
txt(C2x + 15*mm, y - 5.5*mm, desc, size=7, color=col, bold=True)
y -= 13.5*mm
# memory strip
filled_rect(C2x, y - 7*mm, CW, 7*mm, NAVY)
txt(C2x + W*0.005, y - 4.5*mm,
"Bleed | Spontaneous | Manual | Permanent",
size=6.5, color=GOLD, bold=True)
y -= 8.5*mm
# --- CLINICAL FEATURES ---
section_header(C2x, y - 7*mm, CW, 7*mm, " CLINICAL FEATURES", BLUE)
filled_rect(C2x, y - 7*mm - 58*mm, CW, 58*mm, LBLUE)
symptoms = [
(RED, "Bleeding", "Bright red, painless, separate from stool. On paper / splash in pan."),
(GOLD, "Pruritus", "Mucus discharge irritates perianal skin."),
(BLUE, "Prolapse", "Lump at anal orifice. Degree-dependent."),
(GREEN, "Discharge", "Mucus, soiling, discomfort."),
(GREY, "Pain", "NOT a feature of internal haemorrhoids!"),
]
yy = y - 7*mm - 3.5*mm
for col, name, detail in symptoms:
pill(C2x + 2*mm, yy - 5*mm, 20*mm, 5*mm, name, col, size=6.5)
wrapped_txt(C2x + 24*mm, yy - 1*mm, CW - 26*mm,
detail, size=6.2, color=GREY, leading=7)
yy -= 11.5*mm
y -= (7 + 58 + 2)*mm
# RED FLAG box
filled_rect(C2x, y - 12*mm, CW, 12*mm, RED)
txt(C2x + 2*mm, y - 4*mm, "RED FLAG:", size=7.5, color=WHITE, bold=True)
txt(C2x + 2*mm, y - 8.5*mm, "PAIN = look for another diagnosis!", size=7, color=WHITE)
txt(C2x + 2*mm, y - 12*mm + 1*mm, "(fissure / abscess / cancer / thrombosis)", size=6, color=LGOLD)
y -= 13.5*mm
# --- COMPLICATIONS ---
section_header(C2x, y - 7*mm, CW, 7*mm, " COMPLICATIONS", RED)
filled_rect(C2x, y - 7*mm - 40*mm, CW, 40*mm, LRED)
comps = [
"Strangulation & Thrombosis",
"Ulceration",
"Gangrene (rare, surgical emergency)",
"Portal Pyaemia (life-threatening)",
"Severe Haemorrhage",
]
yy = y - 7*mm - 4*mm
for comp in comps:
txt(C2x + 2*mm, yy, "- " + comp, size=7, color=GREY)
yy -= 7.5*mm
# Thrombosed EH note
filled_rect(C2x, y - 7*mm - 40*mm - 16*mm, CW, 16*mm, NAVY)
txt(C2x + 2*mm, y - 7*mm - 40*mm - 3.5*mm,
"Thrombosed Ext. Haemorrhoid:", size=6.5, color=GOLD, bold=True)
txt(C2x + 2*mm, y - 7*mm - 40*mm - 8*mm,
"Blue, olive-shaped, painful at anal margin.", size=6.2, color=WHITE)
txt(C2x + 2*mm, y - 7*mm - 40*mm - 12.5*mm,
"<48 hrs: evacuate clot | >48 hrs: conservative", size=6.2, color=HexColor("#A9CCE3"))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# COLUMN 3
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
y = TOP
# FIRST PRIORITY
filled_rect(C3x, y - 12*mm, CW, 12*mm, RED)
txt(C3x + 2*mm, y - 4.5*mm, "FIRST PRIORITY:", size=8, color=WHITE, bold=True)
txt(C3x + 2*mm, y - 9*mm, "Exclude colorectal malignancy!", size=7.5, color=LGOLD, bold=True)
txt(C3x + 2*mm, y - 12*mm + 1.5*mm, "Never assume PR bleeding = piles only.", size=6, color=WHITE)
y -= 13.5*mm
# --- MANAGEMENT ---
section_header(C3x, y - 7*mm, CW, 7*mm, " MANAGEMENT (Step-Up)", GREEN)
y -= 7*mm
# Step 1
filled_rect(C3x, y - 33*mm, CW, 33*mm, LGREEN, stroke=GREEN)
pill(C3x + 2*mm, y - 6*mm, CW - 4*mm, 5.5*mm, "STEP 1 - Conservative (All Grades)", GREEN, size=6.5)
step1 = [
"High-fibre diet + adequate fluids",
"Avoid straining, improve habits",
"Stool softeners / bulking agents",
"Topical creams / suppositories",
"Phlebotonics (flavonoid extracts)",
]
yy = y - 7.5*mm
for item in step1:
txt(C3x + 2*mm, yy, "β’ " + item, size=6.5, color=GREY)
yy -= 5.2*mm
y -= 34*mm
# Step 2
filled_rect(C3x, y - 33*mm, CW, 33*mm, LBLUE, stroke=BLUE)
pill(C3x + 2*mm, y - 6*mm, CW - 4*mm, 5.5*mm, "STEP 2 - Office Procedures (Gr 1&2)", BLUE, size=6.5)
step2 = [
("Rubber Band Ligation", "Band ABOVE dentate line!", BLUE),
("Injection Sclerotherapy", "5% phenol; inject at apex (3-5ml)", NAVY),
("Infrared photocoagulation", "Less common", GREY),
]
yy = y - 7.5*mm
for title, detail, col in step2:
txt(C3x + 2*mm, yy, title, size=7, color=col, bold=True)
txt(C3x + 2*mm, yy - 4.5*mm, " " + detail, size=6.2, color=GREY)
yy -= 10.5*mm
y -= 34*mm
# Step 3
filled_rect(C3x, y - 36*mm, CW, 36*mm, LGOLD, stroke=GOLD)
pill(C3x + 2*mm, y - 6*mm, CW - 4*mm, 5.5*mm, "STEP 3 - Surgery (Gr 3&4 / Failed)", GOLD, WHITE, size=6.5)
step3 = [
("Haemorrhoidectomy", "Open (Milligan-Morgan) / Closed (Ferguson)", RED),
("Stapled (PPH)", "Less pain; higher recurrence rate", NAVY),
("HAL", "Doppler-guided artery ligation", GREEN),
]
yy = y - 7.5*mm
for title, detail, col in step3:
txt(C3x + 2*mm, yy, title, size=7, color=col, bold=True)
txt(C3x + 2*mm, yy - 4.5*mm, " " + detail, size=6.2, color=GREY)
yy -= 10.5*mm
# Post-op note
txt(C3x + 2*mm, yy - 1*mm, "Post-op: Sitz baths, laxatives, analgesia,", size=6.2, color=GREY)
txt(C3x + 2*mm, yy - 5.5*mm, "metronidazole 5d, watch for stricture/retention", size=6.2, color=GREY)
y -= 37*mm
# --- DIFFERENTIAL DIAGNOSIS ---
section_header(C3x, y - 7*mm, CW, 7*mm, " DIFFERENTIAL DIAGNOSIS", PURPLE)
filled_rect(C3x, y - 7*mm - 48*mm, CW, 48*mm, LPURPLE)
diffs = [
("Anal Fissure", "Pain++, fissure at 6/12 o'clock"),
("CRC", "Dark blood, bowel habit change, wt loss"),
("Rectal Prolapse", "Full thickness, concentric rings"),
("Perianal Abscess", "Fever, throbbing pain, induration"),
("Skin Tags", "Soft, no vascular component"),
("IBD", "Mucus, diarrhoea, systemic features"),
]
yy = y - 7*mm - 4*mm
for cond, desc in diffs:
txt(C3x + 2*mm, yy, cond + ":", size=6.5, color=PURPLE, bold=True)
txt(C3x + 26*mm, yy, desc, size=6.2, color=GREY)
yy -= 7.5*mm
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# BOTTOM BANNER - Key Take-Home Points
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
BOTT_H = 20*mm
BOTT_Y = 8*mm
filled_rect(0, BOTT_Y, W, BOTT_H, NAVY)
filled_rect(0, BOTT_Y + BOTT_H, W, 1.5*mm, GOLD)
txt(M, BOTT_Y + BOTT_H - 5*mm,
"KEY TAKE-HOME POINTS:", size=7.5, color=GOLD, bold=True)
points = [
"1. Haemorrhoids = symptomatic anal cushions at 3, 7, 11 o'clock",
"2. Internal (above dentate = painless) vs External (below = painful)",
"3. 4 Degrees: Bleed | Spontaneous | Manual | Permanent",
"4. Earliest symptom = bright red, painless PR bleeding separate from stool",
"5. Pain = NOT a feature - think fissure / abscess / cancer",
"6. Management ladder: Conservative -> Band Ligation -> Surgery",
"7. ALWAYS exclude colorectal malignancy first",
]
# Two rows of points
row1 = points[:4]
row2 = points[4:]
xstep = (W - 2*M) / 4
yrow1 = BOTT_Y + BOTT_H - 10*mm
yrow2 = BOTT_Y + BOTT_H - 16.5*mm
for i, pt in enumerate(row1):
txt(M + i * xstep, yrow1, pt, size=6.2, color=WHITE)
xstep2 = (W - 2*M) / 3
for i, pt in enumerate(row2):
txt(M + i * xstep2, yrow2, pt, size=6.2, color=HexColor("#AED6F1"))
# Page border
c.saveState()
c.setStrokeColor(NAVY)
c.setLineWidth(1.5)
c.rect(3*mm, 3*mm, W - 6*mm, H - 6*mm, fill=0, stroke=1)
c.restoreState()
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
c.save()
print(f"Saved: {OUT}")
cd /tmp/workspace/hemorrhoids-pdf && python build_cheatsheet.py
ls -lh /tmp/workspace/hemorrhoids-pdf/Hemorrhoids_Cheatsheet.pdf
Hemorrhoids Cheatsheet
PDF Document Β· PDF
| Column | Section | Content |
|---|---|---|
| Left | Definition | What hemorrhoids are |
| Types | Internal vs. External comparison | |
| Pathophysiology | PCCP acronym + cascade | |
| Middle | 4 Degrees | Colour-coded cards (Green/Blue/Gold/Red) |
| Clinical Features | 5 symptoms with pills | |
| Red Flag box | "Pain = look elsewhere" | |
| Complications | All 5 + thrombosed EH note | |
| Right | First Priority | Exclude cancer (red banner) |
| Management | Step 1 / 2 / 3 ladder | |
| Differentials | 6 conditions with distinguishing features | |
| Footer | Take-Home Points | 7 key pearls across bottom banner |
Give me a bibliography
hemorrhoids management treatment
"hemorrhoids"[MeSH Terms] AND "rubber band ligation"
"hemorrhoids"[MeSH Terms] AND haemorrhoidectomy
Give a specific objective related to tpoic
| Bloom's Level | Verb Used | Example Objective |
|---|---|---|
| Remember | Define, List, Name, State | Define hemorrhoids anatomically |
| Understand | Explain, Distinguish, Describe | Explain why internal hemorrhoids are painless |
| Apply | Classify, Select, Counsel, Apply | Classify a patient into correct degree |
| Analyse | Differentiate, Compare, Analyse | Differentiate from anal fissure |
| Evaluate | Evaluate, Justify, Critically evaluate | Justify need for cancer exclusion |
| Create | Construct, Formulate | Construct a full management plan |
By the end of this 15-minute microteaching session, the learner will be able to:
- (Remember) List the four degrees of internal hemorrhoids with their defining characteristics.
- (Understand) Explain why pain is NOT a feature of uncomplicated internal hemorrhoids.
- (Apply) Classify a patient into the correct degree of hemorrhoid given a clinical scenario.
- (Analyse) Differentiate hemorrhoids from anal fissure and colorectal cancer based on clinical features.
- (Evaluate) Justify the step-up approach to management and identify when surgical intervention is indicated.
In a short one line way