I am preparing for FMG. Exam, uh, 2027. So I just want to know how should I approach to the exam.
FMGE 2027 exam pattern syllabus preparation strategy NMC
FMGE Foreign Medical Graduate Examination India 2025 2026 latest changes NMC
https://www.prepladder.com/fmge-study-material/exam-pattern/…
| Feature | Details |
|---|---|
| Format | Computer-Based Test (CBT) |
| Total Questions | 300 MCQs |
| Parts | Part A & Part B (150 each) |
| Structure | 6 sections of 50 questions |
| Time per section | 50 minutes (sections are timed separately - you CANNOT go back) |
| Total Duration | 300 minutes (5 hours) |
| Language | English only |
| Negative marking | None |
Critical rule: Each section locks after its 50-minute window. Once time expires, you cannot revisit that section. Practice with this in mind.
| Subject | Questions |
|---|---|
| General Medicine | 33 |
| General Surgery | 32 |
| Obs & Gynaecology | 30 |
| Community Medicine (PSM) | 30 |
| Paediatrics | 15 |
| Orthopaedics | 10 |
| Ophthalmology | 10 |
| ENT | 10 |
| Dermatology | 8 |
| Psychiatry | 7 |
| Radiology | 7 |
| Anaesthesiology | ~8 |
| Subject | Questions |
|---|---|
| Pathology | 22 |
| Pharmacology | 18 |
| Anatomy | 17 |
| Physiology | 15 |
| Microbiology | 15 |
| Biochemistry | 10 |
| Forensic Medicine | 3 |
make presentation in breast cancer oncology in 15 slides to explain medical student use good background theme
mkdir -p /tmp/workspace/breast-cancer-ppt
~/breast-cancer-ppt/create_pptx.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.oxml.ns import qn
from pptx.oxml import parse_xml
from lxml import etree
from io import BytesIO
# ── Color Palette ─────────────────────────────────────────────────────────────
# Deep teal/navy medical theme with pink ribbon accent
BG_DARK = RGBColor(0x0D, 0x2B, 0x45) # deep navy
BG_MEDIUM = RGBColor(0x12, 0x3A, 0x5E) # medium navy-blue
ACCENT_PINK = RGBColor(0xE9, 0x52, 0x8A) # breast cancer pink ribbon
ACCENT_TEAL = RGBColor(0x00, 0xC8, 0xC8) # teal highlight
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
LIGHT_BLUE = RGBColor(0xB8, 0xD8, 0xF0)
YELLOW_HL = RGBColor(0xFF, 0xD7, 0x00)
GRAY_LIGHT = RGBColor(0xE8, 0xF0, 0xF8)
def new_prs():
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
return prs
def blank_slide(prs):
return prs.slides.add_slide(prs.slide_layouts[6])
def fill_bg(slide, color):
"""Fill slide background with a solid color."""
bg = slide.background
fill = bg.fill
fill.solid()
fill.fore_color.rgb = color
def add_rect(slide, x, y, w, h, fill_color, alpha=None):
shape = slide.shapes.add_shape(
1, # MSO_SHAPE_TYPE.RECTANGLE
Inches(x), Inches(y), Inches(w), Inches(h)
)
shape.fill.solid()
shape.fill.fore_color.rgb = fill_color
shape.line.fill.background()
return shape
def add_text(slide, text, x, y, w, h, font_size=18, bold=False,
color=WHITE, align=PP_ALIGN.LEFT, italic=False,
v_anchor=MSO_ANCHOR.TOP, word_wrap=True):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = word_wrap
tf.vertical_anchor = v_anchor
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.size = Pt(font_size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
run.font.name = "Calibri"
return tb
def add_multiline_text(slide, lines, x, y, w, h, font_size=16,
color=WHITE, bold_first=False, line_spacing=1.2):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = True
for i, line in enumerate(lines):
if i == 0:
p = tf.paragraphs[0]
else:
p = tf.add_paragraph()
p.space_before = Pt(4)
run = p.add_run()
run.text = line
run.font.size = Pt(font_size)
run.font.color.rgb = color
run.font.name = "Calibri"
if bold_first and i == 0:
run.font.bold = True
return tb
def add_bullet_box(slide, title, bullets, x, y, w, h,
title_size=18, bullet_size=15,
box_color=BG_MEDIUM, title_color=ACCENT_TEAL,
bullet_color=WHITE):
# Box background
add_rect(slide, x, y, w, h, box_color)
# Title
add_text(slide, title, x+0.15, y+0.1, w-0.3, 0.4,
font_size=title_size, bold=True, color=title_color)
# Bullets
tb = slide.shapes.add_textbox(Inches(x+0.2), Inches(y+0.55),
Inches(w-0.35), Inches(h-0.65))
tf = tb.text_frame
tf.word_wrap = True
for i, b in enumerate(bullets):
if i == 0:
p = tf.paragraphs[0]
else:
p = tf.add_paragraph()
p.space_before = Pt(3)
run = p.add_run()
run.text = u"\u2022 " + b
run.font.size = Pt(bullet_size)
run.font.color.rgb = bullet_color
run.font.name = "Calibri"
def pink_bar(slide, y=0.0, h=0.12):
add_rect(slide, 0, y, 13.333, h, ACCENT_PINK)
def bottom_bar(slide):
add_rect(slide, 0, 7.3, 13.333, 0.2, ACCENT_PINK)
def slide_number(slide, n):
add_text(slide, str(n), 12.8, 7.2, 0.5, 0.3,
font_size=11, color=ACCENT_PINK, align=PP_ALIGN.RIGHT)
# ──────────────────────────────────────────────────────────────────────────────
prs = new_prs()
# ════════════════════════════════════════════════════
# SLIDE 1 — Title Slide
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
# Full pink gradient bar top
add_rect(s, 0, 0, 13.333, 0.25, ACCENT_PINK)
# Decorative ribbon element (right side)
add_rect(s, 11.8, 0, 1.533, 7.5, RGBColor(0x17, 0x35, 0x5C))
add_rect(s, 12.2, 0, 0.3, 7.5, RGBColor(0xE9, 0x52, 0x8A))
# Main title
add_text(s, "BREAST CANCER", 1, 1.5, 10.5, 1.6,
font_size=52, bold=True, color=ACCENT_PINK, align=PP_ALIGN.LEFT)
add_text(s, "Oncology", 1, 3.1, 10, 0.9,
font_size=36, bold=False, color=WHITE, align=PP_ALIGN.LEFT)
# Subtitle line
add_rect(s, 1, 3.95, 8, 0.06, ACCENT_TEAL)
add_text(s, "A Comprehensive Guide for Medical Students", 1, 4.15, 10, 0.6,
font_size=20, color=LIGHT_BLUE, align=PP_ALIGN.LEFT)
add_text(s, "Based on Robbins Pathology | Harrison's Internal Medicine | Fischer's Surgery",
1, 4.85, 10, 0.5, font_size=13, color=RGBColor(0x80,0xA8,0xC8),
align=PP_ALIGN.LEFT, italic=True)
add_text(s, "2026", 1, 6.5, 3, 0.4, font_size=15, color=ACCENT_PINK)
bottom_bar(s)
# ════════════════════════════════════════════════════
# SLIDE 2 — Learning Objectives
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Learning Objectives", 0.5, 0.22, 12, 0.75,
font_size=30, bold=True, color=WHITE)
objectives = [
"1. Understand the epidemiology and risk factors of breast cancer",
"2. Describe the anatomy of the breast and its relevance to cancer spread",
"3. Classify breast cancer by molecular subtypes (Luminal, HER2, TNBC)",
"4. Explain the pathogenesis including BRCA1/2, ER, and HER2 pathways",
"5. Identify clinical features and diagnostic work-up",
"6. Apply TNM staging to determine prognosis",
"7. Outline management: surgery, chemotherapy, radiotherapy, targeted & hormone therapy",
"8. Discuss screening recommendations and prevention strategies",
]
tb = s.shapes.add_textbox(Inches(0.8), Inches(1.35), Inches(11.8), Inches(5.8))
tf = tb.text_frame
tf.word_wrap = True
for i, obj in enumerate(objectives):
p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
p.space_before = Pt(6)
run = p.add_run()
run.text = obj
run.font.size = Pt(17)
run.font.color.rgb = LIGHT_BLUE if i % 2 == 0 else WHITE
run.font.name = "Calibri"
bottom_bar(s)
slide_number(s, 2)
# ════════════════════════════════════════════════════
# SLIDE 3 — Epidemiology
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Epidemiology", 0.5, 0.22, 12, 0.75,
font_size=30, bold=True, color=WHITE)
# 3 stat boxes
stats = [
("2nd", "Leading cause of cancer\ndeaths in women worldwide"),
("~2.3M", "New cases globally\nper year (GLOBOCAN 2020)"),
("~15-20%", "of breast cancer cases are\nHER2-positive subtype"),
]
for i, (num, desc) in enumerate(stats):
x = 0.4 + i * 4.3
add_rect(s, x, 1.3, 3.8, 1.9, BG_MEDIUM)
add_rect(s, x, 1.3, 3.8, 0.08, ACCENT_PINK)
add_text(s, num, x, 1.45, 3.8, 0.9,
font_size=38, bold=True, color=ACCENT_PINK, align=PP_ALIGN.CENTER)
add_text(s, desc, x, 2.3, 3.8, 0.85,
font_size=14, color=WHITE, align=PP_ALIGN.CENTER)
# Key facts
add_rect(s, 0.4, 3.4, 12.5, 0.06, ACCENT_TEAL)
add_text(s, "Key Epidemiologic Facts", 0.5, 3.55, 12, 0.4,
font_size=18, bold=True, color=ACCENT_TEAL)
facts = [
u"\u2022 Lifetime risk in women: ~1 in 8 (12.5%) in high-income countries",
u"\u2022 Peak incidence in postmenopausal women (55-65 years)",
u"\u2022 Males account for <1% of all breast cancers",
u"\u2022 5-year survival >90% when detected early (Stage I), drops to ~28% at Stage IV",
u"\u2022 Incidence rising in developing countries due to westernized lifestyles",
]
tb = s.shapes.add_textbox(Inches(0.6), Inches(4.05), Inches(12.2), Inches(3))
tf = tb.text_frame; tf.word_wrap = True
for i, f in enumerate(facts):
p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
p.space_before = Pt(3)
run = p.add_run(); run.text = f
run.font.size = Pt(15); run.font.color.rgb = LIGHT_BLUE; run.font.name = "Calibri"
bottom_bar(s); slide_number(s, 3)
# ════════════════════════════════════════════════════
# SLIDE 4 — Risk Factors
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Risk Factors", 0.5, 0.22, 12, 0.75, font_size=30, bold=True, color=WHITE)
# Two columns
add_bullet_box(s, "Non-Modifiable Risk Factors", [
"Female sex (100x higher than males)",
"Increasing age (peak: 55-65 yrs)",
"BRCA1 / BRCA2 germline mutations (lifetime risk 45-85%)",
"Family history (1st-degree relative)",
"Previous breast cancer or atypical hyperplasia",
"Dense breast tissue on mammography",
"Early menarche (<12 yrs) / Late menopause (>55 yrs)",
], 0.3, 1.3, 6.1, 5.8, title_size=17, bullet_size=14)
add_bullet_box(s, "Modifiable Risk Factors", [
"Nulliparity or late first pregnancy (>30 yrs)",
"Hormone replacement therapy (HRT)",
"Oral contraceptive use",
"Alcohol consumption (dose-dependent)",
"Obesity (especially postmenopausal)",
"Sedentary lifestyle",
"Ionizing radiation exposure (prior chest RT)",
"Lactation is PROTECTIVE",
], 6.6, 1.3, 6.4, 5.8, title_size=17, bullet_size=14)
bottom_bar(s); slide_number(s, 4)
# ════════════════════════════════════════════════════
# SLIDE 5 — Anatomy & Spread
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Breast Anatomy & Routes of Spread", 0.5, 0.22, 12, 0.75,
font_size=30, bold=True, color=WHITE)
add_bullet_box(s, "Normal Anatomy (TDLU)", [
"Terminal Duct Lobular Unit (TDLU) = functional unit of the breast",
"5-15 lobes per breast, each draining via a major duct to nipple",
"Two epithelial layers: luminal (inner) + myoepithelial (outer)",
"Basement membrane separates epithelium from stroma",
"Most breast cancers arise from the TDLU",
], 0.3, 1.3, 6.2, 4.0, title_size=17, bullet_size=14)
add_bullet_box(s, "Lymphatic Drainage", [
"Axillary nodes (75%) — primary drainage; most important for staging",
"Internal mammary nodes — medial tumors",
"Supraclavicular nodes — advanced nodal spread",
"Sentinel lymph node biopsy (SLNB) is now standard for staging",
], 0.3, 5.45, 6.2, 1.9, title_size=17, bullet_size=14)
add_bullet_box(s, "Routes of Metastatic Spread", [
"Hematogenous: bone (most common), lung, liver, brain",
"Lymphatic: axillary, internal mammary, supraclavicular nodes",
"Bone mets: lytic (TNBC) or sclerotic pattern",
"Brain mets: more common in HER2+ and TNBC subtypes",
"Lobular carcinoma: serosal spread, GI tract (unique pattern)",
], 6.7, 1.3, 6.3, 4.0, title_size=17, bullet_size=14)
add_bullet_box(s, "Quadrant Distribution of Tumors", [
"Upper outer quadrant (UOQ): most common site (~50%)",
"Subareolar: second most common",
"Retroareolar involvement can cause nipple retraction",
], 6.7, 5.45, 6.3, 1.9, title_size=17, bullet_size=14)
bottom_bar(s); slide_number(s, 5)
# ════════════════════════════════════════════════════
# SLIDE 6 — Pathogenesis & Molecular Subtypes
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Molecular Subtypes of Breast Cancer", 0.5, 0.22, 12, 0.75,
font_size=30, bold=True, color=WHITE)
add_text(s, "Breast cancer is NOT a single disease — it is a family of related cancers defined by molecular characteristics (Robbins Pathology, 11e)",
0.5, 1.2, 12.3, 0.55, font_size=14, color=LIGHT_BLUE, italic=True)
headers = ["Feature", "Luminal\n(ER+/HER2-)", "HER2+", "TNBC\n(ER-/PR-/HER2-)"]
col_widths = [2.8, 2.8, 2.8, 2.8]
col_colors = [BG_MEDIUM, RGBColor(0x0D,0x42,0x2E), RGBColor(0x1A,0x2F,0x5C), RGBColor(0x4A,0x12,0x30)]
header_colors = [ACCENT_TEAL, RGBColor(0x00,0xCC,0x88), ACCENT_PINK, RGBColor(0xFF,0x66,0xAA)]
x_start = 0.35
y_header = 1.85
for i, (h, cw) in enumerate(zip(headers, col_widths)):
x = x_start + sum(col_widths[:i]) + i*0.06
add_rect(s, x, y_header, cw, 0.7, col_colors[i])
add_text(s, h, x, y_header, cw, 0.7, font_size=14, bold=True,
color=header_colors[i], align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
rows = [
["% of cases", "40-55%", "~10%", "~20%"],
["Key gene", "PIK3CA, ESR1", "ERBB2 amplified", "TP53, PIK3CA"],
["Grade", "Grade 1-2", "Grade 2-3", "Grade 3"],
["Prognosis", "Best (if low grade)", "Good with targeted Rx", "Aggressive"],
["Target therapy", "Tamoxifen / AIs", "Trastuzumab / Pertuzumab","No target (yet)"],
["Hereditary link", "BRCA2, CDH1", "None specific", "BRCA1"],
]
row_bg = [BG_MEDIUM, RGBColor(0x0E,0x2F,0x48)]
for r, row in enumerate(rows):
for i, (cell, cw) in enumerate(zip(row, col_widths)):
x = x_start + sum(col_widths[:i]) + i*0.06
y = y_header + 0.7 + r * 0.72
bg = col_colors[i] if r % 2 == 0 else RGBColor(
min(col_colors[i].rgb >> 16, 255),
min((col_colors[i].rgb >> 8) & 0xFF, 255),
min(col_colors[i].rgb & 0xFF, 255)
)
add_rect(s, x, y, cw, 0.68, bg)
fc = header_colors[i] if i == 0 else WHITE
add_text(s, cell, x+0.05, y+0.02, cw-0.1, 0.65,
font_size=13, color=fc, align=PP_ALIGN.CENTER,
v_anchor=MSO_ANCHOR.MIDDLE)
bottom_bar(s); slide_number(s, 6)
# ════════════════════════════════════════════════════
# SLIDE 7 — Pathogenesis (BRCA & Genetics)
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Pathogenesis: Genetics & Molecular Mechanisms", 0.5, 0.22, 12, 0.75,
font_size=28, bold=True, color=WHITE)
add_bullet_box(s, "Familial (Hereditary) Breast Cancer ~15%", [
"BRCA1 (chr 17q): DNA repair (HR pathway). Lifetime risk 45-85%. Assoc. with TNBC.",
"BRCA2 (chr 13q): DNA repair. Risk ~45%. Assoc. with Luminal + male breast cancer.",
"TP53 mutations: Li-Fraumeni syndrome — rare, early onset",
"CDH1 mutations: Hereditary lobular breast cancer + gastric cancer",
"PTEN (Cowden syndrome), STK11 (Peutz-Jeghers), ATM, CHEK2: moderate risk genes",
"Genetic counselling + BRCA testing for high-risk families",
], 0.3, 1.3, 6.2, 4.5, title_size=17, bullet_size=13)
add_bullet_box(s, "Sporadic (Non-Hereditary) ~85%", [
"Somatic mutations accumulate over lifetime with hormonal exposure",
"Estrogen receptor (ER) pathway: ER drives proliferation in luminal subtypes",
"HER2 (ERBB2) amplification: present on chr 17 — drives aggressive growth",
"PIK3CA mutations: most common in luminal cancers; activates PI3K/AKT/mTOR",
"TP53 loss: key in HER2+ and TNBC subtypes",
"Epigenetic silencing: BRCA1 promoter methylation in sporadic TNBC",
], 6.7, 1.3, 6.3, 4.5, title_size=17, bullet_size=13)
add_rect(s, 0.3, 6.0, 12.7, 1.3, RGBColor(0x1A,0x3A,0x55))
add_text(s, "Key concept: The 'two-hit hypothesis' (Knudson) applies to BRCA carriers — one allele is inherited as germline mutation; the second hit occurs somatically in breast epithelium, triggering carcinogenesis.",
0.5, 6.05, 12.3, 1.2, font_size=14, color=YELLOW_HL, italic=True)
bottom_bar(s); slide_number(s, 7)
# ════════════════════════════════════════════════════
# SLIDE 8 — Histological Types
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Histological Classification", 0.5, 0.22, 12, 0.75,
font_size=30, bold=True, color=WHITE)
add_bullet_box(s, "Non-Invasive (In Situ) Carcinoma", [
"DCIS (Ductal Carcinoma In Situ): confined within ducts; no basement membrane breach",
"DCIS subtypes: comedo (central necrosis, high grade), cribriform, solid, micropapillary",
"LCIS (Lobular Carcinoma In Situ): marker of increased bilateral risk; often incidental",
"Key: In situ = no metastatic potential unless it invades",
], 0.3, 1.3, 6.2, 3.0)
add_bullet_box(s, "Invasive (Infiltrating) Carcinoma", [
"Invasive Carcinoma NST (formerly IDC): ~70-80% of all breast cancers",
"Invasive Lobular Carcinoma (ILC): ~10-15%; loss of E-cadherin (CDH1); 'Indian file' pattern",
"Special types (better prognosis): Tubular, Cribriform, Mucinous (colloid), Papillary",
"Inflammatory Breast Cancer: dermal lymphatic invasion; peau d'orange; poor prognosis",
"Paget's disease of nipple: DCIS/IDC with Paget cells in nipple epidermis",
], 6.7, 1.3, 6.3, 3.0)
add_bullet_box(s, "Grading (Nottingham/Elston-Ellis System)", [
"Grade 1 (Score 3-5): Well differentiated — tubule formation, mild pleomorphism, low mitoses",
"Grade 2 (Score 6-7): Moderately differentiated",
"Grade 3 (Score 8-9): Poorly differentiated — high mitoses, marked pleomorphism",
"Grade correlates with prognosis and subtype: TNBC/HER2 = usually Grade 3",
], 0.3, 4.55, 12.7, 2.75)
bottom_bar(s); slide_number(s, 8)
# ════════════════════════════════════════════════════
# SLIDE 9 — Clinical Features & Diagnosis
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Clinical Features & Diagnostic Work-up", 0.5, 0.22, 12, 0.75,
font_size=30, bold=True, color=WHITE)
add_bullet_box(s, "Clinical Features", [
"Painless, hard, irregular lump (most common presentation)",
"Skin changes: dimpling, peau d'orange (lymphedema), erythema",
"Nipple changes: retraction, bloody/serous discharge, Paget's disease",
"Axillary lymphadenopathy",
"Arm edema (advanced local disease)",
"Symptoms of metastasis: bone pain, SOB, jaundice, headache",
], 0.3, 1.3, 6.2, 4.2)
add_bullet_box(s, "Diagnostic Work-up: Triple Assessment", [
"1. CLINICAL: history + physical examination",
"2. RADIOLOGICAL:",
" - Mammography: spiculated mass, microcalcifications (screening + Dx)",
" - Ultrasound: distinguishes cystic vs solid; guides biopsy",
" - MRI breast: extent of disease; lobular carcinoma; high-risk screening",
"3. PATHOLOGICAL: Core needle biopsy (gold standard)",
" - Reports: histological type, grade, ER/PR/HER2/Ki-67",
], 6.7, 1.3, 6.3, 4.2)
add_rect(s, 0.3, 5.7, 12.7, 1.55, RGBColor(0x1A,0x3A,0x55))
add_text(s, "Triple Assessment Rule: All 3 must be benign to exclude cancer. If ANY ONE is suspicious -> proceed to biopsy or surgery.",
0.5, 5.75, 12.3, 0.55, font_size=15, bold=True, color=ACCENT_PINK)
add_text(s, "ER / PR / HER2 / Ki-67 (biomarker panel) is MANDATORY on every invasive cancer — it determines subtype and treatment.",
0.5, 6.3, 12.3, 0.8, font_size=14, color=YELLOW_HL)
bottom_bar(s); slide_number(s, 9)
# ════════════════════════════════════════════════════
# SLIDE 10 — TNM Staging
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Staging: TNM & Prognostic Groups (AJCC 8th Ed.)", 0.5, 0.22, 12, 0.75,
font_size=28, bold=True, color=WHITE)
# T, N, M boxes
for col, (title, items, hc) in enumerate([
("T - Primary Tumor", [
"TX: cannot assess", "T0: no evidence",
"Tis: In situ (DCIS/LCIS/Paget's)",
"T1: ≤20 mm (T1a <5mm, T1b 5-10, T1c 10-20)",
"T2: 20-50 mm",
"T3: >50 mm",
"T4: any size + chest wall / skin (T4d = inflammatory)",
], ACCENT_TEAL),
("N - Regional Nodes", [
"NX: cannot assess",
"N0: no nodal metastasis",
"N1: 1-3 axillary nodes (movable)",
"N2: 4-9 axillary nodes OR internal mammary",
"N3: ≥10 axillary OR infra/supraclavicular",
"pN0(sn): sentinel node negative",
"N3 = Stage IIIC regardless of T",
], ACCENT_PINK),
("M - Distant Metastasis", [
"M0: no distant metastasis",
"M1: distant metastasis",
"",
"Common sites:",
" Bone (most common ~70%)",
" Lung and pleura",
" Liver",
" Brain (HER2+, TNBC)",
], YELLOW_HL),
]):
x = 0.3 + col * 4.35
add_rect(s, x, 1.3, 4.1, 4.6, BG_MEDIUM)
add_rect(s, x, 1.3, 4.1, 0.08, hc)
add_text(s, title, x+0.1, 1.38, 3.9, 0.5, font_size=15, bold=True, color=hc)
tb = s.shapes.add_textbox(Inches(x+0.15), Inches(1.95), Inches(3.8), Inches(3.8))
tf = tb.text_frame; tf.word_wrap = True
for i, item in enumerate(items):
p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
p.space_before = Pt(3)
run = p.add_run(); run.text = item
run.font.size = Pt(13); run.font.color.rgb = LIGHT_BLUE; run.font.name = "Calibri"
# Stage summary
add_rect(s, 0.3, 6.1, 12.7, 1.2, RGBColor(0x1A,0x3A,0x55))
stage_summary = [
("Stage 0", "Tis N0 M0", "DCIS/LCIS"),
("Stage I", "T1 N0 M0", ">90% 5yr survival"),
("Stage II", "T1N1 / T2-3N0", "~70-80% 5yr"),
("Stage III", "T3-4 / N2-3", "~50-60% 5yr"),
("Stage IV", "Any T, Any N, M1", "~28% 5yr"),
]
for i, (stage, tnm, note) in enumerate(stage_summary):
x = 0.5 + i * 2.5
add_text(s, stage, x, 6.1, 2.4, 0.45, font_size=13, bold=True, color=ACCENT_PINK, align=PP_ALIGN.CENTER)
add_text(s, tnm, x, 6.55, 2.4, 0.35, font_size=11, color=WHITE, align=PP_ALIGN.CENTER)
add_text(s, note, x, 6.9, 2.4, 0.35, font_size=11, color=ACCENT_TEAL, align=PP_ALIGN.CENTER, italic=True)
bottom_bar(s); slide_number(s, 10)
# ════════════════════════════════════════════════════
# SLIDE 11 — Surgery
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Surgical Management", 0.5, 0.22, 12, 0.75,
font_size=30, bold=True, color=WHITE)
add_bullet_box(s, "Breast-Conserving Surgery (BCS) — Preferred", [
"Lumpectomy / wide local excision + sentinel lymph node biopsy (SLNB)",
"MUST be followed by adjuvant radiotherapy to the breast",
"Equivalent survival to mastectomy for Stage I-II (proven in landmark NSABP-B06 trial)",
"Contraindications: large tumor:breast ratio, multicentric disease, prior RT, BRCA mutation",
], 0.3, 1.3, 6.2, 3.4)
add_bullet_box(s, "Mastectomy", [
"Simple (total) mastectomy: removes breast tissue ± skin/nipple",
"Modified radical mastectomy (MRM): breast + axillary nodes (Levels I-III)",
"Radical (Halsted): breast + pec muscles + axilla — now rarely performed",
"Skin-sparing / nipple-sparing mastectomy: oncologically safe; better cosmesis",
"Prophylactic bilateral mastectomy: BRCA1/2 carriers (reduces risk by ~95%)",
], 6.7, 1.3, 6.3, 3.4)
add_bullet_box(s, "Axillary Management", [
"Sentinel Lymph Node Biopsy (SLNB): standard for clinically node-negative patients",
"Axillary Lymph Node Dissection (ALND): positive sentinel node OR clinical N2-N3",
"SLNB technique: blue dye + technetium-99m radiocolloid injection -> gamma probe",
"Complications of ALND: lymphoedema, nerve injury, shoulder stiffness",
], 0.3, 4.85, 12.7, 2.5)
bottom_bar(s); slide_number(s, 11)
# ════════════════════════════════════════════════════
# SLIDE 12 — Systemic Therapy
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Systemic Therapy", 0.5, 0.22, 12, 0.75,
font_size=30, bold=True, color=WHITE)
add_bullet_box(s, "Hormone Therapy (ER/PR+)", [
"Tamoxifen: SERM; blocks ER; 5-10 yrs; premenopausal + postmenopausal",
"Aromatase Inhibitors (AIs): anastrozole, letrozole, exemestane; postmenopausal only",
"CDK4/6 inhibitors (palbociclib, ribociclib): added to AIs in advanced ER+ disease",
"Fulvestrant: ER antagonist/degrader; advanced ER+ disease",
"Reduces recurrence by ~40-50% in ER+ tumors",
], 0.3, 1.3, 6.2, 3.5)
add_bullet_box(s, "HER2-Targeted Therapy", [
"Trastuzumab (Herceptin): anti-HER2 monoclonal Ab; adjuvant + metastatic",
"Pertuzumab: blocks HER2 dimerization; used with trastuzumab (dual blockade)",
"T-DM1 (ado-trastuzumab emtansine): trastuzumab + chemotherapy conjugate",
"Tucatinib + T-DXd (trastuzumab deruxtecan): newer agents for HER2+ MBC",
"Cardiac monitoring required — cardiotoxicity risk (LVEF monitoring)",
], 6.7, 1.3, 6.3, 3.5)
add_bullet_box(s, "Chemotherapy Regimens", [
"Anthracyclines (doxorubicin, epirubicin) + Taxanes (paclitaxel, docetaxel) = backbone",
"AC-T (or EC-T): standard adjuvant regimen for node+ or high-risk node- disease",
"Neoadjuvant chemo: given pre-surgery to downstage tumor; allows BCS in large tumors",
"Capecitabine: oral, for residual disease after neoadjuvant (CREATE-X trial)",
"TNBC: PARP inhibitors (olaparib, talazoparib) for BRCA-mutated metastatic TNBC",
], 0.3, 5.0, 12.7, 2.35)
bottom_bar(s); slide_number(s, 12)
# ════════════════════════════════════════════════════
# SLIDE 13 — Radiotherapy
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Radiotherapy in Breast Cancer", 0.5, 0.22, 12, 0.75,
font_size=30, bold=True, color=WHITE)
add_bullet_box(s, "Indications for Radiotherapy", [
"After BCS: MANDATORY whole breast RT to the remaining breast tissue",
"After mastectomy: Post-mastectomy RT (PMRT) if T3/T4, ≥4 positive nodes, +ve margins",
"Regional nodal irradiation: for N2-N3 disease (axilla, IMC, supraclavicular)",
"Palliative: bone mets (pain relief), brain mets (WBRT or stereotactic)",
"Locoregional recurrence treatment",
], 0.3, 1.3, 6.2, 4.0)
add_bullet_box(s, "Techniques & Doses", [
"Standard: 40-50 Gy in 15-25 fractions (whole breast)",
"Boost dose: +10-16 Gy to tumor bed — reduces local recurrence in young patients",
"Hypofractionation: 40 Gy in 15 fractions (FAST-Forward trial) — equally effective",
"Intraoperative RT (IORT): single dose at time of surgery; selected low-risk patients",
"Proton therapy: reduces cardiac/lung dose; useful for left-sided tumors",
], 6.7, 1.3, 6.3, 4.0)
add_bullet_box(s, "Side Effects", [
"Acute: erythema, fatigue, breast edema, skin desquamation",
"Late: fibrosis, lymphedema, rib fracture, radiation pneumonitis",
"Cardiac toxicity: left breast RT; minimized with DIBH (deep inspiration breath-hold) technique",
"Secondary malignancy: angiosarcoma of irradiated field (rare, latency >10 yrs)",
], 0.3, 5.5, 12.7, 1.75)
bottom_bar(s); slide_number(s, 13)
# ════════════════════════════════════════════════════
# SLIDE 14 — Screening & Prevention
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
pink_bar(s, 0, 0.18)
add_rect(s, 0, 0.18, 13.333, 0.9, BG_MEDIUM)
add_text(s, "Screening, Prevention & Prognosis", 0.5, 0.22, 12, 0.75,
font_size=30, bold=True, color=WHITE)
add_bullet_box(s, "Screening Recommendations", [
"Mammography: annual or biennial from age 40-50 (varies by guideline)",
"ACS: annual mammogram from age 40; MRI + mammogram from age 30 for high-risk",
"UK NHS: 3-yearly mammography ages 50-70",
"Clinical breast examination: part of annual check-up in most guidelines",
"Breast self-examination: encouraged for awareness (not proven to reduce mortality alone)",
"High-risk screening: annual MRI for BRCA carriers / family history / prior chest RT",
], 0.3, 1.3, 6.2, 4.3)
add_bullet_box(s, "Chemoprevention & Risk Reduction", [
"Tamoxifen: 5 yrs reduces risk ~50% in high-risk premenopausal women (NSABP P-1)",
"Raloxifene: postmenopausal; similar efficacy to tamoxifen; less uterine cancer risk",
"Aromatase inhibitors (anastrozole, exemestane): postmenopausal high-risk women",
"Prophylactic mastectomy: BRCA1/2 carriers (reduces risk ~95%)",
"Prophylactic oophorectomy: reduces estrogen; indicated in BRCA1 carriers",
"Lifestyle: weight control, exercise, limit alcohol, breastfeeding",
], 6.7, 1.3, 6.3, 4.3)
add_rect(s, 0.3, 5.8, 12.7, 1.5, RGBColor(0x1A,0x3A,0x55))
add_text(s, "Prognostic Factors", 0.5, 5.85, 12, 0.4, font_size=16, bold=True, color=ACCENT_TEAL)
add_text(s, u"Favorable: small size, node-negative, ER+, low grade, low Ki-67 | "
u"Unfavorable: large size, node+, ER-, HER2+, TNBC, high grade, lymphovascular invasion, young age",
0.5, 6.3, 12.3, 0.9, font_size=14, color=LIGHT_BLUE)
bottom_bar(s); slide_number(s, 14)
# ════════════════════════════════════════════════════
# SLIDE 15 — Summary & Key Takeaways
# ════════════════════════════════════════════════════
s = blank_slide(prs)
fill_bg(s, BG_DARK)
add_rect(s, 0, 0, 13.333, 0.25, ACCENT_PINK)
add_rect(s, 0, 0.25, 13.333, 0.85, BG_MEDIUM)
add_text(s, "Summary & Key Takeaways", 0.5, 0.28, 12, 0.75,
font_size=30, bold=True, color=WHITE)
add_rect(s, 11.8, 0, 1.533, 7.5, RGBColor(0x17, 0x35, 0x5C))
add_rect(s, 12.2, 0, 0.3, 7.5, ACCENT_PINK)
takeaways = [
("1", "Breast cancer is the 2nd most common cause of cancer death in women; early detection saves lives."),
("2", "It is a heterogeneous disease — defined by molecular subtypes (Luminal, HER2+, TNBC) not just histology."),
("3", "BRCA1/2 mutations are the most important hereditary risk factors; genetic counselling is recommended for high-risk families."),
("4", "Triple Assessment (clinical + imaging + biopsy) is the gold standard for diagnosis."),
("5", "TNM staging (AJCC 8th Ed.) now incorporates biomarkers (ER, PR, HER2, grade) alongside anatomic factors."),
("6", "Breast-conserving surgery + radiotherapy = mastectomy in survival; patient choice matters."),
("7", "Treatment is subtype-driven: hormone therapy for ER+, trastuzumab for HER2+, PARP inhibitors for BRCA-mutated TNBC."),
("8", "Chemoprevention (tamoxifen, AIs) and prophylactic surgery can significantly reduce risk in high-risk individuals."),
]
for i, (num, text) in enumerate(takeaways):
row = i // 2
col = i % 2
x = 0.3 + col * 6.45
y = 1.25 + row * 1.42
add_rect(s, x, y, 6.1, 1.3, BG_MEDIUM)
add_rect(s, x, y, 0.45, 1.3, ACCENT_PINK)
add_text(s, num, x, y, 0.45, 1.3, font_size=20, bold=True,
color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
add_text(s, text, x+0.5, y+0.08, 5.55, 1.18,
font_size=13, color=LIGHT_BLUE, word_wrap=True)
add_text(s, "Thank you | Questions Welcome", 0.5, 7.05, 11, 0.35,
font_size=14, color=ACCENT_PINK, align=PP_ALIGN.CENTER, italic=True)
bottom_bar(s)
slide_number(s, 15)
# ── Save ──────────────────────────────────────────────────────────────────────
out = "/tmp/workspace/breast-cancer-ppt/Breast_Cancer_Oncology.pptx"
buf = BytesIO()
prs.save(buf)
with open(out, "wb") as f:
f.write(buf.getvalue())
print(f"Saved: {out}")
print(f"Slides: {len(prs.slides)}")
cd /tmp/workspace/breast-cancer-ppt && python create_pptx.py 2>&1
~/breast-cancer-ppt/create_pptx.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/breast-cancer-ppt/create_pptx.py'
cd /tmp/workspace/breast-cancer-ppt && python create_pptx.py 2>&1
Breast Cancer Oncology
Presentation · PPTX
| # | Slide Title |
|---|---|
| 1 | Title Slide — branded with pink ribbon accent |
| 2 | Learning Objectives (8 objectives) |
| 3 | Epidemiology — stat boxes + key facts |
| 4 | Risk Factors — modifiable vs non-modifiable columns |
| 5 | Breast Anatomy, Lymphatic Drainage & Routes of Spread |
| 6 | Molecular Subtypes — comparison table (Luminal / HER2 / TNBC) |
| 7 | Pathogenesis — BRCA1/2, PI3K/AKT, TP53, two-hit hypothesis |
| 8 | Histological Classification — DCIS, LCIS, IDC, ILC, grading |
| 9 | Clinical Features & Triple Assessment Diagnostic Work-up |
| 10 | TNM Staging (AJCC 8th Ed.) with survival data |
| 11 | Surgical Management — BCS, mastectomy, axillary surgery |
| 12 | Systemic Therapy — hormone therapy, HER2-targeted, chemotherapy |
| 13 | Radiotherapy — indications, techniques, side effects |
| 14 | Screening, Prevention & Prognostic Factors |
| 15 | Summary & 8 Key Takeaways |