Make a ppt of 25 slides on post menopausal bleeding with recent updates with pictures and beautiful poetic quotes

Reading File
Reading File
Finding Sources
Finding Sources
Searching PubMed

postmenopausal bleeding AND endometrial cancer

Searching the Web

postmenopausal bleeding guideline 2025 endometrial cancer ACOG ultrasound biopsy

Reading File
Reading File
Searching Images

postmenopausal bleeding transvaginal ultrasound endometrial thickness clinical image diagram

Searching Images

endometrial cancer hysteroscopy ultrasound pathology diagram gynecology

Reading Web Page

https://www.acog.org/news/news-releases/2026/04/acog-publish…

Generating Image

Medical illustration for a teaching presentation: mature woman in a clinical gynecology consultation, respectful and non-identifiable, clinician reviewing a pelvic ultrasound image, conveying timely evaluation after menopause

Generating Image

Medical educational illustration of the uterus and endometrium, showing a transvaginal ultrasound probe measuring endometrial thickness, clear anatomy, suitable for postgraduate gynecology teaching

Browsing Directory

~/

Running Command

mkdir -p "/tmp/workspace/postmenopausal-bleeding-ppt/assets" "/tmp/workspace/postmenopausal-bleeding-ppt/src" "/tmp/workspace/postmenopausal-bleeding-ppt/output" && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/image-gen/ed10c68764054c64add1ab1ffbd7c32c.png" "https://cdn.orris.care/image-gen/1447b22168e34524a72bbd88209675fb.png" > "/tmp/workspace/postmenopausal-bleeding-ppt/assets/fetched_images.json"

Writing File

~/postmenopausal-bleeding-ppt/src/create_deck.py

import os, json, base64
from io import BytesIO
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.enum.text import MSO_AUTO_SIZE

OUT = '/tmp/workspace/postmenopausal-bleeding-ppt/output/Postmenopausal_Bleeding_Recent_Updates.pptx'
ASSET = '/tmp/workspace/postmenopausal-bleeding-ppt/assets'

# Palette
NAVY = RGBColor(18, 42, 64); TEAL = RGBColor(20, 122, 130); MINT = RGBColor(220, 241, 237)
CORAL = RGBColor(216, 94, 89); GOLD = RGBColor(207, 159, 74); CREAM = RGBColor(250, 248, 242)
INK = RGBColor(35, 48, 57); GRAY = RGBColor(100, 112, 120); PALE = RGBColor(239, 245, 244)
WHITE = RGBColor(255,255,255); RED = RGBColor(172, 49, 58)

prs = Presentation(); prs.slide_width = Inches(13.333); prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]

# Load generated images
with open(os.path.join(ASSET, 'fetched_images.json')) as f: data = json.load(f)
imgs=[]
for d in data:
    b64=d.get('base64')
    if b64:
        imgs.append(BytesIO(base64.b64decode(b64.split(',',1)[1])))
hero_img, us_img = imgs[0], imgs[1]

def bg(slide, color=CREAM):
    slide.background.fill.solid(); slide.background.fill.fore_color.rgb=color

def rect(slide,x,y,w,h,fill, radius=False, line=None):
    sh=slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE, Inches(x), Inches(y), Inches(w), Inches(h))
    sh.fill.solid(); sh.fill.fore_color.rgb=fill
    sh.line.color.rgb = fill if line is None else line
    if radius: sh.adjustments[0]=0.12
    return sh

def line(slide,x1,y1,x2,y2,color=TEAL,width=1.8):
    c=slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, Inches(x1), Inches(y1), Inches(x2), Inches(y2)); c.line.color.rgb=color; c.line.width=Pt(width); return c

def text(slide, txt,x,y,w,h,size=20,color=INK,bold=False,font='Aptos',align=PP_ALIGN.LEFT,italic=False):
    tb=slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)); tf=tb.text_frame
    tf.clear(); tf.word_wrap=True; tf.margin_left=0; tf.margin_right=0; tf.margin_top=0; tf.margin_bottom=0; tf.vertical_anchor=MSO_ANCHOR.MIDDLE
    p=tf.paragraphs[0]; p.alignment=align; r=p.add_run(); r.text=txt; r.font.name=font; r.font.size=Pt(size); r.font.bold=bold; r.font.italic=italic; r.font.color.rgb=color
    return tb

def title(slide, n, heading, sub=None):
    text(slide, f'{n:02d}', .52,.32,.55,.25,10,TEAL,True,align=PP_ALIGN.CENTER)
    rect(slide,.54,.66,.48,.05,CORAL)
    text(slide, heading,.55,.78,11.9,.55,27,NAVY,True)
    if sub: text(slide,sub,.56,1.35,11.7,.3,11,GRAY)
    text(slide,'POSTMENOPAUSAL BLEEDING  |  CLINICAL TEACHING DECK',.56,7.13,7,.18,7,GRAY,True)

def quote(slide, q):
    text(slide, '“'+q+'”', .75,6.63,11.8,.28,12,TEAL,False,italic=True,align=PP_ALIGN.CENTER)

def bullet_list(slide, items, x,y,w,h, size=17, color=INK, accent=TEAL, gap=0.12):
    for i,item in enumerate(items):
        yy=y+i*((h)/(max(len(items),1)))
        rect(slide,x,yy+.11,.12,.12,accent,True)
        text(slide,item,x+.25,yy,w-.25,(h/max(len(items),1))-.03,size,color)

def pill(slide,label,x,y,w,fill=TEAL):
    rect(slide,x,y,w,.34,fill,True); text(slide,label,x+.08,y+.04,w-.16,.24,10,WHITE,True,align=PP_ALIGN.CENTER)

def photo(slide, img,x,y,w,h):
    slide.shapes.add_picture(img, Inches(x), Inches(y), width=Inches(w), height=Inches(h))
    # border
    sh=slide.shapes.add_shape(MSO_SHAPE.RECTANGLE,Inches(x),Inches(y),Inches(w),Inches(h)); sh.fill.background(); sh.line.color.rgb=WHITE; sh.line.width=Pt(1.2)

def citation(slide, s): text(slide,s,.6,6.98,12.0,.13,6.5,GRAY)

def card(slide,head,body,x,y,w,h,accent=TEAL):
    rect(slide,x,y,w,h,WHITE,True)
    rect(slide,x,y,.08,h,accent)
    text(slide,head,x+.25,y+.18,w-.42,.3,15,NAVY,True)
    text(slide,body,x+.25,y+.62,w-.42,h-.72,11,INK)

def add_notes(slide, lines):
    notes = slide.notes_slide.notes_text_frame
    notes.text = '\n'.join(lines)

# 1
s=prs.slides.add_slide(blank); bg(s,NAVY); rect(s,0,0,13.333,7.5,NAVY)
photo(s,hero_img,7.65,0,5.683,7.5); rect(s,7.65,0,5.683,7.5,NAVY); s.shapes[-1].fill.transparency=55
text(s,'POSTMENOPAUSAL\nBLEEDING',.75,1.15,6.5,1.55,33,WHITE,True)
text(s,'A prompt, patient-centred path from symptom to diagnosis',.78,2.95,5.9,.55,17,RGBColor(210,238,235))
rect(s,.78,3.78,1.2,.06,CORAL); text(s,'Clinical updates • 2026',.78,4.05,3,.35,13,WHITE,True)
text(s,'“Every small signal deserves a listening heart.”',.78,6.2,5.9,.45,16,RGBColor(228,205,153),italic=True)
citation(s,'Educational use only. Clinical decisions should follow local protocols and specialist guidance.')
#2
s=prs.slides.add_slide(blank); bg(s); title(s,2,'Why this symptom matters','A bleeding episode may be brief. The clinical obligation is not.')
text(s,'PMB',.7,2.0,2.1,1.15,50,TEAL,True,align=PP_ALIGN.CENTER); text(s,'= bleeding ≥12 months after final menstrual period',.8,3.15,2,1.0,14,INK,align=PP_ALIGN.CENTER)
card(s,'Not “just spotting”','Pink, brown, postcoital, or blood-stained discharge all warrant assessment.',3.25,2.0,2.8,2.3,CORAL)
card(s,'Cancer must be excluded','Endometrial carcinoma is the key diagnosis not to miss. Cervical and other genital cancers also matter.',6.25,2.0,2.8,2.3,TEAL)
card(s,'Source may be non-uterine','Vulva, vagina, cervix, urethra, rectum, and medication-related bleeding can mimic uterine bleeding.',9.25,2.0,2.8,2.3,GOLD)
quote(s,'A quiet symptom can carry an urgent question.')
citation(s,'Berek & Novak’s Gynecology, 16e, Postmenopausal age group, pp. 479-480.')
#3
s=prs.slides.add_slide(blank); bg(s); title(s,3,'Learning objectives')
objs=['Define PMB and identify urgent presentations','Build a structured differential diagnosis','Use history, examination, TVUS and sampling appropriately','Recognise when hysteroscopy is required','Apply 2026 update: tissue sampling is now part of initial evaluation for most patients']
for i,o in enumerate(objs):
    y=1.85+i*.76; rect(s,.9,y,.46,.46,TEAL if i<4 else CORAL,True); text(s,str(i+1),.9,y+.06,.46,.28,14,WHITE,True,align=PP_ALIGN.CENTER); text(s,o,1.55,y-.02,10.6,.52,18,INK, i==4)
quote(s,'Knowledge becomes care when it changes the next question we ask.')
#4 definition
s=prs.slides.add_slide(blank); bg(s); title(s,4,'Definition and epidemiology')
rect(s,.7,1.9,3.55,3.65,PALE,True); text(s,'Definition',.98,2.18,2.8,.32,18,NAVY,True); text(s,'Any vaginal bleeding occurring after 12 months of amenorrhoea in a woman not using cyclic hormone therapy.',.98,2.78,2.9,1.0,17,INK)
text(s,'Clinical framing',.98,4.35,2.2,.3,14,TEAL,True); text(s,'Confirm the bleeding source before assuming it is uterine.',.98,4.78,2.85,.5,13,GRAY)
for n,lab,detail,x,c in [('>90%','presentation','of endometrial cancers present with vaginal bleeding',4.8,CORAL),('10-20%','malignancy','reported range among PMB presentations',7.5,GOLD),('4 mm','legacy TVUS','threshold from prior ACOG pathway',10.2,TEAL)]:
    rect(s,x,2.1,2.1,2.7,WHITE,True); text(s,n,x+.1,2.55,1.9,.55,28,c,True,align=PP_ALIGN.CENTER); text(s,lab,x+.1,3.2,1.9,.27,13,NAVY,True,align=PP_ALIGN.CENTER); text(s,detail,x+.18,3.75,1.72,.48,9,GRAY,align=PP_ALIGN.CENTER)
quote(s,'Numbers guide the hand; attention guides the heart.')
citation(s,'ACOG Committee Opinion 734 (reaffirmed 2023); Berek & Novak’s Gynecology, 16e.')
#5 causes
s=prs.slides.add_slide(blank); bg(s); title(s,5,'Differential diagnosis: think in compartments')
cols=[('Endometrial','Atrophy\nPolyp\nHyperplasia / EIN\nCarcinoma',TEAL),('Cervix & vagina','Atrophic vaginitis\nCervical polyp\nCervicitis\nCervical / vaginal cancer',CORAL),('Beyond genital tract','Urethral caruncle\nRectal bleeding\nTrauma\nAnticoagulants / systemic causes',GOLD)]
for i,(h,b,c) in enumerate(cols): card(s,h,b,.7+i*4.18,1.95,3.68,3.2,c)
text(s,'Do not forget ovarian oestrogen-secreting tumours and uterine sarcoma in selected clinical contexts.',.75,5.55,11.6,.35,13,RED,True,align=PP_ALIGN.CENTER)
quote(s,'The diagnosis begins where assumptions end.')
citation(s,'Berek & Novak’s Gynecology, 16e, Table 10-13; clinical synthesis.')
#6 etiologies chart
s=prs.slides.add_slide(blank); bg(s); title(s,6,'Common aetiologies: a useful mental model','Approximate proportions vary by population and referral setting.')
data=[('Exogenous estrogens',30,TEAL),('Atrophy',30,RGBColor(80,170,160)),('Endometrial cancer',15,CORAL),('Polyps',10,GOLD),('Hyperplasia',5,RGBColor(122,112,182)),('Other',10,GRAY)]
for i,(lab,val,c) in enumerate(data):
 y=1.75+i*.63; text(s,lab,.85,y,2.4,.28,13,INK,True); rect(s,3.15,y+.03,7.5*(val/30),.27,c,True); text(s,f'{val}%',10.9,y,1,.28,13,c,True)
text(s,'Teaching point',.9,5.8,2,.3,14,NAVY,True); text(s,'Atrophy is common, but prevalence should never become permission to skip evaluation.',.9,6.18,10.7,.28,15,INK)
citation(s,'Berek & Novak’s Gynecology, 16e, Table 10-13. Percentages are approximate and not a rule-out tool.')
#7 risk
s=prs.slides.add_slide(blank); bg(s); title(s,7,'Risk stratification: raise the index of suspicion')
risk=['Increasing age','Obesity','Unopposed oestrogen exposure','Type 2 diabetes / PCOS history','Nulliparity, late menopause','Lynch syndrome or family history','Tamoxifen use','Atypical glandular cells on cytology']
for i,r in enumerate(risk):
 x=.8+(i%2)*6.1; y=1.8+(i//2)*.88; rect(s,x,y,5.45,.62,WHITE,True); rect(s,x,y,.12,.62,CORAL if i in [1,2,5,6] else TEAL); text(s,r,x+.28,y+.14,4.9,.28,16,INK)
quote(s,'Risk factors are not verdicts; they are reasons to look carefully.')
citation(s,'ACOG Committee Opinion 734; ACOG Endometrial Cancer FAQ.')
#8 history
s=prs.slides.add_slide(blank); bg(s); title(s,8,'History: make the bleeding story precise')
left=['Timing: first episode, recurrent, persistent','Character: spotting, fresh blood, discharge, postcoital','Source clues: urinary, rectal, vulval trauma','Associated symptoms: pain, weight loss, discharge','Medication: MHT, tamoxifen, anticoagulants']
right=['Menopause and hormone regimen','Prior biopsy, polyps, abnormal cytology','Cancer risk factors and family history','Cervical screening status','Functional status, preferences, procedural tolerability']
card(s,'Ask', '\n'.join(left),.75,1.75,5.6,3.9,TEAL); card(s,'Contextualise', '\n'.join(right),6.95,1.75,5.6,3.9,CORAL)
quote(s,'The detail in a story can be the door to an early diagnosis.')
#9 exam
s=prs.slides.add_slide(blank); bg(s); title(s,9,'Examination: confirm the source')
steps=[('1','General','Anaemia, weight loss, abdominal mass, nodes'),('2','External','Vulva, fissures, lesions, urethral caruncle'),('3','Speculum','Vaginal atrophy, trauma, cervix, blood from os'),('4','Bimanual','Uterine size, adnexal mass, pelvic tenderness')]
for i,(num,h,b) in enumerate(steps):
 x=.75+i*3.1; rect(s,x,2.05,2.65,2.45,WHITE,True); rect(s,x+.2,2.28,.48,.48,TEAL,True); text(s,num,x+.2,2.36,.48,.22,13,WHITE,True,align=PP_ALIGN.CENTER); text(s,h,x+.82,2.3,1.55,.3,16,NAVY,True); text(s,b,x+.22,3.15,2.12,.7,13,INK,align=PP_ALIGN.CENTER)
text(s,'Cervical screening is not a substitute for evaluation of symptomatic bleeding.',1.1,5.35,11,.3,15,RED,True,align=PP_ALIGN.CENTER)
quote(s,'First see what is there, before deciding what it means.')
#10 initial pathways
s=prs.slides.add_slide(blank); bg(s); title(s,10,'Initial evaluation: the evolving pathway')
rect(s,.78,1.75,5.7,3.85,PALE,True); text(s,'Legacy approach',1.05,2.05,3,.3,18,NAVY,True); text(s,'• Either TVUS or endometrial sampling\n• Thin, well-visualised endometrium ≤4 mm could be reassuring for an initial episode\n• Persistent / recurrent bleeding still required histology',1.05,2.65,4.95,1.85,16,INK)
rect(s,6.85,1.75,5.7,3.85,RGBColor(248,236,231),True); text(s,'2026 ACOG clinical practice update',7.12,2.05,4.75,.32,18,RED,True); text(s,'• TVUS + endometrial tissue sampling in the initial evaluation of most patients\n• Shared decision-making and individualisation remain essential\n• Earlier tissue diagnosis aims to reduce missed malignant and premalignant disease',7.12,2.65,4.95,1.85,16,INK)
quote(s,'A new path does not erase judgement; it sharpens it.')
citation(s,'ACOG Clinical Practice Update news release, 16 Apr 2026. Local guideline adoption may vary.')
#11 TVUS image
s=prs.slides.add_slide(blank); bg(s); title(s,11,'Transvaginal ultrasonography: what to look for')
photo(s,us_img,.65,1.7,4.45,4.75)
items=['Endometrial double-layer thickness in sagittal plane','Uniformity and visibility of the endometrial echo','Focal lesion, polyp, intracavitary fluid','Myometrium, uterine contour, adnexa']
bullet_list(s,items,5.55,1.95,6.7,3.35,16)
pill(s,'REPORT QUALITY MATTERS',5.55,5.55,2.45,CORAL); text(s,'If the endometrium cannot be adequately visualised, do not treat the scan as reassuring.',5.55,5.99,6.15,.38,14,RED,True)
citation(s,'ACOG Committee Opinion 734. Illustration generated for education; not a diagnostic image.')
#12 threshold
s=prs.slides.add_slide(blank); bg(s); title(s,12,'Endometrial thickness: interpret, do not over-trust')
rect(s,.85,1.85,11.6,1.0,NAVY,True); text(s,'≤4 mm',1.15,2.08,1.5,.42,25,WHITE,True); text(s,'Prior ACOG guidance: >99% negative predictive value for endometrial cancer when the echo is thin and well visualised.',3.0,2.02,8.7,.52,15,WHITE)
card(s,'Still sample or investigate further','Persistent/recurrent bleeding, inadequate visualisation, focal lesion, suspicious clinical context, or high-risk patient.',.85,3.35,5.45,2.15,CORAL)
card(s,'2026 update','For most patients, use TVUS together with tissue sampling at initial evaluation rather than relying on TVUS alone.',6.95,3.35,5.45,2.15,TEAL)
quote(s,'A thin line on a scan cannot replace a careful clinical gaze.')
citation(s,'ACOG 2018 Committee Opinion 734; ACOG 2026 Clinical Practice Update announcement.')
#13 sampling
s=prs.slides.add_slide(blank); bg(s); title(s,13,'Endometrial sampling: strengths and limits')
card(s,'Office biopsy','Fast, low resource, high value for global endometrial disease. Explain discomfort, consent, and possible insufficient sample.',.8,1.95,3.55,3.2,TEAL)
card(s,'When it can fail','Cervical stenosis, pain, scant tissue, technical failure, or focal pathology can limit diagnostic confidence.',4.9,1.95,3.55,3.2,GOLD)
card(s,'Key rule','A benign or insufficient blind biopsy does not end evaluation when bleeding persists or the scan/clinical picture is concerning.',9.0,1.95,3.55,3.2,CORAL)
quote(s,'A negative test is only as reassuring as the question it truly answers.')
citation(s,'ACOG Committee Opinion 734; RCOG Green-top Guideline 67 (endometrial hyperplasia).')
#14 hysteroscopy
s=prs.slides.add_slide(blank); bg(s); title(s,14,'Hysteroscopy: see the cavity, target the lesion')
# simple diagram
rect(s,.85,1.85,4.1,3.75,PALE,True); text(s,'When to move beyond blind sampling',1.2,2.15,3.5,.35,17,NAVY,True)
bullet_list(s,['Persistent or recurrent PMB','Insufficient / non-diagnostic sample','Suspected polyp or focal lesion','Discordant ultrasound and histology'],1.18,2.78,3.3,2.25,14)
# cavity diagram
rect(s,5.7,2.15,2.0,3.0,RGBColor(247,214,209),True); rect(s,6.35,2.55,.7,2.1,WHITE,True); rect(s,6.58,3.2,.25,.55,CORAL,True); line(s,7.7,3.45,9.05,3.45,TEAL,2); text(s,'Direct visualisation\n+ targeted biopsy\n+ polypectomy when indicated',9.25,2.75,2.75,1.6,17,INK,True)
quote(s,'When the answer hides in a corner, look directly.')
#15 pathology
s=prs.slides.add_slide(blank); bg(s); title(s,15,'Pathology: result-directed next steps')
items=[('Benign / atrophy','Treat symptoms if appropriate. Reassess if bleeding recurs.',TEAL),('Polyp','Hysteroscopic removal and histology, especially if symptomatic.',GOLD),('Hyperplasia without atypia','Progestogen-based management and surveillance per guideline.',RGBColor(118,104,174)),('EIN / atypical hyperplasia or cancer','Refer to gynaecologic oncology for definitive management planning.',CORAL)]
for i,(h,b,c) in enumerate(items):
 y=1.72+i*1.02; rect(s,.8,y,11.7,.78,WHITE,True); rect(s,.8,y,.16,.78,c); text(s,h,1.2,y+.15,3.1,.28,16,NAVY,True); text(s,b,4.4,y+.13,7.35,.35,14,INK)
quote(s,'The report is not the endpoint; it is the next direction.')
#16 MHT
s=prs.slides.add_slide(blank); bg(s); title(s,16,'Bleeding on menopausal hormone therapy (MHT)')
text(s,'Clinical principle',.8,1.75,2.4,.35,17,NAVY,True); text(s,'Unexpected bleeding on hormone therapy needs context, but it must not be dismissed.',.8,2.18,11,.42,19,INK)
card(s,'Review','Type of MHT, sequential vs continuous regimen, timing, adherence, missed doses, and unopposed oestrogen exposure.',.8,3.1,3.55,2.25,TEAL)
card(s,'Assess','New, heavy, persistent, or changed bleeding pattern requires investigation and often sampling.',4.9,3.1,3.55,2.25,CORAL)
card(s,'Protect','For women with a uterus, endometrial protection with adequate progestogen is essential when using systemic oestrogen.',9.0,3.1,3.55,2.25,GOLD)
quote(s,'Hormones change the pattern, not the responsibility to listen.')
citation(s,'Berek & Novak’s Gynecology, 16e, pp. 479-480; Cochrane Review PMID 41128095 (2025).')
#17 tamoxifen
s=prs.slides.add_slide(blank); bg(s); title(s,17,'Tamoxifen and PMB: a special context')
rect(s,.8,1.75,11.75,.75,RGBColor(248,236,231),True); text(s,'Any PMB in a patient taking tamoxifen requires prompt assessment.',1.1,1.95,11.1,.3,18,RED,True,align=PP_ALIGN.CENTER)
bullet_list(s,['Tamoxifen can produce endometrial changes and make ultrasound interpretation less reliable.','Do not use an incidental thickened endometrium alone as a cancer diagnosis.','Symptomatic bleeding should trigger directed endometrial assessment, commonly with sampling and hysteroscopy as indicated.'],1.05,3.0,10.9,2.25,17)
quote(s,'Special medicines deserve special vigilance.')
citation(s,'ACOG Committee Opinion 734; standard gynecologic oncology practice.')
#18 red flags
s=prs.slides.add_slide(blank); bg(s); title(s,18,'Red flags: expedite assessment')
red=['Haemodynamic instability or heavy active bleeding','Pelvic / abdominal mass or significant pain','Persistent or recurrent PMB','Purulent or watery blood-stained discharge','Unexplained weight loss, anaemia, systemic symptoms','Visible cervical / vaginal lesion','High inherited cancer risk or prior pelvic radiation']
for i,r in enumerate(red):
 y=1.62+i*.58; rect(s,.9,y,.28,.28,RED,True); text(s,'!',.9,y+.02,.28,.18,11,WHITE,True,align=PP_ALIGN.CENTER); text(s,r,1.4,y-.02,10.7,.32,16,INK)
quote(s,'Urgency is often written in the pattern, not in the volume of blood.')
#19 algorithm
s=prs.slides.add_slide(blank); bg(s); title(s,19,'Practical algorithm for the clinic')
boxes=[('PMB reported','Confirm source\nAssess stability',.8,1.8,TEAL),('History + examination','Risk factors\nSpeculum + bimanual',3.35,1.8,TEAL),('Initial tests','TVUS + tissue sampling\nfor most patients',5.9,1.8,CORAL),('Results','Benign / insufficient / focal / malignant',8.45,1.8,GOLD),('Action','Treat, hysteroscopy,\nor oncology referral',11.0,1.8,TEAL)]
for h,b,x,y,c in boxes:
 rect(s,x,y,1.65,1.65,WHITE,True); rect(s,x,y,1.65,.19,c); text(s,h,x+.1,y+.35,1.45,.3,12,NAVY,True,align=PP_ALIGN.CENTER); text(s,b,x+.12,y+.82,1.4,.5,10,INK,align=PP_ALIGN.CENTER)
for x in [2.48,5.03,7.58,10.13]: line(s,x,2.62,x+.75,2.62,GRAY,2)
text(s,'If bleeding persists or recurs, proceed to histologic evaluation / hysteroscopy regardless of a previously thin endometrium.',.9,4.45,11.55,.52,18,RED,True,align=PP_ALIGN.CENTER)
quote(s,'A pathway is a promise that no warning will be lost between steps.')
citation(s,'ACOG 2026 update; ACOG Committee Opinion 734. Adapt to local pathways.')
#20 case
s=prs.slides.add_slide(blank); bg(s); title(s,20,'Case 1: first episode, low-risk presentation')
card(s,'Presentation','62-year-old, 8 years postmenopause. One episode of light pink spotting. No MHT, no tamoxifen, no pain. BMI 24.',.8,1.75,3.6,3.8,TEAL)
card(s,'Assessment','Speculum examination: no vaginal/cervical lesion. TVUS: endometrium well visualised at 3 mm.',4.87,1.75,3.6,3.8,GOLD)
card(s,'Discussion','Under 2026 ACOG update, discuss and generally include tissue sampling in initial evaluation. Persistent/recurrent bleeding mandates histology even with thin lining.',8.94,1.75,3.6,3.8,CORAL)
quote(s,'The safest reassurance is the kind that includes a plan for return.')
#21 case
s=prs.slides.add_slide(blank); bg(s); title(s,21,'Case 2: recurrent bleeding after a benign biopsy')
card(s,'Presentation','69-year-old with obesity and type 2 diabetes. Recurrent spotting after a benign office biopsy 3 months ago.',.8,1.75,3.6,3.8,CORAL)
card(s,'Clue','TVUS now shows heterogeneous endometrium and probable focal lesion. A blind biopsy can miss focal disease.',4.87,1.75,3.6,3.8,GOLD)
card(s,'Next step','Hysteroscopy with directed biopsy ± polypectomy. Persistent/recurrent symptoms overrule false reassurance.',8.94,1.75,3.6,3.8,TEAL)
quote(s,'When the symptom returns, the question must return with it.')
#22 communication
s=prs.slides.add_slide(blank); bg(s); title(s,22,'Patient-centred communication')
phrases=[('Name the concern','“Bleeding after menopause is common enough to be evaluated, and we want to rule out important causes.”'),('Explain uncertainty','“An ultrasound helps, but sometimes a tissue sample is needed to give a reliable answer.”'),('Invite choice','“Let’s discuss comfort measures, timing, and what matters most to you as we plan the tests.”'),('Safety-net clearly','“If bleeding recurs, becomes heavier, or you develop pain, contact us promptly even after a reassuring result.”')]
for i,(h,b) in enumerate(phrases):
 y=1.55+i*1.1; text(s,h,.85,y,2.4,.3,15,TEAL,True); text(s,b,3.0,y,8.9,.42,15,INK)
quote(s,'Kindness is clinical: it helps a patient complete the path to diagnosis.')
#23 updates
s=prs.slides.add_slide(blank); bg(s); title(s,23,'Recent updates and evidence watch')
card(s,'ACOG 2026','Updated approach recommends combined TVUS and endometrial tissue sampling in the initial evaluation of most patients with PMB.',.78,1.75,3.7,3.45,CORAL)
card(s,'Systematic review 2025','New meta-analysis re-examined endometrial thickness thresholds for excluding cancer in symptomatic postmenopausal patients.',4.82,1.75,3.7,3.45,TEAL)
card(s,'MHT evidence 2025','Cochrane update evaluated hormone therapy and endometrial hyperplasia/cancer risk, reinforcing the need for appropriate progestogen protection.',8.86,1.75,3.7,3.45,GOLD)
text(s,'Practice takeaway: use endometrial thickness in context. Do not let a single threshold replace risk assessment, persistence of symptoms, or a discussion about sampling.',.88,5.68,11.6,.48,16,NAVY,True,align=PP_ALIGN.CENTER)
citation(s,'ACOG Clinical Practice Update (Apr 2026); PMIDs 39566874 and 41128095 (2025).')
#24 take homes
s=prs.slides.add_slide(blank); bg(s); title(s,24,'Take-home messages')
msgs=['Any postmenopausal bleeding or spotting deserves assessment.','Confirm the source and inspect the cervix and vagina.','Consider cancer risk, but investigate even apparently low-risk presentations.','TVUS gives structural information; tissue sampling provides histology.','Persistent or recurrent bleeding needs histologic evaluation, often hysteroscopy.','2026 ACOG update: combined TVUS and sampling for most initial evaluations.']
for i,m in enumerate(msgs):
 y=1.56+i*.7; rect(s,.9,y,.38,.38,TEAL if i<5 else CORAL,True); text(s,'✓',.9,y+.04,.38,.22,12,WHITE,True,align=PP_ALIGN.CENTER); text(s,m,1.52,y-.03,10.7,.36,16,INK,i==5)
quote(s,'Early answers begin with early attention.')
#25 references
s=prs.slides.add_slide(blank); bg(s,NAVY); text(s,'REFERENCES & THANK YOU',.75,.75,11.5,.5,28,WHITE,True); rect(s,.76,1.4,1.2,.05,CORAL)
refs=['ACOG. Clinical Practice Update: Evaluation of Postmenopausal Bleeding. News release, 16 April 2026.','ACOG Committee Opinion No. 734. The Role of Transvaginal Ultrasonography in Evaluating the Endometrium of Women With Postmenopausal Bleeding. 2018, reaffirmed 2023.','Berek & Novak’s Gynecology. 16th ed. Postmenopausal age group: abnormal bleeding.','Chee RKW, et al. Re-evaluating Endometrial Thickness in Symptomatic Postmenopausal Patients for Excluding Cancer. JACR. 2025. PMID: 39566874.','Kim D, et al. Hormone therapy in postmenopausal women and risk of endometrial hyperplasia or endometrial cancer. Cochrane Database Syst Rev. 2025. PMID: 41128095.']
for i,r in enumerate(refs): text(s,r,.9,1.9+i*.72,11.35,.46,13,RGBColor(225,239,236))
text(s,'“May every question asked in time become a life held in care.”',.85,6.25,11.5,.38,17,RGBColor(229,205,152),italic=True,align=PP_ALIGN.CENTER)
text(s,'Prepared for clinical education • Verify local policies before patient care',.85,6.83,11.5,.22,9,RGBColor(180,204,200),align=PP_ALIGN.CENTER)

# Add speaker-note disclaimer and metadata
for slide in prs.slides:
    add_notes(slide, ['Educational presentation. Verify recommendations against local policy and the full source guidelines before clinical use.'])
prs.core_properties.title='Postmenopausal Bleeding: Recent Updates'
prs.core_properties.subject='Clinical teaching presentation'
prs.core_properties.author='Orris'
prs.save(OUT)
print(OUT)
print('slides', len(prs.slides))
Running Command

python "/tmp/workspace/postmenopausal-bleeding-ppt/src/create_deck.py" && python -c "from pptx import Presentation; p=Presentation('/tmp/workspace/postmenopausal-bleeding-ppt/output/Postmenopausal_Bleeding_Recent_Updates.pptx'); print('verified slides:', len(p.slides)); print('titles:', [next((sh.text for sh in sl.shapes if getattr(sh,'has_text_frame',False) and sh.text.strip()), '')[:50] for sl in p.slides[:3]])" && ls -lh "/tmp/workspace/postmenopausal-bleeding-ppt/output/Postmenopausal_Bleeding_Recent_Updates.pptx"

Running Command

python -c "from pptx import Presentation; p=Presentation('/tmp/workspace/postmenopausal-bleeding-ppt/output/Postmenopausal_Bleeding_Recent_Updates.pptx'); print('verified slides:', len(p.slides)); print('slide1 text:', next((sh.text for sh in p.slides[0].shapes if getattr(sh,'has_text_frame',False) and sh.text.strip()), '')[:60]); print('slide25 text:', next((sh.text for sh in p.slides[24].shapes if getattr(sh,'has_text_frame',False) and sh.text.strip()), '')[:60])" && ls -lh "/tmp/workspace/postmenopausal-bleeding-ppt/output/Postmenopausal_Bleeding_Recent_Updates.pptx"

Created a 25-slide PowerPoint on postmenopausal bleeding with clinical algorithms, recent 2025-2026 updates, generated medical illustrations, poetic quotes, case discussions, and references.

Postmenopausal Bleeding Recent Updates

Presentation · PPTX

This is a shared conversation. Sign in to Orris to start your own chat.