I wanted to do a seminar for students preparing for final MBBS OSCE/viva exams. I want to teach them “abnormal uterine bleeding " in gynobs subject. I’ll upload the our faculty practice OSCE questions in the 1st pdf. I’ll also upload the guidelines for theory as subsequent questions pdfs. Please make OSCE stations to test the topics as our faculty would. Questions and answers of each station in different papers
I wanted to do a seminar for students preparing for final MBBS OSCE/viva exams. I want to teach them “abnormal uterine bleeding " in gynobs subject. I’ll upload the our faculty practice OSCE questions in the 1st pdf. I’ll also upload the guidelines for theory as subsequent questions pdfs. Please make OSCE stations in a pdf format to test the topics as our faculty would. Please make sure that the Questions and answers of each station are in different pages
python3 << 'EOF' import pdfplumber files = { "faculty_osce": "/tmp/workspace/attachments/61a1b786-ecbc-41cf-a062-549f7e78a741/Aub.pdf", "postmeno": "/tmp/workspace/attachments/61a1b786-ecbc-41cf-a062-549f7e78a741/Approach to the patient with postmenopausal uterine bleeding 2.pdf", "terminology": "/tmp/workspace/attachments/61a1b786-ecbc-41cf-a062-549f7e78a741/Abnormal uterine bleeding in nonpregnant reproductive-age patients- Terminology,.pdf" } for key, path in files.items(): print(f"\n{'='*60}") print(f"FILE: {key}") print(f"{'='*60}") with pdfplumber.open(path) as pdf: print(f"Total pages: {len(pdf.pages)}") # Extract first 5 pages fully for i, page in enumerate(pdf.pages[:5]): text = page.extract_text() if text: print(f"\n--- Page {i+1} ---") print(text[:3000]) EOF
python3 << 'EOF' import pdfplumber # Get remaining pages from faculty OSCE (pages 5-19) print("=== FACULTY OSCE - Remaining pages ===") with pdfplumber.open("/tmp/workspace/attachments/61a1b786-ecbc-41cf-a062-549f7e78a741/Aub.pdf") as pdf: for i, page in enumerate(pdf.pages[5:], start=6): text = page.extract_text() if text: print(f"\n--- Page {i} ---") print(text[:2500]) EOF
python3 << 'EOF' import pdfplumber # Get more content from guidelines - pages 5-10 of postmeno and pages 5-20 of terminology print("=== POSTMENO GUIDELINE - Pages 5-10 ===") with pdfplumber.open("/tmp/workspace/attachments/61a1b786-ecbc-41cf-a062-549f7e78a741/Approach to the patient with postmenopausal uterine bleeding 2.pdf") as pdf: for i, page in enumerate(pdf.pages[5:], start=6): text = page.extract_text() if text: print(f"\n--- Page {i} ---") print(text[:2000]) print("\n\n=== TERMINOLOGY GUIDELINE - Pages 5-12 ===") with pdfplumber.open("/tmp/workspace/attachments/61a1b786-ecbc-41cf-a062-549f7e78a741/Abnormal uterine bleeding in nonpregnant reproductive-age patients- Terminology,.pdf") as pdf: for i, page in enumerate(pdf.pages[5:13], start=6): text = page.extract_text() if text: print(f"\n--- Page {i} ---") print(text[:2000]) EOF
mkdir -p /tmp/workspace/AUB-OSCE && ls /tmp/workspace/AUB-OSCE/
python3 << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm, mm from reportlab.platypus import ( SimpleDocTemplate, Paragraph, Spacer, HRFlowable, PageBreak, Table, TableStyle ) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.lib import colors from reportlab.lib.colors import HexColor OUTPUT = "/tmp/workspace/AUB-OSCE/AUB_OSCE_Stations.pdf" doc = SimpleDocTemplate( OUTPUT, pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm ) # ---- STYLES ---- styles = getSampleStyleSheet() cover_title = ParagraphStyle("cover_title", fontSize=24, fontName="Helvetica-Bold", textColor=HexColor("#1a3a5c"), alignment=TA_CENTER, spaceAfter=12) cover_sub = ParagraphStyle("cover_sub", fontSize=14, fontName="Helvetica", textColor=HexColor("#444444"), alignment=TA_CENTER, spaceAfter=8) cover_detail = ParagraphStyle("cover_detail", fontSize=11, fontName="Helvetica-Oblique", textColor=HexColor("#666666"), alignment=TA_CENTER, spaceAfter=6) station_header = ParagraphStyle("station_header", fontSize=15, fontName="Helvetica-Bold", textColor=HexColor("#1a3a5c"), spaceBefore=4, spaceAfter=6) section_label = ParagraphStyle("section_label", fontSize=11, fontName="Helvetica-Bold", textColor=HexColor("#2c6e9c"), spaceBefore=6, spaceAfter=3) scenario_box = ParagraphStyle("scenario_box", fontSize=11, fontName="Helvetica", textColor=HexColor("#1a1a1a"), leading=16, backColor=HexColor("#eef4fb"), borderPadding=(8, 8, 8, 8), spaceBefore=4, spaceAfter=8) q_style = ParagraphStyle("q_style", fontSize=11, fontName="Helvetica-Bold", textColor=HexColor("#1a3a5c"), spaceBefore=5, spaceAfter=2, leftIndent=0) a_style = ParagraphStyle("a_style", fontSize=10.5, fontName="Helvetica", textColor=HexColor("#222222"), leading=15, spaceAfter=2, leftIndent=12) bullet_style = ParagraphStyle("bullet_style", fontSize=10.5, fontName="Helvetica", textColor=HexColor("#222222"), leading=15, leftIndent=24, spaceBefore=1, spaceAfter=1, bulletIndent=12) answer_header = ParagraphStyle("answer_header", fontSize=14, fontName="Helvetica-Bold", textColor=HexColor("#b30000"), spaceBefore=4, spaceAfter=8) ans_q_style = ParagraphStyle("ans_q_style", fontSize=11, fontName="Helvetica-Bold", textColor=HexColor("#b30000"), spaceBefore=6, spaceAfter=2) ans_body = ParagraphStyle("ans_body", fontSize=10.5, fontName="Helvetica", textColor=HexColor("#222222"), leading=15, spaceAfter=2, leftIndent=12) ans_bullet = ParagraphStyle("ans_bullet", fontSize=10.5, fontName="Helvetica", textColor=HexColor("#222222"), leading=15, leftIndent=26, spaceBefore=1, spaceAfter=1) note_style = ParagraphStyle("note_style", fontSize=9.5, fontName="Helvetica-Oblique", textColor=HexColor("#555555"), spaceBefore=6, spaceAfter=2, leftIndent=12) divider_col = HexColor("#2c6e9c") def hr(): return HRFlowable(width="100%", thickness=1, color=divider_col, spaceAfter=6, spaceBefore=6) def thin_hr(): return HRFlowable(width="100%", thickness=0.5, color=HexColor("#cccccc"), spaceAfter=4, spaceBefore=4) def b(text, style): return Paragraph(text, style) def sp(h=6): return Spacer(1, h) # ===== CONTENT ===== story = [] # ---- COVER PAGE ---- story += [sp(60)] story += [b("OSCE EXAMINATION STATIONS", cover_title)] story += [sp(8)] story += [b("Abnormal Uterine Bleeding (AUB)", ParagraphStyle("ct2", fontSize=20, fontName="Helvetica-Bold", textColor=HexColor("#c0392b"), alignment=TA_CENTER, spaceAfter=12))] story += [sp(16)] story += [hr()] story += [sp(12)] story += [b("Obstetrics & Gynaecology — Final MBBS / MRCOG Preparation", cover_sub)] story += [sp(6)] story += [b("Seminar Series for Final Year Medical Students", cover_detail)] story += [sp(4)] story += [b("Covering: AUB in Reproductive-Age Patients • Postmenopausal Bleeding • Endometrial Carcinoma", cover_detail)] story += [sp(40)] story += [hr()] story += [sp(10)] story += [b("8 OSCE Stations | Questions & Answers on Separate Pages", cover_detail)] story += [sp(6)] story += [b("Based on Faculty Practice Questions & UpToDate Guidelines (2025–2026)", cover_detail)] story += [PageBreak()] # ---- INSTRUCTIONS PAGE ---- story += [sp(10)] story += [b("INSTRUCTIONS FOR STUDENTS AND EXAMINERS", station_header)] story += [hr()] story += [sp(6)] instructions = [ ("Format", "Each OSCE station contains a clinical scenario followed by sub-questions (numbered x.1, x.2, etc.). The QUESTION page is handed to the student. The ANSWER page is kept by the examiner."), ("Time", "5–8 minutes per station unless otherwise specified."), ("Marking", "Each sub-question carries equal marks unless a mark allocation is shown. Award marks for any clinically equivalent correct answer."), ("Answer Style", "Students are expected to use structured bullet-point answers as in clinical practice. Complete sentences are NOT required."), ("Stations Covered", "Station 1: AUB — History & Examination | Station 2: AUB — Investigations | Station 3: AUB — PALM-COEIN Classification | Station 4: Irregular & Frequent Bleeding | Station 5: Heavy Menstrual Bleeding (HMB) | Station 6: Adolescent AUB | Station 7: Postmenopausal Bleeding (PMB) — Evaluation | Station 8: PMB — Endometrial Carcinoma Management"), ] for label, text in instructions: story += [b(f"<b>{label}:</b> {text}", ParagraphStyle("instr", fontSize=10.5, fontName="Helvetica", textColor=HexColor("#222222"), leading=16, spaceBefore=5, spaceAfter=4, leftIndent=8))] story += [PageBreak()] # =========================== # HELPER: build station # =========================== def station_q_page(num, title, scenario, questions, notes=None): """Returns a list of flowables for the question page of a station.""" fl = [] fl += [b(f"STATION {num}", ParagraphStyle("snum", fontSize=11, fontName="Helvetica-Bold", textColor=HexColor("#ffffff"), backColor=HexColor("#1a3a5c"), alignment=TA_LEFT, spaceAfter=0, borderPadding=(4,8,4,8)))] fl += [b(title, ParagraphStyle("stitle", fontSize=14, fontName="Helvetica-Bold", textColor=HexColor("#1a3a5c"), spaceBefore=4, spaceAfter=6))] fl += [hr()] fl += [b("<b>CLINICAL SCENARIO</b>", section_label)] fl += [b(scenario, scenario_box)] fl += [b("<b>QUESTIONS</b>", section_label)] for q in questions: fl += [b(q, q_style)] if notes: fl += [sp(8)] fl += [thin_hr()] for note in notes: fl += [b(f"<i>{note}</i>", note_style)] return fl def station_a_page(num, title, answers): """Returns a list of flowables for the answer page of a station.""" fl = [] fl += [b(f"STATION {num} — MODEL ANSWERS", answer_header)] fl += [b(title, ParagraphStyle("atitle", fontSize=13, fontName="Helvetica-Bold", textColor=HexColor("#555555"), spaceBefore=0, spaceAfter=6))] fl += [hr()] for ans_num, ans_items in answers: fl += [b(f"Answer {ans_num}", ans_q_style)] for item in ans_items: if item.startswith("•") or item.startswith("-"): fl += [b(item, ans_bullet)] else: fl += [b(item, ans_body)] return fl # =========================== # STATION 1 # =========================== s1_title = "History & Physical Examination in AUB" s1_scenario = ( "A 38-year-old multiparous woman presents to the outpatient gynaecology clinic with a " "4-month history of irregular, frequent vaginal bleeding. Her last normal menstrual period " "was 5 months ago. She has no significant past medical history and is not on any medications." ) s1_qs = [ "1.1 What are the important points you would elicit in the history? (List at least 8 points.)", "1.2 What are the key findings to look for on general and abdominal examination?", "1.3 Describe your pelvic examination findings and what you would look for on speculum and bimanual examination.", "1.4 What are the initial investigations you would order?", ] s1_notes = [ "Note to examiner: This station tests systematic clinical assessment. Award marks for structure.", "This style of question is common at the MD and MRCOG examinations." ] s1_as = [ ("1.1", [ "Important history points:", "• Start from the last normal period and describe the progress of bleeding.", "• Is the patient maintaining a menstrual diary?", "• Nature: Is the bleeding heavy or mild? Number of pads/tampons per day.", "• Associated symptoms: Dysmenorrhoea, dyspareunia (to exclude endometriosis).", "• Vaginal discharge or postcoital bleeding (to exclude a surface/cervical lesion).", "• Bleeding from other sites; personal or family history of bleeding disorders.", "• Medications: aspirin, clopidogrel, anticoagulants (DOACs, warfarin), steroids, tamoxifen.", "• Iatrogenic: Hormonal contraception — OCP, DMPA, implant, levonorgestrel IUS.", "• Presence of a copper IUD.", "• Cervical smear history and results.", "• Risk factors for cervical carcinoma (HPV exposure, smoking, multiple partners).", "• Risk factors for endometrial carcinoma (obesity, diabetes, PCOS, nulliparity, family history).", "• Symptoms suggestive of anaemia (fatigue, breathlessness, palpitations).", "• Impact on daily activities and quality of life.", "• Previous investigations and their results.", "• Previous treatments and response.", "• Thyroid symptoms (heat/cold intolerance), galactorrhoea, hirsutism.", ]), ("1.2", [ "General examination:", "• Pallor of mucous membranes (anaemia).", "• Signs of bleeding disorders: purpura, petechiae, ecchymoses, enlarged lymph nodes.", "• BMI calculation (obesity is a risk factor for endometrial pathology).", "• Signs of androgen excess: hirsutism, acne (PCOS).", "• Signs of thyroid disease.", "Abdominal examination:", "• Masses — uterine enlargement (fibroids), adnexal masses (endometrioma).", "• Tenderness.", ]), ("1.3", [ "Speculum examination:", "• Cervical polyp (soft red mass at os).", "• Visible cervical carcinoma or contact bleeding.", "• Vaginal lesions, atrophic changes.", "• Perform a cervical smear if there is no visible lesion or active bleeding and it is overdue.", "Bimanual vaginal examination:", "• Uterine size, shape, consistency — enlarged/irregular (fibroids), globular/boggy/tender (adenomyosis).", "• Restricted mobility (endometriosis, adhesions).", "• Adnexal masses — endometrioma, hormone-secreting ovarian tumour.", "• Tenderness (PID, endometritis).", ]), ("1.4", [ "Initial investigations:", "• Full blood count (FBC) — assess for anaemia.", "• Coagulation profile (PT, APTT, platelet count) — screen for coagulopathy.", "• Pregnancy test (urine or serum hCG) — exclude pregnancy in all reproductive-age women.", "• Transabdominal and transvaginal ultrasound scan (TVS) — first-line imaging.", "• Cervical smear if not recently performed.", "• TSH if thyroid disease is suspected.", "• Prolactin if anovulatory pattern or galactorrhoea.", ]), ] story += station_q_page(1, s1_title, s1_scenario, s1_qs, s1_notes) story += [PageBreak()] story += station_a_page(1, s1_title, s1_as) story += [PageBreak()] # =========================== # STATION 2 # =========================== s2_title = "AUB Investigations — Interpreting Ultrasound Findings" s2_scenario = ( "A 40-year-old multiparous woman presents with irregular, frequent vaginal bleeding for 5 months. " "General and pelvic examination are unremarkable. A transvaginal ultrasound scan (TVS) is performed." ) s2_qs = [ "2.1 List 5 pathological causes of AUB in this woman.", "2.2 What information can be obtained from the transvaginal ultrasound scan (TVS)?", "2.3 The TVS shows a well-defined focal thickening of the endometrium with a single feeding blood vessel on Doppler. What is the most likely diagnosis? Describe the blood flow finding that would suggest a different, more sinister diagnosis.", "2.4 The TVS shows no structural abnormality and the endometrial thickness appears normal. What is the first-line medical management?", "2.5 She does not respond to 3 cycles of first-line treatment. What are the next steps in management?", ] s2_notes = ["Note to examiner: Station tests knowledge of TVS interpretation and management algorithm."] s2_as = [ ("2.1", [ "Causes of AUB in a 40-year-old woman:", "• Endometrial polyp / small submucosal fibroid.", "• Endometrial hyperplasia or stage IA endometrial carcinoma.", "• Use of hormonal contraceptives (OCP, DMPA, implant).", "• Ovulatory disorders (anovulation, PCOS, perimenopause).", "• Coagulopathy (von Willebrand disease, ITP, anticoagulant use).", "• Adenomyosis.", "• Cervical pathology (polyp, carcinoma).", ]), ("2.2", [ "TVS can detect:", "• Uterine size and shape.", "• Submucosal fibroids / fibroid polyps.", "• Endometrial polyps.", "• Endometrial thickness — endometrial hyperplasia.", "• Features suggestive of endometrial carcinoma.", "• Hormone-secreting ovarian tumours.", "• Adenomyosis (heterogeneous myometrium, asymmetric thickening, myometrial cysts).", ]), ("2.3", [ "Most likely diagnosis: Endometrial polyp.", "• A polyp characteristically shows a single feeding blood vessel on colour Doppler.", "Sinister feature: Endometrial carcinoma shows diffuse, increased vascularity over the " "entire endometrial mass (multiple irregular vessels), as opposed to the single vessel of a polyp.", ]), ("2.4", [ "First-line medical management (no structural lesion, normal endometrial thickness):", "• Insert a levonorgestrel-releasing intrauterine system (LNG-IUS, e.g. Mirena).", "Alternative options if LNG-IUS is declined:", "• Norethisterone 5 mg twice daily for 21-day cycles (3 cycles).", "• Combined oral contraceptive pill for 3–6 cycles.", ]), ("2.5", [ "If no response to first-line treatment:", "• Perform Pipelle endometrial aspiration / hysteroscopy to exclude endometrial hyperplasia or carcinoma.", "• Endometrial ablation is an option in the absence of atypical endometrial hyperplasia or structural pathology.", "• Hysterectomy with conservation of the ovaries if she has completed her family and all other options have failed.", ]), ] story += station_q_page(2, s2_title, s2_scenario, s2_qs, s2_notes) story += [PageBreak()] story += station_a_page(2, s2_title, s2_as) story += [PageBreak()] # =========================== # STATION 3 # =========================== s3_title = "PALM-COEIN Classification of AUB" s3_scenario = ( "During a clinical case discussion, a 35-year-old woman is referred for a 6-month history of " "heavy and irregular vaginal bleeding. You are asked to classify her condition using the FIGO " "PALM-COEIN system." ) s3_qs = [ "3.1 What does the acronym PALM-COEIN stand for? List all 9 categories.", "3.2 Classify the following causes under the correct PALM-COEIN category: " "(a) Submucosal fibroid, (b) Anovulation, (c) von Willebrand disease, " "(d) Levonorgestrel IUS, (e) Endometrial polyp, (f) Stage IB endometrial carcinoma.", "3.3 Which terms in the old AUB terminology have been ABANDONED by FIGO and what are their modern equivalents?", "3.4 Define 'heavy menstrual bleeding' (HMB) according to current terminology.", "3.5 Define 'frequent' and 'infrequent' menstrual bleeding according to standard definitions.", ] s3_notes = ["Note to examiner: Tests knowledge of current FIGO terminology and classification system."] s3_as = [ ("3.1", [ "PALM-COEIN categories (FIGO classification):", "• P — Polyp (endometrial or cervical)", "• A — Adenomyosis", "• L — Leiomyoma (fibroid) — subclassified by location", "• M — Malignancy and hyperplasia", "• C — Coagulopathy", "• O — Ovulatory dysfunction", "• E — Endometrial (primary endometrial disorder)", "• I — Iatrogenic (medications, devices)", "• N — Not yet classified", ]), ("3.2", [ "Classification:", "• (a) Submucosal fibroid — L (Leiomyoma)", "• (b) Anovulation — O (Ovulatory dysfunction)", "• (c) von Willebrand disease — C (Coagulopathy)", "• (d) Levonorgestrel IUS — I (Iatrogenic)", "• (e) Endometrial polyp — P (Polyp)", "• (f) Stage IB endometrial carcinoma — M (Malignancy and hyperplasia)", ]), ("3.3", [ "Abandoned terms and modern equivalents:", "• Menorrhagia → Heavy Menstrual Bleeding (HMB)", "• Metrorrhagia → Intermenstrual bleeding", "• Polymenorrhoea → Frequent menstrual bleeding", "• Hypermenorrhoea → Heavy Menstrual Bleeding (HMB)", "• Oligomenorrhoea → Infrequent menstrual bleeding", "• Dysfunctional Uterine Bleeding (DUB) → Ovulatory dysfunction (AUB-O) or Endometrial (AUB-E)", "These terms are abandoned because they are confusing and poorly defined.", ]), ("3.4", [ "HMB definition (current):", "• Clinical definition: Menstrual blood loss that interferes with the patient's physical, social, " "emotional, and/or material quality of life — based on the patient's perception.", "• Objective/research definition: >80 mL menstrual blood loss per cycle (measured by alkaline haematin method).", ]), ("3.5", [ "Frequency definitions:", "• Frequent: Menstrual periods starting at intervals <24 days.", "• Infrequent: Menstrual periods starting at intervals >38 days.", "• Irregular (for 26–41 year age group): Cycle interval variance >7 days.", ]), ] story += station_q_page(3, s3_title, s3_scenario, s3_qs, s3_notes) story += [PageBreak()] story += station_a_page(3, s3_title, s3_as) story += [PageBreak()] # =========================== # STATION 4 # =========================== s4_title = "Heavy Regular Menstrual Bleeding" s4_scenario = ( "A 40-year-old woman presents with 4 months of heavy but REGULAR menstrual bleeding. " "Her periods are occurring every 28 days but lasting 9–10 days with passage of clots. " "Abdominal and vaginal examinations are normal." ) s4_qs = [ "4.1 Mention 5 causes for this presentation.", "4.2 What is the next step in the management since examination is normal?", "4.3 The TVS shows no structural abnormality and the endometrial thickness is normal. " "What is the first-line medical treatment?", "4.4 What is the next step if first-line management fails?", "4.5 If the TVS reveals a 3 cm submucosal fibroid, how does this change your management?", ] s4_notes = ["Note to examiner: Distinguish clearly between HMB with and without structural findings."] s4_as = [ ("4.1", [ "Causes of heavy regular menstrual bleeding:", "• Uterine fibroids (especially submucosal).", "• Adenomyosis.", "• Coagulopathy (von Willebrand disease, platelet dysfunction, ITP).", "• Ovulatory disorders (anovulation with heavy withdrawal bleeds).", "• Primary endometrial disorder (prostaglandin imbalance — AUB-E).", "• Copper IUD (iatrogenic).", ]), ("4.2", [ "Next steps (normal examination):", "• Perform a transvaginal and transabdominal ultrasound scan.", "• Full blood count — to assess for anaemia.", "• Coagulation profile — to screen for bleeding disorders.", ]), ("4.3", [ "First-line medical treatment (no structural lesion, normal endometrium):", "• Mefenamic acid 500 mg three times daily during menstruation (for 3–6 cycles) — reduces blood loss.", "• AND/OR tranexamic acid 500 mg three times daily during menstruation (for 3–6 cycles) — antifibrinolytic.", "• Treat iron deficiency anaemia: oral iron supplementation if Hb <12 g/dL.", "Note: Both drugs can be combined for additive effect.", ]), ("4.4", [ "If first-line management fails:", "• Insert a levonorgestrel-releasing intrauterine system (LNG-IUS).", "• This is the most effective non-surgical medical treatment for HMB.", ]), ("4.5", [ "Management if 3 cm submucosal fibroid found:", "• Hysteroscopic resection of the submucosal fibroid is the preferred treatment.", "• This is indicated for submucosal fibroids that are accessible hysteroscopically.", "• Pre-treat with GnRH analogue for 3 months to reduce fibroid vascularity and size if fibroid is large.", "• If hysteroscopic resection is not possible, consider myomectomy or LNG-IUS for symptom control.", ]), ] story += station_q_page(4, s4_title, s4_scenario, s4_qs, s4_notes) story += [PageBreak()] story += station_a_page(4, s4_title, s4_as) story += [PageBreak()] # =========================== # STATION 5 # =========================== s5_title = "Adolescent AUB" s5_scenario = ( "A 17-year-old girl presents with heavy, regular menstrual bleeding for 4 months. " "She has never been sexually active. Her periods started at age 13 and have always been heavy." ) s5_qs = [ "5.1 Mention 2 most likely causes for heavy regular menstrual bleeding in this adolescent.", "5.2 List the preliminary investigations you would perform.", "5.3 What is the first-line treatment option?", "5.4 If she instead presents with IRREGULAR and FREQUENT bleeding, what are the 2 most likely causes?", "5.5 What is the best treatment option for irregular, frequent bleeding in this adolescent?", "5.6 At what age should you begin screening for endometrial pathology?", ] s5_notes = ["Note to examiner: Emphasise that invasive investigations are generally deferred in virgo intacta adolescents."] s5_as = [ ("5.1", [ "Most likely causes in an adolescent with heavy regular bleeding:", "• Ovulatory disorders (immaturity of the hypothalamo-pituitary-ovarian axis causing anovulatory cycles).", "• Coagulopathy — von Willebrand disease is the most common inherited bleeding disorder presenting with HMB at menarche.", ]), ("5.2", [ "Preliminary investigations:", "• Full blood count (FBC) — assess anaemia.", "• Coagulation profile: PT, APTT, platelet count — screen for coagulopathy.", "• Von Willebrand factor antigen and activity (ristocetin cofactor) if coagulopathy suspected.", "• Transabdominal ultrasound scan (TVS is not appropriate in a virgo intacta).", "• Pregnancy test — always.", ]), ("5.3", [ "First-line treatment (heavy regular bleeding, adolescent, no structural pathology):", "• Mefenamic acid 500 mg three times daily during menstruation for 3–6 cycles.", "• AND/OR tranexamic acid 500 mg three times daily during menstruation for 3–6 cycles.", "• Treat iron deficiency: oral iron supplementation.", ]), ("5.4", [ "Likely causes of irregular, frequent bleeding in this adolescent:", "• Ovulatory disorders (anovulation — immature HPO axis).", "• Coagulopathy.", ]), ("5.5", [ "Best treatment for irregular, frequent bleeding in adolescent:", "• Combined oral contraceptive pill (OCP) — cyclical or continuous regimen for 3–6 cycles.", "• This regulates cycles and reduces blood loss.", ]), ("5.6", [ "Endometrial sampling (Pipelle / hysteroscopy) is generally indicated only when:", "• Age ≥45 years with AUB.", "• AUB with risk factors for endometrial carcinoma (obesity, PCOS, diabetes, nulliparity, family history, Lynch syndrome).", "• Failed response to medical treatment at any age.", "• In adolescents, endometrial biopsy is rarely indicated unless there is strong clinical suspicion.", ]), ] story += station_q_page(5, s5_title, s5_scenario, s5_qs, s5_notes) story += [PageBreak()] story += station_a_page(5, s5_title, s5_as) story += [PageBreak()] # =========================== # STATION 6 # =========================== s6_title = "Postmenopausal Bleeding (PMB) — Evaluation" s6_scenario = ( "A 56-year-old woman presents to your clinic with a single episode of light vaginal " "bleeding that occurred 2 weeks ago. She reached menopause 6 years ago. She is obese " "(BMI 38), has type 2 diabetes mellitus, and has never been pregnant. She is not on any medications." ) s6_qs = [ "6.1 List 6 possible causes of postmenopausal bleeding.", "6.2 What important questions would you ask in the history?", "6.3 What physical examination findings would support each of the following diagnoses: " "(a) Senile vaginitis, (b) Endometrial carcinoma, (c) Cervical carcinoma?", "6.4 Abdominal and vaginal examinations are normal. What is the first investigation and what can it detect?", "6.5 The TVS shows an endometrial thickness of 6 mm. What is the next step in management? Give a reason.", "6.6 What is the significance of an endometrial thickness ≤4 mm on TVS in a woman with PMB?", ] s6_notes = [ "Note to examiner: This patient has multiple risk factors for endometrial carcinoma.", "Award marks for recognising that ANY PMB requires investigation to exclude malignancy." ] s6_as = [ ("6.1", [ "Causes of postmenopausal bleeding:", "• Endometrial atrophy (most common — 30–35%).", "• Endometrial polyp (most common structural cause — ~38%).", "• Endometrial carcinoma (~6–9% overall; ~12% in those NOT on HRT).", "• Endometrial hyperplasia (with or without atypia).", "• Cervical pathology: polyp, carcinoma.", "• Hormone-secreting ovarian tumour (granulosa cell tumour).", "• Exogenous oestrogen/HRT use or irregular HRT.", "• Bleeding disorder or anticoagulant use.", "• Genital tract trauma / foreign body (retained pessary).", "• Senile vaginitis / decubitus ulcer.", "• Carcinoma of the vagina (rare).", ]), ("6.2", [ "Important history questions:", "• When did the bleeding start? How many episodes? Duration and amount?", "• Is she on HRT, anticoagulants, tamoxifen, or phytoestrogens?", "• Does she have a retained IUD or pessary?", "• Postcoital bleeding? Offensive/blood-stained discharge?", "• Risk factors for endometrial carcinoma: obesity, diabetes, nulliparity, PCOS, family history of Lynch syndrome or colorectal/endometrial cancer.", "• Previous cervical smear history.", "• Symptoms of a pelvic mass: urinary frequency, bowel changes, abdominal distension.", "• Bleeding from other sites (to exclude coagulopathy).", ]), ("6.3", [ "(a) Senile (atrophic) vaginitis:", "• Pale, dry, atrophic vaginal mucosa with loss of rugae.", "• Petechiae on the vaginal walls.", "• Narrow introitus, friable epithelium.", "(b) Endometrial carcinoma:", "• Uterus may be bulky and tender on bimanual examination (advanced stage).", "• Often examination is completely normal in early disease.", "• Adnexal mass if ovarian metastasis.", "(c) Cervical carcinoma:", "• Visible lesion on the cervix: friable, irregular, ulcerative or proliferative growth.", "• Contact bleeding on speculum examination.", "• Parametrial induration on bimanual examination in advanced disease.", ]), ("6.4", [ "First investigation: Transvaginal ultrasound scan (TVS).", "TVS can detect:", "• Endometrial thickness (key measurement — >4 mm is the threshold for further investigation).", "• Endometrial polyps.", "• Endometrial hyperplasia / carcinoma (irregular, heterogeneous endometrium).", "• Uterine fibroids.", "• Cervical stenosis / haematometra (fluid collection in cavity).", "• Hormone-secreting ovarian tumours.", "A cervical smear should also be performed if there is no active bleeding or visible lesion and a smear has not been done within 3 years.", ]), ("6.5", [ "Endometrial thickness 6 mm — next step: Perform hysteroscopy and endometrial biopsy.", "Reason: An endometrial thickness >4 mm in a postmenopausal woman with bleeding requires " "histological assessment to exclude endometrial carcinoma or hyperplasia.", "Note: This patient has additional high-risk features (obesity, diabetes, nulliparity) making endometrial sampling even more important.", ]), ("6.6", [ "Significance of endometrial thickness ≤4 mm:", "• In a postmenopausal woman with a single episode of PMB, an endometrial thickness ≤4 mm on TVS " "has a high negative predictive value for endometrial carcinoma.", "• If the bleeding stops and there are no high-risk features: patient may be reviewed in 3 months with repeat TVS.", "• HOWEVER, if the patient has high-risk factors for endometrial carcinoma (as in this case: obesity, " "diabetes, nulliparity), hysteroscopy and biopsy should still be performed regardless of thickness.", "• Persistent or recurrent bleeding despite a thin endometrium also warrants hysteroscopy and biopsy.", ]), ] story += station_q_page(6, s6_title, s6_scenario, s6_qs, s6_notes) story += [PageBreak()] story += station_a_page(6, s6_title, s6_as) story += [PageBreak()] # =========================== # STATION 7 # =========================== s7_title = "Postmenopausal Bleeding — Hysteroscopy Findings and Management" s7_scenario = ( "A 55-year-old woman presents with a 3-month history of postmenopausal bleeding and an " "offensive vaginal discharge. TVS shows a collection of fluid in the endometrial cavity " "with increased vascularity. Hysteroscopy and biopsy are performed." ) s7_qs = [ "7.1 Describe the TVS finding and what term is used for this condition.", "7.2 Mention 4 causes of this TVS finding.", "7.3 Hysteroscopy reveals a large, vascular mass filling the endometrial cavity. " "What TWO diagnoses should be considered? Describe the distinguishing Doppler feature of each.", "7.4 Biopsy confirms a G2 endometrioid endometrial carcinoma confined to the endometrial cavity. " "What is the next step BEFORE surgery?", "7.5 MRI shows the tumour is confined to the endometrial cavity (no myometrial invasion). " "What is the surgical management?", "7.6 State 3 indications for pelvic and para-aortic lymph node dissection.", ] s7_notes = [ "Note to examiner: Marks available for explaining the role of MRI in staging.", "Students should know FIGO staging criteria for endometrial carcinoma." ] s7_as = [ ("7.1", [ "TVS finding: Collection of fluid in the endometrial cavity with increased vascularity.", "Term: Haematometra (blood) or Pyometra (pus) or more generally — fluid in the uterine cavity.", "The term for blood collection is haematometra; for pus it is pyometra.", ]), ("7.2", [ "Causes of fluid/collection in the endometrial cavity (haematometra/pyometra):", "• Cervical stenosis due to: previous cervical surgery (LLETZ, cone biopsy, amputation).", "• Endocervical carcinoma causing outlet obstruction.", "• Endometrial carcinoma (outflow obstruction or necrotic tumour).", "• Menopausal atrophy causing cervical stenosis.", "• Previous obstetric injury to the cervix.", "• Post-radiation cervical stenosis.", ]), ("7.3", [ "Two diagnoses to consider:", "1. Endometrial carcinoma:", " — Doppler: Increased, irregular, diffuse vascularity over the entire mass.", " — May show necrosis and infiltration of the myometrium.", "2. Endometrial polyp (large):", " — Doppler: Single feeding blood vessel (stalk vessel).", " — Well-defined, no necrosis.", ]), ("7.4", [ "Before surgery — perform MRI (Magnetic Resonance Imaging) of the pelvis:", "• To assess depth of myometrial invasion.", "• To assess cervical involvement.", "• To assess pelvic lymph nodes.", "• To stage the tumour accurately (FIGO staging).", "• This determines whether standard or radical surgery is required.", ]), ("7.5", [ "Surgical management (G2 endometrioid, confined to cavity — FIGO Stage IA, G2):", "• Total abdominal hysterectomy (TAH) and bilateral salpingo-oophorectomy (BSO).", "• Pelvic and para-aortic lymph nodes should be palpated and sampled if required.", "• Peritoneal washings taken for cytology.", "Note: Minimally invasive surgery (laparoscopic/robotic) is preferred where expertise is available.", ]), ("7.6", [ "Indications for pelvic and para-aortic lymph node dissection:", "• Stage IA G3 (high-grade) tumours.", "• Stage IA serous, papillary serous, or clear cell carcinoma (high-risk histology).", "• Stage IB tumours (>50% myometrial invasion).", "• Any high-risk histological type regardless of stage.", ]), ] story += station_q_page(7, s7_title, s7_scenario, s7_qs, s7_notes) story += [PageBreak()] story += station_a_page(7, s7_title, s7_as) story += [PageBreak()] # =========================== # STATION 8 # =========================== s8_title = "Adjuvant Treatment and HRT-Related Bleeding" s8_scenario = ( "CASE A: Hysteroscopy and biopsy in a 62-year-old woman with postmenopausal bleeding reveals " "a G3 endometrioid carcinoma. Pre-operative MRI shows 60% myometrial invasion with cervical stromal involvement.\n\n" "CASE B: A 55-year-old woman on continuous combined HRT reports 2 months of intermittent spotting. " "Her gynaecological examination is normal." ) s8_qs = [ "8.1 (Case A) What FIGO stage does this tumour correspond to? Give your reasoning.", "8.2 (Case A) Outline the surgical management for this stage.", "8.3 (Case A) State 3 indications for adjuvant radiotherapy in endometrial carcinoma.", "8.4 (Case A) How would you treat a woman found to have stage 3 endometrial carcinoma?", "8.5 (Case B) What is the most likely cause of spotting in a woman on continuous combined HRT?", "8.6 (Case B) Why is it necessary to investigate this woman despite an apparent benign explanation?", "8.7 (Case B) How would you investigate and manage this woman?", ] s8_notes = [ "Note to examiner: Case A tests surgical oncology knowledge. Case B tests clinical reasoning.", "Award marks for distinguishing stage IA from IB and the implications for treatment." ] s8_as = [ ("8.1", [ "FIGO Stage: Stage II (endometrial carcinoma with cervical stromal involvement).", "Reasoning:", "• >50% myometrial invasion alone = Stage IB.", "• Cervical STROMAL involvement = Stage II (not just endocervical glandular involvement).", "• Note: endocervical glandular involvement only = Stage I (not upstaged).", ]), ("8.2", [ "Surgical management (Stage II, G3 endometrioid carcinoma):", "• Radical (modified radical) hysterectomy, BSO.", "• Pelvic and para-aortic lymph node dissection.", "• Peritoneal washings for cytology.", "• Combined with adjuvant radiotherapy (external beam pelvic radiotherapy + brachytherapy).", ]), ("8.3", [ "Indications for adjuvant radiotherapy in endometrial carcinoma:", "• G3 (poorly differentiated) tumours.", "• Stage II or above (cervical or beyond uterine involvement).", "• Serous papillary or clear cell carcinoma (high-risk histology).", "• Stage IB (>50% myometrial invasion).", "• Positive surgical margins or lymph node involvement.", ]), ("8.4", [ "Treatment of Stage III endometrial carcinoma:", "• Surgical debulking: TAH + BSO + pelvic and para-aortic lymph node dissection — aim to remove as much tumour as possible.", "• Adjuvant chemoradiotherapy (combination of external beam radiotherapy + platinum-based chemotherapy).", "• Systemic chemotherapy: carboplatin + paclitaxel (standard regimen).", ]), ("8.5", [ "Most likely cause of spotting on continuous combined HRT:", "• Irregular pill-taking / missed doses — causing withdrawal bleeding.", "• Breakthrough bleeding in the first 6 months of starting continuous combined HRT (acceptable).", "Note: Bleeding beyond 6 months on continuous combined HRT is abnormal and requires investigation.", ]), ("8.6", [ "Why investigation is necessary:", "• Genital tract malignancies (cervical and endometrial carcinoma) are common in this age group.", "• There may be a co-existing structural lesion (polyp, carcinoma) that is unrelated to HRT.", "• HRT use does not exclude the possibility of endometrial pathology.", "• The rule is: any postmenopausal bleeding (including on HRT beyond 6 months) requires evaluation to exclude carcinoma.", ]), ("8.7", [ "Investigation and management:", "• Take a careful history: Is she taking pills regularly? Missing doses?", "• General, abdominal, speculum, and bimanual vaginal examination.", "• Transvaginal ultrasound scan and coagulation profile.", "• Cervical smear if no visible lesion and smear overdue.", "• If TVS shows endometrial thickness >4 mm: Perform hysteroscopy and endometrial biopsy.", "Management after structural lesion excluded:", "• Advise to take HRT pills at the same time every day.", "• Consider HRT formulation with higher progestogen dose to prevent breakthrough bleeding.", "• If a structural lesion is found, treat appropriately (polypectomy, hysteroscopy, or surgical management).", ]), ] story += station_q_page(8, s8_title, s8_scenario, s8_qs, s8_notes) story += [PageBreak()] story += station_a_page(8, s8_title, s8_as) story += [PageBreak()] # ---- SUMMARY / REFERENCE PAGE ---- story += [sp(10)] story += [b("QUICK REFERENCE SUMMARY", station_header)] story += [hr()] story += [sp(6)] summary_data = [ ["Topic", "Key Point"], ["AUB Definition", "Uterine bleeding of abnormal quantity, duration, or schedule in non-pregnant patient"], ["Abandoned terms", "Menorrhagia, metrorrhagia, DUB, polymenorrhoea, hypermenorrhoea, oligomenorrhoea"], ["HMB clinical def.", "Blood loss interfering with quality of life (patient's perception)"], ["HMB objective def.", ">80 mL per cycle"], ["Frequent bleeding", "Periods starting <24 days apart"], ["Infrequent bleeding", "Periods starting >38 days apart"], ["PALM-COEIN", "Polyp, Adenomyosis, Leiomyoma, Malignancy | Coagulopathy, Ovulatory, Endometrial, Iatrogenic, Not classified"], ["PMB definition", "Any uterine bleeding in a menopausal patient (except expected cyclic HRT bleeding)"], ["PMB top cause", "Atrophy (~31%) and Polyps (~38%) — malignancy in ~6–9% overall"], ["TVS threshold (PMB)", "Endometrial thickness >4 mm → biopsy required"], ["Stage IA endometrial ca.", "No myometrial invasion OR <50% myometrial invasion"], ["Stage IB", ">50% myometrial invasion"], ["Stage II", "Cervical stromal involvement"], ["First-line HMB (no lesion)", "Mefenamic acid + tranexamic acid; LNG-IUS if medical Rx fails"], ["First-line if polyp", "Hysteroscopic polypectomy"], ["Adolescent HMB", "Ovulatory disorders + coagulopathy; treat with mefenamic acid ± tranexamic acid"], ["Adolescent irregular bleed", "OCP (cyclical or continuous) for 3–6 cycles"], ] tbl = Table(summary_data, colWidths=[6*cm, 11*cm]) tbl.setStyle(TableStyle([ ("BACKGROUND", (0, 0), (-1, 0), HexColor("#1a3a5c")), ("TEXTCOLOR", (0, 0), (-1, 0), colors.white), ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), ("FONTSIZE", (0, 0), (-1, 0), 10), ("ROWBACKGROUNDS", (0, 1), (-1, -1), [HexColor("#f0f5fb"), HexColor("#ffffff")]), ("FONTNAME", (0, 1), (-1, -1), "Helvetica"), ("FONTSIZE", (0, 1), (-1, -1), 9.5), ("GRID", (0, 0), (-1, -1), 0.4, HexColor("#cccccc")), ("VALIGN", (0, 0), (-1, -1), "TOP"), ("LEFTPADDING", (0, 0), (-1, -1), 6), ("RIGHTPADDING", (0, 0), (-1, -1), 6), ("TOPPADDING", (0, 0), (-1, -1), 4), ("BOTTOMPADDING", (0, 0), (-1, -1), 4), ])) story += [tbl] story += [sp(16)] story += [thin_hr()] story += [b("<i>References: UpToDate — Abnormal Uterine Bleeding in Nonpregnant Reproductive-Age Patients (2026) | " "Approach to the Patient with Postmenopausal Uterine Bleeding (2025) | " "Faculty OSCE Practice Questions in Obstetrics and Gynaecology (Chapter 19–20)</i>", ParagraphStyle("ref", fontSize=9, fontName="Helvetica-Oblique", textColor=HexColor("#666666"), alignment=TA_CENTER, spaceBefore=6))] # ---- BUILD ---- doc.build(story) print("PDF created successfully:", OUTPUT) PYEOF
python3 -c " from pypdf import PdfReader r = PdfReader('/tmp/workspace/AUB-OSCE/AUB_OSCE_Stations.pdf') print(f'Total pages: {len(r.pages)}') for i, p in enumerate(r.pages): txt = p.extract_text() first_line = txt.strip().split('\n')[0] if txt else '(empty)' print(f' Page {i+1}: {first_line[:80]}') "
AUB OSCE Stations
PDF Document · PDF
| Pages | Content |
|---|---|
| 1 | Cover page |
| 2 | Instructions for students and examiners |
| 3–21 | 8 OSCE Stations — questions and answers on separate pages |
| 22 | Quick Reference Summary table |
| Station | Title | Focus |
|---|---|---|
| 1 | History & Physical Examination | Systematic clinical assessment of AUB |
| 2 | Investigations & TVS Interpretation | Doppler findings, polyp vs carcinoma, management algorithm |
| 3 | PALM-COEIN Classification | FIGO terminology, abandoned terms, HMB definitions |
| 4 | Heavy Regular Menstrual Bleeding | HMB causes, mefenamic acid, tranexamic acid, LNG-IUS, fibroid management |
| 5 | Adolescent AUB | Coagulopathy, ovulatory dysfunction, OCP, virgo intacta considerations |
| 6 | Postmenopausal Bleeding - Evaluation | Risk stratification, TVS threshold (4 mm), high-risk patients |
| 7 | Hysteroscopy Findings & Endometrial Carcinoma | Haematometra, staging, lymphadenectomy indications |
| 8 | Adjuvant Treatment & HRT Bleeding | FIGO Stage II/III management, chemoradiotherapy, HRT-related bleeding |