Hi

Hi! How can I help you today?

I want information about urogenital examination for use in collage project

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Finding Sources
Reading File
I now have comprehensive content from Campbell-Walsh Urology. Let me compile this into a well-structured answer for the college project.

Urogenital Examination - College Project Guide

This overview draws primarily from Campbell Walsh Wein Urology (3-Volume Set) - the gold standard urology reference.

What is the Urogenital Examination?

The urogenital (or genitourinary) examination is a structured physical assessment of the urinary tract and reproductive organs. It forms a core part of any urological patient encounter and includes both general observations and system-specific palpation and inspection.

1. Vital Signs

The examination always begins with vital signs:
  • Temperature, heart rate, blood pressure, respiratory rate, and pain rating - these identify the critically ill patient immediately
  • Abnormal vitals (e.g., profound hypotension or tachycardia) warrant urgent referral to the emergency department

2. General Appearance

Using the four classic modes - inspection, auscultation, percussion, and palpation - the examiner notes:
  • Level of pain or emotional distress
  • Nutritional status and frailty indicators
  • Skin quality, dentition, hydration (moist mucous membranes)
  • Disease stigmata relevant to urology, e.g.:
    • Gynecomastia - may indicate hyperestrogenic state from testicular or adrenal tumor
    • Cushingoid features - buffalo hump, striae
    • Priapism - visible prolonged erection
    • Lymphedema - may suggest penile or scrotal lymphatic obstruction

3. Abdominal Examination

  • Inspect for distended bladder (suprapubic fullness) in urinary retention
  • Palpate for abdominal masses (e.g., renal tumors, polycystic kidneys)
  • Assess for costovertebral angle (CVA) tenderness - elicited by percussion over the flank; positive result suggests pyelonephritis (kidney infection) or renal calculi

4. Male Genital Examination

Penis

  • Inspect the meatus for its location (normally at the tip of the glans)
    • Meatus on the ventral surface = hypospadias
    • Meatus on the dorsal surface = epispadias
  • In uncircumcised patients, retract the foreskin to expose the glans; look for phimosis (tight, non-retractable foreskin) or paraphimosis (retracted foreskin trapped behind the glans)
  • Check for Peyronie plaques (fibrous scar tissue along the shaft causing penile curvature)

Scrotum and Testes

  • Inspect and palpate both testes between thumb and first two fingers
  • Normal testis: smooth, freely mobile, slightly tender
  • Key findings:
    • Small testis - prior infarct, hypogonadism, Klinefelter syndrome
    • Testicular tenderness - orchitis or torsion
    • Hard testicular mass - must be treated as testicular cancer until proven otherwise
    • Epididymal masses (posterior ridge) - almost always benign
  • Vas deferens should be palpable bilaterally, feeling like "thick al dente linguini"
  • Transillumination - used to detect fluid in a scrotal mass (e.g., hydrocele glows; solid mass does not)
  • Varicocele ("bag of worms") - best detected with patient standing and performing Valsalva maneuver

Inguinal Canal (Hernia Examination)

  • Place index finger over the testis, invaginate the scrotum toward the external inguinal ring
  • Other hand palpates over the internal ring and Hesselbach triangle
  • Patient performs Valsalva - a hernia feels like a distinct bulge descending against the fingertip
  • In children, the "silk glove" sign (hernia sac rolling over itself) may be appreciated

5. Female Pelvic Examination (Urological Context)

The pelvic examination is performed when a female patient presents with:
  • Acute lower abdominal pain
  • Suspected gynecological causes (ectopic pregnancy, adnexal mass, pelvic inflammatory disease/PID)
  • Urinary tract symptoms
As documented in Yamada's Textbook of Gastroenterology: evaluating costovertebral angle tenderness is important when pyelonephritis is suspected; the digital rectal examination can assess for perirectal tenderness and gastrointestinal sources of pelvic pain.

6. Digital Rectal Examination (DRE) - Prostate Assessment

Performed in men to assess:
  • Prostate size (normal: "size of a chestnut," feels like a contracted thenar eminence)
  • Prostatitis (tenderness on palpation)
  • Prostate cancer screening (nodular firmness = "feels like a flexed knuckle" - warrants biopsy)
Technique:
  1. Patient stands bent 90 degrees at the waist, or in lateral decubitus position (hips and knees flexed)
  2. Examiner spreads gluteal folds - inspect anus for hemorrhoids or lesions
  3. Gloved, lubricated finger is advanced gently through the anus
  4. Finger advanced until prostate is palpable - assess size, symmetry, and firmness
Current AUA guidelines: Prostate cancer screening (including DRE) should be offered to men of average risk aged 55-69 years, every 2 years.

7. Summary Table

RegionKey Examination TechniqueSignificant Findings
Flank / KidneyCVA percussion, bimanual palpationTenderness (pyelonephritis, stones), mass (tumor, PKD)
BladderSuprapubic palpation/percussionDistension (urinary retention)
PenisInspection of meatus, foreskin, shaftHypospadias, phimosis, Peyronie plaques
Scrotum/TestisBimanual palpation, transilluminationTesticular mass, orchitis, varicocele, hydrocele
EpididymisPosterior ridge palpationEpididymitis, cysts
Inguinal canalDigital invagination + ValsalvaInguinal hernia
ProstateDigital rectal examBPH, prostatitis, prostate cancer
Female pelvisPelvic exam + CVA tendernessPID, adnexal mass, ectopic pregnancy

Key Terms to Know

  • Hypospadias - urethral meatus on ventral surface of penis
  • Phimosis - foreskin cannot be retracted over glans
  • Hydrocele - fluid around the testis (transilluminates)
  • Varicocele - dilated pampiniform venous plexus ("bag of worms")
  • CVA tenderness - costovertebral angle tenderness; sign of upper urinary tract pathology
  • DRE - digital rectal examination for prostate assessment
  • Valsalva maneuver - forced expiration against a closed airway; used to accentuate hernias and varicoceles

Primary sources: Campbell Walsh Wein Urology (3-Volume Set); Yamada's Textbook of Gastroenterology, 7th ed.

Can you make 2*5feetvchart

Asking for Preferences
Reading File
Running Command

mkdir -p /home/daytona/workspace/urogenital-poster && ls /home/daytona/workspace…

Writing File

~/urogenital-poster/generate_poster.py

from reportlab.lib.pagesizes import inch
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import KeepTogether

# ── Page size: 2 ft wide × 5 ft tall ──────────────────────────────────────────
PAGE_W = 2 * 12 * inch   # 24 inches
PAGE_H = 5 * 12 * inch   # 60 inches
MARGIN = 0.4 * inch

# ── Colour palette ─────────────────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1A3A5C")
MID_BLUE    = colors.HexColor("#2E6DA4")
LIGHT_BLUE  = colors.HexColor("#D6E8F7")
TEAL        = colors.HexColor("#1B7A75")
LIGHT_TEAL  = colors.HexColor("#D0EFED")
ORANGE      = colors.HexColor("#D4600A")
LIGHT_ORANGE= colors.HexColor("#FDEBD0")
GRAY_BG     = colors.HexColor("#F4F6F8")
WHITE       = colors.white
BLACK       = colors.black
HEADING_BG  = colors.HexColor("#0D2B45")

# ── Styles ─────────────────────────────────────────────────────────────────────
def make_styles():
    main_title = ParagraphStyle(
        "MainTitle",
        fontName="Helvetica-Bold",
        fontSize=54,
        textColor=WHITE,
        alignment=TA_CENTER,
        spaceAfter=6,
        leading=62,
    )
    subtitle = ParagraphStyle(
        "Subtitle",
        fontName="Helvetica",
        fontSize=28,
        textColor=colors.HexColor("#A8D4F5"),
        alignment=TA_CENTER,
        spaceAfter=4,
        leading=34,
    )
    section_title = ParagraphStyle(
        "SectionTitle",
        fontName="Helvetica-Bold",
        fontSize=30,
        textColor=WHITE,
        alignment=TA_LEFT,
        spaceAfter=0,
        leading=36,
    )
    body = ParagraphStyle(
        "Body",
        fontName="Helvetica",
        fontSize=18,
        textColor=BLACK,
        alignment=TA_LEFT,
        spaceAfter=4,
        leading=24,
    )
    bullet = ParagraphStyle(
        "Bullet",
        fontName="Helvetica",
        fontSize=17,
        textColor=colors.HexColor("#1A1A1A"),
        alignment=TA_LEFT,
        spaceAfter=3,
        leading=22,
        leftIndent=18,
        bulletIndent=0,
        bulletFontName="Helvetica-Bold",
        bulletFontSize=17,
    )
    sub_bullet = ParagraphStyle(
        "SubBullet",
        fontName="Helvetica",
        fontSize=15,
        textColor=colors.HexColor("#333333"),
        alignment=TA_LEFT,
        spaceAfter=2,
        leading=19,
        leftIndent=36,
    )
    key_term = ParagraphStyle(
        "KeyTerm",
        fontName="Helvetica-Bold",
        fontSize=17,
        textColor=DARK_BLUE,
        alignment=TA_LEFT,
        spaceAfter=2,
        leading=22,
        leftIndent=10,
    )
    key_def = ParagraphStyle(
        "KeyDef",
        fontName="Helvetica",
        fontSize=15,
        textColor=colors.HexColor("#2A2A2A"),
        alignment=TA_LEFT,
        spaceAfter=5,
        leading=19,
        leftIndent=10,
    )
    table_header = ParagraphStyle(
        "TableHeader",
        fontName="Helvetica-Bold",
        fontSize=17,
        textColor=WHITE,
        alignment=TA_CENTER,
        leading=21,
    )
    table_cell = ParagraphStyle(
        "TableCell",
        fontName="Helvetica",
        fontSize=15,
        textColor=BLACK,
        alignment=TA_LEFT,
        leading=19,
    )
    source = ParagraphStyle(
        "Source",
        fontName="Helvetica-Oblique",
        fontSize=13,
        textColor=colors.HexColor("#555555"),
        alignment=TA_CENTER,
        leading=17,
    )
    return dict(
        main_title=main_title, subtitle=subtitle,
        section_title=section_title, body=body,
        bullet=bullet, sub_bullet=sub_bullet,
        key_term=key_term, key_def=key_def,
        table_header=table_header, table_cell=table_cell,
        source=source,
    )

S = make_styles()

# ── Helper: coloured section header bar ───────────────────────────────────────
def section_header(text, bg=MID_BLUE, icon=""):
    label = f"{icon}  {text}" if icon else text
    data = [[Paragraph(label, S["section_title"])]]
    tbl = Table(data, colWidths=[PAGE_W - 2 * MARGIN])
    tbl.setStyle(TableStyle([
        ("BACKGROUND", (0, 0), (-1, -1), bg),
        ("TOPPADDING",    (0, 0), (-1, -1), 10),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 10),
        ("LEFTPADDING",   (0, 0), (-1, -1), 16),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 16),
        ("ROUNDEDCORNERS", [6, 6, 6, 6]),
    ]))
    return tbl

# ── Helper: bullet paragraph ──────────────────────────────────────────────────
def B(text, style="bullet"):
    return Paragraph(f"• {text}", S[style])

def SB(text):
    return Paragraph(f"  ◦ {text}", S["sub_bullet"])

def SP(n=6):
    return Spacer(1, n)

# ── Build content ──────────────────────────────────────────────────────────────
def build_story():
    story = []

    # ── TITLE BANNER ──────────────────────────────────────────────────────────
    title_data = [[
        Paragraph("UROGENITAL EXAMINATION", S["main_title"]),
    ]]
    sub_data = [[
        Paragraph("A Complete Clinical Reference for Medical Students", S["subtitle"]),
    ]]
    title_tbl = Table(title_data, colWidths=[PAGE_W - 2 * MARGIN])
    title_tbl.setStyle(TableStyle([
        ("BACKGROUND", (0, 0), (-1, -1), HEADING_BG),
        ("TOPPADDING",    (0, 0), (-1, -1), 28),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 6),
        ("LEFTPADDING",   (0, 0), (-1, -1), 20),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 20),
    ]))
    sub_tbl = Table(sub_data, colWidths=[PAGE_W - 2 * MARGIN])
    sub_tbl.setStyle(TableStyle([
        ("BACKGROUND", (0, 0), (-1, -1), HEADING_BG),
        ("TOPPADDING",    (0, 0), (-1, -1), 0),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 24),
        ("LEFTPADDING",   (0, 0), (-1, -1), 20),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 20),
    ]))
    story.append(title_tbl)
    story.append(sub_tbl)
    story.append(SP(14))

    # ── TWO-COLUMN LAYOUT using a Table ──────────────────────────────────────
    col_w = (PAGE_W - 2 * MARGIN - 0.2 * inch) / 2

    # ============================================================
    # LEFT COLUMN content
    # ============================================================
    left = []

    # 1. VITAL SIGNS
    left.append(section_header("1. VITAL SIGNS", bg=DARK_BLUE))
    left.append(SP(6))
    left.append(B("Temperature"))
    left.append(B("Heart rate"))
    left.append(B("Blood pressure"))
    left.append(B("Respiratory rate"))
    left.append(B("Pain rating (0–10 scale)"))
    left.append(SP(4))
    left.append(Paragraph(
        "Critically abnormal vitals (hypotension, tachycardia) require immediate triage to the emergency department.",
        S["body"]))
    left.append(SP(12))

    # 2. GENERAL APPEARANCE
    left.append(section_header("2. GENERAL APPEARANCE", bg=DARK_BLUE))
    left.append(SP(6))
    left.append(Paragraph("Four modes of examination:", S["body"]))
    left.append(B("Inspection — Auscultation — Percussion — Palpation"))
    left.append(SP(6))
    left.append(Paragraph("Observe for:", S["body"]))
    left.append(B("Pain / emotional distress level"))
    left.append(B("Nutritional status & frailty (gait, grip strength, calf circumference)"))
    left.append(B("Skin quality, hydration (moist mucous membranes)"))
    left.append(B("Dentition quality"))
    left.append(SP(4))
    left.append(Paragraph("Urologically relevant stigmata:", S["body"]))
    left.append(B("Gynecomastia → hyperestrogenic state (testicular/adrenal tumour)"))
    left.append(B("Cushingoid features → buffalo hump, abdominal striae"))
    left.append(B("Priapism → prolonged visible erection"))
    left.append(B("Lymphedema → penile/scrotal lymphatic obstruction"))
    left.append(B("Exophthalmos → Graves disease"))
    left.append(SP(12))

    # 3. ABDOMINAL EXAMINATION
    left.append(section_header("3. ABDOMINAL EXAMINATION", bg=TEAL))
    left.append(SP(6))
    left.append(B("Inspect for suprapubic fullness → distended bladder (urinary retention)"))
    left.append(B("Palpate for abdominal masses (renal tumours, polycystic kidneys)"))
    left.append(SP(4))
    left.append(Paragraph(
        "<b>Costovertebral Angle (CVA) Tenderness:</b>", S["body"]))
    left.append(B("Elicited by percussion over the flank (posterior costovertebral angle)"))
    left.append(B("Positive result → suggests pyelonephritis or renal calculi"))
    left.append(SP(12))

    # 4. MALE GENITAL EXAM
    left.append(section_header("4. MALE GENITAL EXAMINATION", bg=MID_BLUE))
    left.append(SP(6))

    left.append(Paragraph("<b>PENIS</b>", S["body"]))
    left.append(B("Inspect meatus location (normally at tip of glans):"))
    left.append(SB("Ventral surface → Hypospadias"))
    left.append(SB("Dorsal surface → Epispadias"))
    left.append(B("Uncircumcised: retract foreskin to expose glans"))
    left.append(SB("Phimosis: foreskin cannot be retracted"))
    left.append(SB("Paraphimosis: retracted foreskin trapped behind glans (emergency)"))
    left.append(B("Inspect shaft for Peyronie plaques (fibrous scar → penile curvature)"))
    left.append(SP(8))

    left.append(Paragraph("<b>SCROTUM & TESTES</b>", S["body"]))
    left.append(B("Palpate each testis between thumb and first two fingers"))
    left.append(B("Normal: smooth, mobile, slightly tender"))
    left.append(B("Small testis → prior infarct, hypogonadism, Klinefelter syndrome"))
    left.append(B("Testicular tenderness → orchitis or torsion"))
    left.append(B("<b>Hard testicular mass → testicular cancer until proven otherwise</b>"))
    left.append(B("Epididymal masses (posterior ridge) → almost always benign"))
    left.append(B("Vas deferens: palpable bilaterally — 'thick al dente linguini'"))
    left.append(SP(8))

    left.append(Paragraph("<b>TRANSILLUMINATION</b>", S["body"]))
    left.append(B("Torch applied to scrotal mass in darkened room"))
    left.append(SB("Fluid (hydrocele) → glows/transilluminates"))
    left.append(SB("Solid mass → does not transilluminate"))
    left.append(SP(8))

    left.append(Paragraph("<b>VARICOCELE</b>", S["body"]))
    left.append(B("'Bag of worms' — dilated pampiniform venous plexus"))
    left.append(B("Best detected: patient standing + Valsalva manoeuvre"))
    left.append(SP(12))

    # ============================================================
    # RIGHT COLUMN content
    # ============================================================
    right = []

    # 5. INGUINAL HERNIA EXAM
    right.append(section_header("5. INGUINAL CANAL / HERNIA", bg=MID_BLUE))
    right.append(SP(6))
    right.append(B("Place index finger over testis, invaginate scrotum toward external inguinal ring"))
    right.append(B("Other hand palpates over internal ring and Hesselbach triangle"))
    right.append(SB("Hesselbach triangle: bordered by inferior epigastric artery, inguinal ligament, midline"))
    right.append(B("Patient performs Valsalva → hernia = distinct bulge against fingertip"))
    right.append(B("Children: 'Silk glove sign' — hernia sac rolls over itself like a silk glove finger"))
    right.append(SP(12))

    # 6. DIGITAL RECTAL EXAM
    right.append(section_header("6. DIGITAL RECTAL EXAM (DRE)", bg=DARK_BLUE))
    right.append(SP(6))
    right.append(Paragraph("<b>Indications:</b>", S["body"]))
    right.append(B("Prostate size assessment"))
    right.append(B("Detection / provocation of prostatitis"))
    right.append(B("Prostate cancer screening"))
    right.append(B("Neonates: evaluate for internal Müllerian structures"))
    right.append(SP(6))
    right.append(Paragraph("<b>Patient positioning:</b>", S["body"]))
    right.append(B("Standing, bent ~90° at waist (hands on table), OR"))
    right.append(B("Lateral decubitus position, hips and knees flexed"))
    right.append(SP(6))
    right.append(Paragraph("<b>Technique:</b>", S["body"]))
    right.append(B("Non-dominant hand spreads gluteal folds — inspect anus for hemorrhoids or lesions"))
    right.append(B("Gloved, lubricated finger advanced gently through anus"))
    right.append(B("Advance until prostate is palpable"))
    right.append(SP(6))
    right.append(Paragraph("<b>Normal prostate findings:</b>", S["body"]))
    right.append(B("Size of a chestnut"))
    right.append(B("Feels like contracted thenar eminence (soft)"))
    right.append(SP(4))
    right.append(Paragraph("<b>Abnormal findings:</b>", S["body"]))
    right.append(B("Nodular firmness ('feels like a flexed knuckle') → prostate cancer → biopsy"))
    right.append(B("Tenderness → prostatitis"))
    right.append(SP(6))
    right.append(Paragraph(
        "⚕  AUA Guideline: Prostate cancer screening offered to men aged <b>55–69 years</b>, every 2 years.",
        S["body"]))
    right.append(SP(12))

    # 7. FEMALE PELVIC EXAM
    right.append(section_header("7. FEMALE PELVIC EXAMINATION", bg=TEAL))
    right.append(SP(6))
    right.append(Paragraph("<b>Indications in urology / acute abdomen:</b>", S["body"]))
    right.append(B("Acute lower abdominal pain"))
    right.append(B("Suspected ectopic pregnancy"))
    right.append(B("Adnexal mass"))
    right.append(B("Pelvic Inflammatory Disease (PID)"))
    right.append(B("Lower urinary tract symptoms"))
    right.append(SP(6))
    right.append(Paragraph("<b>Key assessments:</b>", S["body"]))
    right.append(B("CVA tenderness (pyelonephritis)"))
    right.append(B("Cervical motion tenderness → PID"))
    right.append(B("Adnexal fullness or mass → ovarian cyst, ectopic pregnancy"))
    right.append(B("Uterine tenderness or irregularity"))
    right.append(SP(12))

    # 8. SUMMARY TABLE
    right.append(section_header("8. QUICK REFERENCE SUMMARY", bg=ORANGE))
    right.append(SP(8))
    t_style = S["table_header"]
    c_style = S["table_cell"]
    table_data = [
        [Paragraph("Region", t_style),
         Paragraph("Key Technique", t_style),
         Paragraph("Significant Finding", t_style)],
        [Paragraph("Flank / Kidney", c_style),
         Paragraph("CVA percussion, bimanual palpation", c_style),
         Paragraph("Tenderness → pyelonephritis/stones; Mass → tumour/PKD", c_style)],
        [Paragraph("Bladder", c_style),
         Paragraph("Suprapubic palpation & percussion", c_style),
         Paragraph("Distension → urinary retention", c_style)],
        [Paragraph("Penis", c_style),
         Paragraph("Inspect meatus, foreskin, shaft", c_style),
         Paragraph("Hypospadias, phimosis, Peyronie plaques", c_style)],
        [Paragraph("Scrotum / Testis", c_style),
         Paragraph("Bimanual palpation, transillumination", c_style),
         Paragraph("Mass (cancer), orchitis, torsion, hydrocele", c_style)],
        [Paragraph("Epididymis", c_style),
         Paragraph("Posterior ridge palpation", c_style),
         Paragraph("Epididymitis, cysts (benign)", c_style)],
        [Paragraph("Inguinal Canal", c_style),
         Paragraph("Digital invagination + Valsalva", c_style),
         Paragraph("Inguinal hernia", c_style)],
        [Paragraph("Prostate (DRE)", c_style),
         Paragraph("Lubricated digital rectal exam", c_style),
         Paragraph("BPH, prostatitis, prostate cancer", c_style)],
        [Paragraph("Female Pelvis", c_style),
         Paragraph("Pelvic exam + CVA percussion", c_style),
         Paragraph("PID, adnexal mass, ectopic pregnancy", c_style)],
    ]
    col1 = col_w * 0.22
    col2 = col_w * 0.40
    col3 = col_w * 0.38
    tbl = Table(table_data, colWidths=[col1, col2, col3], repeatRows=1)
    row_colors = [LIGHT_BLUE, WHITE] * 5
    tbl.setStyle(TableStyle([
        ("BACKGROUND",    (0, 0), (-1, 0), DARK_BLUE),
        ("TEXTCOLOR",     (0, 0), (-1, 0), WHITE),
        ("FONTNAME",      (0, 0), (-1, 0), "Helvetica-Bold"),
        ("TOPPADDING",    (0, 0), (-1, -1), 7),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 7),
        ("LEFTPADDING",   (0, 0), (-1, -1), 8),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 8),
        ("GRID",          (0, 0), (-1, -1), 0.5, colors.HexColor("#AAAAAA")),
        ("ROWBACKGROUNDS", (0, 1), (-1, -1), [LIGHT_BLUE, WHITE]),
        ("VALIGN",        (0, 0), (-1, -1), "MIDDLE"),
    ]))
    right.append(tbl)
    right.append(SP(12))

    # 9. KEY TERMS
    right.append(section_header("9. KEY TERMS GLOSSARY", bg=ORANGE))
    right.append(SP(6))
    terms = [
        ("Hypospadias", "Urethral meatus on ventral (underside) surface of penis"),
        ("Epispadias", "Urethral meatus on dorsal (top) surface of penis"),
        ("Phimosis", "Foreskin cannot be retracted over the glans"),
        ("Paraphimosis", "Retracted foreskin trapped behind the glans — urological emergency"),
        ("Hydrocele", "Fluid collection around the testis; transilluminates"),
        ("Varicocele", "Dilated pampiniform venous plexus; 'bag of worms'"),
        ("Orchitis", "Inflammation of the testis"),
        ("Epididymitis", "Inflammation of the epididymis"),
        ("Peyronie disease", "Fibrous plaques in penile shaft causing curvature"),
        ("CVA tenderness", "Costovertebral angle tenderness; sign of upper urinary tract pathology"),
        ("DRE", "Digital rectal examination; used to assess prostate"),
        ("Valsalva manoeuvre", "Forced expiration against closed airway; reveals varicocele/hernia"),
        ("Klinefelter syndrome", "47,XXY karyotype; associated with small testes, hypogonadism"),
        ("PID", "Pelvic inflammatory disease; ascending female genital tract infection"),
    ]
    for term, defn in terms:
        right.append(Paragraph(f"<b>{term}</b>", S["key_term"]))
        right.append(Paragraph(defn, S["key_def"]))

    # ── Pad columns to equal length
    from reportlab.platypus import Spacer as Sp
    two_col = Table(
        [[left, right]],
        colWidths=[col_w, col_w],
        style=TableStyle([
            ("VALIGN", (0, 0), (-1, -1), "TOP"),
            ("LEFTPADDING",  (0, 0), (-1, -1), 8),
            ("RIGHTPADDING", (0, 0), (-1, -1), 8),
            ("TOPPADDING",   (0, 0), (-1, -1), 0),
            ("BOTTOMPADDING",(0, 0), (-1, -1), 0),
        ])
    )
    story.append(two_col)
    story.append(SP(18))

    # ── SOURCES FOOTER ────────────────────────────────────────────────────────
    story.append(HRFlowable(width="100%", thickness=1.5, color=DARK_BLUE))
    story.append(SP(8))
    story.append(Paragraph(
        "Sources: Campbell Walsh Wein Urology, 3-Volume Set (Elsevier) • "
        "Yamada's Textbook of Gastroenterology, 7th Ed. • AUA Guidelines",
        S["source"]
    ))

    return story


# ── Build PDF ──────────────────────────────────────────────────────────────────
OUTPUT = "/home/daytona/workspace/urogenital-poster/Urogenital_Examination_Poster.pdf"

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=(PAGE_W, PAGE_H),
    leftMargin=MARGIN,
    rightMargin=MARGIN,
    topMargin=MARGIN,
    bottomMargin=MARGIN,
)

doc.build(build_story())
print(f"✅ Poster saved to: {OUTPUT}")
Running Command

python /home/daytona/workspace/urogenital-poster/generate_poster.py

Running Command

ls -lh /home/daytona/workspace/urogenital-poster/

Your 2×5 feet poster is ready! Download it here:

Urogenital Examination Poster

PDF Document · PDF


What's on the poster (2 ft wide × 5 ft tall, print-ready PDF):
The poster is laid out in a two-column format with colour-coded sections:
ColumnSections
Left1. Vital Signs · 2. General Appearance · 3. Abdominal Exam · 4. Male Genital Exam (Penis, Scrotum, Transillumination, Varicocele)
Right5. Inguinal Canal/Hernia · 6. Digital Rectal Exam (DRE) · 7. Female Pelvic Exam · 8. Quick Reference Summary Table · 9. Key Terms Glossary
Design features:
  • Dark blue, teal, and orange colour-coded section headers
  • Bullet points with sub-bullets for techniques and findings
  • Summary reference table covering all 8 anatomical regions
  • 14-term glossary (hypospadias, phimosis, varicocele, hydrocele, etc.)
  • Source footer citing Campbell Walsh Wein Urology and AUA Guidelines
You can send this directly to a print shop at actual 2×5 ft size.
This is a shared conversation. Sign in to Orris to start your own chat.