Make an exam oriented notes property understandable learning notes with every important pointers from the given source
| Organ | Changes |
|---|---|
| Ovaries | Shrink, become wrinkled/white; cortex thins; increased stromal cells (secretory activity) |
| Fallopian tubes | Atrophy; muscle coat thins; cilia disappear; plicae less prominent |
| Uterus | Becomes smaller; body:cervix ratio reverts to 1:1; endometrium thin/atrophic; cervical secretion scanty |
| Vagina | Narrow; epithelium thin, no glycogen, no Doderlein's bacilli; vaginal pH becomes alkaline (parabasal, intermediate, superficial cells 10/85/5) |
| Vulva | Atrophy; labia flattened; pubic hair less; narrow introitus |
| Breasts | Breast fat reabsorbed; glands atrophy; nipples decrease; breasts become flat and pendulous |
| Bladder/Urethra | Thin epithelium; prone to damage/infection; dysuria, frequency, urgency, stress incontinence |
| Muscle tone | Loss β pelvic relaxation, uterine descent, anatomic changes in urethra/bladder neck; pelvic cellular tissues become scanty; ligaments lose tone |
| T-Score | Diagnosis |
|---|---|
| +2.5 to -1.0 | Normal BMD |
| -1.0 to -2.5 | Osteopenia (precursor to osteoporosis) |
| < -2.5 | Osteoporosis |
| Category | Symptoms |
|---|---|
| A. Menstrual | Shorter cycles (common), irregular bleeding |
| B. Vasomotor | Hot flashes, night sweats, sleep disturbances |
| C. Psychological | Irritability, mood swings, poor memory, depression |
| D. Sexual dysfunction | Vaginal dryness, dyspareunia |
| E. Urinary | Incontinence, urgency, dysuria |
| F. Others | Back aches, joint aches |
| Treatment | Details |
|---|---|
| Lifestyle modification | Physical activity, reducing high coffee intake, smoking, excessive alcohol; adequate calcium (300 mL milk); reduce bone loss medications (corticosteroids) |
| Nutritious diet | Balanced with calcium and protein |
| Supplementary calcium | Daily intake of 1-1.5 g β reduces osteoporosis and fracture |
| Exercise | Weight bearing - walking, jogging |
| Vitamin D | Supplementation of Vit Dβ (1500-2000 IU/day) along with calcium β reduces osteoporosis and fractures; sunlight exposure synthesizes cholecalciferol (Vit Dβ) |
| Cessation of smoking and alcohol | - |
| Bisphosphonates | Prevents osteoclastic bone resorption; improves bone density; preferred for older women; monitored with bone density measurement; commonly used: Ibandronate, Alendronate; Risedronate also effective with fewer side effects; taken on empty stomach; remain upright for 30 minutes after oral dosing; Side effects: gastric and esophageal ulceration/bleeding, osteomyelitis, osteonecrosis of the jaw; when used alone cannot prevent hot flashes, atrophic changes, and cardiovascular disease |
| Calcitonin | Inhibits bone resorption by inhibiting osteoclasts; polypeptide hormone; given simultaneously with calcium and Vitamin D |
| Point | Fact |
|---|---|
| Diagnosis declared | Retrospectively (after 12 months of amenorrhea) |
| Average age | 50 years (range 45-55) |
| Predominant post-menopausal estrogen | Estrone (not estradiol) |
| Source of estrone | Peripheral aromatization (adrenals/ovaries β adipose/muscle) |
| FSH rise | 10-20 fold (LH rises only 3-fold) |
| AMH | Markedly decreased |
| Bone loss | 3-5% per year (up to 5% during menopause) |
| DEXA T-score for osteoporosis | < -2.5 |
| DEXA T-score for osteopenia | -1.0 to -2.5 |
| Serum FSH for diagnosis | > 40 mIU/mL |
| Serum estradiol for diagnosis | < 20 pg/mL |
| Skin collagen loss | 1-2% per year |
| Hot flash mechanism | Low estrogen β GnRH pulse β LH surge |
| Characteristic skin wrinkling | Purse string (mouth), Crow feet (eyes) |
| Fracture site (Colles') | Distal forearm |
| Bisphosphonates | Take on empty stomach; stay upright 30 min |
| Most common menstrual pattern | Gradual decrease (spotting/delay β cessation) |
| Vaginal pH after menopause | Alkaline (loss of Doderlein's bacilli) |
| Estrogen + cardiovascular | Increases HDL2, decreases LDL, antioxidant |
| FRAX tool | Calculates 10-year fracture probability |
Note: These notes cover all major exam-tested topics from the Menopause chapter. Focus especially on the diagnostic criteria, T-score thresholds, hormonal changes, vasomotor symptoms mechanism, bisphosphonate side effects, and the estrone/estradiol distinction - these are the most commonly tested points in clinical exams.
You are written every thing in this ..make a concise pdf including tables in it with minimum pages
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"
mkdir -p /home/daytona/workspace/menopause-notes && python3 -c "from reportlab.lib import colors; print('reportlab ok')"
~/menopause-notes/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import PageBreak
OUTPUT = "/home/daytona/workspace/menopause-notes/Menopause_Notes.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.5*cm, rightMargin=1.5*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm,
)
W = A4[0] - 3*cm # usable width
# ββ Colour palette ββββββββββββββββββββββββββββββββββββββββββββββ
DARK_BLUE = colors.HexColor("#1a3a5c")
MED_BLUE = colors.HexColor("#2563a8")
LIGHT_BLUE = colors.HexColor("#dbeafe")
ACCENT = colors.HexColor("#dc2626") # red for high-yield
GOLD = colors.HexColor("#b45309")
TABLE_HDR = colors.HexColor("#1e40af")
TABLE_ALT = colors.HexColor("#eff6ff")
WHITE = colors.white
LIGHT_GREY = colors.HexColor("#f8fafc")
BORDER = colors.HexColor("#93c5fd")
# ββ Styles βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
styles = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, **kw)
title_s = S("TitleS", fontName="Helvetica-Bold", fontSize=22,
textColor=WHITE, alignment=TA_CENTER, spaceAfter=4)
sub_title_s = S("SubT", fontName="Helvetica", fontSize=10,
textColor=LIGHT_BLUE, alignment=TA_CENTER, spaceAfter=2)
sec_s = S("Sec", fontName="Helvetica-Bold", fontSize=10,
textColor=WHITE, alignment=TA_LEFT,
leftIndent=4, spaceAfter=2, spaceBefore=6)
body_s = S("Body", fontName="Helvetica", fontSize=8.2,
textColor=colors.HexColor("#1e293b"), leading=12,
spaceAfter=3, alignment=TA_JUSTIFY)
bullet_s = S("Bul", fontName="Helvetica", fontSize=8.2,
textColor=colors.HexColor("#1e293b"), leading=11.5,
leftIndent=12, firstLineIndent=-8, spaceAfter=2)
bold_s = S("Bold", fontName="Helvetica-Bold", fontSize=8.2,
textColor=DARK_BLUE, leading=12, spaceAfter=2)
high_s = S("High", fontName="Helvetica-Bold", fontSize=8,
textColor=ACCENT, leading=11, spaceAfter=2)
note_s = S("Note", fontName="Helvetica-Oblique", fontSize=7.5,
textColor=GOLD, leading=10, spaceAfter=2)
def section_header(text):
"""Blue banner heading."""
data = [[Paragraph(text, sec_s)]]
t = Table(data, colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), TABLE_HDR),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING",(0,0),(-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("ROWBACKGROUNDS",(0,0),(-1,-1),[TABLE_HDR]),
]))
return t
def mini_header(text):
return Paragraph(f"<font color='#1e40af'><b>β {text}</b></font>", bold_s)
def bullet(text):
return Paragraph(f"β’ {text}", bullet_s)
def body(text):
return Paragraph(text, body_s)
def high(text):
return Paragraph(f"β
{text}", high_s)
def note(text):
return Paragraph(f"π {text}", note_s)
def sp(h=4):
return Spacer(1, h)
def hr():
return HRFlowable(width=W, thickness=0.5, color=BORDER, spaceAfter=3, spaceBefore=3)
def make_table(headers, rows, col_widths=None):
data = [[Paragraph(f"<b>{h}</b>", ParagraphStyle("th", fontName="Helvetica-Bold",
fontSize=7.5, textColor=WHITE, alignment=TA_CENTER)) for h in headers]]
for i, row in enumerate(rows):
data.append([Paragraph(str(c), ParagraphStyle("td", fontName="Helvetica",
fontSize=7.5, textColor=colors.HexColor("#1e293b"),
leading=10, alignment=TA_LEFT)) for c in row])
if col_widths is None:
col_widths = [W / len(headers)] * len(headers)
t = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0,0), (-1,0), TABLE_HDR),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 7.5),
("ALIGN", (0,0), (-1,-1), "LEFT"),
("VALIGN", (0,0), (-1,-1), "TOP"),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, TABLE_ALT]),
("GRID", (0,0), (-1,-1), 0.4, BORDER),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
]
t.setStyle(TableStyle(style))
return t
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# BUILD CONTENT
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story = []
# ββ TITLE BANNER βββββββββββββββββββββββββββββββββββββββββββββββββ
title_data = [[
Paragraph("MENOPAUSE", title_s),
Paragraph("Chapter 6 Β· Exam-Oriented Concise Notes", sub_title_s),
]]
title_tbl = Table([[Paragraph("MENOPAUSE", title_s)],
[Paragraph("Chapter 6 Β· Exam-Oriented Concise Notes", sub_title_s)]],
colWidths=[W])
title_tbl.setStyle(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), 10),
]))
story.append(title_tbl)
story.append(sp(6))
# ββ ROW 1: Two-column layout: Definition + Age of Menopause ββββββ
def two_col(left_items, right_items, left_w=None, right_w=None):
lw = left_w or W*0.5 - 3
rw = right_w or W*0.5 - 3
left_tbl = Table([[i] for i in left_items], colWidths=[lw])
right_tbl = Table([[i] for i in right_items], colWidths=[rw])
outer = Table([[left_tbl, right_tbl]], colWidths=[lw+4, rw+4])
outer.setStyle(TableStyle([
("VALIGN", (0,0),(-1,-1),"TOP"),
("LEFTPADDING", (0,0),(-1,-1), 0),
("RIGHTPADDING", (0,0),(-1,-1), 0),
("TOPPADDING", (0,0),(-1,-1), 0),
("BOTTOMPADDING",(0,0),(-1,-1), 0),
]))
return outer
# SECTION 1 β Definition
sec1 = [
section_header("1. DEFINITION"),
sp(2),
bullet("<b>Menopause</b> = Permanent cessation of menstruation due to <b>loss of ovarian follicular activity</b>"),
bullet("Confirmed after <b>12 consecutive months of amenorrhea</b> β NO other pathology"),
high("Declared ONLY RETROSPECTIVELY"),
bullet("Serum <b>FSH elevated</b> at 45β55 years"),
sp(2),
mini_header("Menopause Transition"),
bullet("Reproductive β Non-reproductive; covers <b>4β7 years on either side</b>"),
bullet("Features: elevated FSH, variable cycle length, missed menses"),
bullet("<b>Postmenopause</b> = phase after menopause"),
]
# SECTION 2 β Age
sec2 = [
section_header("2. AGE OF MENOPAUSE"),
sp(2),
high("Age is GENETICALLY PREDETERMINED"),
bullet("<b>NOT related to:</b> menarche age, last pregnancy, parity, lactation, OCP use, socioeconomics, race, height, weight"),
bullet("<b>Early menopause:</b> thin women, cigarette smoking, severe malnutrition"),
bullet("<b>Range:</b> 45β55 years | <b>Average: 50 years</b>"),
sp(4),
section_header("3. CLINICAL IMPORTANCE"),
sp(2),
bullet("Increased life expectancy β women spend large part of life in <b>estrogen deficiency stage</b>"),
bullet("Long-term: symptomatic + metabolic complications"),
]
story.append(two_col(sec1, sec2))
story.append(sp(5))
# ββ SECTION 4: Endocrinology ββββββββββββββββββββββββββββββββββββββ
story.append(section_header("4. ENDOCRINOLOGY OF MENOPAUSAL TRANSITION"))
story.append(sp(3))
endo_left = [
mini_header("Hypothalamo-Pituitary-Gonadal Axis"),
bullet("Follicles become <b>resistant to gonadotropins</b> β impaired folliculogenesis β β estradiol"),
bullet("Estradiol: <b>50β300 pg/mL</b> (before) β <b>10β20 pg/mL</b> (after menopause)"),
bullet("β Estradiol β β negative feedback β <b>β FSH</b> (also due to β Inhibin from granulosa cells)"),
bullet("<b>Inhibin</b> secreted by granulosa cells; its decrease β β FSH"),
bullet("<b>LH increases</b> subsequently"),
bullet("Disturbed folliculogenesis β anovulation, oligoovulation, corpus luteal insufficiency"),
bullet("Mean cycle length <b>shorter</b> (follicular phase β; luteal phase constant)"),
bullet("Late menopausal transition: <b>accelerated follicular depletion</b>"),
high("Ultimately: Estradiol drops to 20 pg/mL β no endometrial growth β NO MENSTRUATION"),
]
endo_right = [
mini_header("Estrogens After Menopause"),
bullet("Predominant estrogen = <b>ESTRONE</b> (not estradiol)"),
bullet("Estrone: 30β70 pg/mL; Estradiol: 10β20 pg/mL"),
bullet("Main source: <b>Peripheral aromatization of androgens</b> (mainly adrenals) at muscle & adipose tissue"),
bullet("Estrone is <b>1/10th biologically potent</b> vs estradiol"),
high("5β10 yrs after menopause = TRUE MENOPAUSE (sharp fall in all hormones)"),
sp(3),
mini_header("Gonadotropins"),
bullet("<b>Both FSH & LH increased</b> β absent negative feedback of estradiol & inhibin"),
bullet("<b>FSH rises 10β20 fold</b>; LH rises only <b>3-fold</b>"),
bullet("GnRH pulse frequency & amplitude increased"),
bullet("<b>AMH (Anti-Mullerian Hormone)</b> markedly decreased β loss of ovarian reserve"),
]
story.append(two_col(endo_left, endo_right))
story.append(sp(3))
# Hormones table
story.append(mini_header("Hormone Summary Table"))
story.append(sp(2))
story.append(make_table(
["Hormone", "Level After Menopause", "Key Reason"],
[
["FSH", "ββ (10β20 fold)", "β Estradiol & β Inhibin β lost negative feedback"],
["LH", "β (3-fold)", "β Estradiol feedback"],
["Estrone", "30β70 pg/mL (dominant)", "Peripheral aromatization of androgens"],
["Estradiol", "10β20 pg/mL (β)", "Ovarian follicular depletion"],
["Progesterone", "Trace (adrenal)", "No corpus luteum"],
["Androgens", "Relatively β (ratio)", "Stromal ovarian cells continue production"],
["AMH", "Markedly β", "Severe loss of ovarian reserve"],
],
col_widths=[W*0.18, W*0.22, W*0.60]
))
story.append(sp(5))
# ββ SECTION 5: Organ Changes βββββββββββββββββββββββββββββββββββββ
story.append(section_header("5. ORGAN CHANGES"))
story.append(sp(3))
story.append(make_table(
["Organ", "Key Changes"],
[
["Ovaries", "Shrink, wrinkled/white; cortex thins; stromal cells β (secretory)"],
["Fallopian Tubes", "Atrophy; muscle coat thins; cilia disappear; plicae less prominent"],
["Uterus", "Smaller; body:cervix ratio β 1:1; endometrium thin/atrophic; cervical secretion scanty"],
["Vagina", "Narrow; epithelium thin; no glycogen; no Doderlein's bacilli; pH ALKALINE; maturation index 10/85/5"],
["Vulva", "Atrophy; labia flattened; pubic hair less; NARROW INTROITUS"],
["Breasts", "Breast fat reabsorbed; glands atrophy; nipples β; flat and pendulous"],
["Bladder/Urethra", "Thin epithelium; prone to infection; dysuria, frequency, urgency, stress incontinence"],
["Muscle Tone", "β β Pelvic relaxation, uterine descent; ligaments lose tone; pelvic tissue becomes scanty"],
],
col_widths=[W*0.22, W*0.78]
))
story.append(sp(5))
# ββ SECTION 6: Bone Metabolism βββββββββββββββββββββββββββββββββββ
story.append(section_header("6. BONE METABOLISM & OSTEOPOROSIS"))
story.append(sp(3))
bone_left = [
mini_header("Key Concepts"),
bullet("Post-menopause bone loss: <b>3β5% per year</b> (up to 5% during menopause)"),
bullet("<b>Osteoporosis</b> = β bone mass; bone mineral:matrix ratio NORMAL"),
bullet("Bone loss mainly in <b>trabecular bone</b> (vertebra, distal radius) & cortical bone"),
sp(3),
mini_header("T-Score Classification (BMD)"),
make_table(
["T-Score", "Diagnosis"],
[
["+2.5 to β1.0", "Normal BMD"],
["β1.0 to β2.5", "Osteopenia (precursor to osteoporosis)"],
["< β2.5", "OSTEOPOROSIS"],
],
col_widths=[W*0.25*0.9, W*0.25*1.6]
),
]
bone_right = [
mini_header("Estrogen's Role in Bone"),
bullet("Inhibits <b>osteoclastic activity</b>"),
bullet("Inhibits release of <b>IL-1 by monocytes</b>"),
bullet("β Calcium absorption from gut"),
bullet("Stimulates <b>calcitonin</b> from thyroid C cells"),
bullet("β 1,25-dihydroxyvitamin D β β bone mineralization"),
sp(3),
mini_header("Detection"),
bullet("<b>DEXA</b> = gold standard (less radiation than CT)"),
bullet("<b>FRAX tool (WHO-2001)</b>: 10-year fracture risk probability; uses 11 risk factors + femoral neck BMD"),
bullet("Biochemical: Urinary Ca/Cr and hydroxyproline/Cr ratios"),
high("PTH and IL-1 promote bone resorption in menopause"),
]
story.append(two_col(bone_left, bone_right, left_w=W*0.48, right_w=W*0.48))
story.append(sp(3))
# Risk factors table
story.append(mini_header("Risk Factors for Osteoporosis (Table 6.1)"))
story.append(sp(2))
story.append(make_table(
["Patient Factors", "Lifestyle Factors", "Medications/Diseases"],
[
["Family history, Age >65", "β Calcium & Vit D, β caffeine", "Heparin, Corticosteroids"],
["Asian/White race, Low BMI/weight", "β Smoking, β Alcohol", "GnRH analogs, Anticonvulsants"],
["Lack of estrogen, Hypogonadism", "Sedentary habit", "RA, Hyperparathyroidism, DM"],
["Fragility fracture, Osteopenia", "Early menopause (surgical/radiation)", "Malabsorption, Multiple myeloma, Thyroid disorders"],
],
col_widths=[W*0.33, W*0.33, W*0.34]
))
story.append(sp(5))
# ββ SECTION 7: Cardiovascular ββββββββββββββββββββββββββββββββββββ
story.append(section_header("7. CARDIOVASCULAR SYSTEM"))
story.append(sp(3))
cv_left = [
mini_header("Estrogen Protects Heart By:"),
bullet("β <b>HDL2</b>; β <b>LDL</b> and total cholesterol"),
bullet("Inhibits platelet & macrophage (foam cell) aggregation"),
bullet("β <b>NO (nitric oxide)</b> & prostacyclin β vasodilation"),
bullet("Prevents atherosclerosis via <b>antioxidant property</b>"),
]
cv_right = [
mini_header("Without Estrogen (Post-menopause):"),
bullet("Oxidation of LDL + foam cell formation β endothelial injury"),
bullet("β Smooth muscle proliferation β <b>insulin resistance</b>"),
bullet("β Central (android) obesity β atherosclerosis & thrombus"),
bullet("β Risk: ischemic heart disease, stroke, coronary artery disease"),
make_table(
["CV Risk Factors (Table 6.2)"],
[["Hypertension, Familial hyperlipidemia"],
["Smoking habit, Impaired glucose tolerance"]],
col_widths=[W*0.45]
),
]
story.append(two_col(cv_left, cv_right))
story.append(sp(5))
# ββ SECTION 8: Symptoms ββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("8. MENOPAUSAL SYMPTOMS"))
story.append(sp(3))
story.append(make_table(
["Category", "Key Symptoms"],
[
["Menstrual", "Shorter cycles (common), irregular bleeding"],
["Vasomotor β
", "Hot flashes, Night sweats, Sleep disturbances"],
["Psychological", "Irritability, Mood swings, Poor memory, Depression"],
["Sexual Dysfunction", "Vaginal dryness, Dyspareunia"],
["Urinary", "Incontinence, Urgency, Dysuria"],
["Skin & Hair", "Thinning, Loss of elasticity, Purse-string wrinkling (mouth), Crow feet (eyes)"],
["Others", "Back aches, Joint aches"],
],
col_widths=[W*0.22, W*0.78]
))
story.append(sp(4))
symp_left = [
mini_header("HOT FLASH β Most Characteristic Symptom"),
high("Sudden feeling of heat + profuse sweating"),
bullet("<b>Low estrogen</b> is prerequisite"),
bullet("Coincides with <b>GnRH pulse secretion β β LH surge</b>"),
bullet("Duration: <b>1β10 minutes</b>; may be unbearable"),
bullet("<b>Thermoregulatory center in hypothalamus</b> involved"),
bullet("Neurotransmitters: <b>norepinephrine & serotonin</b> lower the thermoregulatory set-point"),
bullet("Physiologic changes: <b>perspiration + cutaneous vasodilation</b>"),
sp(3),
mini_header("Skin & Hair"),
bullet("Skin collagen β <b>1β2%/year</b>"),
bullet("<b>Purse string</b> wrinkling (mouth) | <b>Crow feet</b> (eyes)"),
bullet("Estrogen receptors max in <b>facial skin</b>"),
bullet("Loss of pubic & axillary hair; slight balding (β testosterone)"),
]
symp_right = [
mini_header("Dyspareunia / Vaginal"),
bullet("Estradiol deficiency β vaginal dryness/atrophy"),
bullet("Rx: <b>17Ξ²-estradiol tablet</b> or <b>CEE cream</b> (vaginally/orally)"),
bullet("Endometrial hyperplasia risk: <b>less with vaginal tablets than cream</b>"),
bullet("Vaginal lubricants: <b>K-Y jelly</b> (water soluble)"),
bullet("Vaginal: minimal trauma β bleeding, dyspareunia, infections, leucorrhea"),
sp(3),
mini_header("Psychological"),
bullet("Anxiety, headache, insomnia, irritability, depression"),
bullet("Estrogen β opioid activity in brain β important for <b>memory</b>"),
bullet("Dementia: estrogen improves cerebral perfusion; unclear if prevents Alzheimer's"),
sp(3),
mini_header("Osteoporosis & Fracture"),
bullet("Bone loss β to <b>5%/year</b> during menopause"),
bullet("<b>Primary (Type 1)</b>: estrogen loss, age, Ca/Vit D deficiency, hereditary"),
bullet("<b>Secondary (Type 2)</b>: endocrine (parathyroid, DM) or medications"),
bullet("Fracture sites: <b>vertebral body, femoral neck, distal forearm (Colles')</b>"),
high("Fracture = FALL risk (β muscle mass, cognitive impairment)"),
]
story.append(two_col(symp_left, symp_right))
story.append(sp(5))
# ββ SECTION 9: Menstrual Patterns ββββββββββββββββββββββββββββββββ
story.append(section_header("9. MENSTRUAL PATTERNS PRIOR TO MENOPAUSE"))
story.append(sp(3))
story.append(make_table(
["Pattern", "Description"],
[
["Abrupt cessation", "Sudden stopping β RARE"],
["Gradual decrease β
", "β amount & duration β spotting/delay β cessation (most common)"],
["Irregular", "With/without excessive bleeding β EXCLUDE genital malignancy first"],
],
col_widths=[W*0.25, W*0.75]
))
story.append(sp(5))
# ββ SECTION 10: Diagnosis ββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("10. DIAGNOSIS OF MENOPAUSE"))
story.append(sp(3))
story.append(make_table(
["Criterion", "Value"],
[
["Amenorrhea duration", "12 consecutive months during climacteric"],
["Average age", "50 years"],
["Symptoms", "Hot flash + Night sweats"],
["Vaginal cytology (maturation index)", "β₯ 10/85/5 (features of low estrogen)"],
["Serum estradiol", "< 20 pg/mL"],
["Serum FSH & LH", "> 40 mIU/mL (3 values at weekly intervals required)"],
],
col_widths=[W*0.40, W*0.60]
))
story.append(sp(5))
# ββ SECTION 11: Management βββββββββββββββββββββββββββββββββββββββ
story.append(section_header("11. MANAGEMENT"))
story.append(sp(3))
story.append(mini_header("Prevention & Counseling"))
story.append(bullet("Spontaneous menopause: unavoidable"))
story.append(bullet("<b>Artificial menopause</b> (surgery/radiation/chemo): can be <b>prevented or delayed</b>"))
story.append(high("Counseling & Reassurance is ESSENTIAL β addresses anxiety, depression, insomnia"))
story.append(sp(3))
story.append(mini_header("Non-Hormonal Treatment"))
story.append(sp(2))
story.append(make_table(
["Treatment", "Details"],
[
["Lifestyle modification", "Physical activity; β caffeine, smoking, alcohol; adequate calcium (300 mL milk); β corticosteroids"],
["Nutritious diet", "Balanced β calcium + protein rich"],
["Supplementary calcium", "Daily <b>1β1.5 g</b> β reduces osteoporosis & fracture"],
["Exercise", "Weight-bearing: walking, jogging"],
["Vitamin Dβ", "1500β2000 IU/day + calcium; sunlight synthesizes cholecalciferol (Vit Dβ)"],
["Bisphosphonates", "Prevents osteoclastic resorption; preferred for OLDER women; common: Ibandronate, Alendronate, Risedronate (fewer SE)"],
["Bisphosphonates β How to take", "Empty stomach; remain UPRIGHT 30 min after oral dose"],
["Bisphosphonates β Side effects", "Gastric/esophageal ulceration, osteomyelitis, OSTEONECROSIS OF JAW; cannot alone prevent hot flashes or CVD"],
["Calcitonin", "Inhibits osteoclasts (polypeptide hormone); always give WITH calcium + Vit D"],
["Cessation", "Stop smoking & alcohol"],
],
col_widths=[W*0.30, W*0.70]
))
story.append(sp(5))
# ββ SECTION 12: High-Yield Summary βββββββββββββββββββββββββββββββ
story.append(section_header("12. HIGH-YIELD EXAM RAPID RECALL"))
story.append(sp(3))
story.append(make_table(
["Key Point", "Fact to Remember"],
[
["Diagnosis declared", "RETROSPECTIVELY after 12 months amenorrhea"],
["Average age", "50 years (range 45β55)"],
["Post-menopausal dominant estrogen", "ESTRONE (not estradiol)"],
["Source of estrone", "Peripheral aromatization of androgens (adrenals β adipose/muscle)"],
["FSH rise", "10β20 fold | LH rises only 3-fold"],
["AMH", "Markedly decreased"],
["Bone loss rate", "3β5%/year; up to 5% during menopause"],
["T-score: Osteoporosis", "< β2.5"],
["T-score: Osteopenia", "β1.0 to β2.5"],
["Serum FSH for diagnosis", "> 40 mIU/mL (3 values weekly)"],
["Serum estradiol for diagnosis", "< 20 pg/mL"],
["Skin collagen loss", "1β2%/year"],
["Hot flash mechanism", "Low estrogen β GnRH pulse β LH surge β thermoregulatory center"],
["Characteristic wrinkling", "Purse-string (mouth) | Crow-feet (eyes)"],
["Fracture site (Colles')", "Distal forearm"],
["Bisphosphonate rule", "Empty stomach; upright 30 min; SE: osteonecrosis of jaw"],
["Vaginal pH post-menopause", "Alkaline (no Doderlein's bacilli, no glycogen)"],
["Estrogen + CVD protection", "β HDL2, β LDL, β NO, antioxidant"],
["FRAX tool", "10-year fracture probability (WHO-2001), 11 risk factors"],
["Most common menstrual pattern", "Gradual decrease β spotting β cessation"],
["Obese women risk", "More estrone conversion β β endometrial hyperplasia/carcinoma risk"],
],
col_widths=[W*0.40, W*0.60]
))
story.append(sp(4))
story.append(note("These notes are compiled from Chapter 6 β Menopause. Focus especially on: diagnostic criteria, T-scores, hormonal changes, vasomotor mechanism, bisphosphonate side effects, and the estrone/estradiol distinction."))
# ββ Build βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/menopause-notes && python3 generate_pdf.py 2>&1
python3 -c " from pypdf import PdfReader r = PdfReader('/home/daytona/workspace/menopause-notes/Menopause_Notes.pdf') print(f'Pages: {len(r.pages)}') import os size = os.path.getsize('/home/daytona/workspace/menopause-notes/Menopause_Notes.pdf') print(f'Size: {size/1024:.1f} KB') "
Menopause Notes
PDF Document Β· PDF
Make an exam oriented notes concise pdf including tables in it with minimum pages
~/genital-prolapse/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
import os
os.makedirs("/home/daytona/workspace/genital-prolapse", exist_ok=True)
OUTPUT = "/home/daytona/workspace/genital-prolapse/Genital_Prolapse_Notes.pdf"
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=1.4*cm, rightMargin=1.4*cm,
topMargin=1.4*cm, bottomMargin=1.4*cm,
)
W = A4[0] - 2.8*cm
# ββ Colours ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DARK = colors.HexColor("#1a3a5c")
MED_BLUE = colors.HexColor("#1e40af")
LT_BLUE = colors.HexColor("#dbeafe")
RED = colors.HexColor("#dc2626")
GOLD = colors.HexColor("#92400e")
TBL_HDR = colors.HexColor("#1e3a8a")
TBL_ALT = colors.HexColor("#f0f4ff")
BORDER = colors.HexColor("#93c5fd")
WHITE = colors.white
SLATE = colors.HexColor("#1e293b")
GREEN_HDR = colors.HexColor("#166534")
GREEN_BG = colors.HexColor("#dcfce7")
def S(name, **kw): return ParagraphStyle(name, **kw)
title_s = S("T", fontName="Helvetica-Bold", fontSize=20, textColor=WHITE, alignment=TA_CENTER)
subt_s = S("ST", fontName="Helvetica", fontSize=9, textColor=LT_BLUE, alignment=TA_CENTER)
sec_s = S("SE", fontName="Helvetica-Bold", fontSize=9, textColor=WHITE, leftIndent=5)
mini_s = S("MI", fontName="Helvetica-Bold", fontSize=8.5,textColor=MED_BLUE, spaceAfter=2, spaceBefore=4)
body_s = S("BO", fontName="Helvetica", fontSize=7.8,textColor=SLATE, leading=11, spaceAfter=2, alignment=TA_JUSTIFY)
bul_s = S("BU", fontName="Helvetica", fontSize=7.8,textColor=SLATE, leading=11, leftIndent=10, firstLineIndent=-8, spaceAfter=1.5)
high_s = S("HI", fontName="Helvetica-Bold", fontSize=7.8,textColor=RED, leading=11, spaceAfter=2, leftIndent=10, firstLineIndent=-8)
note_s = S("NO", fontName="Helvetica-Oblique",fontSize=7.2,textColor=GOLD,leading=10, spaceAfter=2)
th_s = S("TH", fontName="Helvetica-Bold", fontSize=7.5,textColor=WHITE, alignment=TA_LEFT)
td_s = S("TD", fontName="Helvetica", fontSize=7.5,textColor=SLATE, leading=10, alignment=TA_LEFT)
tdb_s = S("TDB",fontName="Helvetica-Bold", fontSize=7.5,textColor=SLATE, leading=10, alignment=TA_LEFT)
def sec(text, bg=TBL_HDR):
t = Table([[Paragraph(text, sec_s)]], colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),bg),
("TOPPADDING",(0,0),(-1,-1),3),("BOTTOMPADDING",(0,0),(-1,-1),3),
("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),4),
]))
return t
def mini(text): return Paragraph(f"<font color='#1e40af'><b>β {text}</b></font>", mini_s)
def bul(text): return Paragraph(f"β’ {text}", bul_s)
def high(text): return Paragraph(f"β
{text}", high_s)
def body(text): return Paragraph(text, body_s)
def note(text): return Paragraph(f"π‘ {text}", note_s)
def sp(h=3): return Spacer(1, h)
def hr(): return HRFlowable(width=W, thickness=0.4, color=BORDER, spaceAfter=2, spaceBefore=2)
def tbl(headers, rows, widths=None):
data = [[Paragraph(h, th_s) for h in headers]]
for row in rows:
data.append([Paragraph(str(c[0]), tdb_s) if (isinstance(c, tuple) and c[1]=='b') else Paragraph(str(c), td_s) for c in row])
if widths is None: widths = [W/len(headers)]*len(headers)
t = Table(data, colWidths=widths, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),TBL_HDR),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE,TBL_ALT]),
("GRID",(0,0),(-1,-1),0.35,BORDER),
("VALIGN",(0,0),(-1,-1),"TOP"),
("TOPPADDING",(0,0),(-1,-1),2.5),("BOTTOMPADDING",(0,0),(-1,-1),2.5),
("LEFTPADDING",(0,0),(-1,-1),4),("RIGHTPADDING",(0,0),(-1,-1),4),
("FONTSIZE",(0,0),(-1,-1),7.5),
]))
return t
def two_col(L, R, lw=None, rw=None):
lw = lw or W*0.495; rw = rw or W*0.495
lt = Table([[i] for i in L], colWidths=[lw])
rt = Table([[i] for i in R], colWidths=[rw])
ot = Table([[lt, rt]], colWidths=[lw+2, rw+2])
ot.setStyle(TableStyle([("VALIGN",(0,0),(-1,-1),"TOP"),
("LEFTPADDING",(0,0),(-1,-1),0),("RIGHTPADDING",(0,0),(-1,-1),0),
("TOPPADDING",(0,0),(-1,-1),0),("BOTTOMPADDING",(0,0),(-1,-1),0)]))
return ot
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story = []
# ββ TITLE βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
tb = Table([[Paragraph("GENITAL PROLAPSE", title_s)],
[Paragraph("Chapter 16 Β· Displacement of the Uterus Β· Exam-Oriented Concise Notes", subt_s)]],
colWidths=[W])
tb.setStyle(TableStyle([("BACKGROUND",(0,0),(-1,-1),DARK),
("TOPPADDING",(0,0),(-1,-1),7),("BOTTOMPADDING",(0,0),(-1,-1),7),
("LEFTPADDING",(0,0),(-1,-1),8)]))
story += [tb, sp(5)]
# ββ 1. DEFINITION & SUPPORTS ββββββββββββββββββββββββββββββββββββββ
story += [sec("1. DEFINITION & PELVIC SUPPORTS"), sp(2)]
left1 = [
mini("Definition"),
bul("<b>Genital prolapse</b> = descent of pelvic organs from their normal position due to weakness of supporting structures"),
bul("Factors may be <b>anatomical</b> (structural) or <b>clinical</b> (predisposing/aggravating)"),
sp(2),
mini("Key Pelvic Supports"),
bul("<b>Levator ani muscles</b> β main support; pubococcygeus part attaches to urethra, vagina, rectum"),
bul("<b>Levator plate</b> β horizontal shelf upon which rectum, upper vagina, uterus rest"),
bul("<b>Pubovisceral fibers</b> β squeeze rectum, vagina, urethra against pubic bone"),
bul("Damage β <b>widening of hiatus urogenitalis</b> β vagina pushed down β organs prolapse"),
high("Recto-genitourinary hiatus enlargement = key anatomic predisposition"),
]
right1 = [
mini("Levator Plate"),
bul("Formed by medial fibers of two levator ani muscles"),
bul("Is the <b>anococcygeal raphe</b> extending from anorectal junction to coccyx"),
bul("Horizontal position prevents prolapse; when damaged β organs descend"),
sp(2),
mini("Biomechanical Note"),
bul("Delancey (1992): three levels of uterovaginal support"),
bul("<b>Level I</b>: cardinal/uterosacral ligaments (upper vagina/uterus)"),
bul("<b>Level II</b>: lateral attachment of mid-vagina (paravaginal)"),
bul("<b>Level III</b>: fusion of distal vagina to surrounding structures"),
high("Loss of normal vaginal axis β prolapse"),
]
story += [two_col(left1, right1), sp(4)]
# ββ 2. ETIOLOGY TABLE βββββββββββββββββββββββββββββββββββββββββββββ
story += [sec("2. ETIOLOGY OF PELVIC ORGAN PROLAPSE (POP) β TABLE 16.1"), sp(2)]
story.append(tbl(
["Anatomical Factors", "Predisposing Factors (Acquired/Congenital)", "Aggravating Factors"],
[
["Gravitational stress (bipedal posture)",
"ACQUIRED: Vaginal delivery trauma β ligaments, endopelvic fascia, levator muscle, nerve (pudendal) injury",
"Postmenopausal atrophy"],
["Anterior pelvic inclination directing force anteriorly",
"Overstretching Mackenrodt's & uterosacral ligaments (premature pushing, forceps, prolonged 2nd stage, precipitate labor)",
"Poor collagen repair with age"],
["Stress of parturition β max damage to puborectal fibers",
"CONGENITAL: Genetic connective tissue disorders, β Type I collagen ratio",
"β Intra-abdominal pressure: COPD, constipation, occupation (weight lifting)"],
["Pelvic floor weakness β urogenital hiatus β + β obstetric axis through hiatus",
"Spina bifida",
"Obesity, smoking; Uterine weight β (fibroids, myohyperplasia); Multiparity"],
["Inherent weakness of supporting structures", "β", "These act where supports are already weakened"],
],
widths=[W*0.27, W*0.40, W*0.33]
))
story += [sp(2), note("MOST IMPORTANT acquired factor = Vaginal delivery with injury to supporting structures. Prolapse unusual after cesarean delivery."), sp(4)]
# ββ 3. CLINICAL TYPES βββββββββββββββββββββββββββββββββββββββββββββ
story += [sec("3. CLINICAL TYPES OF PELVIC ORGAN PROLAPSE"), sp(2)]
story.append(tbl(
["Type", "Location / Structure", "Description"],
[
["VAGINAL β ANTERIOR WALL","",""],
["Cystocele","Upper 2/3 of anterior vaginal wall","Laxity of upper 2/3 β herniation of bladder base through lax anterior wall (most common)"],
["Urethrocele","Lower 1/3 of anterior vaginal wall","Laxity of lower 1/3 β urethra herniates through it (often with cystocele = cystourethrocele)"],
["VAGINAL β POSTERIOR WALL","",""],
["Relaxed Perineum","Perineal body","Torn perineal body β gaping introitus with bulge of lower posterior vaginal wall"],
["Rectocele","Middle 1/3 posterior vaginal wall","Laxity of middle 1/3 + adjacent rectovaginal septum β herniation of rectum"],
["VAULT PROLAPSE","",""],
["Enterocele","Upper 1/3 posterior vaginal wall","Laxity of upper 1/3 β herniation of pouch of Douglas (omentum/small bowel); secondary to uterovaginal prolapse"],
["Secondary vault prolapse","After hysterectomy","Follows vaginal or abdominal hysterectomy; undetected enterocele at initial op β secondary vault prolapse"],
["UTERINE PROLAPSE","",""],
["Uterovaginal prolapse","Uterus, cervix, upper vagina","Most common type; cystocele occurs first, then traction on cervix causes retroversion β uterus descends"],
["Congenital prolapse","Nulliparous women","No cystocele; uterus descends with inverted vagina; congenital weakness of supports"],
],
widths=[W*0.22, W*0.28, W*0.50]
))
story += [sp(4)]
# ββ 4. DEGREES OF UTERINE PROLAPSE βββββββββββββββββββββββββββββββ
story += [sec("4. DEGREES OF UTERINE PROLAPSE (TABLE 16.2) & POP-Q STAGING (TABLE 16.3)"), sp(2)]
left4 = [
mini("Clinical Degrees (Table 16.2)"),
tbl(
["Degree", "Description"],
[
["Normal", "External os at level of ischial spines; no prolapse"],
["1st Degree", "Uterus descends from normal position; external os still ABOVE introitus"],
["2nd Degree", "External os protrudes outside vaginal introitus; uterine body still inside"],
["3rd Degree\n(Procidentia)", "Uterine cervix AND fundus lie OUTSIDE introitus; complete prolapse"],
["Procidentia", "Prolapse of uterus with EVERSION of entire vagina"],
],
widths=[W*0.22, W*0.26]
),
]
right4 = [
mini("POP-Q Staging (ICS/AUGS/SGS 1996) β Table 16.3"),
bul("Hymen = fixed reference point (zero level)"),
bul("Measurements: NEGATIVE = above hymen; POSITIVE = below hymen"),
bul("Measured with wooden PAP spatula; patient in lithotomy/standing; Valsalva maneuver"),
tbl(
["Stage", "Description"],
[
["0", "No descent of pelvic organs"],
["I", "Leading edge β₯1 cm ABOVE hymenal ring (β€ β1 cm)"],
["II", "Leading edge between β1 cm and +1 cm of hymenal ring"],
["III", "Leading edge >1 cm BEYOND hymenal ring; no complete eversion"],
["IV", "Essentially complete vaginal eversion"],
],
widths=[W*0.08, W*0.38]
),
high("POP-Q recommended by ICS β objective, site-specific, anatomical"),
]
story += [two_col(left4, right4, lw=W*0.50, rw=W*0.46), sp(4)]
# ββ 5. MORBID CHANGES βββββββββββββββββββββββββββββββββββββββββββββ
story += [sec("5. MORBID CHANGES IN PROLAPSE"), sp(2)]
story.append(tbl(
["Structure", "Morbid Change"],
[
["Vaginal Mucosa", "Stretched, thickened, dry, surface keratinization; may show pigmentation"],
["Decubitus Ulcer", "Trophic ulcer at dependent part of prolapsed mass; initial surface β cracks β infection β sloughing β ulceration; complete surface epithelium loss; diminished circulation due to constriction by vaginal opening"],
["Decubitus Mgmt", "(a) Cervical cytology to exclude malignancy (b) Colposcopy & directed biopsy if needed (c) Manual reduction (d) Vaginal pack with antiseptic glycerin + acriflavine or estrogen cream (postmenopausal)"],
["Cervix β Vaginal part", "Chronic congestion β hyperplasia & hypertrophy of fibromuscular components β bulky, congested; infection β blood-stained discharge from ulceration"],
["Cervix β Supravaginal part", "Elongated due to strain of cardinal ligaments trying to keep cervix in position + weight of uterus pulling it through vaginal axis"],
["Urinary β Bladder", "Incomplete emptying β sharp angulation of urethra against pubourethral ligament β bladder wall hypertrophy + trabeculation; incomplete evacuation β cystitis"],
["Urinary β Ureters", "Carried downwards with elongated Mackenrodt's ligaments β mechanically obstructed by hiatus of pelvic floor β compression by uterine arteries at crossing β hydroureteric changes; bladder infection β pyelitis/pyelonephritis; long-standing procidentia β uraemia"],
["Incarceration", "Infection of paravaginal/cervical tissues β entire prolapsed mass becomes edematous/congested β IRREDUCIBLE"],
["Peritonitis", "Rarely, peritoneal infection (pelvic peritonitis) through posterior vaginal wall"],
["Carcinoma", "Rarely develops on decubitus ulcer"],
],
widths=[W*0.25, W*0.75]
))
story += [sp(4)]
# ββ 6. SYMPTOMS βββββββββββββββββββββββββββββββββββββββββββββββββββ
story += [sec("6. SYMPTOMS OF GENITAL PROLAPSE"), sp(2)]
left6 = [
mini("General Symptoms"),
bul("<b>Something coming down</b> per vaginum (worse when moving/walking; comes out when mass outside introitus)"),
bul("<b>Backache or dragging pain</b> in pelvis"),
bul("Both above relieved on <b>lying down</b>"),
bul("Dyspareunia"),
sp(2),
mini("Urinary Symptoms (with cystocele)"),
bul("<b>Difficulty</b> passing urine β more straining = less evacuation; patient elevates anterior vaginal wall to void"),
bul("<b>Incomplete evacuation</b> β frequent desire to urinate"),
bul("<b>Urgency and frequency</b> β may be due to cystitis"),
bul("<b>Painful micturition</b> β due to infection"),
bul("<b>Stress incontinence</b> β associated urethrocele"),
bul("<b>Retention</b> of urine may rarely occur"),
]
right6 = [
mini("Bowel Symptoms (with rectocele)"),
bul("Difficulty passing stool β must push back posterior vaginal wall to complete evacuation"),
bul("Fecal incontinence may be associated"),
sp(2),
mini("Discharge"),
bul("Excessive white or blood-stained discharge per vaginam β associated vaginitis or decubitus ulcer"),
sp(2),
mini("Important Exam Points"),
high("Minor prolapse may be asymptomatic β even severe degree may have no symptoms"),
high("Prolapse of one organ (uterus) usually associated with adjacent organ prolapse (bladder, rectum)"),
high("Symptoms RELIEVED on lying down β classic for prolapse"),
bul("Etiological aspect + risk factors should always be evaluated"),
]
story += [two_col(left6, right6), sp(4)]
# ββ 7. CLINICAL EXAMINATION & DIAGNOSIS ββββββββββββββββββββββββββ
story += [sec("7. CLINICAL EXAMINATION & DIAGNOSIS OF POP"), sp(2)]
left7 = [
mini("Examination Protocol"),
bul("<b>Composite examination</b>: inspection + palpation; vaginal, rectal, rectovaginal, or under anesthesia"),
bul("<b>General examination</b>: BMI, signs of myopathy/neuropathy, COPD features, abdominal mass"),
bul("<b>POP evaluated</b> in both dorsal AND standing positions"),
bul("Patient strains (Valsalva) during examination β helps demonstrate prolapse not seen at rest"),
bul("<b>Negative finding on dorsal inspection</b> β reconfirm by asking to strain on squatting position"),
sp(2),
mini("Pelvic Exam Assesses:"),
bul("Staging (POP-Q), levator ani muscle tone, urinary incontinence"),
bul("Decubitus ulcer, uterine size, mobility, perineal body, anal sphincter tone"),
]
right7 = [
mini("Specific Examination Findings"),
bul("<b>Cystocele</b>: bulge on anterior vaginal wall; β when straining; use Sims' speculum in lateral position to demonstrate"),
bul("<b>Cystourethrocele</b>: bulging of entire anterior wall + lower third; urine escapes through urethral meatus on coughing (bladder must be full to test)"),
bul("<b>Relaxed perineum</b>: gaping introitus; old scar of perineal tear; β distance introitus β anal verge; lower posterior vaginal wall visible"),
bul("<b>Rectocele vs Enterocele</b>: transverse sulcus between two with midvaginal one being rectocele (diffuse margins, reducible); enterocele closer to cervix, cannot reach by finger in rectum"),
high("3rd degree: thumb anteriorly + fingers posteriorly outside introitus = apposed = 3rd degree prolapse"),
bul("<b>Levator ani tone</b>: index + middle fingers inside vagina, thumb outside; pubovaginalis palpated in lower 1/3"),
]
story += [two_col(left7, right7), sp(4)]
# ββ 8. DIFFERENTIAL DIAGNOSIS βββββββββββββββββββββββββββββββββββββ
story += [sec("8. DIFFERENTIAL DIAGNOSIS"), sp(2)]
story.append(tbl(
["Condition", "vs Prolapse", "Distinguishing Features"],
[
["Gartner's Cyst (vs Cystocele)",
"Cyst in anterior vaginal wall β retention cyst in Wolffian duct remnants",
"Situated anteriorly/anterolaterally; variable size; rugosities of vaginal mucosa LOST over it; mucosa tense & shiny; well-defined margins; NOT reducible; NO impulse on coughing; metal catheter tip per urethra FAILS to come underneath vaginal mucosa"],
["Congenital cervical elongation (vs Uterine prolapse)",
"Cervix elongated WITHOUT actual uterine descent",
"Not associated with prolapse (usually); vaginal part elongated; external os below ischial spines; vaginal fornices narrow & deep; cervix CONICAL; uterine body NORMAL size & position; Rectal exam β NO prolapse"],
["Chronic inversion (vs Uterine prolapse)",
"Inverted uterus prolapsing through introitus",
"Leading protruding mass is BROAD; NO opening visible; internal exam β cervical rim on top around mass; rectal exam β absence of uterine body + cup-like depression"],
["Fibroid polyp (vs Uterine prolapse)",
"Pedunculated fibroid through cervix/introitus",
"Mass is SHAGGY with broad leading part; NO opening visible; internal exam β pedicle from cervical canal or cervix; rectal exam β normal uterine shape and position"],
],
widths=[W*0.22, W*0.28, W*0.50]
))
story += [sp(4)]
# ββ 9. MANAGEMENT βββββββββββββββββββββββββββββββββββββββββββββββββ
story += [sec("9. MANAGEMENT OF PROLAPSE"), sp(2)]
# 9A: Prevention + Conservative
left9 = [
mini("A. Preventive Measures"),
bul("<b>Adequate antenatal/intranatal care</b>: avoid injury during vaginal delivery"),
bul("<b>Adequate postnatal care</b>: early ambulation; encourage pelvic floor exercises (Kegel's) in puerperium"),
bul("General: avoid strenuous activities, chronic cough, constipation, heavy lifting"),
bul("Avoid future pregnancy too soon/too many β contraceptive practice"),
sp(2),
mini("B. Conservative Management"),
bul("<b>Indications:</b> Asymptomatic women; old woman not willing for surgery; mild degree prolapse; POP in early pregnancy"),
bul("<b>Estrogen replacement therapy</b> may improve minor degree prolapse in postmenopausal women"),
bul("<b>Pelvic floor exercises (Kegel's)</b>: strengthen muscles"),
bul("<b>Pessary treatment</b>: cannot CURE but relieves symptoms by stretching hiatus urogenitalis β prevents descent"),
sp(2),
mini("Pessary β Indications of Use"),
bul("Early pregnancy β up to 18 weeks (until uterus sits on brim of pelvis)"),
bul("Puerperium β to facilitate involution"),
bul("Patients absolutely unfit for surgery (short life expectancy)"),
bul("Patient's unwillingness for operation"),
bul("While waiting for operation"),
bul("<i>Additional benefits</i>: improvement of urinary symptoms (voiding problems, urgency)"),
]
right9 = [
mini("C. Surgical Management"),
bul("Surgery = treatment of symptomatic prolapse where conservative management failed/not indicated"),
bul("<b>(A) Restorative</b>: correcting own support / compensatory (permanent graft material)"),
bul("<b>(B) Extirpative</b>: removing uterus and correcting support"),
bul("<b>(C) Obliterative</b>: closing the vagina (colpocleisis)"),
high("No single procedure for ALL types of prolapse"),
bul("<b>Factors determining surgery choice:</b> Patient's age, parity, degree & type of prolapse, any prior surgery, associated factors (urinary/fecal incontinence, PID), comorbidities (cardiac disease)"),
sp(2),
mini("Anterior Colporrhaphy"),
bul("Designed to correct cystocele and urethrocele"),
bul("Principle: excise relaxed anterior vaginal wall β mobilize bladder upward after cutting vesicovervical ligament β support bladder by plicating endopelvic fascia and pubocervical fascia under bladder neck in midline"),
bul("<b>Steps:</b> GA/epidural; lithotomy; antiseptic swab; sterile perineum draped; empty bladder by metal catheter; vaginal exam for degree of prolapse"),
high("Sims' speculum introduced; anterior lip of cervix held by multiple-toothed vulsellum; metal catheter to know lower limit of bladder; inverted 'I' incision on anterior vaginal wall"),
]
story += [two_col(left9, right9), sp(4)]
# ββ 10. SURGICAL REPAIR TABLE βββββββββββββββββββββββββββββββββββββ
story += [sec("10. TYPE OF PROLAPSE & SURGICAL REPAIR PROCEDURES (TABLE 16.4)"), sp(2)]
story.append(tbl(
["Organ Descent", "Clinical Condition", "Type of Operation"],
[
["VAGINAL WALL β Anterior (Upper 2/3) or whole", "Cystocele / Cystourethrocele / Paravaginal defect", "β’ Anterior colporrhaphy\nβ’ Paravaginal defect repair"],
["Posterior (Lower 2/3)", "Rectocele", "β’ Colpoperineorrhaphy"],
["Posterior (Upper 1/3)", "Enterocele", "β’ Vaginal repair of enterocele with PFR\nβ’ McCall culdoplasty\nβ’ Moskowitz procedure"],
["Combined anterior and posterior", "Cystocele and rectocele", "β’ PFR (combined procedure)"],
["UTEROVAGINAL β Uterus along with vaginal walls", "Uterovaginal prolapse", "β’ Vaginal hysterectomy with PFR (elderly, family completed)\nβ’ Fothergill's operation (preservation of uterus)"],
["VAGINAL WALL β Following hysterectomy (vaginal or abdominal)", "Vault prolapse (secondary)", "Vaginal: (i) Repair of vaginal vault along with PFR (ii) Sacrospinous colpopexy (iii) Colpocleisis (Le Fort)\nAbdominal: (i) Sacral colpopexy"],
["Uterus (without vaginal walls)", "Congenital or nulliparous prolapse (young women)", "β’ Cervicopexy or Sling (Purandare's) operation"],
["Pelvic organ prolapse (POP) with stress incontinence", "POP with stress incontinence", "Vaginal: TOT operation\nAbdominal: Burch operation"],
],
widths=[W*0.25, W*0.30, W*0.45]
))
story += [sp(2), note("Abbreviations: PFR = Pelvic Floor Repair; TOT = Transobturator Tape Procedure"), sp(4)]
# ββ 11. HIGH-YIELD RAPID RECALL βββββββββββββββββββββββββββββββββββ
story += [sec("11. HIGH-YIELD EXAM RAPID RECALL"), sp(2)]
story.append(tbl(
["Key Point", "Fact to Remember"],
[
["Most important acquired cause", "Vaginal delivery β injury to supporting structures"],
["Prolapse unusual after", "Cesarean delivery"],
["Congenital cause", "Genetic connective tissue disorders; β Type I collagen; Spina bifida"],
["Levator plate position", "Horizontal β prevents prolapse; damage β organs descend"],
["Cystocele = laxity of", "Upper 2/3 of anterior vaginal wall (bladder herniates)"],
["Urethrocele = laxity of", "Lower 1/3 of anterior vaginal wall (urethra herniates)"],
["Rectocele = laxity of", "Middle 1/3 of posterior vaginal wall (rectum herniates)"],
["Enterocele = laxity of", "Upper 1/3 of posterior vaginal wall (pouch of Douglas herniates)"],
["Procidentia", "3rd degree uterine prolapse + complete eversion of vagina"],
["Prolapse diagnosis criterion", "Thumb anteriorly + fingers posteriorly APPOSED outside introitus = 3rd degree"],
["POP-Q reference point", "Plane of hymen = ZERO level (negative = above, positive = below)"],
["POP-Q Stage IV", "Essentially complete eversion of vagina"],
["POP-Q recommended by", "ICS, AUGS, SGS (1996) β objective, site-specific, anatomical"],
["Decubitus ulcer management", "Cytology to exclude malignancy β manual reduction β vaginal pack (antiseptic glycerin + acriflavine)"],
["Ureteric complication", "Hydroureteric changes; pyelonephritis; uraemia (long-standing procidentia)"],
["Symptom classic for prolapse", "Comes down when walking; RELIEVED on lying down"],
["Stress incontinence associated with", "Urethrocele (cystourethrocele)"],
["Gartner's cyst vs cystocele", "Gartner's: no rugosities, shiny, NOT reducible, NO impulse on cough, metal catheter does NOT pass under"],
["Pessary does NOT cure prolapse", "Only relieves symptoms; cannot cure"],
["No single operation for all", "Type, degree, age, parity, comorbidities determine surgical choice"],
["Surgery type: Obliterative", "Colpocleisis β closing the vagina"],
["Surgery: young nulliparous", "Cervicopexy or Sling (Purandare's) operation"],
["Surgery: vault prolapse (vaginal)", "Sacrospinous colpopexy, Le Fort colpocleisis, or vault repair + PFR"],
["Surgery: uterovaginal (elderly)", "Vaginal hysterectomy with PFR"],
["Fothergill's operation", "Preserves uterus β for uterovaginal prolapse"],
["TOT operation indication", "POP with stress incontinence (vaginal approach)"],
],
widths=[W*0.40, W*0.60]
))
story += [sp(4)]
story.append(note("Notes compiled from Chapter 16: Displacement of the Uterus β Textbook of Gynecology. Focus on: Types of prolapse & their exact anatomical locations, POP-Q stages, degrees of uterine prolapse, differential diagnosis features, and surgical procedure matching."))
doc.build(story)
print(f"Done: {OUTPUT}")
cd /home/daytona/workspace/genital-prolapse && python3 generate_pdf.py 2>&1
python3 -c " from pypdf import PdfReader; import os r = PdfReader('/home/daytona/workspace/genital-prolapse/Genital_Prolapse_Notes.pdf') size = os.path.getsize('/home/daytona/workspace/genital-prolapse/Genital_Prolapse_Notes.pdf') print(f'Pages: {len(r.pages)}') print(f'Size: {size/1024:.1f} KB') "
Genital Prolapse Notes
PDF Document Β· PDF
| Section | Content |
|---|---|
| 1. Definition & Pelvic Supports | Levator ani, levator plate, 3 levels of support (DeLancey), hiatus urogenitalis |
| 2. Etiology Table (16.1) | Anatomical vs Predisposing (Acquired/Congenital) vs Aggravating factors |
| 3. Clinical Types | Full table: Cystocele, Urethrocele, Rectocele, Enterocele, Vault prolapse, Uterovaginal, Congenital |
| 4. Degrees + POP-Q Staging | Table 16.2 (degrees) + Table 16.3 (Stages 0βIV with measurements) |
| 5. Morbid Changes | Decubitus ulcer, cervix changes, ureteric complications, incarceration |
| 6. Symptoms | Urinary, bowel, discharge, general β with exam-key callouts |
| 7. Clinical Examination | Protocol, Valsalva, Sims' speculum, levator ani tone testing |
| 8. Differential Diagnosis | Gartner's cyst vs cystocele, Congenital cervical elongation, Chronic inversion, Fibroid polyp |
| 9. Management | Preventive β Conservative (Kegel's, Pessary indications) β Surgical (all 3 types) |
| 10. Surgical Procedures (Table 16.4) | Full matching table: condition β operation |
| 11. High-Yield Rapid Recall | 26-point rapid recall table covering all commonly tested facts |