explain in detail baout topics from apurba sastri must to know good to know and undertadingd concept
bacterial vaginosis clue cells vaginal smear

This four-panel image provides a side-by-side comparison of Bacterial Vaginosis (BV) and a normal vaginal microbiome through colposcopic and microscopic examinations. Panels A and B are colposcopic clinical photographs of the cervix and vaginal vault. Panel A (BV) displays characteristic thin, homogeneous, milk-white discharge coating the vaginal walls. In contrast, Panel B (Normal) shows a healthy cervix with clear, physiological secretions. Panels C and D show Gram-stained microscopic slides of vaginal smears. Panel C (BV) demonstrates the presence of 'clue cells'—vaginal epithelial cells heavily encrusted with coccobacilli (Gardnerella-like microbes) that obscure the cell margins. Panel D (Normal) shows a healthy microbiome dominated by large, purple-stained Gram-positive rods, consistent with Lactobacillus species, and clear epithelial cells without bacterial adherence. This comparison illustrates the clinical and laboratory findings used in Amsel criteria and Nugent scoring for the diagnosis of dysbiosis in the female reproductive tract.

This comparison chart utilizes optical coherence tomography (OCT) or similar high-resolution diagnostic imaging to illustrate the progression of a polymicrobial bacterial vaginosis (BV) biofilm. The visual is divided into three sequential panels. The first panel, labeled 'BV', depicts a dense, continuous, and brightly fluorescent orange-red layer adhering to the vaginal epithelial surface, representing a mature pathogenic biofilm often composed of Gardnerella vaginalis and Atopobium vaginae. The middle panel shows the clinical intervention with 'Metronidazole', showing a blue-tinted transitional phase where the biofilm structure is being disrupted. The final panel, labeled 'Asymptomatic', demonstrates the state after treatment. In this state, the biofilm appears less dense, fragmented, and more diffuse, indicating successful thinning and disruption of the adhering microbial community. This educational visual emphasizes the persistence of subclinical biofilms even in asymptomatic states, which contributes to the high recurrence rates of BV. It is designed for medical professionals and students focusing on gynecology, microbiology, and infectious disease management.

Conventional Pap smear cytology of a cervicovaginal sample stained with Papanicolaou stain. The smear demonstrates abundant squamous epithelial cells with clusters of intermediate and superficial cells. Within these cell clusters there are numerous oval budding yeast forms measuring 1–2 μm and filamentous pseudohyphae; the pseudohyphae are eosinophilic and stain unevenly, extending between cells and forming short branches. A prominent neutrophilic inflammatory component is present. The yeast elements and pseudohyphae are characteristic of Candida species (most commonly Candida albicans) causing vulvovaginitis or cervicitis in appropriate clinical settings. These features differentiate from non-filamentous yeasts and from malignant cells, and are best corroborated by clinical symptoms (pruritus, discharge) and culture or adjunct studies. Diagnostic significance lies in identifying fungal infection with inflammatory response; differential diagnoses include other Candida species, other yeasts lacking pseudohyphae, bacterial superinfection, or non-infectious causes of inflammation. The specimen shows no cytologic evidence of neoplasia. This image is useful for education on fungal cytology, diagnostic verification of candidiasis in cervical/vaginal cytology, and correlates with antifungal therapy planning. Clinicians should consider repeat smear or culture if symptoms persist despite therapy. Pathologic correlation: Candida infection; fungal morphology; budding yeast; pseudohyphae; neutrophils; cervicovaginal candidiasis.
genital warts condyloma acuminata HPV

Clinical photograph of the female external genitalia showing extensive human papillomavirus (HPV) infection presenting as condyloma acuminata (genital warts). The lesions are characterized by multiple raised, exophytic, and papillary growths with a verrucous (cauliflower-like) texture. The distribution is widespread across the vulvar area, involving the labia minora, labia majora, and the vaginal introitus. Morphologically, the lesions appear flesh-colored to pale pink, with some areas exhibiting a whitish, hyperkeratotic surface. There is evidence of epithelial thickening and irregular surface contours, deviating from normal smooth mucosal architecture. This image illustrates the typical clinical presentation of low-risk HPV-induced benign neoplasia, which is a key diagnostic feature in gynecology and dermatology for distinguishing between infectious viral warts and other vulvar intraepithelial neoplasia (VIN) or malignant conditions.

Two-panel clinical photograph demonstrating condyloma acuminata (genital warts) and its surgical management in a patient with systemic lupus erythematosus. Image (a) shows extensive, multifocal, hypertrophic verrucous lesions involving the vulva, perineum, and perianal region. The lesions exhibit a classic 'cauliflower-like' morphology with a rough, filiform texture and varied pigmentation ranging from skin-toned to brownish-grey. Image (b) shows the same anatomical region post-surgical excision. The surgical site features approximated skin edges secured with blue interrupted sutures extending through the labia and perineum. A yellow drainage tube is positioned for fluid management. Evidence of post-operative erythema and inflammation is visible. This comparison illustrates the clinical manifestation of severe HPV-related verrucous disease in an immunocompromised state and the immediate results of surgical debulking and reconstruction.

This gross clinical photograph shows external genital warts (condylomata acuminata) arising from the penile shaft and adjacent pubic skin. The image demonstrates multiple raised, flesh-colored papules with a rough, keratotic surface, arranged in clusters along the hair-bearing genital skin. The lesions are exophytic and papillomatous, measuring a few millimeters to over a centimeter in greatest dimension, with subtle erythema at the base and no obvious ulceration or drainage. The appearance is characteristic for HPV-induced genital warts, most commonly caused by HPV types 6 and 11, though other oncogenic types (2, 16, 18, 31, 33, 35, 39, 45, 51–56, 59) can be involved. Clinical diagnosis is supported by the typical morphology: verrucous, pink-to-flesh-colored papules that may coalesce into plaques. In the absence of histology, koilocytosis and epithelial hyperplasia would be expected on biopsy. Transmission is via sexual contact with minor trauma; autoinoculation and concurrent sexually transmitted infections may occur; incidence is higher in sexually active adults aged 20–40. The image is useful for educational illustration, differential diagnosis with verruca vulgaris and condyloma lata, and for teaching clinicians to recognize HPV-related anogenital lesions and counsel patients regarding treatment and prevention. Management considerations include topical therapy, ablative options, and vaccination discussion with patients.
molluscum contagiosum pearly dome shaped papules umbilicated

This is a clinical dermatology photograph illustrating Molluscum contagiosum. Modality and technique: clinical photography; perspective: close-up, surface view of the skin. Anatomical context: cutaneous epidermis, likely trunk or extremities. The image shows multiple small, discrete, dome-shaped papules, 2–5 mm in diameter, with smooth, slightly shiny surfaces and a central umbilication. Lesions are flesh-colored to pale pink against normal skin; surrounding skin may be mildly erythematous in susceptible individuals. Papules appear clustered in groups, consistent with localized contagion and autoinoculation. There is no crusting, scaling, vesiculation, or pustulation evident. Overall, the pattern is highly suggestive of molluscum contagiosum, a benign poxvirus infection. If histology were obtained, one would expect Henderson-Patterson bodies within keratinocytes. Clinically, molluscum presents as painless, pearly, umbilicated papules, most common in children but also seen in adults with atopy or immunosuppression. Differential considerations include verruca vulgaris, epidermal inclusion cysts, milia, syringomas, and folliculitis; central umbilication helps distinguish molluscum. Clinical significance: contagious via direct contact and fomites; usually self-limited but treated in persistent or symptomatic cases. This image is suitable for dermatology education, visual diagnosis training, pediatric skin disease curricula, and clinical decision support. Endemic in many regions; consider screening for other pediatric skin infections.

Imaging modality: Clinical photography of dermatologic lesions using color digital capture. The subject is in vivo skin on the forearm/elbow region. The view shows multiple small, discrete, dome-shaped papules ranging 2–5 mm in diameter. Lesions are pink to flesh-colored with a subtle sheen. Several papules appear slightly umbilicated, a classic feature of Molluscum contagiosum; the surface is smooth with minimal scaling or crusting. The distribution is localized to the extensor forearm without extensive involvement of other sites in this image. The epidermis over the lesions is mildly elevated, and the surrounding skin shows dermatitis-like redness, which can accompany secondary irritation. Molluscum contagiosum is a poxvirus-induced dermal infection commonly seen in children but also in adults, transmitted by direct contact or shared items. The image depicts typical clinical morphology: pearly to flesh-toned papules with central indentation and mild erythema. Imaging alone is not diagnostic; histopathology would show molluscum bodies within keratinocytes. Clinically, the diagnosis is supported by autoinoculation and spread pattern, especially in immunocompromised individuals. Differential considerations include viral warts (HPV), folliculitis, and spongiotic dermatitis. Management ranges from observation for spontaneous resolution to destructive therapies such as curettage, cantharidin, and cryotherapy, with infection control and cosmetic considerations. This image serves as a reference for recognition, tele-dermatology triage, and differential diagnosis practice.
Chlamydia trachomatis elementary body reticulate body intracellular

A pathophysiology diagram illustrating the biphasic developmental cycle of Chlamydia trachomatis within a columnar epithelial host cell. The process is mapped across six key stages: (1) Cellular invasion, where infectious green Elementary Bodies (EBs) adhere and enter via cytoskeletal rearrangement; (2) Primary differentiation of EBs into larger blue replicative Reticulate Bodies (RBs) within an initial inclusion; (3) RB replication via binary fission and inclusion expansion (8-48 hours post-infection); (4) A persistence pathway where stressors induce the formation of orange Aberrant Bodies (ABs); (5) Secondary differentiation as RBs convert back into EBs (24-72 hours); and (6) EB release through host cell lysis or extrusion. The diagram highlights molecular mediators, including Type III Secretion System (T3SS) effectors (e.g., TarP, TmeA), transcription factors (e.g., ChxR, ArgR), and proteases (e.g., CPAF). A central temporal dial correlates these morphological changes with hours post-infection (hPI). This educational resource characterizes the intracellular pathogenesis of Chlamydia, detailing the transition between infectious and replicative forms.

A pathophysiology diagram illustrating the immune response to Chlamydia trachomatis infection in human mucosa. The top section depicts the initial infection phase, where C. trachomatis elementary bodies (EBs) enter columnar epithelial cells to form intracellular inclusions. Within the underlying mucosa, the diagram shows the recruitment and activation of myeloid dendritic cells, macrophages, T cells, B cells (secreting MOMP antibodies), and neutrophils (contributing to cell death). A central hexagonal node represents the massive release of inflammatory cytokines (IFN-γ, IL-6, IL-8, IL-12, IL-10), which leads to a divergence between pathogenesis (tissue injury) and epithelial protection. The lower portion details acute inflammation and post-infection sequelae, highlighting the role of plasmacytoid dendritic cells, B cells, and T cells in IFN-γ production. This phase transitions into a persistent autoimmune response involving Ct-hsp10 and Ct-hsp60 antibodies, ultimately resulting in collateral tissue damage and scar formation. The diagram is designed for intermediate-level medical education on infectious disease immunology and gynecological pathology.
| Feature | Bacterial Vaginosis | Candidiasis | Trichomoniasis |
|---|---|---|---|
| Cause | Gardnerella vaginalis + anaerobes | Candida albicans | Trichomonas vaginalis (protozoan) |
| Discharge | Thin, gray-white, fishy smell | Thick white "curd-like" | Yellow, frothy, foul |
| pH | >4.5 | <4.5 | >4.5 |
| Wet Mount | Clue cells | Pseudohyphae + budding yeast | Motile flagellated trophozoites |
| KOH (Whiff test) | POSITIVE (fishy amine odor) | Negative | Negative |
| STI? | No (dysbiosis) | No | Yes |
| Treatment | Metronidazole | Fluconazole / Clotrimazole | Metronidazole |




| Disease | Organism | Key Lab Finding | Preferred Test |
|---|---|---|---|
| BV | G. vaginalis + anaerobes | Clue cells; pH >4.5; Whiff+ | Wet mount + Amsel criteria / Nugent score |
| Candida vaginitis | C. albicans | Pseudohyphae + budding yeast | KOH mount / Pap smear |
| Trichomoniasis | T. vaginalis | Motile flagellated protozoa | Wet mount (immediate); NAAT |
| Cervicitis (GC) | N. gonorrhoeae | Intracellular gram-neg diplococci in PMNs | NAAT (gold standard); Culture |
| Cervicitis (NGU) | C. trachomatis | Inclusion bodies (Giemsa/immunofluorescence) | NAAT (gold standard) |
| Genital warts | HPV 6/11 | Koilocytes on histology/Pap | Clinical; Colposcopy + aceto-white |
| Molluscum | Poxvirus MCV | Henderson-Patterson (molluscum) bodies | Clinical; Histology |
| Bartholinitis | Polymicrobial | Culture (polymicrobial) | Clinical + pus culture |
can u make pdf with photos too
ls /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"
mkdir -p /tmp/workspace/genital-tract-infections && cd /tmp/workspace/genital-tract-infections && python3 -c "import reportlab; import PIL; import requests; print('All libs OK')"
~/genital-tract-infections/build_pdf.py
import requests
import os
from io import BytesIO
from PIL import Image as PILImage
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
Image, HRFlowable, PageBreak, KeepTogether
)
from reportlab.platypus.flowables import Flowable
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/tmp/workspace/genital-tract-infections/Genital_Tract_Infections_Apurba_Sastri.pdf"
# ── colour palette ──────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a3a5c")
MID_BLUE = colors.HexColor("#2563a8")
LIGHT_BLUE = colors.HexColor("#dbeafe")
ACCENT_RED = colors.HexColor("#c0392b")
GOLD = colors.HexColor("#f39c12")
GREEN = colors.HexColor("#1e8449")
LIGHT_GREEN = colors.HexColor("#d5f5e3")
LIGHT_GREY = colors.HexColor("#f0f4f8")
WHITE = colors.white
BLACK = colors.HexColor("#1a1a1a")
TABLE_HEAD = colors.HexColor("#1a3a5c")
TABLE_ALT = colors.HexColor("#eaf0fb")
W, H = A4
# ── styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def S(name, **kw):
base = styles["Normal"]
return ParagraphStyle(name, parent=base, **kw)
title_style = S("DocTitle", fontSize=22, textColor=WHITE, alignment=TA_CENTER, fontName="Helvetica-Bold", spaceAfter=4)
sub_style = S("DocSub", fontSize=12, textColor=LIGHT_BLUE, alignment=TA_CENTER, fontName="Helvetica", spaceAfter=2)
h1_style = S("H1", fontSize=15, textColor=WHITE, fontName="Helvetica-Bold", spaceAfter=4, leading=20)
h2_style = S("H2", fontSize=12, textColor=DARK_BLUE, fontName="Helvetica-Bold", spaceAfter=3, leading=15)
h3_style = S("H3", fontSize=10.5, textColor=MID_BLUE, fontName="Helvetica-Bold", spaceAfter=2, leading=14)
body_style = S("Body", fontSize=9.5, textColor=BLACK, fontName="Helvetica", spaceAfter=3, leading=14, alignment=TA_JUSTIFY)
bullet_style = S("Bullet", fontSize=9.5, textColor=BLACK, fontName="Helvetica", spaceAfter=2, leading=13, leftIndent=14, bulletIndent=4)
caption_style = S("Caption", fontSize=8, textColor=colors.HexColor("#555555"), fontName="Helvetica-Oblique", alignment=TA_CENTER, spaceAfter=6)
must_style = S("Must", fontSize=9, textColor=colors.HexColor("#7b2000"), fontName="Helvetica-Bold", spaceAfter=2, leading=13)
note_style = S("Note", fontSize=8.5, textColor=colors.HexColor("#1a5276"), fontName="Helvetica-Oblique", spaceAfter=2, leading=13)
source_style = S("Source", fontSize=7.5, textColor=colors.HexColor("#777777"), fontName="Helvetica-Oblique", alignment=TA_CENTER, spaceAfter=3)
# ── helper: download image ───────────────────────────────────────────────────
def fetch_img(url, max_w, max_h, cache_dir="/tmp/workspace/genital-tract-infections/img_cache"):
os.makedirs(cache_dir, exist_ok=True)
fname = os.path.join(cache_dir, url.split("/")[-1][:60] + ".jpg")
if not os.path.exists(fname):
try:
r = requests.get(url, timeout=20)
img = PILImage.open(BytesIO(r.content)).convert("RGB")
img.save(fname, "JPEG", quality=85)
except Exception as e:
print(f" [WARN] Could not fetch {url}: {e}")
return None
try:
img = PILImage.open(fname)
iw, ih = img.size
scale = min(max_w / iw, max_h / ih, 1.0)
return Image(fname, width=iw * scale, height=ih * scale)
except:
return None
# ── coloured section banner ──────────────────────────────────────────────────
class ColorBanner(Flowable):
def __init__(self, text, bg=DARK_BLUE, text_color=WHITE, height=28, font_size=13):
super().__init__()
self.text = text
self.bg = bg
self.text_color = text_color
self.height = height
self.font_size = font_size
self.width = W - 4 * cm
def draw(self):
self.canv.setFillColor(self.bg)
self.canv.roundRect(0, 0, self.width, self.height, 6, fill=1, stroke=0)
self.canv.setFillColor(self.text_color)
self.canv.setFont("Helvetica-Bold", self.font_size)
self.canv.drawString(10, 8, self.text)
def banner(text, bg=DARK_BLUE, font_size=13):
return [Spacer(1, 4*mm), ColorBanner(text, bg=bg, font_size=font_size), Spacer(1, 3*mm)]
# ── coloured box paragraph ────────────────────────────────────────────────────
def colored_box(paragraphs, bg=LIGHT_BLUE, border=MID_BLUE):
data = [[p] for p in paragraphs]
t = Table(data, colWidths=[W - 4*cm - 10])
t.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, -1), bg),
("BOX", (0, 0), (-1, -1), 0.8, border),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING", (0, 0), (-1, -1), 5),
("LEFTPADDING", (0, 0), (-1, -1), 8),
("RIGHTPADDING", (0, 0), (-1, -1), 8),
("ROWBACKGROUNDS",(0, 0), (-1, -1), [bg]),
]))
return [t, Spacer(1, 3*mm)]
def must_box(items):
paras = [Paragraph(f"<b>MUST KNOW</b>", must_style)] + \
[Paragraph(f"• {i}", bullet_style) for i in items]
return colored_box(paras, bg=colors.HexColor("#fff5f5"), border=ACCENT_RED)
def gtk_box(items):
paras = [Paragraph(f"<b>GOOD TO KNOW</b>", S("gtk", fontSize=9, textColor=GREEN, fontName="Helvetica-Bold", spaceAfter=2))] + \
[Paragraph(f"• {i}", bullet_style) for i in items]
return colored_box(paras, bg=LIGHT_GREEN, border=GREEN)
def concept_box(text):
paras = [Paragraph("<b>UNDERSTANDING THE CONCEPT</b>", S("con", fontSize=9, textColor=colors.HexColor("#1a5276"), fontName="Helvetica-Bold", spaceAfter=2)),
Paragraph(text, note_style)]
return colored_box(paras, bg=colors.HexColor("#eaf4fb"), border=MID_BLUE)
# ── table helper ─────────────────────────────────────────────────────────────
def data_table(headers, rows, col_widths=None):
data = [headers] + rows
if col_widths is None:
col_widths = [(W - 4*cm) / len(headers)] * len(headers)
t = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0, 0), (-1, 0), TABLE_HEAD),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 8),
("FONTNAME", (0, 1), (-1, -1), "Helvetica"),
("FONTSIZE", (0, 1), (-1, -1), 7.5),
("BACKGROUND", (0, 1), (-1, -1), WHITE),
("ROWBACKGROUNDS",(0, 1), (-1, -1), [WHITE, TABLE_ALT]),
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#bbbbbb")),
("TOPPADDING", (0, 0), (-1, -1), 4),
("BOTTOMPADDING", (0, 0), (-1, -1), 4),
("LEFTPADDING", (0, 0), (-1, -1), 5),
("RIGHTPADDING", (0, 0), (-1, -1), 5),
("VALIGN", (0, 0), (-1, -1), "TOP"),
("WORDWRAP", (0, 0), (-1, -1), "LTR"),
]
for i, row in enumerate(rows):
for j, cell in enumerate(row):
data[i+1][j] = Paragraph(str(cell), S(f"tc{i}{j}", fontSize=7.5, leading=11))
for j, h in enumerate(headers):
data[0][j] = Paragraph(str(h), S(f"th{j}", fontSize=8, fontName="Helvetica-Bold", textColor=WHITE, leading=11))
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle(style))
return [t, Spacer(1, 4*mm)]
# ── cover page ────────────────────────────────────────────────────────────────
def cover_page():
elems = []
elems.append(Spacer(1, 3*cm))
# Title block
title_data = [
[Paragraph("GENITAL TRACT INFECTIONS", title_style)],
[Paragraph("Apurba Sastri Microbiology | Dr. Shreyashi's Lecture Series", sub_style)],
[Spacer(1, 6*mm)],
[Paragraph("Must Know • Good to Know • Understanding Concepts", sub_style)],
]
title_table = Table(title_data, colWidths=[W - 4*cm])
title_table.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, -1), DARK_BLUE),
("TOPPADDING", (0, 0), (-1, -1), 10),
("BOTTOMPADDING",(0,0), (-1, -1), 10),
("LEFTPADDING", (0, 0), (-1, -1), 15),
("RIGHTPADDING",(0, 0), (-1, -1), 15),
("ROUNDEDCORNERS", (0, 0), (-1, -1), [10, 10, 10, 10]),
]))
elems.append(title_table)
elems.append(Spacer(1, 8*mm))
# Topics covered
topics = [
"1. Vaginitis (BV, Candidiasis, Trichomoniasis)",
"2. Bacterial Vaginosis (BV) - Detailed",
"3. Cervicitis",
"4. Bartholinitis (Bartholin Gland Abscess)",
"5. Genital Warts (Condyloma Acuminata / HPV)",
"6. Molluscum Contagiosum",
"7. Non-Gonococcal Urethritis (NGU / Chlamydia)",
"8. Comparative Lab Diagnosis Table",
"9. Memory Aids & Quick Review",
]
cover_box = [Paragraph("<b>TOPICS COVERED</b>", h2_style)] + \
[Paragraph(t, bullet_style) for t in topics]
elems += colored_box(cover_box, bg=LIGHT_BLUE, border=DARK_BLUE)
elems.append(Spacer(1, 8*mm))
elems.append(Paragraph(
"Sources: Sherris & Ryan's Medical Microbiology 8e | Robbins & Kumar Basic Pathology | "
"Robbins Cotran & Kumar Pathologic Basis of Disease | Tietz Textbook of Laboratory Medicine 7e | "
"Goldman-Cecil Medicine | Harrison's Principles of Internal Medicine 22e",
source_style))
elems.append(PageBreak())
return elems
# ── image URLs ────────────────────────────────────────────────────────────────
IMG_BV = "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_c1fa959fcc374c1282fd18b4fc6f2e0999f056e3a4464124d3d2ad884a63e5d7.jpg"
IMG_WARTS = "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_f22a328614c60567db07558682ea89501c602a2c4d80550646855ef6a1040e72.jpg"
IMG_WARTS2= "https://cdn.orris.care/cdss_images/Pathology_1760048447732_4e23fea8-0e9a-4fce-8240-9aa3265760a5.jpg"
IMG_MOL = "https://cdn.orris.care/cdss_images/DermNetNZ_1760036332003_c7f2f3ed-f769-431e-8214-8558079981c8.jpg"
IMG_CHLAM = "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_edfdac49febd0d5695812492031d93f3ff249227bf971234304df196a5d3e572.jpg"
IMG_MOL2 = "https://cdn.orris.care/cdss_images/DermNetNZ_1760036166077_f138fb39-f0a3-459e-9018-121c00df07a5.jpg"
# ── MAIN BUILD ────────────────────────────────────────────────────────────────
def build():
doc = SimpleDocTemplate(OUTPUT, pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm)
story = []
# ── Cover ─────────────────────────────────────────────────────────────────
story += cover_page()
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 0 - Overview
# ═══════════════════════════════════════════════════════════════════════════
story += banner("OVERVIEW — Genital Tract Infections Framework", bg=DARK_BLUE)
story.append(Paragraph(
"Genital tract infections affect the lower tract (vulva, vagina, cervix, urethra, Bartholin's gland) "
"and can ascend to the upper tract (uterus, fallopian tubes, ovaries) causing PID. Normal vaginal pH "
"is <b>3.8–4.5</b> maintained by <b>Lactobacillus</b> species. When this barrier is disrupted, "
"pathogens colonise and cause disease.", body_style))
story += data_table(
["Category", "Pathogen", "Disease"],
[
["Bacteria", "Neisseria gonorrhoeae", "Cervicitis, Urethritis, PID, Disseminated GC"],
["Bacteria", "Chlamydia trachomatis", "NGU, Cervicitis, PID, LGV, Ophthalmia neonatorum"],
["Bacteria", "Gardnerella vaginalis + anaerobes", "Bacterial Vaginosis"],
["Bacteria", "Polymicrobial", "Bartholinitis / Bartholin gland abscess"],
["Virus", "HPV 6/11 (low-risk)", "Condyloma acuminata (Genital warts)"],
["Virus", "HPV 16/18 (high-risk)", "Cervical dysplasia → carcinoma"],
["Virus", "Poxvirus (MCV)", "Molluscum contagiosum"],
["Protozoan", "Trichomonas vaginalis", "Trichomoniasis / Vaginitis"],
["Fungus", "Candida albicans", "Vulvovaginal candidiasis"],
],
col_widths=[3*cm, 6.5*cm, 7*cm]
)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 1 - Vaginitis Comparison
# ═══════════════════════════════════════════════════════════════════════════
story += banner("1. VAGINITIS — Three Causes Compared", bg=MID_BLUE)
story += data_table(
["Feature", "Bacterial Vaginosis", "Candidiasis", "Trichomoniasis"],
[
["Cause", "G. vaginalis + anaerobes", "Candida albicans", "Trichomonas vaginalis"],
["Discharge", "Thin, gray-white, homogeneous", "Thick, white, 'curd-like'", "Yellow, frothy, foul-smelling"],
["pH", ">4.5", "<4.5 (normal)", ">4.5"],
["Wet Mount", "Clue cells", "Pseudohyphae + budding yeast", "Motile flagellated trophozoites"],
["KOH/Whiff Test", "POSITIVE (fishy amine odor)", "Pseudohyphae visible", "Not used"],
["Itch/Pruritis", "Mild/absent", "Severe pruritis + erythema", "Present"],
["Cervix", "Normal", "Erythematous", "Strawberry cervix"],
["STI?", "No (dysbiosis)", "No", "Yes"],
["Treatment", "Metronidazole", "Fluconazole / Clotrimazole", "Metronidazole"],
],
col_widths=[3*cm, 4.5*cm, 4.5*cm, 4.5*cm]
)
# BV image
img_bv = fetch_img(IMG_BV, max_w=13*cm, max_h=7*cm)
if img_bv:
story.append(KeepTogether([
img_bv,
Paragraph("BV (Panel C): clue cells — epithelial cells coated with coccobacilli. "
"Normal (Panel D): Lactobacillus-dominant flora with clear cells.", caption_style),
Spacer(1, 3*mm)
]))
story += must_box([
"Amsel criteria for BV (3 of 4 required): homogeneous discharge, pH >4.5, clue cells on wet mount, positive whiff test",
"Clue cell = vaginal epithelial cell studded/coated with G. vaginalis coccobacilli — shaggy, stippled border",
"Whiff test: 10% KOH added to discharge → fishy odor from volatilised amines = POSITIVE in BV",
"Trichomoniasis: ONLY sexually transmitted vaginitis — causes strawberry cervix",
"Nugent score: Gram stain scoring of vaginal flora (0-10); ≥7 = BV",
])
story += gtk_box([
"Trichomoniasis in pregnancy → premature rupture of membranes + preterm birth",
"BV in pregnancy → associated with premature labour and postpartum endometritis",
"BV increases susceptibility to HIV by disrupting mucosal barrier",
"T. vaginalis is the most prevalent non-viral STI worldwide (~3.7 million in US alone)",
"Only 30% of T. vaginalis infected people develop symptoms — most are asymptomatic carriers",
"Candida is NOT an STI — it is a disruption of normal flora; triggered by antibiotics, diabetes, pregnancy, immunosuppression",
])
story += concept_box(
"Normal vaginal pH <4.5 is maintained by Lactobacillus which produces lactic acid and H2O2. In BV, a "
"POLYMICROBIAL DYSBIOSIS occurs — not an infection by a single new pathogen. Lactobacillus is depleted, "
"anaerobes overgrow, pH rises, and amines (putrescine, cadaverine) produced by anaerobes give the fishy smell. "
"KOH volatilises these amines, making the whiff test positive. Clue cells represent G. vaginalis adherence "
"to epithelial surface via fimbriae, masking the normal cell border."
)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 2 - Bacterial Vaginosis
# ═══════════════════════════════════════════════════════════════════════════
story += banner("2. BACTERIAL VAGINOSIS (BV) — In Detail", bg=MID_BLUE)
story.append(Paragraph(
"BV is the most common vaginal condition in women of reproductive age. It is a <b>polymicrobial dysbiosis</b>, "
"not a classical infection. The dominant feature is uncomfortable vaginal discharge with a 'fishy' odor.", body_style))
story += must_box([
"Causative organisms: Gardnerella vaginalis (primary) + Mobiluncus, Prevotella, Peptostreptococcus (anaerobes)",
"Gram stain: Clue cells = epithelial cells coated with gram-variable coccobacilli",
"Whiff test (Amine test): 10% KOH to discharge → fishy odor POSITIVE",
"Amsel criteria: 3 of 4 — (i) homogeneous discharge, (ii) pH >4.5, (iii) clue cells, (iv) +ve whiff",
"Nugent score: 0–3 normal; 4–6 intermediate; 7–10 = BV",
"Treatment: Metronidazole 500 mg BD x 7 days (oral) OR metronidazole vaginal gel 0.75%",
])
story += gtk_box([
"BV + pregnancy → premature labour, PPROM, postpartum endometritis",
"BV increases risk of acquiring gonorrhea, chlamydia, HIV",
"G. vaginalis forms a dense BIOFILM on vaginal epithelium — this explains high recurrence rates (50% in 1 year)",
"Attachment of N. gonorrhoeae to cervix is ENHANCED by enzymes from BV microbiota (unmasks receptor)",
"Recurrent BV: consider treatment of partner, prolonged metronidazole, boric acid suppositories",
])
story += concept_box(
"Why does BV smell fishy? Anaerobic bacteria in BV metabolise proteins to produce AMINES (putrescine, "
"cadaverine, trimethylamine). These amines are non-volatile at normal vaginal pH but become volatile (gaseous) "
"when KOH raises the pH — this is the basis of the WHIFF TEST. The 'clue cell' is formed when G. vaginalis "
"adheres so densely to the epithelial surface that the cell's sharp, clear border is completely obscured by "
"the bacterial coating — giving it a 'stippled' or 'shaggy' appearance on wet mount."
)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 3 - Cervicitis
# ═══════════════════════════════════════════════════════════════════════════
story += banner("3. CERVICITIS", bg=DARK_BLUE)
story.append(Paragraph(
"Cervicitis is inflammation of the cervix. It is the <b>gateway infection to PID</b>. The two most important "
"causative organisms are <b>Neisseria gonorrhoeae</b> and <b>Chlamydia trachomatis</b>.", body_style))
story += must_box([
"Primary causes: Chlamydia trachomatis (most common) + Neisseria gonorrhoeae",
"Emerging cause: Mycoplasma genitalium (up to 30% recurrent cervicitis/urethritis in males)",
"Symptoms: mucopurulent discharge, intermenstrual bleeding, pelvic pain, dyspareunia",
"Gold Standard Diagnosis: NAAT (Nucleic Acid Amplification Test) — on genital swab or urine",
"Gonococcal cervicitis Gram stain: intracellular gram-negative diplococci INSIDE neutrophils",
"Most important complication: Pelvic Inflammatory Disease (PID) → infertility, ectopic pregnancy",
])
story += gtk_box([
"MOST cervicitis is asymptomatic: Only 6% of Chlamydia-infected females and 14% with gonorrhea have signs",
"Gonorrhea and Chlamydia co-infection is common — always treat BOTH simultaneously (dual therapy)",
"Disseminated gonococcal infection (DGI): septic arthritis (knees), tenosynovitis, fever, vesicular skin lesions",
"Fitz-Hugh-Curtis syndrome: perihepatitis from Chlamydia/GC spreading to perihepatic capsule → RUQ pain",
"Chlamydia is the MOST COMMON bacterial STI worldwide",
"Culture: needed for GC antibiotic sensitivity testing; less sensitive than NAAT; takes ~48 hours",
])
story += concept_box(
"GONOCOCCAL PID spreads upward along mucosal surfaces (cervix → endocervix → fallopian tubes), causing "
"ACUTE SUPPURATIVE SALPINGITIS with neutrophil infiltration and pus filling the tube. The endometrium is "
"characteristically SPARED in gonorrhea (reason unclear). NON-GONOCOCCAL (Chlamydial) PID spreads through "
"lymphatics/venous channels — causing deeper tissue inflammation. This explains why chlamydial PID tends to "
"cause more silent scarring and tubal factor infertility despite fewer acute symptoms."
)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 4 - Bartholinitis
# ═══════════════════════════════════════════════════════════════════════════
story += banner("4. BARTHOLINITIS (Bartholin Gland Infection / Abscess)", bg=DARK_BLUE)
story.append(Paragraph(
"Bartholin glands are paired mucus-secreting glands located at the <b>4 o'clock and 8 o'clock</b> positions "
"at the vaginal introitus. They lubricate the vagina during intercourse. Blockage of the duct → cyst; "
"infection of a cyst or gland → abscess.", body_style))
story += must_box([
"Location: 4 o'clock and 8 o'clock at the vaginal introitus (posterior labia minora)",
"Organisms: POLYMICROBIAL — E. coli, Staphylococcus, Streptococci; also N. gonorrhoeae, C. trachomatis",
"Presentation: Unilateral painful vulvar swelling, fluctuant mass, erythema, difficulty walking/sitting",
"Bartholin cyst = duct obstruction (no infection) → painless or mildly painful",
"Bartholin abscess = infected cyst → severely painful, fever, tender",
"Treatment: Abscess → I&D + Word catheter (for drainage and epithelialisation)",
"Recurrent: Marsupialization (surgical creation of permanent opening)",
"Women >40 with 'recurrent bartholinitis': ALWAYS BIOPSY to exclude Bartholin gland carcinoma",
])
story += gtk_box([
"Word catheter: small balloon catheter placed in the abscess cavity; kept in place for 4–6 weeks to allow "
"new epithelialised tract to form, preventing reaccumulation",
"Marsupialization: suturing the walls of the cyst to the labial skin to create a permanent drainage opening",
"Bartholin gland carcinoma: rare; most common initial symptom = vulvar mass or perineal pain; "
"10% have history of prior Bartholin gland inflammation",
"Bartholin abscess is one of the most common vulvar emergencies in gynecology OPD",
])
story += concept_box(
"The Bartholin gland drains via a 2 cm duct that opens just lateral to the hymen. When this duct is blocked "
"(by mucus plug, inflammation, squamous cell proliferation), secretions accumulate forming a CYST. Bacterial "
"superinfection — most commonly by gut/skin flora (E. coli, Staphylococcus) or STI pathogens — converts it to "
"a painful ABSCESS. The gland sits in loose areolar tissue with a rich vascular supply, allowing rapid spread. "
"Word catheter drainage + epithelialisation creates a new permanent channel, preventing recurrence."
)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 5 - Genital Warts (HPV)
# ═══════════════════════════════════════════════════════════════════════════
story += banner("5. GENITAL WARTS (Condyloma Acuminata) — HPV", bg=colors.HexColor("#7d3c98"))
story.append(Paragraph(
"Condyloma acuminata are benign genital warts caused by low-risk HPV types. HPV is the "
"<b>most common STI globally</b>. The same virus family causes both benign warts (low-risk HPV) "
"and cervical cancer (high-risk HPV).", body_style))
# Images side by side
img_w1 = fetch_img(IMG_WARTS, max_w=7.5*cm, max_h=6*cm)
img_w2 = fetch_img(IMG_WARTS2, max_w=7.5*cm, max_h=6*cm)
if img_w1 and img_w2:
img_row = Table([[img_w1, img_w2]], colWidths=[8*cm, 8.5*cm])
img_row.setStyle(TableStyle([("ALIGN", (0,0), (-1,-1), "CENTER")]))
story.append(img_row)
story.append(Paragraph(
"Left: Extensive cauliflower-like vulvar condyloma acuminata. "
"Right: Penile shaft genital warts — raised, flesh-colored papules (HPV 6/11).",
caption_style))
story.append(Spacer(1, 3*mm))
story += must_box([
"Cause: HPV types 6 and 11 (LOW-RISK — cause warts, NOT cancer)",
"HIGH-RISK HPV types: 16, 18, 31, 33 → cervical dysplasia (CIN) → cervical cancer",
"Appearance: Fleshy, exophytic, CAULIFLOWER-LIKE verrucous papules on genitals, perineum, perianal",
"Histology KEY FINDING: KOILOCYTES = epithelial cells with pyknotic/raisinoid nuclei + perinuclear clear halo",
"Vertical transmission: HPV passed during delivery → LARYNGEAL PAPILLOMATOSIS in newborn",
"Diagnosis: Clinical appearance; Pap smear + colposcopy for cervical HPV",
"Aceto-white test: 5% acetic acid turns HPV lesions white on colposcopy",
"Treatment: Podophyllin, Podophyllotoxin, Imiquimod, TCA, Cryotherapy, Laser, Surgery",
"Prevention: Gardasil-9 vaccine (HPV 6, 11, 16, 18, 31, 33, 45, 52, 58)",
])
story += gtk_box([
"Condylomata ACUMINATA (pointed warts) vs Condylomata LATA of secondary syphilis (FLAT, broad-based warts)",
"HPV 16/18 integration into host genome → inactivates p53 AND Rb tumour suppressors → malignant transformation",
"Cervical cancer: HPV is responsible for ~99.7% of all cases — it is the most preventable cancer via vaccination",
"Recurrence of warts is common as HPV persists latently in basal keratinocytes",
"Immunosuppression (HIV, transplant): warts are larger, more extensive, respond poorly to treatment",
])
story += concept_box(
"HPV infects the BASAL LAYER of stratified squamous epithelium through micro-abrasions during sexual contact. "
"LOW-RISK HPV types (6/11) remain EPISOMAL (circular DNA outside nucleus) and cause proliferative but benign "
"warts — they produce proteins that stimulate epithelial growth without genome integration. HIGH-RISK types "
"(16/18) can INTEGRATE into host genome, causing production of viral oncoproteins E6 (degrades p53) and "
"E7 (inactivates Rb retinoblastoma protein). Loss of these tumour suppressors removes normal cell cycle "
"checkpoints → uncontrolled proliferation → dysplasia → invasive carcinoma. Koilocytes represent the "
"cytopathic effect of HPV: viral proteins disrupt keratin filaments and cause perinuclear vacuolisation."
)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 6 - Molluscum Contagiosum
# ═══════════════════════════════════════════════════════════════════════════
story += banner("6. MOLLUSCUM CONTAGIOSUM", bg=colors.HexColor("#1a6644"))
story.append(Paragraph(
"Molluscum contagiosum is a <b>poxvirus infection</b> causing characteristic pearly, dome-shaped papules "
"with central umbilication. The appearance is pathognomonic.", body_style))
img_m1 = fetch_img(IMG_MOL, max_w=7.5*cm, max_h=5.5*cm)
img_m2 = fetch_img(IMG_MOL2, max_w=7.5*cm, max_h=5.5*cm)
if img_m1 and img_m2:
img_row = Table([[img_m1, img_m2]], colWidths=[8*cm, 8.5*cm])
img_row.setStyle(TableStyle([("ALIGN", (0,0), (-1,-1), "CENTER")]))
story.append(img_row)
story.append(Paragraph(
"Classic molluscum contagiosum: multiple dome-shaped, flesh-colored papules with central umbilication (dimple). "
"Right: lesions on forearm with surrounding dermatitis from secondary irritation.",
caption_style))
story.append(Spacer(1, 3*mm))
story += must_box([
"Cause: Molluscum Contagiosum Virus (MCV) — a POXVIRUS (large DNA virus)",
"4 types: MCV-1 (most common overall), MCV-2 (most commonly sexually transmitted)",
"Appearance: Pearly, dome-shaped papules (1–5 mm), with CENTRAL UMBILICATION (dimple) — PATHOGNOMONIC",
"Histology: HENDERSON-PATTERSON BODIES = large eosinophilic intracytoplasmic inclusions in keratinocytes",
"Incubation period: ~6 weeks (range 2 weeks – 6 months)",
"Transmission — Children: direct contact / fomites (towels); Adults: sexual transmission",
"Location — Children: trunk, arms, legs; Adults (STI): genitals, lower abdomen, inner thighs, buttocks",
"Self-limiting: resolves in 6–12 months in immunocompetent patients",
"Diagnosis: CLINICAL (characteristic appearance alone is diagnostic)",
])
story += gtk_box([
"HIV/Immunosuppressed patients: lesions are GIANT (>1 cm), numerous (>100), persistent, atypical — especially face",
"Treatment when needed: curettage, cryotherapy, cantharidin (vesicant), imiquimod, laser ablation",
"Differential: verruca vulgaris (HPV warts — rough, no umbilication), milia (no umbilication), folliculitis",
"Molluscum is NOT a notifiable STI in most countries, but is classified as an STI in adults",
"The 'waxy core' can be expressed from the central dimple — contains Henderson-Patterson body-laden cells",
])
story += concept_box(
"The characteristic CENTRAL UMBILICATION (dimple) in molluscum is caused by massive accumulation of "
"HENDERSON-PATTERSON BODIES (intracytoplasmic poxvirus inclusion bodies) inside keratinocytes. These "
"inclusions become so large they displace the nucleus to the periphery, distend the cell, and eventually cause "
"central epidermal breakdown — creating the visible dimple. In immunocompromised patients (HIV CD4 <100), "
"the failure of T-cell-mediated immunity to recognise and destroy infected cells explains the uncontrolled "
"viral proliferation, resulting in giant, disfiguring, confluent lesions."
)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 7 - NGU / Chlamydia
# ═══════════════════════════════════════════════════════════════════════════
story += banner("7. NON-GONOCOCCAL URETHRITIS (NGU) — Chlamydia trachomatis", bg=ACCENT_RED)
story.append(Paragraph(
"NGU is urethritis NOT caused by Neisseria gonorrhoeae. <b>Chlamydia trachomatis</b> is the most common "
"bacterial STI worldwide and the leading cause of NGU. It is an <b>obligate intracellular pathogen</b> "
"with a unique biphasic life cycle.", body_style))
img_ch = fetch_img(IMG_CHLAM, max_w=13*cm, max_h=7*cm)
if img_ch:
story.append(KeepTogether([
img_ch,
Paragraph(
"Chlamydia trachomatis biphasic developmental cycle: EB (Elementary Body) = infectious form; "
"RB (Reticulate Body) = intracellular replicating form. EB → RB → new EBs → cell lysis/extrusion.",
caption_style),
Spacer(1, 3*mm)
]))
story += must_box([
"Most common cause of NGU: Chlamydia trachomatis (serovars D–K) — most common bacterial STI worldwide",
"2nd cause: Mycoplasma genitalium (up to 30% recurrent NGU males)",
"Other causes: Trichomonas vaginalis, Ureaplasma urealyticum, HSV; ~50% no pathogen found",
"CHLAMYDIA LIFE CYCLE — MUST MEMORISE:",
" Elementary Body (EB): INFECTIOUS form, metabolically INERT, survives extracellularly, enters cell via receptor-mediated endocytosis",
" Reticulate Body (RB): NON-INFECTIOUS, metabolically ACTIVE, replicates using host cell energy (ATP parasite)",
" EB → RB (inside phagosome) → RB replicates (binary fission) → RB → EB (secondary differentiation) → cell lysis → new EBs released",
"Obligate intracellular: CANNOT produce own ATP; uses host cell ribosomes and energy",
"Tropism: Columnar epithelial cells (cervix, urethra, conjunctiva, fallopian tube, rectum)",
"Gold Standard diagnosis: NAAT on genital swab or urine",
])
story += gtk_box([
"NEONATAL CHLAMYDIA (vertical transmission during vaginal delivery):",
" - Ophthalmia neonatorum (conjunctivitis) — most common; appears 5–14 days after birth",
" - Neonatal pneumonia — appears 4–12 weeks after birth; afebrile, staccato cough",
"REACTIVE ARTHRITIS (Reiter's syndrome): Urethritis + Arthritis + Conjunctivitis ('Can't pee, can't see, can't climb a tree')",
"Fitz-Hugh-Curtis syndrome: perihepatitis from C. trachomatis (or GC) spreading via peritoneum to liver capsule → RUQ pain",
"LGV (Lymphogranuloma Venereum): caused by C. trachomatis serovars L1-3; causes genital ulcer + inguinal lymphadenopathy (buboes) + proctitis",
"Chlamydia culture: requires live cell culture (McCoy cells); impractical for routine diagnosis",
"Cannot be seen on standard Gram stain (unlike gonorrhea — hence 'NON-gonococcal')",
"Giemsa stain or Immunofluorescence can demonstrate inclusion bodies in cell culture",
"Treatment: Doxycycline 100 mg BD x 7 days OR Azithromycin 1 g single dose; treat partner concurrently",
])
story += concept_box(
"Chlamydia is classified as an OBLIGATE INTRACELLULAR pathogen because it cannot synthesise its own ATP — "
"it is an 'energy parasite' that hijacks the host cell's mitochondrial ATP. The EB is the 'survival capsule' — "
"small, dense, metabolically inert (like a spore), able to survive in the extracellular environment long enough "
"for transmission. Once inside a host columnar epithelial cell (via receptor-mediated endocytosis), it escapes "
"lysosomal fusion (a key virulence mechanism) and differentiates into the RB. The RB is large, metabolically "
"active, replicates by binary fission, and uses the host's ribosomes and energy. After ~24-72 hours, RBs "
"re-condense back into EBs, which burst out of the cell (lysis) or are extruded, infecting new cells. "
"This entire cycle takes place within a PHAGOSOME/INCLUSION VESICLE visible on Giemsa as dark inclusion bodies."
)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 8 - Comparative Lab Table
# ═══════════════════════════════════════════════════════════════════════════
story += banner("8. COMPARATIVE LABORATORY DIAGNOSIS", bg=DARK_BLUE)
story += data_table(
["Disease", "Organism", "Key Smear/Lab Finding", "Preferred Test", "Treatment"],
[
["BV", "G. vaginalis + anaerobes", "Clue cells; pH >4.5; Whiff +ve", "Wet mount + Amsel/Nugent criteria", "Metronidazole"],
["Candida vaginitis", "Candida albicans", "Pseudohyphae + budding yeast on KOH", "KOH mount / Pap smear / Culture", "Fluconazole / Clotrimazole"],
["Trichomoniasis", "T. vaginalis", "Motile pear-shaped flagellated protozoa on wet mount", "Wet mount (immediate!); NAAT", "Metronidazole"],
["GC Cervicitis/Urethritis", "N. gonorrhoeae", "Intracellular Gram-neg diplococci in PMNs", "NAAT (gold standard); Culture for sensitivity", "Ceftriaxone + Azithromycin"],
["NGU/Cervicitis", "C. trachomatis", "Inclusion bodies (Giemsa, IF); NAAT positive", "NAAT on swab or urine", "Doxycycline / Azithromycin"],
["Genital Warts", "HPV 6/11", "Koilocytes on biopsy/Pap smear", "Clinical; Colposcopy + aceto-white", "Podophyllin, Imiquimod, Cryotherapy"],
["Molluscum Contagiosum", "Poxvirus MCV", "Henderson-Patterson bodies on histology", "Clinical (umbilicated papule)", "Curettage, Cryotherapy, Cantharidin"],
["Bartholinitis/Abscess", "Polymicrobial", "Pus culture (mixed flora, GC/Chlamydia)", "Clinical + culture of pus", "I&D + Word catheter; Marsupialization"],
],
col_widths=[3*cm, 3.5*cm, 4*cm, 3.5*cm, 2.5*cm]
)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 9 - Memory Aids
# ═══════════════════════════════════════════════════════════════════════════
story += banner("9. MEMORY AIDS & QUICK REVIEW", bg=GOLD)
mem_data = [
["BV Diagnosis",
"CLUE cells + FISHY smell + GRAY discharge + pH >4.5 = BV\nAmsel 3/4: discharge + pH>4.5 + clue cells + whiff+"],
["Chlamydia lifecycle",
"EB = Extracellular, Enters cell (infectious, inert)\nRB = Replicates inside (non-infectious, active)"],
["Molluscum",
"Pearly + DIMPLE + Pox virus = Henderson-Patterson bodies\nMCV-1 most common; MCV-2 = sexually transmitted"],
["NGU causes rank",
"Chlamydia #1 → Mycoplasma #2 → Trichomonas #3 → Ureaplasma #4 → ~50% unknown"],
["Reactive arthritis",
"'Can't see (conjunctivitis) + Can't pee (urethritis) + Can't climb a tree (arthritis)'"],
["HPV types",
"6, 11 = Warts (benign, episomal DNA)\n16, 18 = Cancer (integrate genome, inactivate p53 + Rb)"],
["Bartholin anatomy",
"4 o'clock and 8 o'clock positions at vaginal introitus\nWord catheter → Marsupialization → Excision (if >40: biopsy)"],
["Strawberry cervix",
"Trichomonas vaginalis — dilated mucosal vessels → red spots on colposcopy"],
["Vertical Chlamydia",
"Mother → baby during birth: Ophthalmia neonatorum (5-14 days) then Pneumonia (4-12 wks)"],
["Neonatal conjunctivitis",
"Chlamydia: appears days 5-14; Gonorrhea: appears days 2-5 (earlier) — both treated with antibiotics"],
]
for row in mem_data:
t = Table([[
Paragraph(row[0], S("mk", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_BLUE, leading=12)),
Paragraph(row[1].replace("\n", "<br/>"), S("mv", fontSize=9, fontName="Helvetica", textColor=BLACK, leading=13))
]], colWidths=[4*cm, 12.5*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), LIGHT_BLUE),
("BACKGROUND", (1,0), (1,0), WHITE),
("BOX", (0,0), (-1,-1), 0.5, colors.HexColor("#aaaaaa")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
story.append(t)
story.append(Spacer(1, 1.5*mm))
story.append(Spacer(1, 8*mm))
story.append(HRFlowable(width="100%", thickness=1, color=DARK_BLUE))
story.append(Spacer(1, 3*mm))
story.append(Paragraph(
"Sources: Sherris & Ryan's Medical Microbiology 8e | Robbins & Kumar Basic Pathology | "
"Robbins Cotran & Kumar Pathologic Basis of Disease | Tietz Textbook of Laboratory Medicine 7e | "
"Goldman-Cecil Medicine | Harrison's Principles of Internal Medicine 22e",
source_style))
doc.build(story)
print(f"PDF created: {OUTPUT}")
if __name__ == "__main__":
build()
cd /tmp/workspace/genital-tract-infections && python3 build_pdf.py 2>&1
ls -lh /tmp/workspace/genital-tract-infections/Genital_Tract_Infections_Apurba_Sastri.pdf
Genital Tract Infections Apurba Sastri
PDF Document · PDF
| Section | Content |
|---|---|
| Cover page | Topic list + all 7 subjects covered |
| Overview table | All pathogens, diseases, categories |
| 1. Vaginitis | BV vs Candida vs Trichomonas comparison table + BV/clue cells photo |
| 2. Bacterial Vaginosis | Amsel criteria, Nugent score, whiff test, biofilm concept |
| 3. Cervicitis | GC vs Chlamydia, NAAT, PID pathway |
| 4. Bartholinitis | Anatomy, Word catheter, marsupialization, carcinoma |
| 5. Genital Warts (HPV) | Two clinical photos of condyloma + koilocytes, HPV types, vaccine |
| 6. Molluscum Contagiosum | Two photos of dome-shaped papules + Henderson-Patterson bodies |
| 7. NGU / Chlamydia | Life cycle diagram photo (EB → RB → EB) + neonatal, LGV, reactive arthritis |
| 8. Lab Diagnosis Table | All 8 conditions: organism, smear finding, test, treatment |
| 9. Memory Aids | 10 mnemonics + quick recall boxes |