Guhya Roga - Sexually Transmitted Diseases a. Upadamsha, Firanga, Puyameha - Nidana, Samprapti, Lakshana, Chikitsa. With classical reference from samhitas
Upadamsha Firanga Puyameha Ayurveda Guhya Roga Nidana Samprapti Lakshana Chikitsa classical references Charaka Sushruta
https://www.slideshare.net/slideshow/puyameha-gonorrhoea-sti…
Upadamsha Ayurveda syphilis chancroid Nidana Lakshana Chikitsa Sushruta Samhita classical reference
https://www.easyayurveda.com/upadamsha-treatment-for-sexuall…
Phiranga Ayurveda syphilis Nidana Samprapti Lakshana Chikitsa Bhavaprakasha classical references
"Updamsha" - derived from upa (near/subsidiary) + damsha (bite/cutting) = not just inflammation (shopha) but also a bite-like cutting lesion (dashana). As Acharya Gayadasa explains: "Upadamsha is so named because this disease involves not only shopha (swelling) but also dashana (cut/erosion)."
नखपातो दन्तपातश्च योनिदोषस्तथैव च। कुयोनिगमनं चापि उपदंशस्य कारणम्॥(Nakha pata, danta pata, yoni dosha, and kuyoni gamana are the causes of Upadamsha)
स्नेहनं मृदुसंस्वेदः सिरावेधस्तथैव च। जलौकावचारणं वमनं विरेचनं च।
दुष्टया सह स्त्रिया संगात् फिरंगो जायते नृणाम्। नानादेशसमुत्थाच्च संसर्गात्तस्य जायते॥
चोपचीनी च रसकर्पूरं च फिरंगनाशाय प्रशस्तम्॥(Chopachini and Rasa Karpura are praised for destroying Phiranga disease)
औपसर्गिकमेहाख्यो गदोऽसौ भिषग्वरः। पूर्मेहो व्रणमेह आगन्तुमेह उच्यते॥
रजस्वलायां बहुभुक्तवत्यां तथार्द्रयोनौ मनादरोयः। प्रयात्युमोहात् कोऽपि तर्हि ध्रुवां गदां दारुणमेतमेतु॥
मूत्रे पूयस्रुतिः शोथो मेढ्रे पाकः सवेदनः।
व्रणमेहे वदन्त्येताः आमनेत्रर्गदकाः। उपद्रवा विशेषेण नाशनीर्भिषग्वरः॥
| Feature | Upadamsha | Phiranga | Puyameha |
|---|---|---|---|
| Modern correlation | Chancroid | Syphilis | Gonorrhoea |
| Causative organism | H. ducreyi | T. pallidum | N. gonorrhoeae |
| Classical source | Sushruta Samhita (Ni. 12) | Bhavaprakasha | Bhaisajya Ratnavali (Ch. 89) |
| Primary dosha | Tridoshaja | Vata-Pitta | Pitta-Vata |
| Primary dushya | Rakta, Mamsa | Rakta, Asthi, Majja | Rakta, Lasika |
| Cardinal symptom | Genital ulcer with pain | Painless chancre, then rash, bone pains | Pus discharge + dysuria |
| Key drug | Nimba, Khadira, Guggulu | Chopachini, Rasa Karpura | Chandraprabha Vati, Gokshuradi Guggulu |
| Key treatment | Siravyadha, Jalaukavacharana | Gandha-Rasa aushadhis | Shodhana + Mutravaha srotas chikitsa |
In this pdf you merge above topic
python3 -c " import pdfplumber with pdfplumber.open('/tmp/workspace/attachments/8dad576a-dded-423a-80d6-b21ec865f4f9/DOC-20260713-WA0095..pdf') as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages[:3]): print(f'--- Page {i+1} ---') text = page.extract_text() if text: print(text[:500]) else: print('[No text extracted]') "
python3 -c " import pdfplumber all_text = [] with pdfplumber.open('/tmp/workspace/attachments/8dad576a-dded-423a-80d6-b21ec865f4f9/DOC-20260713-WA0095..pdf') as pdf: for i, page in enumerate(pdf.pages): text = page.extract_text() if text: all_text.append(f'=== PAGE {i+1} ===\n{text}') else: all_text.append(f'=== PAGE {i+1} === [image/no text]') print('\n\n'.join(all_text)) " > /tmp/workspace/pdf_content.txt 2>&1 echo "Done. Lines: $(wc -l < /tmp/workspace/pdf_content.txt)"
mkdir -p /tmp/workspace/guhya-roga-merged && ls /tmp/workspace/guhya-roga-merged/
~/guhya-roga-merged/generate_ayurveda_pages.py
"""
Generate Ayurvedic Guhya Roga (STD) pages as PDF using reportlab,
then merge with the original uploaded PDF.
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from pypdf import PdfWriter, PdfReader
# ── Styles ─────────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
# Colour palette matching a medical notes aesthetic
DARK_BLUE = colors.HexColor("#1a3a5c")
MED_BLUE = colors.HexColor("#2563a8")
LIGHT_BLUE = colors.HexColor("#dbeafe")
ACCENT = colors.HexColor("#b45309") # amber for Sanskrit
GREEN = colors.HexColor("#166534")
LIGHT_GREEN = colors.HexColor("#dcfce7")
LIGHT_AMBER = colors.HexColor("#fef3c7")
SECTION_BG = colors.HexColor("#f0f4ff")
WHITE = colors.white
GRAY = colors.HexColor("#6b7280")
cover_title = ParagraphStyle("cover_title",
fontSize=22, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, spaceAfter=8)
cover_sub = ParagraphStyle("cover_sub",
fontSize=13, fontName="Helvetica",
textColor=colors.HexColor("#bfdbfe"), alignment=TA_CENTER, spaceAfter=6)
cover_note = ParagraphStyle("cover_note",
fontSize=10, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#e0e7ff"), alignment=TA_CENTER)
h1 = ParagraphStyle("h1",
fontSize=16, fontName="Helvetica-Bold",
textColor=WHITE, spaceAfter=4, spaceBefore=6,
backColor=DARK_BLUE, borderPad=6, leftIndent=-6, rightIndent=-6,
leading=20)
h2 = ParagraphStyle("h2",
fontSize=13, fontName="Helvetica-Bold",
textColor=MED_BLUE, spaceAfter=4, spaceBefore=10,
borderPad=2)
h3 = ParagraphStyle("h3",
fontSize=11, fontName="Helvetica-Bold",
textColor=DARK_BLUE, spaceAfter=3, spaceBefore=6)
body = ParagraphStyle("body",
fontSize=9.5, fontName="Helvetica",
textColor=colors.black, spaceAfter=3, leading=14, alignment=TA_JUSTIFY)
skt = ParagraphStyle("skt",
fontSize=9, fontName="Helvetica-Oblique",
textColor=ACCENT, spaceAfter=2, leading=13,
leftIndent=12, backColor=LIGHT_AMBER, borderPad=4)
bullet = ParagraphStyle("bullet",
fontSize=9.5, fontName="Helvetica",
textColor=colors.black, spaceAfter=2, leading=13,
leftIndent=14, bulletIndent=4)
note = ParagraphStyle("note",
fontSize=8.5, fontName="Helvetica-Oblique",
textColor=GREEN, spaceAfter=3, leading=12,
backColor=LIGHT_GREEN, borderPad=4, leftIndent=8)
# ── Helper functions ────────────────────────────────────────────────────────────
def H1(text):
return Paragraph(f" {text}", h1)
def H2(text):
return Paragraph(text, h2)
def H3(text):
return Paragraph(text, h3)
def B(text):
return Paragraph(text, body)
def Skt(text):
return Paragraph(text, skt)
def Bull(text):
return Paragraph(f"• {text}", bullet)
def Note(text):
return Paragraph(f"📌 {text}", note)
def SP(n=4):
return Spacer(1, n)
def HR():
return HRFlowable(width="100%", thickness=0.5, color=MED_BLUE, spaceAfter=4)
def section_box(label, content_color):
"""Colored label box."""
return Table([[Paragraph(label, ParagraphStyle("lb", fontSize=10,
fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER))]],
colWidths=["100%"],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), content_color),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
def make_table(headers, rows, col_widths=None):
data = [headers] + rows
if col_widths is None:
col_widths = [A4[0] / len(headers) - 1*cm] * len(headers)
style = TableStyle([
("BACKGROUND", (0,0), (-1,0), MED_BLUE),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("ROWBACKGROUNDS", (0,1), (-1,-1), [SECTION_BG, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#93c5fd")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("ALIGN", (0,0), (-1,-1), "LEFT"),
("VALIGN", (0,0), (-1,-1), "TOP"),
("WORDWRAP", (0,0), (-1,-1), True),
])
tbl = Table(data, colWidths=col_widths, repeatRows=1)
tbl.setStyle(style)
return tbl
# ── Cover page ──────────────────────────────────────────────────────────────────
def build_cover():
cover_bg = Table([
[Paragraph("", ParagraphStyle("x"))],
[Paragraph("GUHYA ROGA", cover_title)],
[Paragraph("Sexually Transmitted Diseases", cover_sub)],
[Paragraph("Ayurvedic Classical Perspective", cover_sub)],
[Spacer(1, 10)],
[Paragraph("Upadamsha • Phiranga • Puyameha", cover_sub)],
[Spacer(1, 6)],
[Paragraph("Nidana | Samprapti | Lakshana | Chikitsa", cover_sub)],
[Spacer(1, 12)],
[Paragraph("With Classical References from Samhitas", cover_note)],
[Paragraph("Sushruta Samhita • Bhavaprakasha • Bhaisajya Ratnavali • Madhava Nidana", cover_note)],
[Spacer(1, 20)],
[Paragraph("For BAMS / MS (Ayurveda) – Stree Roga & Prasuti Tantra", cover_note)],
],
colWidths=[A4[0] - 4*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 20),
("RIGHTPADDING", (0,0), (-1,-1), 20),
("ALIGN", (0,0), (-1,-1), "CENTER"),
]))
return [Spacer(1, 80), cover_bg]
# ── Content ─────────────────────────────────────────────────────────────────────
def build_content():
story = []
# ── INTRO ──
story += build_cover()
story.append(PageBreak())
# Introduction page
story += [
H1("GUHYA ROGA — INTRODUCTION"),
SP(6),
B("<b>Guhya Roga</b> (गुह्य रोग) refers to diseases of the hidden/genital parts (<i>guhya = secret parts</i>). "
"The Acharyas have described sexually transmitted diseases under this broad category. "
"Three of the most important Guhya Rogas are:"),
SP(4),
]
intro_data = [
[Paragraph("<b>Disease</b>", ParagraphStyle("h", fontSize=9, fontName="Helvetica-Bold", textColor=WHITE)),
Paragraph("<b>Ayurvedic Name</b>", ParagraphStyle("h", fontSize=9, fontName="Helvetica-Bold", textColor=WHITE)),
Paragraph("<b>Modern Correlation</b>", ParagraphStyle("h", fontSize=9, fontName="Helvetica-Bold", textColor=WHITE)),
Paragraph("<b>Primary Classical Source</b>", ParagraphStyle("h", fontSize=9, fontName="Helvetica-Bold", textColor=WHITE))],
[Paragraph("Chancroid / Soft Chancre", body), Paragraph("<b>Upadamsha</b>", body),
Paragraph("Haemophilus ducreyi", body), Paragraph("Sushruta Samhita, Nidana Sthana 12; Madhava Nidana 47", body)],
[Paragraph("Syphilis", body), Paragraph("<b>Phiranga</b>", body),
Paragraph("Treponema pallidum", body), Paragraph("Bhavaprakasha, Madhyama Khanda Ch. 59; Yogaratnakara", body)],
[Paragraph("Gonorrhoea", body), Paragraph("<b>Puyameha</b>", body),
Paragraph("Neisseria gonorrhoeae", body), Paragraph("Bhaisajya Ratnavali, Adhyaya 89 (Aupasargika Roga Chikitsa Prakarana)", body)],
]
tbl = Table(intro_data, colWidths=[4*cm, 3.5*cm, 4.5*cm, 6.5*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,0), MED_BLUE),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("ROWBACKGROUNDS", (0,1), (-1,-1), [LIGHT_BLUE, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, MED_BLUE),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(tbl)
story += [SP(6),
Note("Phiranga and Puyameha are NOT described in the Brihatrayis (Charaka, Sushruta, Vagbhata) as "
"they are relatively new diseases. Phiranga was introduced to India by Portuguese traders (16th century CE)."),
PageBreak()
]
# ═══════════════════════════════════════════════════════════════════════════
# SECTION A: UPADAMSHA
# ═══════════════════════════════════════════════════════════════════════════
story += [
H1("SECTION A — UPADAMSHA (उपदंश)"),
SP(4),
B("<b>Modern Correlation:</b> Chancroid / Soft Chancre | <b>Organism:</b> Haemophilus ducreyi"),
B("<b>Etymology:</b> Upa (near/subsidiary) + Damsha (bite/cutting lesion) = ulcerative lesion with bite-like cutting"),
B("<b>Classical Source:</b> Sushruta Samhita Nidana Sthana 12; Madhava Nidana 47; Ashtanga Hridayam; Yogaratnakara"),
SP(6),
]
story += [
H2("1. NIDANA (Causative Factors)"),
SP(4),
B("<b>According to Sushruta Samhita (Nidana Sthana 12):</b>"),
SP(3),
Skt("नखपातो दन्तपातश्च योनिदोषस्तथैव च।"),
Skt("कुयोनिगमनं चापि उपदंशस्य कारणम्॥ — (Su.Ni. 12)"),
SP(4),
]
nidana_data = [
[Paragraph("<b>Nidana</b>", body), Paragraph("<b>Meaning</b>", body), Paragraph("<b>Source</b>", body)],
[Paragraph("Nakha pata", body), Paragraph("Injury by nails during intercourse", body), Paragraph("Su. Ni. 12", body)],
[Paragraph("Danta pata", body), Paragraph("Injury by teeth during intercourse", body), Paragraph("Su. Ni. 12", body)],
[Paragraph("Adhavana", body), Paragraph("Not cleaning genitalia after intercourse", body), Paragraph("Su. Ni. 12", body)],
[Paragraph("Rati atisevana", body), Paragraph("Excessive sexual indulgence", body), Paragraph("Su. Ni. 12", body)],
[Paragraph("Yoni pradosha", body), Paragraph("Contact with infected/diseased vagina", body), Paragraph("Su. Ni. 12", body)],
[Paragraph("Kuyoni gamana", body), Paragraph("Improper/unethical sexual contact", body), Paragraph("Su. Ni. 12", body)],
[Paragraph("Divaswapna, Mootravega dharana", body), Paragraph("Day sleep, urine retention, heavy food, jaggery, sour food", body), Paragraph("Yogaratnakara", body)],
]
story.append(make_table(nidana_data[0:1], nidana_data[1:], col_widths=[4.5*cm, 8.5*cm, 4*cm]))
story.append(SP(8))
story += [
H2("2. SAMPRAPTI (Pathogenesis)"),
SP(4),
]
samp_data = [
[Paragraph("<b>Ghata</b>", body), Paragraph("<b>Details</b>", body)],
[Paragraph("Dosha", body), Paragraph("Tridoshaja (all three doshas vitiated)", body)],
[Paragraph("Dushya", body), Paragraph("Rakta (blood), Mamsa (muscle), Lasika (lymph)", body)],
[Paragraph("Srotas", body), Paragraph("Shukravaha srotas, Mutravaha srotas", body)],
[Paragraph("Adhisthana (Site)", body), Paragraph("Shishna (penis), Bhaga (vagina), Vrishana (testes), Basti (bladder)", body)],
[Paragraph("Sanchara (Spread)", body), Paragraph("Vitiated doshas enter rakta and mamsa of guhya pradesha via direct contact (kuyoni gamana / trauma)", body)],
]
story.append(make_table(samp_data[0:1], samp_data[1:], col_widths=[4.5*cm, 13*cm]))
story += [SP(4),
B("<b>Samprapti in brief:</b> Nidana → Tridosha kopa → Rakta + Mamsa dushti in guhya sthana → "
"Vrana (ulcer) formation with shopha (swelling) + srava (discharge) + vedana (pain)"),
SP(8),
H2("3. LAKSHANA (Clinical Features)"),
SP(4),
B("The features differ based on the predominant dosha (as per Sushruta Samhita Nidana Sthana 12):"),
SP(4),
]
lakshana_data = [
[Paragraph("<b>Type</b>", body), Paragraph("<b>Varna (Colour)</b>", body),
Paragraph("<b>Vedana (Pain)</b>", body), Paragraph("<b>Srava (Discharge)</b>", body), Paragraph("<b>Other features</b>", body)],
[Paragraph("Vataja", body), Paragraph("Krishna (black)", body),
Paragraph("Tivra (severe); Toda, Stambha", body), Paragraph("Ruksha (dry)", body), Paragraph("Sparsha asahatva (hypersensitivity)", body)],
[Paragraph("Pittaja", body), Paragraph("Peeta-Rakta (yellow-red)", body),
Paragraph("Daha (burning)", body), Paragraph("Purulent, copious", body), Paragraph("Jwara (fever), pakva vrana (fast suppuration)", body)],
[Paragraph("Kaphaja", body), Paragraph("Shweta (white)", body),
Paragraph("Mild (kandu/itching)", body), Paragraph("Snigdha-Picchila (sticky)", body), Paragraph("Guru, sheetala; chronic slow-healing", body)],
[Paragraph("Sannipataja", body), Paragraph("Mixed", body),
Paragraph("All types", body), Paragraph("Durgandha (foul smelling)", body), Paragraph("Deepa vrana (deep ulcer); worst prognosis", body)],
[Paragraph("Raktaja", body), Paragraph("Tamra (copper)", body),
Paragraph("Daha (burning)", body), Paragraph("Copious srava", body), Paragraph("Rakta involvement predominant", body)],
]
story.append(make_table(lakshana_data[0:1], lakshana_data[1:],
col_widths=[2.5*cm, 3*cm, 3.5*cm, 3.5*cm, 5*cm]))
story += [SP(6),
H3("Asadhya Lakshana (Signs of Bad Prognosis) — Sushruta"),
SP(3),
Bull("Vishirna mamsa / shishna — Necrosed / gangrenous genitalia"),
Bull("Krimiyukta — Worm-infested ulcer"),
Bull("Prajagdha — Burnt / irreversibly destroyed tissue"),
Bull("Mushka avashosha — Severe shrinkage of scrotal region"),
Bull("Picchila — Slimy watery discharge"),
Bull("Sandhisthita — Lesions extending to joints"),
SP(8),
H2("4. CHIKITSA (Treatment)"),
SP(4),
B("<b>General Line of Treatment (Sushruta Samhita Chikitsa Sthana):</b>"),
SP(3),
Skt("स्नेहनं मृदुसंस्वेदः सिरावेधस्तथैव च।"),
Skt("जलौकावचारणं वमनं विरेचनं च। — (Su.Chi.)"),
SP(4),
]
chik_data = [
[Paragraph("<b>Treatment</b>", body), Paragraph("<b>Meaning</b>", body), Paragraph("<b>Purpose</b>", body)],
[Paragraph("Snehana", body), Paragraph("Oleation (internal/external)", body), Paragraph("Vata pacification, softening tissues", body)],
[Paragraph("Mridu sweda", body), Paragraph("Mild fomentation", body), Paragraph("Kapha-Vata relief, promotes circulation", body)],
[Paragraph("Siravyadhana", body), Paragraph("Venesection / bloodletting", body), Paragraph("Raktamoksha — removes vitiated blood", body)],
[Paragraph("Jalaukavacharana", body), Paragraph("Leech therapy", body), Paragraph("Local blood purification", body)],
[Paragraph("Vamana", body), Paragraph("Therapeutic emesis", body), Paragraph("Kapha shodhana", body)],
[Paragraph("Virechana", body), Paragraph("Purgation", body), Paragraph("Pitta shodhana", body)],
[Paragraph("Raktashodhaka dravya", body), Paragraph("Blood-purifying medicines", body), Paragraph("Systemic purification", body)],
]
story.append(make_table(chik_data[0:1], chik_data[1:], col_widths=[4*cm, 6*cm, 7.5*cm]))
story += [SP(6),
H3("External Applications (Bahir Parimarjana):"),
Bull("Lepa with Nimba, Haridra, Chandana (medicated paste application)"),
Bull("Pradeha / Pralepa (topical applications on ulcer)"),
Bull("Dhoopana (fumigation of ulcer)"),
Bull("Kashaya dhavana (wound washing with herbal decoctions)"),
SP(4),
H3("Useful Single Herbs:"),
]
herbs_data = [
[Paragraph("<b>Herb</b>", body), Paragraph("<b>Botanical Name</b>", body),
Paragraph("<b>Herb</b>", body), Paragraph("<b>Botanical Name</b>", body)],
[Paragraph("Patola", body), Paragraph("Cucumerina dioica", body), Paragraph("Manjishtha", body), Paragraph("Rubia cordifolia", body)],
[Paragraph("Nimba", body), Paragraph("Azadirachta indica", body), Paragraph("Chandana", body), Paragraph("Santalum album", body)],
[Paragraph("Kiratatikta", body), Paragraph("Swertia chirata", body), Paragraph("Yashtimadhu", body), Paragraph("Glycyrrhiza glabra", body)],
[Paragraph("Khadira", body), Paragraph("Acacia catechu", body), Paragraph("Haridra", body), Paragraph("Curcuma longa", body)],
[Paragraph("Guggulu", body), Paragraph("Commiphora mukul", body), Paragraph("Daruharidra", body), Paragraph("Berberis aristata", body)],
[Paragraph("Asana", body), Paragraph("Pterocarpus marsupium", body), Paragraph("Chopachini", body), Paragraph("Smilax china", body)],
]
story.append(make_table(herbs_data[0:1], herbs_data[1:], col_widths=[3.5*cm, 5.5*cm, 3.5*cm, 5*cm]))
story += [SP(6),
H3("Pathya (Wholesome) / Apathya (Unwholesome):"),
SP(3),
]
pa_data = [
[Paragraph("<b>Pathya (Do)</b>", body), Paragraph("<b>Apathya (Avoid)</b>", body)],
[Paragraph("Ushnodaka (warm water)", body), Paragraph("Atapa sevana (sun exposure)", body)],
[Paragraph("Kshiranna (milk rice), Ghrita (ghee)", body), Paragraph("Kshara-lavana bhojana (excess salt/alkaline food)", body)],
[Paragraph("Laghu tarpaka ahara (light nourishing food)", body), Paragraph("Vyavaya (sexual intercourse during treatment)", body)],
[Paragraph("Brahmacharya + Vratha (discipline)", body), Paragraph("Ushna-teekshna-katu ahara (hot, spicy food)", body)],
[Paragraph("Madhura-amla ahara (sweet and sour food)", body), Paragraph("Ati vyayama + Ati jagarana", body)],
]
story.append(make_table(pa_data[0:1], pa_data[1:], col_widths=[9*cm, 9*cm]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION B: PHIRANGA
# ═══════════════════════════════════════════════════════════════════════════
story += [
H1("SECTION B — PHIRANGA (फिरंग) — SYPHILIS"),
SP(4),
B("<b>Modern Correlation:</b> Syphilis | <b>Organism:</b> Treponema pallidum (spirochaete)"),
B("<b>Classical Source:</b> Bhavaprakasha Madhyama Khanda Ch. 59 (Phiranga Roga Prakarana); Yogaratnakara; Vangasena"),
SP(4),
Note("IMPORTANT: Phiranga is NOT described in the Brihatrayis (Charaka, Sushruta, Vagbhata). "
"It entered India via Portuguese (Phiranga/Firangi) traders ~15th–16th century CE. "
"Bhavaprakasha (Bhavamishra, 16th century) is the FIRST major Ayurvedic text to describe it."),
SP(4),
B("<b>Etymology:</b> 'Phiranga' = derived from 'Firangi' meaning foreigner/Frank/Portuguese. "
"The disease was named after its foreign origin."),
SP(8),
H2("1. NIDANA (Causative Factors)"),
SP(4),
B("<b>According to Bhavaprakasha (Phiranga Roga Prakarana):</b>"),
SP(3),
Skt("दुष्टया सह स्त्रिया संगात् फिरंगो जायते नृणाम्।"),
Skt("नानादेशसमुत्थाच्च संसर्गात्तस्य जायते॥ — (B.P. Phiranga Prakarana)"),
SP(4),
]
pnidana_data = [
[Paragraph("<b>Nidana</b>", body), Paragraph("<b>Meaning</b>", body)],
[Paragraph("Dushta stri samsarga", body), Paragraph("Sexual contact with an infected/diseased woman", body)],
[Paragraph("Beeja samsarga", body), Paragraph("Sexual contact with infected person (beeja = semen/ovum)", body)],
[Paragraph("Stana pana", body), Paragraph("Breast-feeding by infected mother (congenital transmission)", body)],
[Paragraph("Sparsha", body), Paragraph("Direct contact (non-sexual transmission via shared articles, kissing)", body)],
[Paragraph("Desha-kala dosha", body), Paragraph("Influence of place and time (endemic areas, seasonal factors)", body)],
]
story.append(make_table(pnidana_data[0:1], pnidana_data[1:], col_widths=[6*cm, 11.5*cm]))
story += [SP(8),
H2("2. SAMPRAPTI (Pathogenesis)"),
SP(4),
]
psamp_data = [
[Paragraph("<b>Ghata</b>", body), Paragraph("<b>Details</b>", body)],
[Paragraph("Dosha", body), Paragraph("Primarily Vata-Pitta; Tridoshaja in advanced stages", body)],
[Paragraph("Dushya", body), Paragraph("Progressive: Rakta → Mamsa → Asthi → Majja (bone marrow) — follows Pratiloma krama (reverse order of dhatu involvement)", body)],
[Paragraph("Srotas", body), Paragraph("Raktavaha, Asthivaha, Majjavaha srotas", body)],
[Paragraph("Adhisthana", body), Paragraph("Initially genitalia → spreads systemically through raktavaha srotas throughout the body", body)],
[Paragraph("Pathogenesis", body), Paragraph("Dushta beeja contaminates rakta → spreads via raktavaha srotas → progressive dhatu kshaya → asthi-majja involvement (bone pains)", body)],
]
story.append(make_table(psamp_data[0:1], psamp_data[1:], col_widths=[4.5*cm, 13*cm]))
story += [SP(8),
H2("3. LAKSHANA (Clinical Features) — by Stage"),
SP(4),
B("Bhavaprakasha describes three clinical stages corresponding well to modern syphilis stages:"),
SP(4),
]
plakshana_data = [
[Paragraph("<b>Avastha</b>", body), Paragraph("<b>Ayurvedic Features</b>", body), Paragraph("<b>Modern Correlation</b>", body)],
[Paragraph("Prathamaavastha\n(Primary Stage)", body),
Paragraph("• Guhya pradesha vrana (genital ulcer)\n• Vedana-rahita vrana (painless ulcer)\n• Granthi (lymphadenopathy)", body),
Paragraph("Primary syphilis: painless indurated chancre + painless regional lymphadenopathy", body)],
[Paragraph("Dviteeya Avastha\n(Secondary Stage)", body),
Paragraph("• Sarva shareera sphota (widespread skin rash)\n• Mukha vrana (oral ulcers)\n• Jwara (fever)\n• Shoola (body/bone pains)\n• Swara bheda (hoarseness)\n• Talu-gala vrana (throat/palate ulcers)", body),
Paragraph("Secondary syphilis: maculopapular rash on palms/soles, condylomata lata, mucous patches, fever, lymphadenopathy", body)],
[Paragraph("Triteeyaavastha\n(Tertiary/Advanced)", body),
Paragraph("• Asthi shoola (severe bone pains / periostitis)\n• Majja kshaya (bone marrow depletion)\n• Nasa nasha (nasal cartilage destruction — saddle nose)\n• Chittavibhrama (mental confusion)\n• Shira shoola (severe headache)\n• Drishti vibhrama (visual disturbance)\n• Badhirya (deafness)", body),
Paragraph("Tertiary syphilis: Gummas, cardiovascular syphilis (aortitis), neurosyphilis (tabes dorsalis, general paresis), saddle-nose deformity", body)],
]
story.append(make_table(plakshana_data[0:1], plakshana_data[1:], col_widths=[3.5*cm, 7.5*cm, 6.5*cm]))
story += [SP(8),
H2("4. CHIKITSA (Treatment) — Bhavaprakasha"),
SP(4),
B("Bhavaprakasha introduced two specific drugs for Phiranga:"),
SP(3),
Skt("चोपचीनी च रसकर्पूरं च फिरंगनाशाय प्रशस्तम्॥ — (B.P. Phiranga Prakarana)"),
B("(Chopachini and Rasa Karpura are praised for destroying Phiranga disease)"),
SP(6),
]
pchik_data = [
[Paragraph("<b>Medicine</b>", body), Paragraph("<b>Details</b>", body), Paragraph("<b>Action</b>", body)],
[Paragraph("Chopachini (CHIEF DRUG)", body), Paragraph("Smilax china — China root", body), Paragraph("Anti-infective, adaptogen, raktashodhaka; first specific drug for syphilis in Ayurveda", body)],
[Paragraph("Rasa Karpura", body), Paragraph("Mercurial compound (Parada preparation)", body), Paragraph("Powerful anti-infective, anti-spirochaetal action", body)],
[Paragraph("Gandhaka Rasayana", body), Paragraph("Sulphur compound", body), Paragraph("Raktashodhana, wound healing, anti-infective", body)],
[Paragraph("Shuddha Parada formulations", body), Paragraph("Purified mercury", body), Paragraph("Deepana, pachana, anti-syphilitic", body)],
[Paragraph("Arogyavardhini Vati", body), Paragraph("Classical poly-herbo-mineral", body), Paragraph("Liver support, raktashodhana, rasayana", body)],
[Paragraph("Mahamanjishthadi Kashaya", body), Paragraph("Decoction with Manjishtha, Khadira", body), Paragraph("Blood purification, skin diseases, anti-infective", body)],
[Paragraph("Khadirarishta", body), Paragraph("Fermented Khadira preparation", body), Paragraph("Raktavardhana, wound healing, raktashodhana", body)],
]
story.append(make_table(pchik_data[0:1], pchik_data[1:], col_widths=[4.5*cm, 5.5*cm, 7.5*cm]))
story += [SP(6),
H3("External Treatment:"),
Bull("Lepa with Khadira, Haridra, Nimba (medicated paste)"),
Bull("Dhupana (fumigation of lesions)"),
Bull("Ushna jala parisheka (warm medicated wash)"),
SP(4),
H3("Pathya / Apathya:"),
]
ppa_data = [
[Paragraph("<b>Pathya (Do)</b>", body), Paragraph("<b>Apathya (Avoid)</b>", body)],
[Paragraph("Godhuma (wheat), Mudga (green gram), Shali rice", body), Paragraph("Guru ahara (heavy food)", body)],
[Paragraph("Ghrita (ghee), Dugdha (milk)", body), Paragraph("Vyavaya (sexual intercourse during treatment)", body)],
[Paragraph("Brahmacharya (celibacy)", body), Paragraph("Vyayama (strenuous exercise)", body)],
[Paragraph("Rasayana seva after cure", body), Paragraph("Amla, katu, lavana rasa in excess", body)],
]
story.append(make_table(ppa_data[0:1], ppa_data[1:], col_widths=[9*cm, 9*cm]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION C: PUYAMEHA
# ═══════════════════════════════════════════════════════════════════════════
story += [
H1("SECTION C — PUYAMEHA (पूयमेह) — GONORRHOEA"),
SP(4),
B("<b>Modern Correlation:</b> Gonorrhoea | <b>Organism:</b> Neisseria gonorrhoeae (Gram-negative intracellular diplococcus)"),
B("<b>Classical Source:</b> Bhaisajya Ratnavali Adhyaya 89 (Aupasargika Roga Chikitsa Prakarana)"),
SP(4),
Note("IMPORTANT: Puyameha is NOT described in Brihatrayis. Bhaisajya Ratnavali is the PRIMARY classical source. "
"It is classified under Aupasargika (contagious/infectious) diseases — demonstrating Ayurveda's "
"early concept of contagion (Upasarga = संक्रमण)."),
SP(4),
B("<b>Synonyms (B.R. 89/1–2):</b>"),
SP(3),
Skt("औपसर्गिकमेहाख्यो गदोऽसौ भिषग्वरः।"),
Skt("पूर्मेहो व्रणमेह आगन्तुमेह उच्यते॥ — (B.R. 89/1)"),
SP(3),
]
syn_data = [
[Paragraph("<b>Synonym</b>", body), Paragraph("<b>Derivation</b>", body), Paragraph("<b>Meaning</b>", body)],
[Paragraph("Puyameha", body), Paragraph("Puya (pus) + Meha (discharge)", body), Paragraph("Discharge of pus from urethra", body)],
[Paragraph("Vrana meha", body), Paragraph("Vrana (wound) + Meha", body), Paragraph("Discharge and management like a wound", body)],
[Paragraph("Aganthu meha", body), Paragraph("Aganthu (external cause)", body), Paragraph("Externally caused urethral discharge", body)],
[Paragraph("Aupasargika meha", body), Paragraph("Upasarga (contagion/infection)", body), Paragraph("Contagious / infectious meha — STD concept", body)],
[Paragraph("Ushnavaata", body), Paragraph("Type of Mutravata", body), Paragraph("Classified under Mutraghata (urinary obstruction disorders)", body)],
]
story.append(make_table(syn_data[0:1], syn_data[1:], col_widths=[4*cm, 5.5*cm, 8*cm]))
story += [SP(8),
H2("1. NIDANA (Causative Factors)"),
SP(4),
B("<b>According to Bhaisajya Ratnavali (B.R. 89/2):</b>"),
SP(3),
Skt("रजस्वलायां बहुभुक्तवत्यां तथार्द्रयोनौ मनादरोयः।"),
Skt("प्रयात्युमोहात् कोऽपि तर्हि ध्रुवां गदां दारुणमेतमेतु॥ — (B.R. 89/2)"),
SP(4),
]
pnid_data = [
[Paragraph("<b>Nidana</b>", body), Paragraph("<b>Meaning</b>", body)],
[Paragraph("Rajasvalaya saha maithuna", body), Paragraph("Intercourse with a menstruating woman", body)],
[Paragraph("Bahubhuktavati stri samsarga", body), Paragraph("Intercourse with a woman who has eaten excessively (Agni dushti)", body)],
[Paragraph("Ardra yoni samsarga", body), Paragraph("Intercourse with a woman having moist/diseased vagina (kleda yukta)", body)],
[Paragraph("Puyameha grasta purusha samsarga", body), Paragraph("Woman who has intercourse with an infected man also contracts the disease — sexual transmission concept", body)],
]
story.append(make_table(pnid_data[0:1], pnid_data[1:], col_widths=[6*cm, 11.5*cm]))
story += [SP(8),
H2("2. SAMPRAPTI GHATAKA (Pathogenic Factors)"),
SP(4),
]
ghat_data = [
[Paragraph("<b>Ghata</b>", body), Paragraph("<b>Details</b>", body)],
[Paragraph("Dosha", body), Paragraph("Pitta pradhana Tridosha (Pitta-Vata dominance)", body)],
[Paragraph("Dushya", body), Paragraph("Rakta (blood), Lasika (lymph)", body)],
[Paragraph("Srotas", body), Paragraph("Mutravaha srotas (primary)", body)],
[Paragraph("Adhisthana (Site)", body), Paragraph("Shishna (penis), Bhaga (vagina), Vrishana (testes), Basti (bladder)", body)],
[Paragraph("Sanchara", body), Paragraph("Through Rasagni dvara — Pitta-rakta dushti spreads via mutravaha srotas", body)],
]
story.append(make_table(ghat_data[0:1], ghat_data[1:], col_widths=[4.5*cm, 13*cm]))
story += [SP(8),
H2("3. LAKSHANA (Clinical Features)"),
SP(4),
B("<b>According to Bhaisajya Ratnavali (B.R. 89/3–10):</b>"),
SP(3),
Skt("मूत्रे पूयस्रुतिः शोथो मेढ्रे पाकः सवेदनः। — (B.R. 89/3)"),
SP(4),
]
lak_data = [
[Paragraph("<b>Lakshana</b>", body), Paragraph("<b>Meaning</b>", body), Paragraph("<b>Modern Equivalent</b>", body)],
[Paragraph("Puyasruti in mutra", body), Paragraph("Pus discharge with urine", body), Paragraph("Purulent urethral discharge", body)],
[Paragraph("Shotha of genitalia", body), Paragraph("Swelling of penis/vulva", body), Paragraph("Genital oedema, cervicitis", body)],
[Paragraph("Medhre paka sa vedana", body), Paragraph("Suppuration with pain in penis", body), Paragraph("Urethritis with pain", body)],
[Paragraph("Mutrakrichra", body), Paragraph("Painful/difficult urination", body), Paragraph("Dysuria", body)],
[Paragraph("Daha", body), Paragraph("Burning sensation during urination", body), Paragraph("Burning micturition", body)],
[Paragraph("Visarpa", body), Paragraph("Spreading inflammation", body), Paragraph("Spread to adjacent structures (PID, epididymitis)", body)],
]
story.append(make_table(lak_data[0:1], lak_data[1:], col_widths=[4.5*cm, 6*cm, 7*cm]))
story += [SP(6),
H3("Upadrava (Complications) — B.R. 89/10:"),
SP(3),
Skt("व्रणमेहे वदन्त्येताः आमनेत्रर्गदकाः।"),
Skt("उपद्रवा विशेषेण नाशनीर्भिषग्वरः॥ — (B.R. 89/10)"),
SP(3),
Bull("Amavata — Gonorrhoeal arthritis (joint inflammation)"),
Bull("Netra roga — Eye involvement (Ophthalmia neonatorum equivalent)"),
Bull("Meha vriddhi — Progression and worsening of discharge"),
Bull("Shukra dosha — Seminal fluid disorders"),
Bull("Vandhyatva — Infertility"),
SP(8),
H2("4. CHIKITSA (Treatment)"),
SP(4),
B("<b>Shodhana Chikitsa (Purification) — according to dominant dosha:</b>"),
Bull("Vamana (emesis) — for Kapha dominant presentation"),
Bull("Virechana (purgation) — for Pitta dominant presentation"),
Bull("Basti (enema) — for Vata dominant presentation"),
SP(6),
B("<b>Shamana Chikitsa (Palliative):</b>"),
SP(3),
]
shamana_data = [
[Paragraph("<b>Formulation</b>", body), Paragraph("<b>Ingredients / Type</b>", body), Paragraph("<b>Action</b>", body)],
[Paragraph("Chandraprabha Vati", body), Paragraph("Classical poly-herbal tablet", body), Paragraph("Chief drug for mutra roga; mutrashodhana, anti-infective", body)],
[Paragraph("Gokshuradi Guggulu", body), Paragraph("Gokshura + Guggulu base", body), Paragraph("Mutravaha srotas shodha, diuretic, anti-infective", body)],
[Paragraph("Varunadi Kashaya", body), Paragraph("Varuna (Crataeva) based decoction", body), Paragraph("Mutra virechaniya, reduces shotha", body)],
[Paragraph("Shilajatu", body), Paragraph("Purified mineral pitch", body), Paragraph("Mutravaha shodhana, raktashodhana, rasayana", body)],
[Paragraph("Trivanga Bhasma", body), Paragraph("Bhasma of Naga, Vanga, Yashada (Pb, Sn, Zn)", body), Paragraph("Mutraroga, prameha, anti-infective; use with caution", body)],
[Paragraph("Chandanasava", body), Paragraph("Fermented Chandana preparation", body), Paragraph("Mutravaha srotas shodha, cooling, analgesic", body)],
[Paragraph("Trinapanchamoola Kashaya", body), Paragraph("Five grass roots decoction", body), Paragraph("Mutrakrichra, shotha hara", body)],
]
story.append(make_table(shamana_data[0:1], shamana_data[1:], col_widths=[4.5*cm, 5.5*cm, 7.5*cm]))
story += [SP(6),
H3("External Treatment:"),
Bull("Dhavana — washing of urethra with herbal decoctions (Kashaya)"),
Bull("Picchu dharana — medicated cotton plug"),
Bull("Dhupana — fumigation"),
SP(4),
H3("Pathya / Apathya:"),
]
qpa_data = [
[Paragraph("<b>Pathya (Do)</b>", body), Paragraph("<b>Apathya (Avoid)</b>", body)],
[Paragraph("Ksheera (milk), Ghrita (ghee)", body), Paragraph("Vyavaya (sexual intercourse)", body)],
[Paragraph("Sita (sugar), Madhura rasa ahara", body), Paragraph("Guru, tikshna ahara (heavy/sharp food)", body)],
[Paragraph("Shali rice, Mudga (green gram)", body), Paragraph("Amla, lavana rasa in excess", body)],
[Paragraph("Ushnodaka (warm water) — adequate hydration", body), Paragraph("Ati vyayama + Ati jagarana", body)],
[Paragraph("Rest and Brahmacharya", body), Paragraph("Katu, ushna dravya (spicy, hot substances)", body)],
]
story.append(make_table(qpa_data[0:1], qpa_data[1:], col_widths=[9*cm, 9*cm]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# COMPARATIVE SUMMARY TABLE
# ═══════════════════════════════════════════════════════════════════════════
story += [
H1("COMPARATIVE SUMMARY — GUHYA ROGA (STDs)"),
SP(6),
]
comp_data = [
[Paragraph("<b>Feature</b>", body), Paragraph("<b>Upadamsha</b>", body),
Paragraph("<b>Phiranga</b>", body), Paragraph("<b>Puyameha</b>", body)],
[Paragraph("Modern name", body), Paragraph("Chancroid", body), Paragraph("Syphilis", body), Paragraph("Gonorrhoea", body)],
[Paragraph("Causative organism", body), Paragraph("Haemophilus ducreyi", body),
Paragraph("Treponema pallidum", body), Paragraph("Neisseria gonorrhoeae", body)],
[Paragraph("In Brihatrayis?", body), Paragraph("YES — Su.Ni. 12", body),
Paragraph("NO (new disease, 15–16th c.)", body), Paragraph("NO (described in B.R. only)", body)],
[Paragraph("Primary source", body), Paragraph("Sushruta Nidana 12;\nMadhava Nidana 47", body),
Paragraph("Bhavaprakasha Madhyama Khanda Ch. 59", body), Paragraph("Bhaisajya Ratnavali Ch. 89", body)],
[Paragraph("Dosha", body), Paragraph("Tridoshaja", body), Paragraph("Vata-Pitta → Tridosha", body), Paragraph("Pitta-Vata", body)],
[Paragraph("Dushya", body), Paragraph("Rakta, Mamsa, Lasika", body),
Paragraph("Rakta → Asthi → Majja", body), Paragraph("Rakta, Lasika", body)],
[Paragraph("Cardinal feature", body), Paragraph("Painful genital ulcer\n(cut-like lesion)", body),
Paragraph("Painless chancre → rash\n→ bone pains/systemic", body), Paragraph("Pus discharge +\ndysuria (burning)", body)],
[Paragraph("Key treatment drug", body), Paragraph("Nimba, Khadira,\nGuggulu; Siravyadha", body),
Paragraph("Chopachini,\nRasa Karpura", body), Paragraph("Chandraprabha Vati,\nGokshuradi Guggulu", body)],
[Paragraph("Surgical tx", body), Paragraph("Siravyadhana,\nJalaukavacharana", body),
Paragraph("Not primary", body), Paragraph("Not primary", body)],
[Paragraph("Concept", body), Paragraph("Kuyoni gamana\n(sexual contact)", body),
Paragraph("Phiranga desha\n(foreign origin)", body), Paragraph("Aupasargika\n(contagious disease)", body)],
]
story.append(make_table(comp_data[0:1], comp_data[1:], col_widths=[4*cm, 4.5*cm, 5*cm, 5*cm]))
story += [SP(6),
H2("Key Classical References at a Glance"),
SP(4),
]
ref_data = [
[Paragraph("<b>Text</b>", body), Paragraph("<b>Section</b>", body), Paragraph("<b>Content</b>", body)],
[Paragraph("Sushruta Samhita", body), Paragraph("Nidana Sthana 12", body), Paragraph("Complete description of Upadamsha: Nidana, 5 types (Vataja etc.), Lakshana, Asadhya lakshana, Chikitsa", body)],
[Paragraph("Madhava Nidana", body), Paragraph("Adhyaya 47", body), Paragraph("Upadamsha — nidana and lakshana", body)],
[Paragraph("Bhavaprakasha", body), Paragraph("Madhyama Khanda Ch. 59\n(Phiranga Prakarana)", body), Paragraph("First Ayurvedic description of Phiranga (Syphilis); Chopachini and Rasa Karpura treatment", body)],
[Paragraph("Bhaisajya Ratnavali", body), Paragraph("Adhyaya 89 — Aupasargika\nRoga Chikitsa Prakarana", body), Paragraph("Puyameha (Gonorrhoea): Synonyms, Nidana, Samprapti, Lakshana, Upadrava, Chikitsa", body)],
[Paragraph("Yogaratnakara", body), Paragraph("Upadamsha prakarana", body), Paragraph("Additional nidana and chikitsa; Pathya-Apathya", body)],
[Paragraph("Ashtanga Hridayam", body), Paragraph("Uttara Tantra", body), Paragraph("References to vrana of guhya pradesha", body)],
]
story.append(make_table(ref_data[0:1], ref_data[1:], col_widths=[4*cm, 5*cm, 8.5*cm]))
story += [SP(8),
Note("For exam: Always mention — (1) Phiranga is NOT in Brihatrayis; (2) Puyameha is Aupasargika roga "
"(contagion concept); (3) Chopachini is the chief drug for Phiranga; "
"(4) Siravyadhana + Jalaukavacharana are key for Upadamsha; "
"(5) Upadamsha is described in Sushruta Nidana Sthana 12."),
]
return story
# ── Build PDF ───────────────────────────────────────────────────────────────────
output_path = "/tmp/workspace/guhya-roga-merged/guhya_roga_ayurveda.pdf"
doc = SimpleDocTemplate(
output_path,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm,
title="Guhya Roga — Ayurvedic STD Notes",
author="Ayurveda Notes"
)
story = build_content()
doc.build(story)
print(f"Ayurvedic PDF generated: {output_path}")
cd /tmp/workspace/guhya-roga-merged && python3 generate_ayurveda_pages.py
python3 -c " from pypdf import PdfWriter, PdfReader original = '/tmp/workspace/attachments/8dad576a-dded-423a-80d6-b21ec865f4f9/DOC-20260713-WA0095..pdf' ayurveda = '/tmp/workspace/guhya-roga-merged/guhya_roga_ayurveda.pdf' merged = '/tmp/workspace/guhya-roga-merged/Guhya_Roga_STD_Complete_Notes.pdf' writer = PdfWriter() # Add original PDF pages first r1 = PdfReader(original) print(f'Original PDF pages: {len(r1.pages)}') for page in r1.pages: writer.add_page(page) # Then add Ayurvedic notes pages r2 = PdfReader(ayurveda) print(f'Ayurveda PDF pages: {len(r2.pages)}') for page in r2.pages: writer.add_page(page) # Set metadata writer.add_metadata({ '/Title': 'Guhya Roga — STD Complete Notes (Modern + Ayurvedic)', '/Author': 'Ayurveda / BAMS Notes', '/Subject': 'Upadamsha, Phiranga, Puyameha — Nidana, Samprapti, Lakshana, Chikitsa' }) with open(merged, 'wb') as f: writer.write(f) print(f'Merged PDF saved: {merged}') print(f'Total pages: {len(r1.pages) + len(r2.pages)}') "
python3 -c " from pypdf import PdfReader r = PdfReader('/tmp/workspace/guhya-roga-merged/Guhya_Roga_STD_Complete_Notes.pdf') print(f'Total pages: {len(r.pages)}') print(f'Metadata: {r.metadata}') # Quick text check from last few pages (Ayurvedic pages) for i in [21, 22, 23, 30]: t = r.pages[i].extract_text() print(f'Page {i+1}: {t[:120] if t else \"[image/no text]\"}') "
Guhya Roga STD Complete Notes
PDF Document · PDF
| Page | Content |
|---|---|
| 23 | Cover page — Guhya Roga: Ayurvedic Perspective |
| 24 | Introduction + Comparative introduction table |
| 25–26 | Upadamsha — Nidana (Su.Ni.12 shloka), Samprapti, Dosha-wise Lakshana table, Asadhya lakshana, Chikitsa, Herbs, Pathya-Apathya |
| 27–28 | Phiranga — Nidana (B.P. shloka), Samprapti (Pratiloma dhatu kshaya), 3-stage Lakshana table, Chikitsa with Chopachini + Rasa Karpura |
| 29–31 | Puyameha — Synonyms (B.R. 89/1 shloka), Nidana (B.R. 89/2 shloka), Samprapti Ghataka, Lakshana (B.R. 89/3 shloka), Upadrava, Chikitsa (Shamana + Shodhana) |
| 32–34 | Master Comparative Summary Table + Classical References Table + Exam tips |
Vyadhi Vinischaya Upaya - Diagnostic Tools and Techniques a. Pap smear b. Colposcopy c. Cervical biopsy d. Endometrial biopsy e. Hysterosalpingography f. Ultrasonography g. Hysteroscopy h. Laparoscopy i. Magnetic Resonance Imaging j. Computed Tomography scan
Vyadhi Vinischaya Upaya - Diagnostic Tools and Techniques a. Pap smear b. Colposcopy c. Cervical biopsy d. Endometrial biopsy e. Hysterosalpingography f. Ultrasonography g. Hysteroscopy h. Laparoscopy i. Magnetic Resonance Imaging j. Computed Tomography scan Stree Rugna Parikshana - Gynaecological Examination a. Gynaecological History taking. b. General and systemic examination. c. Breast examination, Per abdomen, Per speculum, Per vaginal, Per rectal examination. Give notes for 20Marks Do pdf fastttttttttttt
~/guhya-roga-merged/generate_vyadhi_vinischaya.py
"""
Generate: Vyadhi Vinischaya Upaya (Diagnostic Tools) + Stree Rugna Parikshana
20-Mark Exam Notes PDF for BAMS / MS Ayurveda
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
# ── Palette ────────────────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a3a5c")
MED_BLUE = colors.HexColor("#2563a8")
LIGHT_BLUE = colors.HexColor("#dbeafe")
TEAL = colors.HexColor("#0f766e")
LIGHT_TEAL = colors.HexColor("#ccfbf1")
PURPLE = colors.HexColor("#6d28d9")
LIGHT_PURP = colors.HexColor("#ede9fe")
AMBER = colors.HexColor("#b45309")
LIGHT_AMBER = colors.HexColor("#fef3c7")
GREEN = colors.HexColor("#166534")
LIGHT_GREEN = colors.HexColor("#dcfce7")
ROSE = colors.HexColor("#be123c")
LIGHT_ROSE = colors.HexColor("#ffe4e6")
SECTION_BG = colors.HexColor("#f0f4ff")
WHITE = colors.white
GRAY = colors.HexColor("#374151")
# ── Base Styles ────────────────────────────────────────────────────────────────
def PS(name, **kw):
return ParagraphStyle(name, **kw)
cover_title = PS("ct", fontSize=24, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, spaceAfter=8)
cover_sub = PS("cs", fontSize=13, fontName="Helvetica",
textColor=colors.HexColor("#bfdbfe"), alignment=TA_CENTER, spaceAfter=5)
cover_note = PS("cn", fontSize=10, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#e0e7ff"), alignment=TA_CENTER)
h1 = PS("h1", fontSize=15, fontName="Helvetica-Bold", textColor=WHITE,
spaceAfter=4, spaceBefore=4, backColor=DARK_BLUE, borderPad=6,
leftIndent=-6, rightIndent=-6, leading=20)
h1t = PS("h1t", fontSize=15, fontName="Helvetica-Bold", textColor=WHITE,
spaceAfter=4, spaceBefore=4, backColor=TEAL, borderPad=6,
leftIndent=-6, rightIndent=-6, leading=20)
h2 = PS("h2", fontSize=12, fontName="Helvetica-Bold", textColor=MED_BLUE,
spaceAfter=3, spaceBefore=8)
h2t = PS("h2t", fontSize=12, fontName="Helvetica-Bold", textColor=TEAL,
spaceAfter=3, spaceBefore=8)
h3 = PS("h3", fontSize=10.5, fontName="Helvetica-Bold", textColor=DARK_BLUE,
spaceAfter=2, spaceBefore=5)
body = PS("body", fontSize=9.5, fontName="Helvetica", textColor=colors.black,
spaceAfter=3, leading=14, alignment=TA_JUSTIFY)
bullet = PS("bullet", fontSize=9.5, fontName="Helvetica", textColor=colors.black,
spaceAfter=2, leading=13, leftIndent=14, bulletIndent=4)
note = PS("note", fontSize=8.5, fontName="Helvetica-Oblique", textColor=GREEN,
spaceAfter=3, leading=12, backColor=LIGHT_GREEN, borderPad=4, leftIndent=8)
imp = PS("imp", fontSize=8.5, fontName="Helvetica-Bold", textColor=ROSE,
spaceAfter=3, leading=12, backColor=LIGHT_ROSE, borderPad=4, leftIndent=8)
# ── Helpers ────────────────────────────────────────────────────────────────────
def H1(t): return Paragraph(f" {t}", h1)
def H1T(t): return Paragraph(f" {t}", h1t)
def H2(t): return Paragraph(t, h2)
def H2T(t): return Paragraph(t, h2t)
def H3(t): return Paragraph(t, h3)
def B(t): return Paragraph(t, body)
def Bull(t): return Paragraph(f"• {t}", bullet)
def Note(t): return Paragraph(f"✔ {t}", note)
def Imp(t): return Paragraph(f"★ EXAM TIP: {t}", imp)
def SP(n=5): return Spacer(1, n)
def tbl(headers, rows, widths):
data = [headers] + rows
style = TableStyle([
("BACKGROUND", (0,0), (-1,0), MED_BLUE),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("ROWBACKGROUNDS",(0,1), (-1,-1), [SECTION_BG, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#93c5fd")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
("WORDWRAP", (0,0), (-1,-1), True),
])
t = Table(data, colWidths=widths, repeatRows=1)
t.setStyle(style)
return t
def tbl_teal(headers, rows, widths):
data = [headers] + rows
style = TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LIGHT_TEAL, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, TEAL),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
("WORDWRAP", (0,0), (-1,-1), True),
])
t = Table(data, colWidths=widths, repeatRows=1)
t.setStyle(style)
return t
def pb(t):
return Paragraph(t, PS("pb", fontSize=8.5, fontName="Helvetica",
textColor=colors.black, leading=12))
W = A4[0] - 4*cm # usable width
# ═══════════════════════════════════════════════════════════════════════════════
# COVER
# ═══════════════════════════════════════════════════════════════════════════════
def cover():
box = Table([
[Paragraph("", PS("x"))],
[Paragraph("GYNAECOLOGY — 20 MARK NOTES", cover_title)],
[Spacer(1,8)],
[Paragraph("SECTION 2", cover_sub)],
[Paragraph("Vyadhi Vinischaya Upaya", cover_title)],
[Paragraph("Diagnostic Tools & Techniques", cover_sub)],
[Spacer(1,10)],
[Paragraph("&", cover_sub)],
[Spacer(1,10)],
[Paragraph("SECTION 3", cover_sub)],
[Paragraph("Stree Rugna Parikshana", cover_title)],
[Paragraph("Gynaecological Examination", cover_sub)],
[Spacer(1,16)],
[Paragraph("Pap Smear • Colposcopy • Cervical Biopsy • Endometrial Biopsy • HSG", cover_note)],
[Paragraph("Ultrasonography • Hysteroscopy • Laparoscopy • MRI • CT Scan", cover_note)],
[Spacer(1,8)],
[Paragraph("History Taking • General Examination • Breast • P/A • P/S • P/V • P/R", cover_note)],
[Spacer(1,20)],
[Paragraph("BAMS / MS (Ayurveda) — Stree Roga & Prasuti Tantra", cover_note)],
],
colWidths=[W],
style=TableStyle([
("BACKGROUND", (0,0),(-1,-1), DARK_BLUE),
("TOPPADDING", (0,0),(-1,-1), 7),
("BOTTOMPADDING", (0,0),(-1,-1), 7),
("LEFTPADDING", (0,0),(-1,-1), 20),
("RIGHTPADDING", (0,0),(-1,-1), 20),
("ALIGN", (0,0),(-1,-1), "CENTER"),
]))
return [Spacer(1,60), box]
# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 2 — VYADHI VINISCHAYA UPAYA
# ═══════════════════════════════════════════════════════════════════════════════
def section2():
s = []
s += [
H1("SECTION 2 — VYADHI VINISCHAYA UPAYA (Diagnostic Tools & Techniques)"),
SP(4),
B("<b>Vyadhi Vinischaya</b> = Disease Diagnosis. Upaya = means/tools. "
"Modern gynaecology uses a range of investigative procedures for definitive diagnosis of female "
"reproductive tract disorders — from simple cytology to advanced imaging and endoscopy."),
SP(8),
]
# ── A. PAP SMEAR ──────────────────────────────────────────────────────────
s += [
H2("A. PAP SMEAR (Papanicolaou Smear / Cervical Cytology)"),
SP(3),
B("<b>Definition:</b> A screening test that collects exfoliated cells from the cervix (ecto and endocervix) "
"to detect pre-cancerous and cancerous changes. Named after Dr. George Papanicolaou."),
SP(4),
]
pap_data = [
[pb("<b>Aspect</b>"), pb("<b>Details</b>")],
[pb("Purpose"), pb("Screening for cervical dysplasia (CIN) and cervical cancer (squamous cell, adenocarcinoma)")],
[pb("Principle"), pb("Exfoliated cervical cells are collected, fixed, stained (Papanicolaou stain) and examined microscopically for cytological abnormalities")],
[pb("Technique"), pb("Patient in dorsal lithotomy. Speculum inserted. Spatula/Ayre's spatula (ectocervix) + endocervical brush used. Cells smeared on glass slide, fixed with 95% ethanol. Liquid-based cytology (LBC/ThinPrep) is modern preferred method")],
[pb("Site sampled"), pb("Squamo-columnar junction (SCJ) / Transformation zone — primary site of cervical pathology")],
[pb("Timing"), pb("Mid-cycle (days 10–20); not during menstruation. No douching/intercourse/vaginal medications 48 hrs prior")],
[pb("Bethesda System\n(Reporting)"), pb("NILM (Normal) | ASC-US | ASC-H | LSIL (CIN1) | HSIL (CIN2/3) | Carcinoma\nAGC (Atypical Glandular Cells) | Adenocarcinoma in situ")],
[pb("Sensitivity"), pb("~70–80% (single smear); increases with repeat testing. LBC has higher sensitivity")],
[pb("Screening guidelines"), pb("Begin at 21 yrs. Every 3 yrs (21–29). Every 5 yrs with HPV co-testing (30–65). Stop at 65 if adequate prior screening")],
[pb("False negatives"), pb("Sampling error, fixation error, interpretation error, tumour necrosis obscuring cells")],
[pb("Contraindications"), pb("None absolute. Avoid during active menstruation (reduces quality)")],
[pb("Follow-up"), pb("ASC-US → HPV testing or repeat smear. ASC-H/HSIL → Colposcopy. AGC → Colposcopy + ECC + EMB")],
]
s.append(tbl(pap_data[0:1], pap_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Imp("Ayre's spatula samples ectocervix; endocervical brush samples endocervix. Transformation zone MUST be sampled for adequate smear."), SP(8)]
# ── B. COLPOSCOPY ─────────────────────────────────────────────────────────
s += [
H2("B. COLPOSCOPY"),
SP(3),
B("<b>Definition:</b> Direct magnified (6–40×) visual examination of the cervix, vagina and vulva using "
"a colposcope (stereoscopic binocular microscope with light source) to identify abnormal areas for directed biopsy."),
SP(4),
]
colp_data = [
[pb("<b>Aspect</b>"), pb("<b>Details</b>")],
[pb("Indications"), pb("• Abnormal Pap smear (ASC-US, ASC-H, LSIL, HSIL, AGC)\n• Visible suspicious cervical lesion\n• Post-coital bleeding\n• Unexplained vaginal discharge\n• Follow-up after treatment for CIN\n• DES-exposed females")],
[pb("Equipment"), pb("Colposcope (6–40× magnification) | Acetic acid 3–5% | Lugol's iodine (Schiller's test) | Green filter | Biopsy forceps (Tischler/Kevorkian)")],
[pb("Technique"), pb("Dorsal lithotomy. Speculum inserted. Cervix visualized. 3–5% acetic acid applied → acetowhite areas (abnormal). Green filter used to assess vascular patterns. Schiller's test: Lugol's iodine applied — normal cells stain mahogany brown (glycogen-rich); abnormal cells remain unstained (iodine-negative = Schiller positive)")],
[pb("Satisfactory\nColposcopy"), pb("Entire transformation zone (squamo-columnar junction) visible. If SCJ not fully visible = unsatisfactory → ECC needed")],
[pb("Colposcopic\nfindings"), pb("Normal: Smooth pink epithelium\nAbnormal: Acetowhite epithelium, Punctation, Mosaic pattern, Atypical vessels\nGrade 1 (minor): Fine punctation, fine mosaic, thin acetowhite\nGrade 2 (major): Dense acetowhite, coarse mosaic/punctation, irregular vessels")],
[pb("Contraindications"), pb("Active cervical/vaginal infection | Within 6 weeks of delivery | (Pregnancy not absolute CI but biopsy used cautiously)")],
[pb("Complications"), pb("Minor bleeding, infection (rare), vasovagal syncope")],
]
s.append(tbl(colp_data[0:1], colp_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Note("Schiller's test: Iodine-negative (unstained) = abnormal = Schiller POSITIVE = biopsy needed. Normal squamous epithelium stains deep brown."), SP(8)]
# ── C. CERVICAL BIOPSY ────────────────────────────────────────────────────
s += [
H2("C. CERVICAL BIOPSY"),
SP(3),
B("<b>Definition:</b> Histological sampling of cervical tissue for definitive diagnosis of cervical pathology. "
"Always done under colposcopic guidance (colposcopically directed biopsy) from the most abnormal area."),
SP(4),
]
cb_data = [
[pb("<b>Aspect</b>"), pb("<b>Details</b>")],
[pb("Types"), pb("1. Punch biopsy — small tissue cores from specific sites (Tischler/Kevorkian forceps)\n2. Endocervical curettage (ECC) — samples endocervical canal\n3. Cone biopsy (Conisation) — removes cone-shaped cervical tissue (LLETZ/LEEP or cold knife cone)\n4. LLETZ (Large Loop Excision of Transformation Zone) — also therapeutic")],
[pb("Indications"), pb("• Abnormal colposcopic findings\n• Suspicious cervical lesion on examination\n• Abnormal Pap (HSIL, AGC)\n• Post-coital bleeding with abnormal cervix\n• Suspected microinvasive / invasive carcinoma")],
[pb("Technique\n(Punch)"), pb("Colposcope directed. Acetowhite / iodine-negative area biopsied. Tischler forceps grasp tissue. Sample includes epithelium + underlying stroma. Posterior lip biopsied first. Monsel's paste / silver nitrate for haemostasis")],
[pb("Cone biopsy\nindications"), pb("Unsatisfactory colposcopy | Positive ECC | Suspected microinvasion | Persistent high-grade smear with negative colposcopy | Adenocarcinoma in situ")],
[pb("Histological\nreporting"), pb("CIN 1 (mild dysplasia — lower 1/3 epithelium)\nCIN 2 (moderate — lower 2/3)\nCIN 3 / CIS (severe / full thickness)\nInvasive carcinoma")],
[pb("Complications"), pb("Bleeding (haemostasis with Monsel paste), Infection, Cervical stenosis (post-cone), Preterm delivery risk (post-LLETZ)")],
[pb("Post-procedure"), pb("Abstain from intercourse + tampon use for 10–14 days. Report excessive bleeding/fever/pelvic pain")],
]
s.append(tbl(cb_data[0:1], cb_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Imp("Biopsy always posterior lip first → then anterior. ECC contraindicated in pregnancy."), SP(4), PageBreak()]
# ── D. ENDOMETRIAL BIOPSY ─────────────────────────────────────────────────
s += [
H2("D. ENDOMETRIAL BIOPSY (EMB)"),
SP(3),
B("<b>Definition:</b> Aspiration or curettage of endometrial tissue for histological examination "
"to diagnose uterine pathology, particularly in cases of abnormal uterine bleeding and postmenopausal bleeding."),
SP(4),
]
emb_data = [
[pb("<b>Aspect</b>"), pb("<b>Details</b>")],
[pb("Indications"), pb("• Abnormal Uterine Bleeding (AUB) in women >35 yrs\n• Postmenopausal bleeding (PMB)\n• Endometrial thickness ≥5 mm on USG in PMB\n• Atypical glandular cells on Pap smear (women >40 yrs)\n• Suspected endometrial hyperplasia/carcinoma\n• Infertility evaluation (luteal phase defect)\n• Monitoring tamoxifen therapy\n• HNPCC screening (from age 30–35)")],
[pb("Devices"), pb("Pipelle aspirator (most common — flexible plastic, office-based)\nNovak curette (metal, suction)\nVabra aspirator (electric suction)\nD&C (dilatation and curettage) — gold standard if office biopsy inadequate")],
[pb("Technique"), pb("Dorsal lithotomy. Bimanual examination. Speculum. Cervix cleansed. Tenaculum on anterior lip. Uterine sound to measure cavity. Aspirator advanced to fundus, plunger withdrawn (creates suction). Rotated 360° while moving in-out to sample all walls. Specimen in formalin")],
[pb("Contraindications"), pb("Absolute: Pregnancy, bleeding diathesis, acute PID\nRelative: Cervical stenosis, anticoagulant therapy, morbid obesity, uterine prolapse")],
[pb("Sensitivity for\nendometrial cancer"), pb("~90–98% (Pipelle). Inadequate sample (5–10%) → refer for D&C or hysteroscopy")],
[pb("Endometrial\nthickness on USG"), pb("≤4–5 mm in PMB → effectively excludes endometrial cancer (no biopsy needed in low-risk)\n>5 mm in PMB → EMB mandatory")],
[pb("Histological\nfindings"), pb("Proliferative / secretory (normal) | Simple / Complex hyperplasia (without atypia) | Atypical hyperplasia | Endometrial carcinoma (Type I: endometrioid; Type II: serous/clear cell)")],
[pb("Complications"), pb("Uterine perforation (rare), Bleeding, Infection, Cervical laceration, Vasovagal reaction")],
]
s.append(tbl(emb_data[0:1], emb_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Imp("Endometrial thickness <5 mm on TVS in PMB → no biopsy needed. Pipelle = most common outpatient device. D&C = gold standard."), SP(8)]
# ── E. HYSTEROSALPINGOGRAPHY ──────────────────────────────────────────────
s += [
H2("E. HYSTEROSALPINGOGRAPHY (HSG)"),
SP(3),
B("<b>Definition:</b> Radiological procedure where radio-opaque contrast dye is introduced through the cervix "
"into the uterine cavity and fallopian tubes under fluoroscopy to assess the uterine cavity shape "
"and tubal patency."),
SP(4),
]
hsg_data = [
[pb("<b>Aspect</b>"), pb("<b>Details</b>")],
[pb("Indications"), pb("• Infertility (to assess tubal patency and uterine cavity)\n• Recurrent pregnancy loss\n• Suspected uterine anomaly (septum, bicornuate, unicornuate)\n• Suspected tubal block (post-infection, post-sterilisation)\n• Post-tuboplasty assessment\n• Suspected intrauterine adhesions (Asherman's syndrome)\n• Suspected submucosal fibroid / polyp")],
[pb("Contraindications"), pb("Active PID / pelvic infection | Pregnancy | Known iodine allergy | Uterine bleeding | Within 6 weeks of uterine surgery")],
[pb("Timing"), pb("Days 7–10 of cycle (post-menstrual, pre-ovulatory) — avoids risk of disrupting early pregnancy; reduces bleeding")],
[pb("Contrast"), pb("Water-soluble (Urografin, Omnipaque) — preferred (absorbed quickly, less granuloma risk)\nOil-based (Lipiodol) — provides better mucosal detail, may have therapeutic effect in infertility")],
[pb("Technique"), pb("Fluoroscopy table, lithotomy. Bimanual exam. Speculum. Antiseptic prep. Cannula/catheter inserted into cervical os, balloon inflated. Contrast injected slowly 1–3 mL (uterine cavity) → 6–10 mL (tube fill). Spot films: cavity fill, tube fill, peritoneal spill. Delayed film if adhesions suspected")],
[pb("Normal findings"), pb("Uterine cavity: Triangular, smooth margins\nTubes: Bilateral fill with free peritoneal spill of contrast")],
[pb("Abnormal findings"), pb("Tubal block: No peritoneal spill (proximal or distal)\nFilling defect: Polyp, fibroid, adhesion, air bubble\nIrregular cavity: Asherman's, septum\nAbnormal uterine shape: Congenital anomaly\nDilated tubes: Hydrosalpinx")],
[pb("Therapeutic effect"), pb("HSG with oil-based contrast may improve fertility (tubal flushing effect — up to 30% spontaneous conception in 3–6 months)"),],
[pb("Complications"), pb("Pain/cramps (most common), Infection (prophylactic antibiotics given), Contrast allergy, Radiation exposure, Intravasation of contrast (rare), Uterine perforation")],
]
s.append(tbl(hsg_data[0:1], hsg_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Imp("HSG done on days 7–10. Water-soluble contrast preferred. Oil-based contrast (Lipiodol) has therapeutic benefit. Peritoneal spill = patent tubes."), SP(4), PageBreak()]
# ── F. ULTRASONOGRAPHY ────────────────────────────────────────────────────
s += [
H2("F. ULTRASONOGRAPHY (USG)"),
SP(3),
B("<b>Definition:</b> Non-invasive imaging using high-frequency sound waves (3–15 MHz) to visualise "
"pelvic organs. The most frequently used and first-line imaging modality in gynaecology. "
"No radiation, real-time, widely available."),
SP(4),
]
usg_data = [
[pb("<b>Type</b>"), pb("<b>Probe / Route</b>"), pb("<b>Indications / Advantages</b>")],
[pb("Transabdominal USG\n(TAS)"), pb("3.5–5 MHz curvilinear\nAbdominal surface\nFull bladder required"), pb("Large pelvic masses, fibroids, ovarian cysts, uterine size, ascites, first trimester pregnancy")],
[pb("Transvaginal USG\n(TVS)"), pb("5–10 MHz endovaginal\nIntravaginally placed\nEmpty bladder"), pb("BEST for endometrium, early pregnancy, ovaries, tubes, IUD position. Higher resolution. Used for: AUB, PCO, ectopic, endometrial thickness, follicular monitoring, fibroids")],
[pb("Doppler USG\n(Colour / Power)"), pb("Combined with B-mode"), pb("Blood flow assessment: trophoblastic flow (molar), ovarian torsion, uterine artery, tumour vascularity")],
[pb("3D / 4D USG"), pb("Volumetric reconstruction"), pb("Uterine anomalies (septum), IUD position, endometrial volume, Doppler angiography")],
[pb("Saline-infusion\nSonography (SIS)"), pb("Saline instilled into\nuterine cavity via catheter"), pb("Enhances visualization of intrauterine lesions — submucosal fibroids, polyps, adhesions")],
]
s.append(tbl(usg_data[0:1], usg_data[1:], [4*cm, 4*cm, W-8*cm]))
s += [SP(5), H3("Key USG Measurements in Gynaecology:")]
meas = [
[pb("<b>Parameter</b>"), pb("<b>Normal</b>"), pb("<b>Significance</b>")],
[pb("Endometrial thickness\n(TVS)"), pb("Proliferative: 4–8 mm\nSecretory: 8–14 mm\nPostmenopausal: ≤4 mm"), pb(">5 mm PMB → biopsy mandatory\nThin = atrophic / low estrogen")],
[pb("Uterus size"), pb("7–8 cm × 4–5 cm × 2.5 cm"), pb("Enlarged: fibroids, adenomyosis, pregnancy")],
[pb("Ovary volume"), pb("< 10 mL"), pb(">10 mL + ≥12 follicles → PCO criteria (Rotterdam)")],
[pb("Follicle size"), pb("Dominant: 18–24 mm at ovulation"), pb("Follicular monitoring in infertility")],
[pb("Endometrial\necho pattern"), pb("Homogenous triple-line\n(mid-cycle)"), pb("Heterogenous: polyp, hyperplasia, Ca")],
]
s.append(tbl(meas[0:1], meas[1:], [4.5*cm, 5*cm, W-9.5*cm]))
s += [SP(4), Imp("TVS is superior to TAS for endometrium, ovaries, early ectopic. TVS does NOT require full bladder."), SP(4), PageBreak()]
# ── G. HYSTEROSCOPY ───────────────────────────────────────────────────────
s += [
H2("G. HYSTEROSCOPY"),
SP(3),
B("<b>Definition:</b> Direct visualisation of the uterine cavity, endometrium and tubal ostia using a rigid or "
"flexible hysteroscope (2–5 mm) introduced through the cervix. "
"Gold standard for intrauterine pathology."),
SP(4),
]
hys_data = [
[pb("<b>Aspect</b>"), pb("<b>Details</b>")],
[pb("Types"), pb("1. Diagnostic hysteroscopy — examination only (office/outpatient)\n2. Operative hysteroscopy — treatment under GA/RA (resectoscope)\n3. Office hysteroscopy — see-and-treat, no anaesthesia")],
[pb("Distension medium"), pb("Normal saline (diagnostic, bipolar) | Glycine 1.5% (monopolar) | CO₂ (diagnostic office) | Sorbitol-mannitol 3%")],
[pb("Indications\n(Diagnostic)"), pb("• AUB / Postmenopausal bleeding\n• Submucosal fibroids\n• Endometrial polyps\n• Intrauterine adhesions (Asherman's syndrome)\n• Uterine septum / congenital anomaly\n• Recurrent pregnancy loss\n• Failed IUD removal\n• Infertility evaluation\n• Abnormal HSG findings\n• Abnormal EMB (for directed biopsy)")],
[pb("Indications\n(Operative)"), pb("• Polypectomy\n• Myomectomy (submucosal fibroid resection)\n• Adhesiolysis (Asherman's)\n• Metroplasty (septum resection)\n• Endometrial ablation\n• Foreign body removal (IUD)\n• Tubal cannulation for proximal block")],
[pb("Contraindications"), pb("Active PID / cervical infection | Pregnancy | Active uterine bleeding (relative) | Uterine perforation | Cervical carcinoma (risk of spread)")],
[pb("Timing"), pb("Early follicular phase (days 5–10) — thinner endometrium, better cavity visualisation")],
[pb("Advantages over\nHSG"), pb("Direct visualisation | Directed biopsy | Simultaneous treatment | Detects small polyps/adhesions missed on HSG | Superior sensitivity for intrauterine pathology")],
[pb("Complications"), pb("Fluid overload (TURP syndrome with hypotonic media) | Uterine perforation | Cervical laceration | Bleeding | Gas embolism (CO₂) | Infection | Failure of distension")],
[pb("Endometrial ablation"), pb("Destroys endometrium by: Rollerball, Resection loop, Thermal balloon, Microwave, Bipolar impedance. For menorrhagia refractory to medical treatment. Contraindicated if future fertility desired")],
]
s.append(tbl(hys_data[0:1], hys_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Imp("Hysteroscopy = GOLD STANDARD for intrauterine pathology. Superior to HSG for polyps, adhesions. TURP syndrome = fluid overload complication."), SP(8)]
# ── H. LAPAROSCOPY ────────────────────────────────────────────────────────
s += [
H2("H. LAPAROSCOPY"),
SP(3),
B("<b>Definition:</b> Minimally invasive endoscopic procedure using a rigid telescope (laparoscope, 5–12 mm, 0°/30°) "
"introduced into the peritoneal cavity via a small umbilical incision after CO₂ pneumoperitoneum "
"(intra-abdominal pressure 12–15 mmHg) to directly visualise pelvic/abdominal organs."),
SP(4),
]
lap_data = [
[pb("<b>Aspect</b>"), pb("<b>Details</b>")],
[pb("Types"), pb("1. Diagnostic laparoscopy\n2. Operative/Therapeutic laparoscopy")],
[pb("Pneumoperitoneum"), pb("CO₂ insufflation to 12–15 mmHg via Veress needle (closed technique) or Hasson trocar (open technique — preferred in previously operated abdomen)")],
[pb("Patient position"), pb("Trendelenburg (15–30° head-down) — bowel falls away from pelvis, improves visualisation")],
[pb("Diagnostic\nIndications"), pb("• Chronic pelvic pain\n• Suspected endometriosis\n• Pelvic / adnexal mass evaluation\n• Infertility (tubal assessment, chromopertubation)\n• Suspected ectopic pregnancy\n• Pelvic inflammatory disease (chronic)\n• Mullerian anomaly assessment\n• Staging of gynaecological cancers\n• Unexplained pelvic symptoms")],
[pb("Therapeutic\nIndications"), pb("• Ectopic pregnancy (salpingotomy/salpingectomy)\n• Endometriosis (ablation/excision)\n• Ovarian cystectomy/oophorectomy\n• Myomectomy\n• Hysterectomy (TLH, LAVH)\n• Adhesiolysis\n• Tubal ligation/sterilisation\n• PCOS — ovarian drilling\n• Lymph node dissection (cancer staging)\n• Repair of pelvic organ prolapse")],
[pb("Chromopertubation"), pb("Dilute methylene blue / indigo carmine dye injected through cervix during laparoscopy to assess tubal patency — best direct method for tubal patency")],
[pb("Advantages"), pb("Minimal scarring | Reduced post-op pain | Faster recovery | Short hospital stay | Magnified view | Reduced adhesion formation vs open surgery")],
[pb("Contraindications"), pb("Absolute: Uncorrected coagulopathy, Haemodynamic instability\nRelative: Multiple prior surgeries (adhesions), Severe cardiorespiratory disease, Large bowel distension, Large uterus/mass")],
[pb("Complications"), pb("Entry injury (bowel, bladder, vessel — Veress/trocar) | Gas embolism | Subcutaneous emphysema | Thermal injury | Port-site hernia (>10 mm ports) | Conversion to laparotomy")],
]
s.append(tbl(lap_data[0:1], lap_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Imp("Chromopertubation at laparoscopy = BEST for tubal patency. Trendelenburg position used. CO₂ pneumoperitoneum 12–15 mmHg."), SP(4), PageBreak()]
# ── I. MRI ────────────────────────────────────────────────────────────────
s += [
H2("I. MAGNETIC RESONANCE IMAGING (MRI)"),
SP(3),
B("<b>Definition:</b> Cross-sectional imaging using strong magnetic fields and radiofrequency pulses — "
"no ionising radiation. Superior soft tissue contrast. Best imaging for uterine, adnexal and pelvic pathology characterisation."),
SP(4),
]
mri_data = [
[pb("<b>Aspect</b>"), pb("<b>Details</b>")],
[pb("Principle"), pb("Strong magnetic field aligns protons → RF pulse disrupts alignment → signal emitted on relaxation → T1/T2 weighted images. No radiation")],
[pb("Sequences used"), pb("T1W: Haemorrhage (bright), fat, lymph nodes\nT2W: Best for uterine zonal anatomy, fibroids, endometriosis, adenomyosis (MOST USED)\nDWI (Diffusion): Malignancy (restricted diffusion), lymph node assessment\nDCE (Dynamic contrast): Tumour vascularity, invasion depth\nMR urography: Urinary tract involvement")],
[pb("Gynaecological\nindications"), pb("• Uterine fibroids (mapping before myomectomy/UAE)\n• Adenomyosis (junctional zone thickness >12 mm = diagnostic)\n• Endometrial carcinoma staging (myometrial invasion depth)\n• Cervical carcinoma staging (parametrial invasion, lymph nodes)\n• Ovarian/adnexal mass characterisation (dermoid, endometrioma, malignancy)\n• Congenital uterine anomalies (GOLD STANDARD — septum vs bicornuate)\n• Endometriosis (deep infiltrating)\n• Pelvic organ prolapse assessment\n• Recurrent ovarian cancer")],
[pb("MRI findings —\nKey"), pb("Adenomyosis: Thickened junctional zone >12 mm (T2W), island of high T2 signal within myometrium\nFibroid: Well-defined hypointense mass on T2W (unless degenerate)\nEndometrioma: 'Shading' on T2W; high T1W signal\nEndometrial Ca: Disruption of T2W hypointense junctional zone = myometrial invasion\nCervical Ca: Loss of cervical ring on T2W = parametrial invasion\nDermoid: High T1W signal (fat); fat-saturation sequence confirms")],
[pb("Contraindications"), pb("Metallic implants (pacemaker, cochlear implant, some aneurysm clips, metallic foreign bodies)\nFirst trimester pregnancy (relative — avoid unless essential)\nSevere claustrophobia | Gadolinium CI: renal failure (NSF risk)")],
[pb("Advantages"), pb("No radiation | Superior soft tissue contrast | Multi-planar | Best for staging | Excellent for uterine zonal anatomy")],
[pb("Disadvantages"), pb("Expensive | Time-consuming | Claustrophobia | Motion artefact | Not widely available in low-resource settings | Cannot use with metal implants")],
]
s.append(tbl(mri_data[0:1], mri_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Imp("MRI = GOLD STANDARD for: uterine anomalies, adenomyosis, fibroid mapping, endometrial Ca staging, deep endometriosis. T2W most used sequence."), SP(8)]
# ── J. CT SCAN ────────────────────────────────────────────────────────────
s += [
H2("J. COMPUTED TOMOGRAPHY SCAN (CT)"),
SP(3),
B("<b>Definition:</b> Cross-sectional X-ray based imaging using rotating X-ray beams and detectors with "
"computer reconstruction. Provides excellent visualisation of abdominal/pelvic organs, lymph nodes, "
"bones and vasculature. Uses ionising radiation."),
SP(4),
]
ct_data = [
[pb("<b>Aspect</b>"), pb("<b>Details</b>")],
[pb("Principle"), pb("Multiple X-ray beams rotate around patient → Hounsfield Units (HU) measure tissue density → Computer reconstructs axial/coronal/sagittal images")],
[pb("Contrast phases"), pb("Non-contrast: Calcification, haemorrhage, stones\nArterial phase (25–35s): Vascular anatomy\nVenous phase (60–70s): Parenchymal organs, lymph nodes\nDelayed phase (3–5 min): Urinary collecting system")],
[pb("Gynaecological\nindications"), pb("• Staging of ovarian carcinoma (MOST IMPORTANT use in gynaecology)\n• Staging of cervical and endometrial carcinoma (nodal/distant metastasis)\n• Suspected pelvic abscess (tubo-ovarian abscess)\n• Acute abdomen / ectopic pregnancy (when USG inconclusive)\n• Assessment of lymph node involvement\n• Pulmonary / hepatic metastases\n• Post-treatment surveillance for recurrence\n• CT-guided biopsy of pelvic masses")],
[pb("CT vs MRI in\ngynae cancer staging"), pb("CT: Better for lymph nodes, distant metastases, bowel/bladder involvement, lung mets\nMRI: Better for local tumour extent, myometrial invasion, parametrial involvement, soft tissue detail\n→ Often used together: MRI for local staging + CT for systemic staging")],
[pb("Ovarian Ca —\nCT findings"), pb("Bilateral complex adnexal masses | Peritoneal deposits/omental cake | Ascites | Liver surface deposits | Para-aortic lymphadenopathy | Pleural effusion")],
[pb("Limitations in\ngynae"), pb("Poor soft tissue contrast (MRI superior for uterine/cervical anatomy)\nCannot reliably assess myometrial invasion depth\nParametrial assessment inferior to MRI\nRadiation exposure (avoid in young women/pregnancy if possible)")],
[pb("Radiation dose"), pb("~10 mSv (pelvic CT). Avoid in pregnancy (first trimester especially). Use only when benefit > risk")],
[pb("Contraindications"), pb("Pregnancy (relative — use if life-threatening) | Contrast allergy (use pre-medication or non-contrast) | Renal failure (contrast-induced nephropathy)")],
]
s.append(tbl(ct_data[0:1], ct_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Imp("CT = PRIMARY tool for ovarian cancer staging and distant metastasis. MRI = better for local staging (depth of invasion). Combined CT+MRI for complete cancer staging."), SP(4), PageBreak()]
# ── SUMMARY COMPARISON TABLE ──────────────────────────────────────────────
s += [
H1("QUICK COMPARISON — DIAGNOSTIC TOOLS AT A GLANCE"),
SP(6),
]
comp_data = [
[pb("<b>Tool</b>"), pb("<b>Primary Use</b>"), pb("<b>Key Feature</b>"), pb("<b>When Used</b>")],
[pb("Pap Smear"), pb("Cervical cancer screening"), pb("Cytology of cervical cells; Bethesda system"), pb("Routine screening from age 21")],
[pb("Colposcopy"), pb("Evaluation of abnormal Pap"), pb("Acetic acid + Schiller's test; magnified view"), pb("After abnormal Pap smear")],
[pb("Cervical Biopsy"), pb("Histological diagnosis of CIN/Ca"), pb("Punch/Cone; CIN grading"), pb("After colposcopy finding")],
[pb("Endometrial Biopsy"), pb("Diagnosis of AUB/PMB/endometrial Ca"), pb("Pipelle; EMT >5mm → biopsy"), pb("AUB, PMB, endometrial pathology")],
[pb("HSG"), pb("Tubal patency + uterine cavity"), pb("Fluoroscopy; water/oil contrast; peritoneal spill = patent"), pb("Infertility, recurrent miscarriage")],
[pb("Ultrasonography"), pb("1st-line pelvic imaging"), pb("TVS superior; no radiation; endometrial thickness"), pb("Most gynaecological conditions")],
[pb("Hysteroscopy"), pb("Intrauterine pathology\n(Gold Standard)"), pb("Direct visualisation; diagnostic + operative"), pb("AUB, polyps, fibroids, adhesions, septum")],
[pb("Laparoscopy"), pb("Peritoneal/adnexal pathology\n(Gold Standard for ectopic, endo)"), pb("CO₂ pneumoperitoneum; chromopertubation for tubes"), pb("Endometriosis, ectopic, infertility, pelvic pain")],
[pb("MRI"), pb("Soft tissue characterisation\n(Gold Standard — uterine anomalies)"), pb("No radiation; T2W; adenomyosis, fibroid, Ca staging"), pb("Staging, anomalies, complex adnexal mass")],
[pb("CT Scan"), pb("Staging + distant metastases\n(Best for ovarian Ca staging)"), pb("Rapid; lymph nodes, ascites, mets; uses radiation"), pb("Cancer staging, pelvic abscess, acute abdomen")],
]
s.append(tbl(comp_data[0:1], comp_data[1:], [3.5*cm, 4*cm, 5.5*cm, W-13*cm]))
s += [SP(5), PageBreak()]
return s
# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 3 — STREE RUGNA PARIKSHANA
# ═══════════════════════════════════════════════════════════════════════════════
def section3():
s = []
s += [
H1T("SECTION 3 — STREE RUGNA PARIKSHANA (Gynaecological Examination)"),
SP(4),
B("<b>Stree Rugna Parikshana</b> = Examination of the female patient. "
"A systematic, structured approach to gynaecological assessment is essential for diagnosis. "
"It follows the standard format: History → General Exam → Systemic Exam → Local/Pelvic Exam."),
SP(8),
]
# ── A. GYNAECOLOGICAL HISTORY TAKING ─────────────────────────────────────
s += [
H2T("A. GYNAECOLOGICAL HISTORY TAKING"),
SP(3),
B("<b>Principle:</b> 'A complete and accurate history is 80% of the diagnosis.' History must be taken "
"in a systematic, sensitive and confidential manner with full privacy."),
SP(4),
]
hist_data = [
[pb("<b>Component</b>"), pb("<b>Details</b>")],
[pb("Identification data"), pb("Name, Age, Parity (G_P_A_L), Address, Occupation, Religion, Marital status, Duration of marriage, Socioeconomic status")],
[pb("Chief Complaint (CC)"), pb("In patient's own words. Duration. Onset (sudden/gradual). SQITARA: Site, Quality, Intensity, Timing, Aggravating, Relieving, Associated symptoms")],
[pb("Menstrual History\n(MH) — MOST\nIMPORTANT"), pb("LMP (Last Menstrual Period)\nAge of menarche (Normal: 11–15 yrs)\nCycle: frequency (28±7 days), duration (3–7 days), flow (normal: 30–80 mL)\nRegularity: regular/irregular\nDysmenorrhoea: primary/secondary, type\nIMB (intermenstrual bleeding), PCB (post-coital bleeding), PMB (postmenopausal bleeding)\nLast normal menstrual period (LNMP)")],
[pb("Obstetric History\n(OH)"), pb("Gravida / Para / Abortion / Living (G_P_A_L)\nDetails of each pregnancy: mode of delivery, complications, birth weight, current health\nAbortions: spontaneous/induced, gestational age, complications\nPuerperium complications")],
[pb("Contraceptive\nHistory"), pb("Current method, duration, any complications (e.g., IUD — heavy bleeding; OCP — spotting, amenorrhoea)")],
[pb("Sexual History\n(confidential)"), pb("Dyspareunia (superficial/deep), vaginismus, partner issues, STI risk, number of partners (sensitively asked)")],
[pb("Discharge P/V"), pb("Colour, consistency, odour, amount, associated symptoms (itching, burning), relation to cycle")],
[pb("Urinary symptoms"), pb("Frequency, urgency, dysuria, incontinence (stress/urge), haematuria")],
[pb("Bowel symptoms"), pb("Constipation, diarrhoea, rectal bleeding, tenesmus")],
[pb("Past Medical /\nSurgical History"), pb("Previous gynaecological surgeries (D&C, hysteroscopy, myomectomy, sterilisation)\nMedical: DM, HTN, thyroid, anaemia, bleeding disorders, TB\nDrug history: hormones, anticoagulants, chemotherapy")],
[pb("Family History"), pb("Gynaecological cancers (ovarian, breast, endometrial — BRCA/Lynch syndrome)\nFibroid, endometriosis, PCO in family")],
[pb("Personal/Social\nHistory"), pb("Diet, sleep, exercise, smoking, alcohol, stress, occupation hazards")],
]
s.append(tbl_teal(hist_data[0:1], hist_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Imp("Menstrual history is the MOST IMPORTANT part of gynaecological history. Always record LMP, cycle characteristics, and any abnormal bleeding patterns."), SP(4), PageBreak()]
# ── B. GENERAL AND SYSTEMIC EXAMINATION ───────────────────────────────────
s += [
H2T("B. GENERAL AND SYSTEMIC EXAMINATION"),
SP(3),
B("<b>General examination</b> provides important clues about systemic diseases affecting the reproductive system."),
SP(4),
]
gen_data = [
[pb("<b>System</b>"), pb("<b>What to Examine</b>"), pb("<b>Significance in Gynaecology</b>")],
[pb("General"), pb("Built, nutrition, body weight (BMI), height, hydration"), pb("Obesity → PCOS, endometrial Ca; Cachexia → malignancy, TB")],
[pb("Vital signs"), pb("Pulse, BP, temperature, RR, SpO₂"), pb("Tachycardia → ectopic/haemorrhage; Fever → PID, TOA")],
[pb("Anaemia"), pb("Pallor of conjunctiva, nails, mucosa"), pb("Heavy menstrual bleeding, fibroid, Ca cervix")],
[pb("Jaundice"), pb("Scleral icterus, skin"), pb("Liver disease affecting hormone metabolism; obstetric cholestasis")],
[pb("Lymph nodes"), pb("Inguinal, axillary, supraclavicular, cervical nodes"), pb("Inguinal LN: vulvar/cervical malignancy, STI; Supraclavicular: ovarian Ca mets (Virchow's)")],
[pb("Thyroid"), pb("Size, consistency, bruit"), pb("Hypothyroid → menorrhagia, anovulation; Hyperthyroid → oligomenorrhoea")],
[pb("Hair distribution /\nVirilisation"), pb("Hirsutism (Ferriman-Gallwey score), clitoromegaly, acne, voice change"), pb("PCOS, CAH, ovarian/adrenal androgen-secreting tumour")],
[pb("Skin"), pb("Acanthosis nigricans (neck, axilla), striae, pigmentation"), pb("Insulin resistance → PCOS; Addison's disease")],
[pb("Oedema"), pb("Pitting oedema legs, ascites"), pb("Ovarian Ca (ascites); hypoalbuminaemia; CCF")],
[pb("Systemic exam"), pb("CVS, Respiratory, CNS"), pb("Rule out systemic cause of gynaecological symptoms; pre-operative assessment")],
]
s.append(tbl_teal(gen_data[0:1], gen_data[1:], [3.5*cm, 5*cm, W-8.5*cm]))
s += [SP(8)]
# ── C. PELVIC / LOCAL EXAMINATION ─────────────────────────────────────────
s += [
H2T("C. LOCAL (PELVIC) EXAMINATION"),
SP(3),
B("<b>Components:</b> Breast Examination | Per Abdomen (P/A) | Per Speculum (P/S) | "
"Per Vaginum (P/V) | Per Rectum (P/R)"),
SP(3),
B("<b>Prerequisites:</b> Explain procedure and obtain consent. Empty bladder. Good light source. "
"Patient in dorsal lithotomy / left lateral position. Chaperone (female attendant) present. Warm instruments."),
SP(6),
]
# Breast exam
s += [H3("C1. BREAST EXAMINATION")]
breast_data = [
[pb("<b>Step</b>"), pb("<b>Details</b>")],
[pb("Inspection\n(arms at sides,\narms raised)"), pb("Size/symmetry, skin changes (peau d'orange, dimpling, erythema), nipple (retraction, discharge, eczema), breast contour, prominent veins")],
[pb("Palpation"), pb("Systematic: 4 quadrants + axillary tail (Spence). Patient supine, arm raised. Circular/radial/grid method. Note: lump (site, size, shape, surface, edge, consistency, mobility, transillumination, skin/nipple attachment, tenderness)")],
[pb("Axilla palpation"), pb("Central, anterior, posterior, lateral, apical groups of axillary nodes (for cancer spread)")],
[pb("Nipple discharge"), pb("Colour (milky = galactorrhoea; bloody = intraductal papilloma/Ca; serous = fibrocystic; green = duct ectasia)")],
[pb("Key findings"), pb("Hard, irregular, fixed, painless lump + skin dimpling + nipple retraction + axillary LN → MALIGNANCY\nSmooth, mobile, non-tender → Fibroadenoma\nCyclic tenderness → Fibrocystic disease")],
]
s.append(tbl_teal(breast_data[0:1], breast_data[1:], [4*cm, W-4*cm]))
s += [SP(6)]
# Per Abdomen
s += [H3("C2. PER ABDOMEN (P/A) EXAMINATION")]
pa_data = [
[pb("<b>Step</b>"), pb("<b>Details</b>")],
[pb("Inspection"), pb("Shape (flat, distended, scaphoid), symmetry, umbilicus (inverted/everted → ascites), visible veins (caput medusae), visible peristalsis, scars, striae, hernias")],
[pb("Auscultation"), pb("Before palpation — bowel sounds (normal, absent → ileus, increased → obstruction), uterine souffle, foetal heart sounds")],
[pb("Palpation\n(superficial then\ndeep)"), pb("Tenderness (guarding, rebound → peritonitis, ectopic), mass palpation: site, size, shape, surface, margins, consistency, mobility, tenderness, lower uterine border palpable\nUterus: firm, smooth, regular\nFibroids: irregular, hard, mobile\nOvarian cyst: cystic, lateral to uterus\nAscites: fluid thrill, shifting dullness")],
[pb("Percussion"), pb("Liver, spleen, bladder dullness. Shifting dullness (ascites). Fluid thrill (tense ascites). Suprapubic dullness (full bladder / enlarged uterus / mass)")],
[pb("Special tests"), pb("Renal angle tenderness (costovertebral angle) for urinary tract\nMurphy's sign for gallbladder\nMcBurney's point for appendix (DDx from right adnexal pathology)")],
[pb("Hernial orifices"), pb("Inguinal, femoral, umbilical hernias — must check in all patients")],
]
s.append(tbl_teal(pa_data[0:1], pa_data[1:], [4*cm, W-4*cm]))
s += [SP(6), PageBreak()]
# Per Speculum
s += [H3("C3. PER SPECULUM (P/S) EXAMINATION")]
ps_data = [
[pb("<b>Step</b>"), pb("<b>Details</b>")],
[pb("Instruments"), pb("Cusco's (bivalve) speculum — most common; Sims' speculum (prolapse assessment, L-shaped)\nWarm, lubricated. Sizes: small, medium, large")],
[pb("Patient position"), pb("Cusco's: dorsal lithotomy\nSims': left lateral Sims' position (for prolapse)")],
[pb("Technique\n(Cusco's)"), pb("Inspect vulva/perineum first. Labia separated with left hand. Speculum inserted obliquely then rotated to horizontal, blades opened to visualise cervix. Avoid clitoris and urethra")],
[pb("Vulva/Vaginal\nobservation"), pb("Oestrogen status (rugae), discharge (character, colour, odour), ulcers, condylomata, atrophic changes, cystocele, rectocele, enterocele")],
[pb("Cervix observation"), pb("Position, size, colour (normal: pink, smooth; erosion: red granular)\nNabothian cysts, cervical polyp, ectropion, ectopy\nOS: nulliparous (circular), multiparous (transverse slit)\nContact bleeding, discharge from os, growth/ulcer")],
[pb("Discharge"), pb("Physiological (clear, odourless, mid-cycle increase)\nBV: thin grey, fishy odour (clue cells)\nTrichomonas: yellow-green, frothy\nCandida: thick white 'cottage cheese'\nGonorrhoea: mucopurulent from os\nCervical carcinoma: offensive, bloodstained")],
[pb("Collection of\nspecimens"), pb("Pap smear, HVS (high vaginal swab), endocervical swab, Trichomonas wet prep, KOH prep for Candida — all done at P/S")],
]
s.append(tbl_teal(ps_data[0:1], ps_data[1:], [4*cm, W-4*cm]))
s += [SP(6)]
# Per Vaginum
s += [H3("C4. PER VAGINUM (P/V) EXAMINATION — Bimanual Examination")]
pv_data = [
[pb("<b>Step</b>"), pb("<b>Details</b>")],
[pb("Technique"), pb("Gloved right index ± middle finger inserted vaginally (2 fingers or 1 in nulliparous/virgin). Left hand on lower abdomen. Bimanual palpation of pelvic organs. Patient bladder empty")],
[pb("Vagina"), pb("Tone, laxity (prolapse), tenderness, abnormal mass, fornices (deep/tender/obliterated → malignancy/endometriosis), Bartholin's gland")],
[pb("Cervix"), pb("Position (normally points posteriorly)\nConsistency: soft (pregnancy/carcinoma), firm (normal)\nMovability: cervical motion tenderness (CMT) → PID/ectopic ('excitation test')\nSize of os\nMass/growth on cervix")],
[pb("Uterus"), pb("Size (weeks), shape, position (anteverted/retroverted), consistency, mobility, tenderness, surface (smooth/irregular)\nEnlargement: fibroids, adenomyosis, pregnancy, pyometra\nRetroverted + fixed + tender → endometriosis, PID\nIrregular surface → fibroids")],
[pb("Adnexa / Fornices"), pb("Ovaries (normally felt as almond-shaped tender structures in thin patients)\nAdnexal mass: size, consistency (solid/cystic), mobility, tenderness\nCystic, mobile, non-tender → ovarian cyst/dermoid\nSolid, fixed, bilateral → Ca ovary\nTender adnexal mass → TOA, ectopic")],
[pb("Rectovaginal\npouch"), pb("Pouch of Douglas (POD) tenderness → endometriosis, ectopic, PID\nObliteration of POD → Ca ovary, endometriosis\nPOD nodularity (uterosacral ligaments) → deep endometriosis, Ca rectum")],
]
s.append(tbl_teal(pv_data[0:1], pv_data[1:], [4*cm, W-4*cm]))
s += [SP(4), Imp("CMT (Cervical Motion Tenderness) = 'chandelier sign' in PID/ectopic. Bimanual PV examination assesses uterus + adnexa simultaneously."), SP(6)]
# Per Rectum
s += [H3("C5. PER RECTUM (P/R) EXAMINATION")]
pr_data = [
[pb("<b>Aspect</b>"), pb("<b>Details</b>")],
[pb("Indications"), pb("• When P/V not possible (virgins, children, vaginismus, severe stenosis)\n• Suspected rectal/rectovaginal septum involvement\n• Suspected posterior vaginal wall mass\n• Malignancy staging (rectal involvement)\n• Uterosacral ligament assessment (deep endometriosis)")],
[pb("Technique"), pb("Left lateral or lithotomy. Lubricated gloved right index finger. Inspect perianal area first. Gentle insertion. Assess sphincter tone, rectal mucosa, masses, uterosacral ligaments, rectovaginal septum, pouch of Douglas")],
[pb("Findings"), pb("Rectal mucosa: smooth, mobile (normal); nodular/fixed → Ca/endometriosis\nUterosacral ligaments: thickened/nodular/tender → endometriosis, carcinoma\nPosterior cervical/uterine mass palpable\nRectovaginal septum nodules → deep infiltrating endometriosis\nProstate equivalent in females: subpubic area")],
[pb("Combined\nrectovaginal"), pb("Two fingers (one vaginal, one rectal) for better assessment of uterosacral ligaments, rectovaginal septum, posterior fornix nodules — important for endometriosis staging")],
[pb("Specimen"), pb("Stool sample for occult blood if rectal involvement suspected in malignancy staging")],
]
s.append(tbl_teal(pr_data[0:1], pr_data[1:], [4*cm, W-4*cm]))
s += [SP(6), PageBreak()]
# COMPLETE GYNAECOLOGICAL EXAMINATION SUMMARY
s += [
H1T("COMPLETE GYNAECOLOGICAL EXAMINATION — SUMMARY FLOWCHART"),
SP(6),
B("<b>Systematic sequence for complete examination:</b>"),
SP(4),
]
flow_data = [
[pb("<b>Step</b>"), pb("<b>Component</b>"), pb("<b>Key Points / Clinical Correlations</b>")],
[pb("1"), pb("History Taking"), pb("CC → MH (LMP, cycle) → OH (G_P_A_L) → Contraception → Sexual Hx → Discharge → Urinary/Bowel → PMH/PSH → FH → SH")],
[pb("2"), pb("General Examination"), pb("Vitals | Build/BMI | Anaemia | Jaundice | LN (inguinal + axillary + supraclavicular) | Thyroid | Virilisation signs | Skin (acanthosis) | Oedema")],
[pb("3"), pb("Systemic Examination"), pb("CVS + RS + CNS + Abdomen (organomegaly, ascites)")],
[pb("4"), pb("Breast Examination"), pb("Inspect (asymmetry, skin, nipple) → Palpate (4 quadrants + axillary tail) → Axillary LN → Nipple discharge")],
[pb("5"), pb("Per Abdomen (P/A)"), pb("Inspect → Auscultate → Palpate (superficial + deep) → Percuss → Special tests (shifting dullness, fluid thrill) → Hernial orifices")],
[pb("6"), pb("Per Speculum (P/S)\n(Cusco's / Sims')"), pb("Vulva/vagina → Cervix (colour, os, ectropion, growth, discharge) → Collect Pap smear/swabs → Assess prolapse (Sims')")],
[pb("7"), pb("Per Vaginum (P/V)\n(Bimanual)"), pb("Vagina → Cervix (mobility, CMT) → Uterus (size, shape, position, mobility) → Adnexa (mass, tenderness) → POD")],
[pb("8"), pb("Per Rectum (P/R)\n(when indicated)"), pb("Rectal mucosa → Uterosacral ligaments → Rectovaginal septum → POD → Combined rectovaginal for endometriosis")],
]
s.append(tbl_teal(flow_data[0:1], flow_data[1:], [1.5*cm, 4*cm, W-5.5*cm]))
s += [SP(6)]
# CLINICAL CORRELATION TABLE
s += [
H2T("Key Clinical Correlations — Pelvic Examination Findings"),
SP(4),
]
corr_data = [
[pb("<b>Examination Finding</b>"), pb("<b>Likely Diagnosis</b>")],
[pb("Irregular, enlarged, firm, mobile uterus"), pb("Uterine fibroids (leiomyoma)")],
[pb("Symmetrically enlarged, globular, tender uterus"), pb("Adenomyosis / Pregnancy")],
[pb("Fixed, retroverted uterus + POD nodularity + tender adnexa"), pb("Endometriosis")],
[pb("Cervical motion tenderness (CMT) + adnexal tenderness"), pb("PID / Ectopic pregnancy")],
[pb("Cystic, mobile, non-tender adnexal mass"), pb("Ovarian cyst / Dermoid / Endometrioma")],
[pb("Bilateral solid, fixed, irregular adnexal mass + ascites"), pb("Ovarian carcinoma")],
[pb("Tender unilateral adnexal mass + CMT + amenorrhoea"), pb("Ectopic pregnancy")],
[pb("Cervical os open + products visible / bleeding"), pb("Incomplete abortion")],
[pb("Barrel-shaped cervix + obliterated vaginal fornices"), pb("Carcinoma cervix (advanced)")],
[pb("Postmenopausal bleeding + thickened endometrium on USG"), pb("Endometrial carcinoma")],
[pb("Offensive vaginal discharge + strawberry cervix (colpitis macularis)"), pb("Trichomoniasis")],
[pb("Thick white discharge + satellite lesions on vulva"), pb("Vulvovaginal candidiasis")],
]
s.append(tbl_teal(corr_data[0:1], corr_data[1:], [8*cm, W-8*cm]))
s += [SP(5), Note("Always document findings clearly: uterus position (AV/AFl vs RV/RFl), size in weeks, adnexal mass size, and tenderness location.")]
return s
# ═══════════════════════════════════════════════════════════════════════════════
# BUILD PDF
# ═══════════════════════════════════════════════════════════════════════════════
out = "/tmp/workspace/guhya-roga-merged/Vyadhi_Vinischaya_Stree_Parikshana.pdf"
doc = SimpleDocTemplate(
out, pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm,
title="Vyadhi Vinischaya Upaya + Stree Rugna Parikshana",
author="Ayurveda Gynaecology Notes"
)
story = cover() + [PageBreak()] + section2() + section3()
doc.build(story)
print(f"PDF generated: {out}")
cd /tmp/workspace/guhya-roga-merged && python3 generate_vyadhi_vinischaya.py
python3 -c " from pypdf import PdfWriter, PdfReader # Previous merged file (original 22 pages + Guhya Roga 12 pages = 34 pages) prev = '/tmp/workspace/guhya-roga-merged/Guhya_Roga_STD_Complete_Notes.pdf' new = '/tmp/workspace/guhya-roga-merged/Vyadhi_Vinischaya_Stree_Parikshana.pdf' merged = '/tmp/workspace/guhya-roga-merged/Gynaecology_Complete_Notes_BAMS.pdf' writer = PdfWriter() r1 = PdfReader(prev) r2 = PdfReader(new) print(f'Previous PDF pages: {len(r1.pages)}') print(f'New section PDF pages: {len(r2.pages)}') for page in r1.pages: writer.add_page(page) for page in r2.pages: writer.add_page(page) writer.add_metadata({ '/Title': 'Gynaecology Complete 20-Mark Notes — BAMS / MS Ayurveda', '/Author': 'Stree Roga & Prasuti Tantra', '/Subject': 'STDs (Guhya Roga) | Diagnostic Tools | Gynaecological Examination' }) with open(merged, 'wb') as f: writer.write(f) total = len(r1.pages) + len(r2.pages) print(f'Merged PDF: {merged}') print(f'Total pages: {total}') "
Vyadhi Vinischaya Stree Parikshana
PDF Document · PDF
Gynaecology Complete Notes BAMS
PDF Document · PDF
| Tool | Key Points Covered |
|---|---|
| Pap Smear | Technique, Bethesda system, screening guidelines, sensitivity, follow-up |
| Colposcopy | Acetic acid, Schiller's test, colposcopic grades, satisfactory/unsatisfactory |
| Cervical Biopsy | Punch/cone/LLETZ types, CIN grading, haemostasis |
| Endometrial Biopsy | Pipelle technique, EMT ≥5mm rule, contraindications, histology |
| HSG | Days 7-10, contrast types, normal/abnormal findings, therapeutic effect |
| Ultrasonography | TAS vs TVS table, key measurements (EMT, follicle, ovary volume) |
| Hysteroscopy | Gold standard for intrauterine; indications, TURP syndrome complication |
| Laparoscopy | CO₂ pneumoperitoneum, chromopertubation, Trendelenburg, complications |
| MRI | T1/T2/DWI sequences, adenomyosis JZ >12mm, Gold standard for anomalies |
| CT Scan | Best for ovarian Ca staging, omental cake, lymph nodes vs MRI comparison |