teach me each and every opd case of urology mentioned in this book teach every case case just like patient came in opd and i have to write prescription sample aslo given in image form write medicine in englisg but dose frequency in urdu and also add prevention if need any
cd /home/daytona/workspace/attachments/54820edf-49c6-4e14-8d02-3053107618f7/ && python3 -c " import pdfplumber pdf_path = 'Viva Practice for the FRCS(Urol - Manit Arya, Iqba_250321_102313_compressed.pdf' with pdfplumber.open(pdf_path) as pdf: print(f'Total pages: {len(pdf.pages)}') # Print table of contents / first few pages for i in range(min(15, len(pdf.pages))): text = pdf.pages[i].extract_text() if text: print(f'--- PAGE {i+1} ---') print(text[:2000]) print() "
cd /home/daytona/workspace/attachments/54820edf-49c6-4e14-8d02-3053107618f7/ && python3 -c " from pypdf import PdfReader pdf_path = 'Viva Practice for the FRCS(Urol - Manit Arya, Iqba_250321_102313_compressed.pdf' reader = PdfReader(pdf_path) print(f'Total pages: {len(reader.pages)}') for i in range(min(20, len(reader.pages))): text = reader.pages[i].extract_text() if text and text.strip(): print(f'--- PAGE {i+1} ---') print(text[:3000]) print() "
cd /home/daytona/workspace/attachments/54820edf-49c6-4e14-8d02-3053107618f7/ && python3 -c " import fitz # PyMuPDF pdf_path = 'Viva Practice for the FRCS(Urol - Manit Arya, Iqba_250321_102313_compressed.pdf' doc = fitz.open(pdf_path) print(f'Total pages: {len(doc)}') for i in range(min(20, len(doc))): page = doc[i] text = page.get_text() if text.strip(): print(f'--- PAGE {i+1} ---') print(text[:3000]) print() "
pip install --user pymupdf --quiet && python3 -c " import fitz pdf_path = '/home/daytona/workspace/attachments/54820edf-49c6-4e14-8d02-3053107618f7/Viva Practice for the FRCS(Urol - Manit Arya, Iqba_250321_102313_compressed.pdf' doc = fitz.open(pdf_path) print(f'Total pages: {len(doc)}') for i in range(20): page = doc[i] text = page.get_text() if text.strip(): print(f'PAGE {i+1}:', text[:2000]) print('---') "
mkdir -p /home/daytona/workspace/urology-opd-cases && ls /home/daytona/workspace/urology-opd-cases/
~/urology-opd-cases/generate_prescriptions.py
#!/usr/bin/env python3
"""
Generate prescription images for all Urology OPD cases
from Viva Practice for the FRCS(Urol) book
"""
from PIL import Image, ImageDraw, ImageFont
import os
OUTPUT_DIR = "/home/daytona/workspace/urology-opd-cases/output"
os.makedirs(OUTPUT_DIR, exist_ok=True)
# ─────────────────────────────────────────────
# All OPD cases data
# ─────────────────────────────────────────────
CASES = [
{
"case_no": 1,
"title": "Benign Prostatic Hyperplasia (BPH)",
"patient": {"name": "Mr. Muhammad Ali", "age": "65 Years / Male", "weight": "78 kg", "id": "URO-001"},
"complaints": "Frequency of urination, nocturia (3-4x/night), weak stream, hesitancy, feeling of incomplete bladder emptying - 6 months",
"diagnosis": "Benign Prostatic Hyperplasia (BPH) - Grade II",
"medicines": [
{"name": "TAB. TAMSULOSIN (0.4 MG)", "dose": "1 Tablet", "freq": "رات کو سونے سے پہلے (Once daily at night)", "dur": "3 Months"},
{"name": "TAB. FINASTERIDE (5 MG)", "dose": "1 Tablet", "freq": "روزانہ ایک بار (Once daily)", "dur": "6 Months"},
{"name": "TAB. SOLIFENACIN (5 MG)", "dose": "1 Tablet", "freq": "روزانہ ایک بار (Once daily)", "dur": "1 Month"},
],
"prevention": [
"شام کے بعد پانی کم پئیں (Reduce fluid intake after evening)",
"چائے، کافی، الکوحل سے پرہیز کریں (Avoid caffeine & alcohol)",
"ہر 6 ماہ بعد PSA test کروائیں (PSA check every 6 months)",
"باقاعدہ ورزش کریں (Regular exercise)",
],
},
{
"case_no": 2,
"title": "Urinary Tract Infection (UTI)",
"patient": {"name": "Mrs. Fatima Bibi", "age": "35 Years / Female", "weight": "62 kg", "id": "URO-002"},
"complaints": "Burning micturition, frequency, suprapubic pain, cloudy urine - 3 days",
"diagnosis": "Acute Uncomplicated Cystitis (Lower UTI)",
"medicines": [
{"name": "TAB. NITROFURANTOIN (100 MG)", "dose": "1 Tablet", "freq": "دن میں دو بار کھانے کے ساتھ (Twice daily with food)", "dur": "7 Days"},
{"name": "TAB. PHENAZOPYRIDINE (200 MG)", "dose": "1 Tablet", "freq": "دن میں تین بار (Three times daily)", "dur": "2 Days"},
{"name": "TAB. IBUPROFEN (400 MG)", "dose": "1 Tablet", "freq": "ضرورت پر کھانے کے بعد (SOS after food)", "dur": "3 Days"},
],
"prevention": [
"خوب پانی پئیں (کم از کم 2-3 لیٹر) (Drink 2-3 liters water daily)",
"پیشاب روکیں نہیں (Do not hold urine)",
"پیشاب کے بعد صفائی آگے سے پیچھے کی طرف (Wipe front to back)",
"جنسی تعلق کے بعد پیشاب کریں (Void after intercourse)",
"Cranberry juice مفید ہے (Cranberry juice helpful)",
],
},
{
"case_no": 3,
"title": "Renal Colic / Ureteric Stone",
"patient": {"name": "Mr. Usman Khan", "age": "40 Years / Male", "weight": "80 kg", "id": "URO-003"},
"complaints": "Sudden severe loin-to-groin colicky pain, nausea, vomiting, haematuria - 12 hours",
"diagnosis": "Right Ureteric Calculus (Lower 1/3rd) - 6mm stone on KUB X-ray",
"medicines": [
{"name": "TAB. DICLOFENAC SODIUM (75 MG)", "dose": "1 Tablet", "freq": "دن میں دو بار کھانے کے بعد (Twice daily after food)", "dur": "5 Days"},
{"name": "TAB. TAMSULOSIN (0.4 MG)", "dose": "1 Tablet", "freq": "رات کو سونے سے پہلے (Once at night - MET therapy)", "dur": "4 Weeks"},
{"name": "SYP. METOCLOPRAMIDE (5MG/5ML)", "dose": "10 ml", "freq": "دن میں تین بار متلی پر (TDS for nausea)", "dur": "3 Days"},
{"name": "TAB. CIPROFLOXACIN (500 MG)", "dose": "1 Tablet", "freq": "دن میں دو بار (Twice daily - if infection)", "dur": "5 Days"},
],
"prevention": [
"روزانہ 3 لیٹر سے زیادہ پانی پئیں (Drink >3 liters water daily)",
"نمک کم کھائیں (Reduce salt intake)",
"سرخ گوشت کم کھائیں (Reduce red meat)",
"پالک، ٹماٹر، مونگ پھلی سے پرہیز (Avoid oxalate-rich foods for calcium oxalate stones)",
"Urine pH monitor کروائیں (Monitor urine pH)",
],
},
{
"case_no": 4,
"title": "Haematuria (Blood in Urine)",
"patient": {"name": "Mr. Tariq Mahmood", "age": "58 Years / Male", "weight": "75 kg", "id": "URO-004"},
"complaints": "Painless visible haematuria (frank blood in urine) - 2 episodes in 1 week, no pain, no fever",
"diagnosis": "Painless Macroscopic Haematuria - Urgent Cystoscopy + CT Urogram ordered (? Bladder Cancer)",
"medicines": [
{"name": "TAB. TRANEXAMIC ACID (500 MG)", "dose": "2 Tablets", "freq": "دن میں تین بار (Three times daily)", "dur": "3 Days"},
{"name": "TAB. CIPROFLOXACIN (500 MG)", "dose": "1 Tablet", "freq": "دن میں دو بار (Twice daily)", "dur": "5 Days"},
{"name": "TAB. OMEPRAZOLE (20 MG)", "dose": "1 Tablet", "freq": "کھانے سے پہلے صبح (Once daily - morning before food)", "dur": "5 Days"},
],
"prevention": [
"تمباکو نوشی بالکل بند کریں - سب سے اہم (Stop smoking - most important risk factor)",
"کافی پانی پئیں (Drink plenty of water)",
"خون بہنا بند نہ ہو تو فوری ہسپتال جائیں (Immediate hospital if bleeding continues)",
"Cystoscopy اور CT Urogram لازمی کروائیں (Mandatory cystoscopy + CT urogram)",
],
},
{
"case_no": 5,
"title": "Epididymo-Orchitis",
"patient": {"name": "Mr. Ahmed Raza", "age": "28 Years / Male", "weight": "70 kg", "id": "URO-005"},
"complaints": "Painful, swollen, red right testis - 3 days; dysuria, urethral discharge; sexually active",
"diagnosis": "Acute Epididymo-Orchitis (STI-related - Chlamydia/Gonorrhoea likely)",
"medicines": [
{"name": "TAB. DOXYCYCLINE (100 MG)", "dose": "1 Tablet", "freq": "دن میں دو بار کھانے کے ساتھ (Twice daily with food)", "dur": "14 Days"},
{"name": "TAB. CEFTRIAXONE (500 MG) - Single Dose IM", "dose": "1 Tablet / IM Inj", "freq": "صرف ایک بار (Single dose only)", "dur": "1 Day"},
{"name": "TAB. IBUPROFEN (400 MG)", "dose": "1 Tablet", "freq": "دن میں تین بار کھانے کے بعد (Three times daily after food)", "dur": "7 Days"},
{"name": "TAB. OMEPRAZOLE (20 MG)", "dose": "1 Tablet", "freq": "کھانے سے پہلے (Before meals)", "dur": "7 Days"},
],
"prevention": [
"جنسی تعلق میں احتیاط (Safe sexual practices - condom use)",
"Partner کا علاج بھی ضروری (Treat sexual partner)",
"STI screening مکمل کروائیں (Complete STI screen)",
"خصیوں کو سہارا دینا (Scrotal support / elevation)",
"علاج مکمل کریں (Complete full antibiotic course)",
],
},
{
"case_no": 6,
"title": "Prostate Cancer (Early Stage / PSA Raised)",
"patient": {"name": "Mr. Zia ur Rehman", "age": "68 Years / Male", "weight": "77 kg", "id": "URO-006"},
"complaints": "Raised PSA (12 ng/mL) found on screening; mild LUTS; DRE: firm, irregular prostate; Biopsy: Gleason 7 (3+4)",
"diagnosis": "Localised Prostate Cancer - Gleason 7, cT2b N0 M0",
"medicines": [
{"name": "TAB. BICALUTAMIDE (50 MG)", "dose": "1 Tablet", "freq": "روزانہ ایک بار (Once daily)", "dur": "3 Months (Neo-adjuvant)"},
{"name": "INJ. LEUPROLIDE (LHRH Agonist)", "dose": "3.75 mg IM", "freq": "ہر ماہ ایک بار (Once monthly)", "dur": "As per Oncology"},
{"name": "TAB. TAMSULOSIN (0.4 MG)", "dose": "1 Tablet", "freq": "رات کو (Once at night for LUTS)", "dur": "Ongoing"},
{"name": "TAB. CALCIUM + VIT D3 (500mg/400IU)", "dose": "1 Tablet", "freq": "روزانہ ایک بار (Once daily)", "dur": "Long term"},
],
"prevention": [
"سرخ گوشت اور چکنائی کم کریں (Reduce red meat and fat)",
"ٹماٹر اور سبزیاں زیادہ کھائیں (Increase tomatoes, vegetables - lycopene)",
"باقاعدہ ورزش کریں (Regular exercise)",
"PSA ہر 3 ماہ بعد مانیٹر (PSA monitoring every 3 months)",
"Bone density scan (DEXA) - hormonal therapy side effect",
],
},
{
"case_no": 7,
"title": "Bladder Cancer (Transitional Cell Carcinoma)",
"patient": {"name": "Mr. Pervez Akhtar", "age": "62 Years / Male", "weight": "73 kg", "id": "URO-007"},
"complaints": "Recurrent painless haematuria; smoker for 30 years; Cystoscopy: papillary tumor on posterior wall",
"diagnosis": "Superficial Bladder TCC (Ta G2) - Post-TURBT follow-up",
"medicines": [
{"name": "INSTILLATION: BCG (INTRAVESICAL)", "dose": "1 vial intravesical", "freq": "ہفتے میں ایک بار - 6 ہفتے (Once weekly x6 weeks)", "dur": "6 Weeks induction"},
{"name": "TAB. OXYBUTYNIN (5 MG)", "dose": "1 Tablet", "freq": "دن میں دو بار (Twice daily - bladder spasm)", "dur": "During BCG"},
{"name": "TAB. PHENAZOPYRIDINE (200 MG)", "dose": "1 Tablet", "freq": "دن میں تین بار (TDS - dysuria relief)", "dur": "As needed"},
],
"prevention": [
"تمباکو نوشی مکمل طور پر بند کریں (Stop smoking completely - strongest risk factor)",
"Industrial chemicals سے دور رہیں (Avoid industrial chemicals - dyes, rubber)",
"خوب پانی پئیں (Drink plenty of water - dilutes carcinogens)",
"Cystoscopy surveillance ہر 3 ماہ (Cystoscopy surveillance every 3 months)",
],
},
{
"case_no": 8,
"title": "Stress Urinary Incontinence (Female)",
"patient": {"name": "Mrs. Rubina Shaheen", "age": "48 Years / Female", "weight": "69 kg", "id": "URO-008"},
"complaints": "Involuntary leakage of urine on coughing, sneezing, laughing; 3 vaginal deliveries; stress test positive",
"diagnosis": "Genuine Stress Urinary Incontinence (GSI) - Urodynamics confirmed",
"medicines": [
{"name": "TAB. DULOXETINE (40 MG)", "dose": "1 Tablet", "freq": "دن میں دو بار کھانے کے ساتھ (Twice daily with food)", "dur": "3 Months"},
{"name": "TAB. OXYBUTYNIN (5 MG)", "dose": "1 Tablet", "freq": "رات کو (Once at night - if mixed)", "dur": "1 Month"},
{"name": "VAGINAL ESTROGEN CREAM (Ovestin)", "dose": "Apply locally", "freq": "رات کو لگائیں (Apply at night)", "dur": "3 Months"},
],
"prevention": [
"Kegel exercises روزانہ کریں (Daily pelvic floor exercises - most important)",
"وزن کم کریں اگر زیادہ ہو (Lose weight if obese)",
"قبض سے بچیں (Avoid constipation)",
"بھاری چیزیں اٹھانے سے بچیں (Avoid heavy lifting)",
"چائے کافی کم کریں (Reduce caffeine)",
],
},
{
"case_no": 9,
"title": "Erectile Dysfunction (ED)",
"patient": {"name": "Mr. Imran Siddiqui", "age": "52 Years / Male", "weight": "85 kg", "id": "URO-009"},
"complaints": "Inability to achieve/maintain erection sufficient for intercourse - 1 year; DM type 2, hypertensive; anxious",
"diagnosis": "Erectile Dysfunction - Mixed Organic + Psychogenic (Vasculogenic + Diabetic Neuropathy)",
"medicines": [
{"name": "TAB. SILDENAFIL (50 MG)", "dose": "1 Tablet", "freq": "جنسی تعلق سے 1 گھنٹہ پہلے ضرورت پر (1 hour before intercourse - PRN)", "dur": "Ongoing"},
{"name": "TAB. METFORMIN (500 MG) - continued", "dose": "1 Tablet", "freq": "دن میں دو بار کھانے کے ساتھ (Twice daily with food)", "dur": "Long term"},
{"name": "TAB. TESTOSTERONE (if deficient)", "dose": "As per level", "freq": "ڈاکٹر کی ہدایت کے مطابق (As directed after testosterone level)", "dur": "3 Months trial"},
],
"prevention": [
"شوگر اور بلڈ پریشر کنٹرول کریں (Control diabetes and BP)",
"تمباکو نوشی بند کریں (Stop smoking - major vascular risk)",
"الکوحل سے پرہیز (Avoid alcohol)",
"باقاعدہ ورزش کریں (Regular exercise)",
"ذہنی تناؤ کم کریں (Reduce psychological stress)",
"سائیکلنگ زیادہ نہ کریں (Avoid prolonged cycling)",
],
},
{
"case_no": 10,
"title": "Overactive Bladder (OAB) / Urge Incontinence",
"patient": {"name": "Mrs. Sajida Perveen", "age": "55 Years / Female", "weight": "65 kg", "id": "URO-010"},
"complaints": "Urgency, frequency (>8x/day), nocturia (3x/night), urge incontinence; urine culture negative",
"diagnosis": "Overactive Bladder (OAB Wet) - Idiopathic",
"medicines": [
{"name": "TAB. SOLIFENACIN (5 MG)", "dose": "1 Tablet", "freq": "روزانہ ایک بار (Once daily)", "dur": "3 Months"},
{"name": "TAB. MIRABEGRON (50 MG)", "dose": "1 Tablet", "freq": "روزانہ ایک بار (Once daily - if solifenacin not tolerated)", "dur": "3 Months"},
{"name": "TAB. OXYBUTYNIN (5 MG)", "dose": "1 Tablet", "freq": "دن میں دو بار (Twice daily - alternative)", "dur": "2 Months"},
],
"prevention": [
"Bladder training کریں (Bladder retraining - delay voiding by 5 min each week)",
"چائے کافی بند کریں (Stop caffeine completely)",
"Fluid diary لکھیں (Keep a fluid and voiding diary)",
"شام کے بعد کم پانی پئیں (Reduce evening fluid intake)",
"Pelvic floor exercises کریں (Pelvic floor exercises)",
],
},
{
"case_no": 11,
"title": "Varicocele",
"patient": {"name": "Mr. Bilal Hassan", "age": "24 Years / Male", "weight": "65 kg", "id": "URO-011"},
"complaints": "Dull aching left scrotal pain, heaviness in scrotum; worsens on standing/exercise; married 2 years, no children",
"diagnosis": "Left Varicocele - Grade II (Palpable on Valsalva); Semen analysis: oligoasthenospermia",
"medicines": [
{"name": "TAB. IBUPROFEN (400 MG)", "dose": "1 Tablet", "freq": "دن میں تین بار کھانے کے بعد (Three times daily after food)", "dur": "1 Week"},
{"name": "TAB. VITAMIN E (400 IU)", "dose": "1 Tablet", "freq": "روزانہ ایک بار (Once daily)", "dur": "3 Months"},
{"name": "TAB. FOLIC ACID (5 MG)", "dose": "1 Tablet", "freq": "روزانہ ایک بار (Once daily - sperm quality)", "dur": "3 Months"},
{"name": "TAB. COENZYME Q10 (200 MG)", "dose": "1 Capsule", "freq": "روزانہ ایک بار (Once daily - antioxidant)", "dur": "3 Months"},
],
"prevention": [
"Scrotal support / jockstrap پہنیں (Wear scrotal support)",
"لمبے عرصے تک کھڑے نہ رہیں (Avoid prolonged standing)",
"بھاری ورزش سے گریز (Avoid heavy exercise/weightlifting)",
"Varicocelectomy کی رائے لیں (Surgical opinion - varicocelectomy if infertility)",
"سالانہ semen analysis کروائیں (Annual semen analysis)",
],
},
{
"case_no": 12,
"title": "Hydronephrosis / Pelviureteric Junction (PUJ) Obstruction",
"patient": {"name": "Mr. Salman Riaz", "age": "32 Years / Male", "weight": "72 kg", "id": "URO-012"},
"complaints": "Recurrent left loin pain, especially after drinking large amounts of fluid; Ultrasound: moderate hydronephrosis",
"diagnosis": "Left PUJ Obstruction (Pelviureteric Junction Obstruction) - MAG3 renogram: obstructed pattern; RF 38%",
"medicines": [
{"name": "TAB. DICLOFENAC SODIUM (50 MG)", "dose": "1 Tablet", "freq": "دن میں دو بار کھانے کے بعد (Twice daily after food - pain)", "dur": "5 Days (PRN)"},
{"name": "TAB. TRIMETHOPRIM (200 MG)", "dose": "1 Tablet", "freq": "رات کو (Once at night - prophylaxis)", "dur": "Until surgery"},
{"name": "TAB. OMEPRAZOLE (20 MG)", "dose": "1 Tablet", "freq": "کھانے سے پہلے (Before meals)", "dur": "With NSAID use"},
],
"prevention": [
"کافی پانی پئیں لیکن آہستہ آہستہ (Drink adequate water - avoid rapid large intake)",
"بخار یا درد میں فوری ڈاکٹر سے ملیں (Immediate review if fever/pain)",
"Pyeloplasty کی رائے لیں (Surgical referral - laparoscopic pyeloplasty)",
"MAG3 renogram سالانہ (Annual MAG3 follow-up)",
],
},
{
"case_no": 13,
"title": "Testicular Cancer (Germ Cell Tumour)",
"patient": {"name": "Mr. Kamran Ali", "age": "26 Years / Male", "weight": "68 kg", "id": "URO-013"},
"complaints": "Painless hard lump in right testis noticed 2 months ago; heaviness in scrotum; mild gynecomastia; AFP elevated",
"diagnosis": "Right Testicular Mass - ? Non-Seminomatous GCT (AFP raised, βhCG mildly raised) - for urgent orchidectomy",
"medicines": [
{"name": "TAB. IBUPROFEN (400 MG)", "dose": "1 Tablet", "freq": "ضرورت پر کھانے کے بعد (SOS after food)", "dur": "As needed"},
{"name": "SPERM BANKING - arrange before surgery", "dose": "Referral", "freq": "آپریشن سے پہلے (Before orchidectomy)", "dur": "Once"},
{"name": "TAB. ONDANSETRON (4 MG)", "dose": "1 Tablet", "freq": "دن میں تین بار (TDS - post chemo nausea)", "dur": "During Chemo"},
],
"prevention": [
"ماہانہ خود معائنہ کریں (Monthly self-examination)",
"Cryptorchidism کا بچپن میں علاج (Treat undescended testis in childhood)",
"Tumour markers ہر 6 ہفتے (AFP, βhCG, LDH monitoring)",
"Contralateral testis بھی چیک کریں (Check contralateral testis)",
"Chemotherapy کے بعد fertility plan بنائیں (Fertility planning post chemo)",
],
},
{
"case_no": 14,
"title": "Acute Urinary Retention (AUR)",
"patient": {"name": "Mr. Ghulam Nabi", "age": "70 Years / Male", "weight": "74 kg", "id": "URO-014"},
"complaints": "Unable to pass urine for past 10 hours; severe lower abdominal pain; palpable bladder; known BPH",
"diagnosis": "Acute Urinary Retention secondary to BPH - Catheterised (650 ml drained); TWOC planned",
"medicines": [
{"name": "TAB. TAMSULOSIN (0.4 MG)", "dose": "1 Tablet", "freq": "رات کو (Once at night - before TWOC)", "dur": "At least 3 days pre-TWOC"},
{"name": "TAB. FINASTERIDE (5 MG)", "dose": "1 Tablet", "freq": "روزانہ ایک بار (Once daily - long term BPH)", "dur": "Long term"},
{"name": "TAB. TRIMETHOPRIM (200 MG)", "dose": "1 Tablet", "freq": "رات کو (Once at night - catheter prophylaxis)", "dur": "While catheterised"},
{"name": "TAB. PARACETAMOL (500 MG)", "dose": "2 Tablets", "freq": "دن میں چار بار (Four times daily - pain)", "dur": "3 Days"},
],
"prevention": [
"بہت زیادہ پانی ایک ساتھ نہ پئیں (Avoid rapid large fluid intake)",
"سردی سے بچیں (Avoid cold weather - triggers retention)",
"قبض سے بچیں (Avoid constipation)",
"اینٹی ہسٹامین سے پرہیز (Avoid antihistamines / decongestants)",
"TURP کی رائے لیں (Surgical referral - TURP if TWOC fails)",
],
},
{
"case_no": 15,
"title": "Chronic Prostatitis / Chronic Pelvic Pain Syndrome",
"patient": {"name": "Mr. Faisal Nawaz", "age": "38 Years / Male", "weight": "71 kg", "id": "URO-015"},
"complaints": "Persistent perineal/pelvic pain >3 months; pain on ejaculation; post-void dribbling; NIH-CPSI score 22; urine culture negative",
"diagnosis": "Chronic Prostatitis / Chronic Pelvic Pain Syndrome Category IIIB (NIH Classification)",
"medicines": [
{"name": "TAB. CIPROFLOXACIN (500 MG)", "dose": "1 Tablet", "freq": "دن میں دو بار (Twice daily)", "dur": "4 Weeks"},
{"name": "TAB. TAMSULOSIN (0.4 MG)", "dose": "1 Tablet", "freq": "رات کو (Once at night - alpha blocker)", "dur": "3 Months"},
{"name": "TAB. IBUPROFEN (400 MG)", "dose": "1 Tablet", "freq": "دن میں تین بار کھانے کے بعد (TDS after food - NSAID)", "dur": "2 Weeks"},
{"name": "TAB. AMITRIPTYLINE (10 MG)", "dose": "1 Tablet", "freq": "رات کو سونے سے پہلے (Once at night - neuropathic pain)", "dur": "3 Months"},
],
"prevention": [
"مسالہ دار کھانا اور الکوحل سے پرہیز (Avoid spicy food and alcohol)",
"گرم سٹز باتھ لیں (Warm sitz baths)",
"دیر تک بیٹھنے سے گریز (Avoid prolonged sitting)",
"باقاعدہ ورزش (Regular exercise - swimming, walking)",
"Stress کم کریں (Stress management)",
],
},
]
print(f"Total cases loaded: {len(CASES)}")
for c in CASES:
print(f" Case {c['case_no']}: {c['title']}")
~/urology-opd-cases/make_images.py
#!/usr/bin/env python3
"""
Generate prescription images for all Urology OPD cases
"""
import os
import textwrap
from PIL import Image, ImageDraw, ImageFont
OUTPUT_DIR = "/home/daytona/workspace/urology-opd-cases/output"
os.makedirs(OUTPUT_DIR, exist_ok=True)
CASES = [
{
"case_no": 1, "title": "Benign Prostatic Hyperplasia (BPH)",
"patient": {"name": "Mr. Muhammad Ali", "age": "65 Years / Male", "weight": "78 kg", "id": "URO-001"},
"complaints": "Frequency of urination, nocturia (3-4x/night), weak stream, hesitancy, feeling of incomplete bladder emptying - 6 months",
"diagnosis": "Benign Prostatic Hyperplasia (BPH) - Grade II",
"medicines": [
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو سونے سے پہلے (Once daily at night)", "3 Months"),
("TAB. FINASTERIDE (5 MG)", "1 Tab", "روزانہ ایک بار (Once daily)", "6 Months"),
("TAB. SOLIFENACIN (5 MG)", "1 Tab", "روزانہ ایک بار (Once daily)", "1 Month"),
],
"prevention": [
"شام کے بعد پانی کم پئیں (Reduce fluid after evening)",
"چائے، کافی، الکوحل سے پرہیز (Avoid caffeine & alcohol)",
"ہر 6 ماہ بعد PSA test کروائیں (PSA check every 6 months)",
"باقاعدہ ورزش کریں (Regular exercise)",
],
},
{
"case_no": 2, "title": "Urinary Tract Infection (UTI)",
"patient": {"name": "Mrs. Fatima Bibi", "age": "35 Years / Female", "weight": "62 kg", "id": "URO-002"},
"complaints": "Burning micturition, frequency, suprapubic pain, cloudy urine - 3 days",
"diagnosis": "Acute Uncomplicated Cystitis (Lower UTI)",
"medicines": [
("TAB. NITROFURANTOIN (100 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ (Twice daily with food)", "7 Days"),
("TAB. PHENAZOPYRIDINE (200 MG)", "1 Tab", "دن میں تین بار (Three times daily)", "2 Days"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "ضرورت پر کھانے کے بعد (SOS after food)", "3 Days"),
],
"prevention": [
"خوب پانی پئیں کم از کم 2-3 لیٹر (Drink 2-3 liters water daily)",
"پیشاب روکیں نہیں (Do not hold urine)",
"صفائی آگے سے پیچھے کی طرف (Wipe front to back)",
"جنسی تعلق کے بعد پیشاب کریں (Void after intercourse)",
],
},
{
"case_no": 3, "title": "Renal Colic / Ureteric Stone",
"patient": {"name": "Mr. Usman Khan", "age": "40 Years / Male", "weight": "80 kg", "id": "URO-003"},
"complaints": "Sudden severe loin-to-groin colicky pain, nausea, vomiting, haematuria - 12 hours",
"diagnosis": "Right Ureteric Calculus (Lower 1/3rd) - 6mm stone on KUB X-ray",
"medicines": [
("TAB. DICLOFENAC SODIUM (75 MG)", "1 Tab", "دن میں دو بار کھانے کے بعد (Twice daily after food)", "5 Days"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو (Once at night - MET therapy)", "4 Weeks"),
("SYP. METOCLOPRAMIDE (5MG/5ML)", "10 ml", "دن میں تین بار متلی پر (TDS for nausea)", "3 Days"),
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار (Twice daily if infection)", "5 Days"),
],
"prevention": [
"روزانہ 3 لیٹر سے زیادہ پانی پئیں (Drink >3L water daily)",
"نمک کم کھائیں (Reduce salt intake)",
"پالک، ٹماٹر، مونگ پھلی کم کھائیں (Reduce oxalate foods)",
"سرخ گوشت کم کریں (Reduce red meat)",
],
},
{
"case_no": 4, "title": "Haematuria (Painless Blood in Urine)",
"patient": {"name": "Mr. Tariq Mahmood", "age": "58 Years / Male", "weight": "75 kg", "id": "URO-004"},
"complaints": "Painless visible haematuria (frank blood in urine) - 2 episodes in 1 week; smoker 25 years",
"diagnosis": "Painless Macroscopic Haematuria - CT Urogram + Cystoscopy ordered",
"medicines": [
("TAB. TRANEXAMIC ACID (500 MG)", "2 Tabs", "دن میں تین بار (Three times daily)", "3 Days"),
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار (Twice daily)", "5 Days"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے صبح (Once daily before breakfast)", "5 Days"),
],
"prevention": [
"تمباکو نوشی بالکل بند کریں (Stop smoking - most important!)",
"کافی پانی پئیں (Drink plenty of water)",
"Cystoscopy + CT Urogram لازمی کروائیں (Mandatory investigations)",
"خون بند نہ ہو تو فوری ہسپتال (Emergency if bleeding continues)",
],
},
{
"case_no": 5, "title": "Epididymo-Orchitis",
"patient": {"name": "Mr. Ahmed Raza", "age": "28 Years / Male", "weight": "70 kg", "id": "URO-005"},
"complaints": "Painful swollen red right testis - 3 days; dysuria; urethral discharge; sexually active",
"diagnosis": "Acute Epididymo-Orchitis (STI-related - Chlamydia/Gonorrhoea)",
"medicines": [
("TAB. DOXYCYCLINE (100 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ (Twice daily with food)", "14 Days"),
("TAB. CEFTRIAXONE 500MG (Single Dose IM)", "IM Inj", "صرف ایک بار (Single dose only)", "1 Day"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد (TDS after food)", "7 Days"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے (Before meals)", "7 Days"),
],
"prevention": [
"جنسی تعلق میں احتیاط - condom (Safe sex - condom use)",
"Partner کا علاج بھی ضروری (Treat sexual partner)",
"خصیوں کو سہارا دیں (Scrotal support/elevation)",
"STI screening مکمل کروائیں (Complete STI screen)",
],
},
{
"case_no": 6, "title": "Prostate Cancer (Localised)",
"patient": {"name": "Mr. Zia ur Rehman", "age": "68 Years / Male", "weight": "77 kg", "id": "URO-006"},
"complaints": "Raised PSA (12 ng/mL) on screening; DRE: firm irregular prostate; Biopsy: Gleason 7 (3+4)",
"diagnosis": "Localised Prostate Cancer - Gleason 7, cT2b N0 M0",
"medicines": [
("TAB. BICALUTAMIDE (50 MG)", "1 Tab", "روزانہ ایک بار (Once daily)", "3 Months"),
("INJ. LEUPROLIDE 3.75MG IM", "3.75 mg IM", "ہر ماہ ایک بار (Once monthly)", "As per oncology"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو (Once at night - for LUTS)", "Ongoing"),
("TAB. CALCIUM + VIT D3 (500/400IU)", "1 Tab", "روزانہ ایک بار (Once daily)", "Long term"),
],
"prevention": [
"سرخ گوشت اور چکنائی کم کریں (Reduce red meat & fat)",
"ٹماٹر اور سبزیاں زیادہ کھائیں (Increase tomatoes - lycopene)",
"PSA ہر 3 ماہ بعد (PSA monitoring every 3 months)",
"DEXA scan ہارمون تھراپی کے دوران (Bone density scan on hormonal therapy)",
],
},
{
"case_no": 7, "title": "Bladder Cancer (TCC - Post-TURBT)",
"patient": {"name": "Mr. Pervez Akhtar", "age": "62 Years / Male", "weight": "73 kg", "id": "URO-007"},
"complaints": "Recurrent painless haematuria; smoker 30 years; cystoscopy: papillary tumour posterior wall",
"diagnosis": "Superficial Bladder TCC (Ta G2) - Post-TURBT, for BCG therapy",
"medicines": [
("BCG INTRAVESICAL (1 vial)", "1 vial intravesical", "ہفتے میں ایک بار 6 ہفتے (Once weekly x6 weeks)", "6 Weeks"),
("TAB. OXYBUTYNIN (5 MG)", "1 Tab", "دن میں دو بار (Twice daily - bladder spasm)", "During BCG"),
("TAB. PHENAZOPYRIDINE (200 MG)", "1 Tab", "دن میں تین بار (TDS - dysuria relief)", "As needed"),
],
"prevention": [
"تمباکو نوشی مکمل بند کریں (Stop smoking completely - #1 risk factor)",
"Industrial chemicals سے دور رہیں (Avoid industrial chemicals)",
"خوب پانی پئیں (Drink plenty of water - dilutes carcinogens)",
"Cystoscopy ہر 3 ماہ (Surveillance cystoscopy every 3 months)",
],
},
{
"case_no": 8, "title": "Stress Urinary Incontinence (Female)",
"patient": {"name": "Mrs. Rubina Shaheen", "age": "48 Years / Female", "weight": "69 kg", "id": "URO-008"},
"complaints": "Urine leakage on coughing, sneezing, laughing; 3 vaginal deliveries; stress test positive",
"diagnosis": "Genuine Stress Urinary Incontinence (GSI) - Urodynamics confirmed",
"medicines": [
("TAB. DULOXETINE (40 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ (Twice daily with food)", "3 Months"),
("TAB. OXYBUTYNIN (5 MG)", "1 Tab", "رات کو (Once at night - if mixed incontinence)", "1 Month"),
("VAGINAL ESTROGEN CREAM (Ovestin)", "Apply locally", "رات کو لگائیں (Apply at night)", "3 Months"),
],
"prevention": [
"Kegel exercises روزانہ کریں (Daily pelvic floor exercises - MOST IMPORTANT)",
"وزن کم کریں اگر زیادہ ہو (Lose weight if obese)",
"قبض سے بچیں (Avoid constipation)",
"بھاری چیزیں اٹھانے سے بچیں (Avoid heavy lifting)",
"چائے کافی کم کریں (Reduce caffeine)",
],
},
{
"case_no": 9, "title": "Erectile Dysfunction (ED)",
"patient": {"name": "Mr. Imran Siddiqui", "age": "52 Years / Male", "weight": "85 kg", "id": "URO-009"},
"complaints": "Inability to achieve/maintain erection for intercourse - 1 year; DM type 2, hypertensive",
"diagnosis": "Erectile Dysfunction - Mixed Organic (Vasculogenic + Diabetic Neuropathy)",
"medicines": [
("TAB. SILDENAFIL (50 MG)", "1 Tab", "جنسی تعلق سے 1 گھنٹہ پہلے (PRN - 1 hr before intercourse)", "Ongoing"),
("TAB. METFORMIN (500 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ (Twice daily with food)", "Long term"),
("TAB. TESTOSTERONE (if deficient)", "As per level", "ڈاکٹر کی ہدایت کے مطابق (As directed)", "3 Months trial"),
],
"prevention": [
"شوگر اور بلڈ پریشر کنٹرول کریں (Control DM and BP)",
"تمباکو نوشی بند کریں (Stop smoking)",
"باقاعدہ ورزش کریں (Regular exercise)",
"الکوحل سے پرہیز (Avoid alcohol)",
"ذہنی تناؤ کم کریں (Reduce psychological stress)",
],
},
{
"case_no": 10, "title": "Overactive Bladder (OAB)",
"patient": {"name": "Mrs. Sajida Perveen", "age": "55 Years / Female", "weight": "65 kg", "id": "URO-010"},
"complaints": "Urgency, frequency (>8x/day), nocturia (3x/night), urge incontinence; urine culture negative",
"diagnosis": "Overactive Bladder Syndrome (OAB Wet) - Idiopathic",
"medicines": [
("TAB. SOLIFENACIN (5 MG)", "1 Tab", "روزانہ ایک بار (Once daily)", "3 Months"),
("TAB. MIRABEGRON (50 MG)", "1 Tab", "روزانہ ایک بار (Once daily - if solifenacin not tolerated)", "3 Months"),
("TAB. OXYBUTYNIN (5 MG)", "1 Tab", "دن میں دو بار (Twice daily - alternative)", "2 Months"),
],
"prevention": [
"Bladder training کریں (Bladder retraining - delay voiding 5 min weekly)",
"چائے کافی مکمل بند کریں (Stop caffeine completely)",
"Fluid diary لکھیں (Keep fluid and voiding diary)",
"شام کے بعد کم پانی پئیں (Reduce fluid after 6 PM)",
"Pelvic floor exercises (Pelvic floor exercises daily)",
],
},
{
"case_no": 11, "title": "Varicocele + Male Infertility",
"patient": {"name": "Mr. Bilal Hassan", "age": "24 Years / Male", "weight": "65 kg", "id": "URO-011"},
"complaints": "Dull aching left scrotal pain; heaviness; worsens on standing; married 2 years, no children; semen: oligoasthenospermia",
"diagnosis": "Left Varicocele Grade II + Secondary Male Infertility",
"medicines": [
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد (TDS after food)", "1 Week"),
("TAB. VITAMIN E (400 IU)", "1 Cap", "روزانہ ایک بار (Once daily)", "3 Months"),
("TAB. FOLIC ACID (5 MG)", "1 Tab", "روزانہ ایک بار (Once daily)", "3 Months"),
("TAB. COENZYME Q10 (200 MG)", "1 Cap", "روزانہ ایک بار (Once daily - antioxidant)", "3 Months"),
],
"prevention": [
"Scrotal support پہنیں (Wear scrotal support/jockstrap)",
"لمبے عرصے تک کھڑے نہ رہیں (Avoid prolonged standing)",
"بھاری ورزش سے گریز (Avoid heavy exercise)",
"Varicocelectomy کی رائے لیں (Surgical referral - varicocelectomy)",
"سالانہ semen analysis (Annual semen analysis)",
],
},
{
"case_no": 12, "title": "PUJ Obstruction / Hydronephrosis",
"patient": {"name": "Mr. Salman Riaz", "age": "32 Years / Male", "weight": "72 kg", "id": "URO-012"},
"complaints": "Recurrent left loin pain after large fluid intake; US: moderate left hydronephrosis; MAG3: obstructed",
"diagnosis": "Left Pelviureteric Junction (PUJ) Obstruction - MAG3 renogram obstructed; RF 38%",
"medicines": [
("TAB. DICLOFENAC SODIUM (50 MG)", "1 Tab", "دن میں دو بار کھانے کے بعد (Twice daily after food)", "5 Days PRN"),
("TAB. TRIMETHOPRIM (200 MG)", "1 Tab", "رات کو (Once at night - antibiotic prophylaxis)", "Until surgery"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے (Before meals)", "With NSAID use"),
],
"prevention": [
"آہستہ آہستہ پانی پئیں (Drink water slowly - avoid rapid intake)",
"بخار یا درد میں فوری ڈاکٹر (Immediate review if fever/pain)",
"Laparoscopic Pyeloplasty کی رائے لیں (Surgical referral - pyeloplasty)",
"MAG3 renogram سالانہ (Annual MAG3 follow-up)",
],
},
{
"case_no": 13, "title": "Testicular Germ Cell Tumour",
"patient": {"name": "Mr. Kamran Ali", "age": "26 Years / Male", "weight": "68 kg", "id": "URO-013"},
"complaints": "Painless hard lump right testis - 2 months; heaviness; AFP elevated; mild gynecomastia",
"diagnosis": "Right Testicular Mass - ? NSGCT (AFP, betaHCG raised) - urgent orchidectomy needed",
"medicines": [
("TAB. IBUPROFEN (400 MG)", "1 Tab", "ضرورت پر کھانے کے بعد (SOS after food - pain)", "As needed"),
("SPERM BANKING - arrange BEFORE surgery", "Referral", "آپریشن سے پہلے (Before orchidectomy)", "Once"),
("TAB. ONDANSETRON (4 MG)", "1 Tab", "دن میں تین بار (TDS - for post-chemo nausea)", "During chemo"),
],
"prevention": [
"ماہانہ خود معائنہ کریں (Monthly testicular self-examination)",
"Cryptorchidism بچپن میں ٹھیک کروائیں (Treat undescended testis in childhood)",
"AFP, HCG, LDH markers ہر 6 ہفتے (Tumour marker monitoring)",
"دوسرا خصیہ بھی چیک کریں (Check contralateral testis)",
"Chemotherapy کے بعد fertility plan (Fertility planning post-chemo)",
],
},
{
"case_no": 14, "title": "Acute Urinary Retention (AUR)",
"patient": {"name": "Mr. Ghulam Nabi", "age": "70 Years / Male", "weight": "74 kg", "id": "URO-014"},
"complaints": "Unable to pass urine 10 hours; severe lower abdominal pain; palpable bladder; known BPH; 650 ml drained on catheterisation",
"diagnosis": "Acute Urinary Retention secondary to BPH - Catheterised; TWOC planned at 3 days",
"medicines": [
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو (Once at night - before TWOC)", "3 Days pre-TWOC"),
("TAB. FINASTERIDE (5 MG)", "1 Tab", "روزانہ ایک بار (Once daily - long term BPH)", "Long term"),
("TAB. TRIMETHOPRIM (200 MG)", "1 Tab", "رات کو (Once at night - catheter prophylaxis)", "While catheterised"),
("TAB. PARACETAMOL (500 MG)", "2 Tabs", "دن میں چار بار (Four times daily - pain)", "3 Days"),
],
"prevention": [
"بہت زیادہ پانی ایک ساتھ نہ پئیں (Avoid rapid large fluid intake)",
"قبض سے بچیں (Avoid constipation)",
"اینٹی ہسٹامین / decongestants سے پرہیز (Avoid antihistamines/decongestants)",
"سردی سے بچیں (Avoid cold weather - triggers retention)",
"TURP کی رائے لیں اگر TWOC fail ہو (TURP if TWOC fails)",
],
},
{
"case_no": 15, "title": "Chronic Prostatitis / CPPS",
"patient": {"name": "Mr. Faisal Nawaz", "age": "38 Years / Male", "weight": "71 kg", "id": "URO-015"},
"complaints": "Persistent perineal/pelvic pain >3 months; pain on ejaculation; post-void dribbling; NIH-CPSI score 22; urine culture: negative",
"diagnosis": "Chronic Prostatitis / CPPS Category IIIB (NIH Classification)",
"medicines": [
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار (Twice daily)", "4 Weeks"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو (Once at night - alpha blocker)", "3 Months"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد (TDS after food)", "2 Weeks"),
("TAB. AMITRIPTYLINE (10 MG)", "1 Tab", "رات کو سونے سے پہلے (Once at bedtime - neuropathic pain)", "3 Months"),
],
"prevention": [
"مسالہ دار کھانا اور الکوحل سے پرہیز (Avoid spicy food and alcohol)",
"گرم سٹز باتھ لیں (Warm sitz baths daily)",
"دیر تک بیٹھنے سے گریز (Avoid prolonged sitting)",
"باقاعدہ ورزش - تیراکی، چہل قدمی (Regular exercise - swimming, walking)",
"ذہنی تناؤ سے بچاؤ (Stress management)",
],
},
]
# ─────────────────────────────────────────────────
# Image generation
# ─────────────────────────────────────────────────
ORANGE_BG = (255, 165, 0)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
DARK_BLUE = (0, 51, 102)
LIGHT_BLUE = (173, 216, 230)
LIGHT_GRAY = (245, 245, 245)
MED_GRAY = (200, 200, 200)
TEAL = (0, 128, 128)
RED = (180, 0, 0)
W, H = 900, 1300
def wrap(text, width):
return textwrap.wrap(text, width=width)
def draw_prescription(case):
img = Image.new("RGB", (W, H), ORANGE_BG)
d = ImageDraw.Draw(img)
# Fonts
try:
font_big = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 28)
font_title = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 22)
font_med = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 17)
font_bold = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 17)
font_sm = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 14)
font_smbold= ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 14)
font_hdr = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 34)
font_sub = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 20)
except:
font_big = font_title = font_med = font_bold = font_sm = font_smbold = font_hdr = font_sub = ImageFont.load_default()
# ── Orange header area ──
d.text((W//2, 18), "UROLOGY OPD CASE", font=font_hdr, fill=DARK_BLUE, anchor="mt")
d.text((W//2, 55), f"PRESCRIPTION #{case['case_no']:02d}", font=font_hdr, fill=BLACK, anchor="mt")
# ── White card ──
CARD_Y = 100
CARD_H = H - 115
d.rounded_rectangle([20, CARD_Y, W-20, CARD_Y+CARD_H], radius=18, fill=WHITE, outline=DARK_BLUE, width=2)
y = CARD_Y + 14
# ── Clinic header bar ──
d.rectangle([22, y, W-22, y+64], fill=DARK_BLUE)
d.text((50, y+8), "UROLOGICAL CARE CENTRE", font=font_title, fill=WHITE)
d.text((50, y+32), "MBBS, FRCS(Urol) | Reg. UCM-2024 | OPD: Mon-Sat 9am-2pm", font=font_sm, fill=LIGHT_BLUE)
# Rx symbol
d.text((W-70, y+8), "Rx", font=font_hdr, fill=(255,200,0))
y += 74
# ── Case title ──
d.rectangle([22, y, W-22, y+34], fill=(230, 245, 255))
d.text((W//2, y+6), f"CASE: {case['title']}", font=font_bold, fill=DARK_BLUE, anchor="mt")
y += 40
# ── Doctor & Date ──
d.text((36, y), "Dr. Amina Urology", font=font_bold, fill=DARK_BLUE)
d.text((W-200, y), "Date: 30/06/2026", font=font_sm, fill=BLACK)
y += 22
d.text((36, y), "FRCS(Urol), MS Surgery | Urology OPD", font=font_sm, fill=(100,100,100))
y += 20
# ── Divider ──
d.line([(30, y), (W-30, y)], fill=DARK_BLUE, width=2)
y += 8
# ── Patient details ──
d.text((36, y), "PATIENT DETAILS", font=font_smbold, fill=DARK_BLUE)
y += 20
p = case["patient"]
d.text((36, y), f"Name: {p['name']}", font=font_sm, fill=BLACK)
d.text((460, y), f"ID: {p['id']}", font=font_sm, fill=BLACK)
y += 18
d.text((36, y), f"Age / Gender: {p['age']}", font=font_sm, fill=BLACK)
d.text((460, y), f"Weight: {p['weight']}", font=font_sm, fill=BLACK)
y += 14
# ── Divider ──
d.line([(30, y), (W-30, y)], fill=MED_GRAY, width=1)
y += 8
# ── Complaints ──
d.text((36, y), "CHIEF COMPLAINTS:", font=font_smbold, fill=DARK_BLUE)
y += 18
for line in wrap(case["complaints"], 85):
d.text((44, y), line, font=font_sm, fill=BLACK)
y += 16
y += 4
# ── Diagnosis ──
d.rectangle([30, y, W-30, y+24], fill=(255, 240, 220))
d.text((36, y+4), "DIAGNOSIS:", font=font_smbold, fill=RED)
diag_lines = wrap(case["diagnosis"], 65)
d.text((160, y+4), diag_lines[0], font=font_smbold, fill=DARK_BLUE)
y += 26
for line in diag_lines[1:]:
d.text((44, y), line, font=font_sm, fill=DARK_BLUE)
y += 16
y += 6
# ── Divider ──
d.line([(30, y), (W-30, y)], fill=DARK_BLUE, width=2)
y += 6
# ── Medicines table header ──
d.rectangle([30, y, W-30, y+24], fill=DARK_BLUE)
d.text((36, y+4), "S.No. Treatment Name", font=font_smbold, fill=WHITE)
d.text((380, y+4), "Dose", font=font_smbold, fill=WHITE)
d.text((490, y+4), "Frequency / Tarteeb", font=font_smbold, fill=WHITE)
d.text((790, y+4), "Duration", font=font_smbold, fill=WHITE)
y += 26
# ── Medicine rows ──
row_colors = [WHITE, LIGHT_GRAY]
for idx, (name, dose, freq, dur) in enumerate(case["medicines"]):
row_h = max(36, 18 * (1 + len(wrap(freq, 35))))
d.rectangle([30, y, W-30, y+row_h], fill=row_colors[idx % 2], outline=MED_GRAY, width=1)
# Row number + name
d.text((36, y+4), f"{idx+1}. {name}", font=font_smbold, fill=DARK_BLUE)
d.text((380, y+4), dose, font=font_sm, fill=BLACK)
# Frequency (may wrap)
freq_lines = wrap(freq, 35)
fy = y + 4
for fl in freq_lines:
d.text((490, fy), fl, font=font_sm, fill=BLACK)
fy += 16
d.text((790, y+4), dur, font=font_sm, fill=TEAL)
y += row_h
y += 8
# ── Divider ──
d.line([(30, y), (W-30, y)], fill=DARK_BLUE, width=2)
y += 8
# ── Prevention / Advice ──
d.rectangle([30, y, W-30, y+22], fill=(220, 255, 220))
d.text((36, y+3), "احتیاطی تدابیر / PREVENTION & ADVICE", font=font_smbold, fill=(0, 100, 0))
y += 28
for tip in case["prevention"]:
for line in wrap(f"• {tip}", 90):
d.text((40, y), line, font=font_sm, fill=BLACK)
y += 16
y += 2
y += 8
# ── Divider ──
d.line([(30, y), (W-30, y)], fill=MED_GRAY, width=1)
y += 8
# ── Signature / Footer ──
d.text((36, y), "Dr. Amina Urology | FRCS(Urol) | Urological Care Centre", font=font_sm, fill=DARK_BLUE)
d.text((36, y+16), "* Generic names in CAPITAL LETTERS as per guidelines *", font=font_sm, fill=(120,120,120))
return img
# Generate all
generated = []
for case in CASES:
img = draw_prescription(case)
fname = f"Case_{case['case_no']:02d}_{case['title'].replace(' ', '_').replace('/', '_').replace('(', '').replace(')', '')[:40]}.png"
path = os.path.join(OUTPUT_DIR, fname)
img.save(path, "PNG")
generated.append(path)
print(f"Saved: {path}")
print(f"\nDone! {len(generated)} prescriptions generated.")
python3 /home/daytona/workspace/urology-opd-cases/make_images.py
cd /home/daytona/workspace/urology-opd-cases && zip -j output/ALL_Urology_OPD_Prescriptions.zip output/Case_*.png && echo "ZIP created" && ls -lh output/
cd /home/daytona/workspace/urology-opd-cases/output && python3 -c "import zipfile, os; z=zipfile.ZipFile('ALL_Urology_OPD_Prescriptions.zip','w'); [z.write(f) for f in os.listdir('.') if f.endswith('.png')]; z.close(); print('Done')" && ls -lh
python3 -c " import zipfile, os, glob pngs = sorted(glob.glob('/home/daytona/workspace/urology-opd-cases/output/Case_*.png')) with zipfile.ZipFile('/home/daytona/workspace/urology-opd-cases/output/ALL_Urology_OPD_Prescriptions.zip','w', compression=zipfile.ZIP_DEFLATED) as z: for p in pngs: z.write(p, os.path.basename(p)) print('ZIP done:', len(pngs), 'files') import os print('Size:', os.path.getsize('/home/daytona/workspace/urology-opd-cases/output/ALL_Urology_OPD_Prescriptions.zip')) "
ls -lh /home/daytona/workspace/urology-opd-cases/output/Case_*.png | head -20
| # | Case | Download |
|---|---|---|
| 1 | Benign Prostatic Hyperplasia (BPH) | Case 01 Benign Prostatic Hyperplasia BPH Image · PNG |
| 2 | Urinary Tract Infection (UTI) | Case 02 Urinary Tract Infection UTI Image · PNG |
| 3 | Renal Colic / Ureteric Stone | Case 03 Renal Colic Ureteric Stone Image · PNG |
| 4 | Haematuria (Painless Blood in Urine) | Case 04 Haematuria Painless Blood in Urine Image · PNG |
| 5 | Epididymo-Orchitis | Case 05 Epididymo Orchitis Image · PNG |
| 6 | Prostate Cancer (Localised) | Case 06 Prostate Cancer Localised Image · PNG |
| 7 | Bladder Cancer TCC - Post-TURBT | Case 07 Bladder Cancer TCC Post TURBT Image · PNG |
| 8 | Stress Urinary Incontinence (Female) | Case 08 Stress Urinary Incontinence Female Image · PNG |
| 9 | Erectile Dysfunction (ED) | Case 09 Erectile Dysfunction ED Image · PNG |
| 10 | Overactive Bladder (OAB) | Case 10 Overactive Bladder OAB Image · PNG |
| 11 | Varicocele + Male Infertility | Case 11 Varicocele + Male Infertility Image · PNG |
| 12 | PUJ Obstruction / Hydronephrosis | Case 12 PUJ Obstruction Hydronephrosis Image · PNG |
| 13 | Testicular Germ Cell Tumour | Case 13 Testicular Germ Cell Tumour Image · PNG |
| 14 | Acute Urinary Retention (AUR) | Case 14 Acute Urinary Retention AUR Image · PNG |
| 15 | Chronic Prostatitis / CPPS | Case 15 Chronic Prostatitis CPPS Image · PNG |
teach me more opd cases of urology from frcs urology above given book make notes or book of opd cases which include only diagnosis and medicine dose frequency and prevention in urdu make short book of first 25 important opd cases of urology
python3 -c "from reportlab.lib.pagesizes import A4; print('reportlab OK')" && python3 -c "from PIL import Image; print('Pillow OK')"
~/urology-opd-cases/build_book.py
#!/usr/bin/env python3
"""
UROLOGY OPD CASES - Complete Book (25 Cases)
Based on FRCS(Urol) Viva Practice - Manit Arya & Iqbal Shergill
PDF Book Generator using ReportLab
"""
import os
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT, TA_JUSTIFY
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
PageBreak, HRFlowable, KeepTogether
)
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
OUTPUT = "/home/daytona/workspace/urology-opd-cases/output/Urology_OPD_25_Cases_Book.pdf"
# ─── Register Noto Nastaliq Urdu font (for Urdu text) ───
URDU_FONT = "Helvetica" # fallback; Urdu will render as Latin placeholders
try:
pdfmetrics.registerFont(TTFont("NotoNastaliq", "/usr/share/fonts/truetype/noto/NotoNastaliqUrdu-Regular.ttf"))
URDU_FONT = "NotoNastaliq"
print("Noto Nastaliq loaded")
except:
try:
pdfmetrics.registerFont(TTFont("NotoNaskhArabic", "/usr/share/fonts/truetype/noto/NotoNaskhArabic-Regular.ttf"))
URDU_FONT = "NotoNaskhArabic"
print("Noto Naskh Arabic loaded")
except:
print("Urdu font not found, using fallback")
# ─────────────────────────────────────────────────────────────────
# CASE DATA — 25 cases
# Each case: no, title_en, title_ur, diagnosis_en, diagnosis_ur,
# medicines: [ (name_en, dose_en, freq_ur, dur_en) ],
# prevention: [ (text_ur, text_en) ]
# ─────────────────────────────────────────────────────────────────
CASES = [
# ══════════════════════════════════════════════════════════════
{
"no": 1,
"title": "Benign Prostatic Hyperplasia (BPH)",
"title_ur": "پروسٹیٹ غدود کا بڑھنا",
"diagnosis": "BPH Grade II — IPSS Score >20, Qmax <10 ml/s, PVR >100 ml",
"diagnosis_ur": "پروسٹیٹ کا بڑھنا - درجہ دوم",
"meds": [
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو سونے سے پہلے - روزانہ", "3 ماہ"),
("TAB. FINASTERIDE (5 MG)", "1 Tab", "روزانہ ایک بار - صبح", "6 ماہ"),
("TAB. SOLIFENACIN (5 MG)", "1 Tab", "روزانہ ایک بار - اگر عجلت بھی ہو", "1 ماہ"),
],
"prevention": [
("شام کے بعد پانی کم پئیں", "Reduce fluid intake after evening"),
("چائے، کافی اور الکوحل سے پرہیز کریں", "Avoid caffeine and alcohol"),
("ہر 6 ماہ بعد PSA ٹیسٹ کروائیں", "PSA monitoring every 6 months"),
("قبض سے بچیں", "Avoid constipation"),
("باقاعدہ ورزش کریں", "Regular exercise"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 2,
"title": "Acute Uncomplicated UTI (Cystitis)",
"title_ur": "مثانے کا انفیکشن",
"diagnosis": "Acute Uncomplicated Cystitis — E.coli (commonest); Urine C&S: >10⁵ CFU/ml",
"diagnosis_ur": "مثانے کا تیز انفیکشن - بغیر پیچیدگی کے",
"meds": [
("TAB. NITROFURANTOIN (100 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ", "7 دن"),
("TAB. PHENAZOPYRIDINE (200 MG)", "1 Tab", "دن میں تین بار", "2 دن صرف"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "ضرورت پر کھانے کے بعد", "3 دن"),
],
"prevention": [
("روزانہ 2-3 لیٹر پانی پئیں", "Drink 2–3 L water daily"),
("پیشاب روکیں نہیں", "Do not hold urine"),
("صفائی آگے سے پیچھے کی طرف کریں", "Wipe front to back (females)"),
("جنسی تعلق کے بعد پیشاب کریں", "Void after intercourse"),
("Cranberry juice مفید ہے", "Cranberry juice reduces recurrence"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 3,
"title": "Ureteric Colic / Kidney Stone",
"title_ur": "گردے کی پتھری - یوریٹر میں",
"diagnosis": "Right Ureteric Calculus 6 mm (Lower 1/3rd) — KUB + USS confirmed; No infection",
"diagnosis_ur": "دائیں یوریٹر میں پتھری - 6 ملی میٹر",
"meds": [
("TAB. DICLOFENAC SODIUM (75 MG)", "1 Tab", "دن میں دو بار کھانے کے بعد", "5 دن"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو - پتھری نکالنے کے لیے", "4 ہفتے (MET)"),
("TAB. METOCLOPRAMIDE (10 MG)", "1 Tab", "متلی پر دن میں تین بار", "3 دن"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے صبح", "5 دن"),
],
"prevention": [
("روزانہ 3 لیٹر سے زیادہ پانی پئیں", "Drink >3 L water daily — most important"),
("نمک کم کھائیں", "Reduce dietary salt"),
("پالک، ٹماٹر، مونگ پھلی کم کھائیں", "Reduce oxalate-rich foods"),
("سرخ گوشت اور پروٹین کم کریں", "Reduce red meat / animal protein"),
("پیشاب ہلکا پیلا رکھیں", "Keep urine pale yellow (hydration check)"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 4,
"title": "Painless Macroscopic Haematuria",
"title_ur": "بغیر درد خون آنا پیشاب میں",
"diagnosis": "Painless Macroscopic Haematuria — Urgent: CT Urogram + Flexible Cystoscopy (? TCC Bladder)",
"diagnosis_ur": "بغیر درد پیشاب میں خون - مثانے کا کینسر خارج از امکان نہیں",
"meds": [
("TAB. TRANEXAMIC ACID (500 MG)", "2 Tabs", "دن میں تین بار", "3 دن"),
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار", "5 دن"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "صبح کھانے سے پہلے", "5 دن"),
],
"prevention": [
("تمباکو نوشی فوری بند کریں - سب سے اہم", "Stop smoking immediately — #1 risk factor"),
("خوب پانی پئیں", "Drink plenty of water"),
("CT Urogram اور Cystoscopy لازمی", "CT urogram + cystoscopy mandatory"),
("خون بند نہ ہو تو فوری A&E جائیں", "Emergency if bleeding does not stop"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 5,
"title": "Epididymo-Orchitis (STI Related)",
"title_ur": "خصیے کی سوزش - جنسی انفیکشن",
"diagnosis": "Acute Epididymo-Orchitis — STI origin (Chlamydia trachomatis / N. gonorrhoeae); NAAT positive",
"diagnosis_ur": "خصیے اور ایپیڈیڈیمس کی سوزش - جنسی طور پر منتقل",
"meds": [
("TAB. DOXYCYCLINE (100 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ", "14 دن"),
("INJ. CEFTRIAXONE 500 MG IM", "1 Inj", "صرف ایک بار IM - آج دیں", "1 بار صرف"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد", "7 دن"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے", "7 دن"),
],
"prevention": [
("جنسی تعلق میں condom استعمال کریں", "Use condoms — safe sex"),
("جنسی ساتھی کا علاج بھی ضروری ہے", "Treat sexual partner simultaneously"),
("STI مکمل اسکریننگ کروائیں", "Full STI screen (HIV, Hep B, syphilis)"),
("خصیوں کو سہارا دیں / اونچا رکھیں", "Scrotal support and elevation"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 6,
"title": "Localised Prostate Cancer",
"title_ur": "پروسٹیٹ کا کینسر - ابتدائی مرحلہ",
"diagnosis": "Prostate Adenocarcinoma — Gleason 7 (3+4), cT2b N0 M0; PSA 12 ng/mL; ISUP Grade 2",
"diagnosis_ur": "پروسٹیٹ کینسر - گلیسن 7، مقامی مرحلہ",
"meds": [
("TAB. BICALUTAMIDE (50 MG)", "1 Tab", "روزانہ ایک بار", "3 ماہ"),
("INJ. LEUPROLIDE 3.75 MG IM", "3.75 mg","ہر ماہ ایک بار", "آنکولوجی کے مطابق"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو - LUTS کے لیے", "جاری رہے"),
("TAB. CALCIUM + VIT D3 (500/400)", "1 Tab", "روزانہ ایک بار", "طویل مدتی"),
],
"prevention": [
("سرخ گوشت اور چکنائی کم کریں", "Reduce red meat and saturated fat"),
("ٹماٹر اور سبز سبزیاں زیادہ کھائیں", "Increase lycopene — tomatoes, greens"),
("PSA ہر 3 ماہ بعد چیک کروائیں", "PSA monitoring every 3 months"),
("DEXA scan کروائیں ہارمون تھراپی میں", "DEXA bone scan during ADT therapy"),
("باقاعدہ ورزش - ہڈیوں کے لیے", "Regular weight-bearing exercise"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 7,
"title": "Bladder Cancer TCC — Post-TURBT",
"title_ur": "مثانے کا کینسر - آپریشن کے بعد BCG علاج",
"diagnosis": "Transitional Cell Carcinoma Bladder (Ta G2) — Post-TURBT; for BCG intravesical immunotherapy",
"diagnosis_ur": "مثانے کا TCC کینسر - Ta G2 - TURBT کے بعد",
"meds": [
("BCG INTRAVESICAL (81 mg/vial)", "1 Vial", "ہفتے میں ایک بار - 6 ہفتے", "6 ہفتے"),
("TAB. OXYBUTYNIN (5 MG)", "1 Tab", "دن میں دو بار", "BCG دوران"),
("TAB. PHENAZOPYRIDINE (200 MG)", "1 Tab", "دن میں تین بار - جلن پر", "ضرورت پر"),
],
"prevention": [
("تمباکو نوشی مکمل بند کریں", "Stop smoking completely — strongest risk factor"),
("صنعتی کیمیکلز سے دور رہیں", "Avoid industrial chemicals / dyes / rubber"),
("خوب پانی پئیں", "Drink plenty of water — dilutes carcinogens"),
("Cystoscopy ہر 3 ماہ بعد لازمی", "Surveillance cystoscopy every 3 months"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 8,
"title": "Female Stress Urinary Incontinence",
"title_ur": "خواتین میں کھانسنے / ہنسنے پر پیشاب نکلنا",
"diagnosis": "Genuine Stress Urinary Incontinence (GSI) — Urodynamics: USI confirmed, no detrusor overactivity",
"diagnosis_ur": "حقیقی اسٹریس پیشاب بے قابوی - یورو ڈائنامکس تصدیق شدہ",
"meds": [
("TAB. DULOXETINE (40 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ", "3 ماہ"),
("VAGINAL ESTROGEN CREAM (Ovestin)", "Apply", "رات کو لگائیں - اندام نہانی میں","3 ماہ"),
("TAB. OXYBUTYNIN (5 MG)", "1 Tab", "رات کو - اگر عجلت بھی ہو", "1 ماہ"),
],
"prevention": [
("Kegel exercises روزانہ کریں - سب سے اہم", "Daily pelvic floor exercises — FIRST LINE"),
("وزن کم کریں اگر زیادہ ہو", "Lose weight if BMI >30"),
("قبض سے بچیں", "Avoid constipation"),
("بھاری چیزیں اٹھانے سے بچیں", "Avoid heavy lifting"),
("چائے اور کافی کم کریں", "Reduce caffeine intake"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 9,
"title": "Erectile Dysfunction (ED)",
"title_ur": "مردانہ کمزوری",
"diagnosis": "Erectile Dysfunction — Mixed Organic (Vasculogenic + Diabetic Neuropathy); IIEF-5 score <10",
"diagnosis_ur": "عضو تناسل کی خرابی - مخلوط وجوہات - ذیابطیس اور بلڈ پریشر",
"meds": [
("TAB. SILDENAFIL (50 MG)", "1 Tab", "جنسی تعلق سے 1 گھنٹہ پہلے - ضرورت پر", "جاری رہے"),
("TAB. METFORMIN (500 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ", "طویل مدتی"),
("TAB. TESTOSTERONE (if low level)", "per TFT","ڈاکٹر کی ہدایت کے مطابق", "3 ماہ ٹرائل"),
],
"prevention": [
("ذیابطیس اور بلڈ پریشر قابو میں رکھیں", "Control DM and hypertension — key"),
("تمباکو نوشی بند کریں", "Stop smoking — major vascular risk"),
("الکوحل سے پرہیز کریں", "Avoid alcohol"),
("باقاعدہ ورزش کریں", "Regular aerobic exercise"),
("ذہنی تناؤ کم کریں", "Manage psychological stress / anxiety"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 10,
"title": "Overactive Bladder (OAB)",
"title_ur": "مثانے کی بے قابوی اور عجلت",
"diagnosis": "OAB Wet Syndrome — Urodynamics: Detrusor Overactivity; MSU negative",
"diagnosis_ur": "مثانے کی زیادہ حرکت - ڈیٹروسر اوور ایکٹیوٹی",
"meds": [
("TAB. SOLIFENACIN (5 MG)", "1 Tab", "روزانہ ایک بار", "3 ماہ"),
("TAB. MIRABEGRON (50 MG)", "1 Tab", "روزانہ ایک بار - متبادل دوا", "3 ماہ"),
("TAB. OXYBUTYNIN (5 MG)", "1 Tab", "دن میں دو بار", "2 ماہ"),
],
"prevention": [
("مثانے کی ٹریننگ کریں - ہر ہفتے 5 منٹ دیر کریں", "Bladder retraining — delay voiding 5 min/week"),
("چائے اور کافی مکمل بند کریں", "Stop caffeine completely"),
("پیشاب کی ڈائری لکھیں", "Keep a voiding diary"),
("شام 6 بجے کے بعد پانی کم پئیں", "Restrict fluids after 6 PM"),
("روزانہ Kegel exercises کریں", "Daily pelvic floor exercises"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 11,
"title": "Varicocele + Male Infertility",
"title_ur": "خصیوں کی رگوں کا پھولنا اور بانجھ پن",
"diagnosis": "Left Varicocele Grade II — Semen Analysis: Oligoasthenospermia; USS Doppler confirmed",
"diagnosis_ur": "بائیں جانب ورائیکوسیل گریڈ 2 - سپرم کی کمی اور کمزوری",
"meds": [
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد", "1 ہفتہ"),
("TAB. VITAMIN E (400 IU)", "1 Cap", "روزانہ ایک بار", "3 ماہ"),
("TAB. FOLIC ACID (5 MG)", "1 Tab", "روزانہ ایک بار", "3 ماہ"),
("TAB. COENZYME Q10 (200 MG)", "1 Cap", "روزانہ ایک بار", "3 ماہ"),
],
"prevention": [
("Scrotal support / jockstrap پہنیں", "Wear scrotal support — reduces discomfort"),
("لمبے عرصے تک کھڑے نہ رہیں", "Avoid prolonged standing"),
("بھاری ورزش سے گریز کریں", "Avoid heavy weightlifting"),
("سالانہ سپرم ٹیسٹ کروائیں", "Annual semen analysis"),
("Varicocelectomy کی رائے لیں", "Surgical referral — microsurgical varicocelectomy"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 12,
"title": "PUJ Obstruction / Hydronephrosis",
"title_ur": "گردے کی نالی کی رکاوٹ",
"diagnosis": "Left PUJ Obstruction — MAG3 Renogram: Obstructed pattern; Differential Function 38%; Moderate hydronephrosis",
"diagnosis_ur": "بائیں گردے کی نالی میں رکاوٹ - MAG3 ثابت",
"meds": [
("TAB. DICLOFENAC SODIUM (50 MG)", "1 Tab", "دن میں دو بار کھانے کے بعد - درد پر", "5 دن ضرورت پر"),
("TAB. TRIMETHOPRIM (200 MG)", "1 Tab", "رات کو - آپریشن تک", "آپریشن تک"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے", "NSAID کے ساتھ"),
],
"prevention": [
("پانی آہستہ آہستہ پئیں - یکدم بہت زیادہ نہیں", "Avoid rapid large fluid intake"),
("بخار یا شدید درد پر فوری ڈاکٹر سے ملیں", "Immediate review if fever / severe pain"),
("Laparoscopic Pyeloplasty کروائیں", "Surgical referral — Anderson-Hynes pyeloplasty"),
("سالانہ MAG3 renogram کروائیں", "Annual MAG3 renogram follow-up"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 13,
"title": "Testicular Germ Cell Tumour",
"title_ur": "خصیے کا کینسر",
"diagnosis": "Right Testicular NSGCT — AFP elevated, βhCG mildly raised; LDH raised; Stage IS; Urgent orchidectomy",
"diagnosis_ur": "دائیں خصیے کا کینسر - نان سیمینوما - ابتدائی مرحلہ",
"meds": [
("SPERM BANKING — before surgery", "Referral","آپریشن سے پہلے لازمی", "ایک بار"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "ضرورت پر کھانے کے بعد", "ضرورت پر"),
("TAB. ONDANSETRON (4 MG)", "1 Tab", "دن میں تین بار - کیموتھراپی دوران","کیمو دوران"),
],
"prevention": [
("ماہانہ خصیوں کا خود معائنہ کریں", "Monthly testicular self-examination"),
("Undescended testis بچپن میں ٹھیک کروائیں", "Treat cryptorchidism in childhood"),
("AFP, HCG, LDH ہر 6 ہفتے", "Tumour markers every 6 weeks"),
("دوسرے خصیے کا بھی معائنہ کریں", "Examine contralateral testis"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 14,
"title": "Acute Urinary Retention (AUR)",
"title_ur": "اچانک پیشاب بند ہو جانا",
"diagnosis": "AUR secondary to BPH — Bladder volume 650 ml on USS; Catheterised; TWOC planned at 3 days with alpha-blocker",
"diagnosis_ur": "BPH کی وجہ سے اچانک پیشاب بند - کیتھیٹر لگایا - TWOC 3 دن بعد",
"meds": [
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو - TWOC سے پہلے لازمی", "کم از کم 3 دن"),
("TAB. FINASTERIDE (5 MG)", "1 Tab", "روزانہ ایک بار", "طویل مدتی"),
("TAB. TRIMETHOPRIM (200 MG)", "1 Tab", "رات کو - کیتھیٹر تک", "کیتھیٹر دوران"),
("TAB. PARACETAMOL (500 MG)", "2 Tabs", "دن میں چار بار", "3 دن"),
],
"prevention": [
("یکدم بہت زیادہ پانی نہ پئیں", "Avoid rapid large fluid intake"),
("قبض سے بچیں", "Avoid constipation"),
("اینٹی ہسٹامین سے پرہیز کریں", "Avoid antihistamines / decongestants"),
("سردی سے بچیں - retention trigger ہے", "Avoid cold weather — triggers AUR"),
("TWOC ناکام ہو تو TURP کی رائے لیں", "TURP referral if TWOC fails twice"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 15,
"title": "Chronic Prostatitis / CPPS",
"title_ur": "پروسٹیٹ کا دائمی درد",
"diagnosis": "Chronic Prostatitis / CPPS — NIH Category IIIB; NIH-CPSI Score 22; MSU: negative; Symptoms >3 months",
"diagnosis_ur": "دائمی پروسٹیٹائٹس / CPPS - NIH زمرہ IIIB",
"meds": [
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار", "4 ہفتے"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو", "3 ماہ"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد", "2 ہفتے"),
("TAB. AMITRIPTYLINE (10 MG)", "1 Tab", "رات کو سونے سے پہلے", "3 ماہ"),
],
"prevention": [
("مسالہ دار کھانا اور الکوحل سے پرہیز", "Avoid spicy food and alcohol"),
("گرم پانی میں بیٹھیں (Sitz bath)", "Warm sitz baths daily"),
("دیر تک ایک جگہ بیٹھنے سے گریز کریں", "Avoid prolonged sitting"),
("باقاعدہ ورزش - تیراکی، چہل قدمی", "Regular exercise — swimming, walking"),
("ذہنی تناؤ کم کریں", "Stress management / psychological support"),
],
},
# ══════════════════════════════════════════════════════════════
# NEW CASES 16-25
# ══════════════════════════════════════════════════════════════
{
"no": 16,
"title": "Recurrent UTI in Women",
"title_ur": "خواتین میں بار بار پیشاب کا انفیکشن",
"diagnosis": "Recurrent UTI (≥2 episodes/6 months or ≥3/year) — E.coli; Post-menopausal atrophic changes noted",
"diagnosis_ur": "بار بار آنے والا UTI - سال میں 3 یا اس سے زیادہ بار",
"meds": [
("TAB. NITROFURANTOIN (100 MG)", "1 Tab", "رات کو صرف - طویل روک تھام", "6 ماہ (Prophylaxis)"),
("VAGINAL ESTROGEN CREAM (Ovestin)", "Apply", "رات کو لگائیں - اندام نہانی میں", "3 ماہ"),
("TAB. TRIMETHOPRIM (200 MG)", "1 Tab", "جنسی تعلق کے بعد - ایک بار", "ضرورت پر"),
],
"prevention": [
("روزانہ خوب پانی پئیں", "Drink plenty of water daily"),
("جنسی تعلق کے بعد پیشاب کریں", "Void after intercourse every time"),
("Probiotics (Lactobacillus) لیں", "Lactobacillus probiotics — evidence-based"),
("Cranberry extract روزانہ لیں", "Daily cranberry extract reduces recurrence"),
("Postmenopausal: HRT کی رائے لیں", "Consider local oestrogen if postmenopausal"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 17,
"title": "Urethral Stricture",
"title_ur": "پیشاب کی نالی کا تنگ ہونا",
"diagnosis": "Anterior Urethral Stricture — Bulbar urethra 1.5 cm; RGU confirmed; Qmax <5 ml/s; Uroflowmetry: plateau pattern",
"diagnosis_ur": "پیشاب کی نالی کا تنگ ہونا - بلبر پوزیشن",
"meds": [
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار", "5 دن"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو - پیشاب کی دھار بہتر کرنے کو", "3 ماہ"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "ضرورت پر کھانے کے بعد", "ضرورت پر"),
],
"prevention": [
("Urethral Dilatation یا Optical Urethrotomy کروائیں", "Urethral dilatation / OIU — definitive"),
("بار بار ہو تو Urethroplasty کروائیں", "Recurrent stricture → urethroplasty"),
("گونوریا انفیکشن سے بچاؤ - stricture کی وجہ", "Prevent gonorrhoea — common cause"),
("پیشاب کی دھار کمزور ہو تو فوری دکھائیں", "Prompt review if urinary flow worsens"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 18,
"title": "Scrotal Pain — Chronic / Idiopathic",
"title_ur": "خصیوں میں دائمی درد",
"diagnosis": "Chronic Orchialgia / Chronic Scrotal Content Pain (CSCP) — >3 months; Infection excluded; No mass; USS normal",
"diagnosis_ur": "خصیوں میں دائمی درد - 3 ماہ سے زیادہ - کوئی انفیکشن یا گانٹھ نہیں",
"meds": [
("TAB. AMITRIPTYLINE (10 MG)", "1 Tab", "رات کو سونے سے پہلے", "3 ماہ"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں دو بار کھانے کے بعد", "2 ہفتے"),
("TAB. GABAPENTIN (300 MG)", "1 Tab", "رات کو - ضرورت پر", "3 ماہ"),
],
"prevention": [
("Scrotal support پہنیں", "Wear scrotal support at all times"),
("دیر تک بیٹھنے سے گریز کریں", "Avoid prolonged sitting / cycling"),
("گرم پانی میں بیٹھیں", "Warm baths for comfort"),
("ذہنی تناؤ کم کریں", "Psychological support / CBT if needed"),
("Physiotherapy - pelvic floor", "Pelvic physiotherapy often helps"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 19,
"title": "Interstitial Cystitis / Bladder Pain Syndrome",
"title_ur": "مثانے کا دائمی درد - بغیر انفیکشن",
"diagnosis": "Bladder Pain Syndrome / Interstitial Cystitis (IC/BPS) — Pelvic pain >6 months; Frequency; Urgency; MSU negative; Cystoscopy: glomerulations",
"diagnosis_ur": "مثانے کا دائمی درد - 6 ماہ سے زیادہ - کلچر منفی",
"meds": [
("TAB. AMITRIPTYLINE (10-25 MG)", "1 Tab", "رات کو سونے سے پہلے", "3-6 ماہ"),
("TAB. HYDROXYZINE (25 MG)", "1 Tab", "رات کو", "3 ماہ"),
("INSTILL. HEPARIN (Intravesical)", "Bladder instillation", "ہفتے میں 2 بار", "6 ہفتے"),
],
"prevention": [
("ایسڈک کھانا پینا بند کریں", "Avoid acidic foods: citrus, tomato, coffee"),
("Stress کم کریں", "Stress reduction — major trigger"),
("IC diet follow کریں", "Follow IC-specific elimination diet"),
("Bladder training کریں", "Bladder retraining programme"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 20,
"title": "Phimosis / Balanitis Xerotica Obliterans",
"title_ur": "غلاف ختنہ کا تنگ ہونا / BXO",
"diagnosis": "Phimosis with BXO (Lichen Sclerosus) — White sclerotic plaques; Non-retractile foreskin; Recurrent balanitis",
"diagnosis_ur": "ختنے کا تنگ ہونا - BXO (Lichen Sclerosus) کے ساتھ",
"meds": [
("BETAMETHASONE 0.05% CREAM", "Apply", "دن میں دو بار - 4-6 ہفتے", "4-6 ہفتے"),
("TAB. FLUCONAZOLE (150 MG)", "1 Tab", "ہفتے میں ایک بار", "4 ہفتے"),
("TAB. CETIRIZINE (10 MG)", "1 Tab", "رات کو - خارش پر", "2 ہفتے"),
],
"prevention": [
("روزانہ صابن سے صفائی کریں", "Daily hygiene with gentle soap"),
("Circumcision کی رائے لیں", "Circumcision — definitive for BXO"),
("مثانے کے کینسر کی نگرانی کریں", "BXO increases urethral stricture and SCC risk"),
("Steroid cream 6 ہفتے سے زیادہ نہیں", "Do not use steroid cream >6 weeks unsupervised"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 21,
"title": "Nocturia (Isolated / Nocturnal Polyuria)",
"title_ur": "رات کو بار بار پیشاب آنا",
"diagnosis": "Nocturnal Polyuria — Frequency-Volume Chart: NPI >33%; Nocturnal urine volume >2500 ml/night; No cardiac/renal cause",
"diagnosis_ur": "رات کو پیشاب زیادہ بننا - نوکٹرنل پولی یوریا",
"meds": [
("TAB. DESMOPRESSIN (0.1 MG)", "1 Tab", "رات کو سونے سے 1 گھنٹہ پہلے", "3 ماہ - ہفتہ وار Na+ چیک"),
("TAB. FUROSEMIDE (20 MG)", "1 Tab", "سہ پہر 4-6 بجے - دوپہر بعد", "4 ہفتے"),
("TAB. SOLIFENACIN (5 MG)", "1 Tab", "روزانہ ایک بار", "اگر OAB بھی ہو"),
],
"prevention": [
("شام 6 بجے کے بعد پانی بالکل کم کریں", "Restrict evening fluids strictly after 6 PM"),
("Desmopressin پر سوڈیم مانیٹر کریں", "Monitor serum sodium weekly on desmopressin (hyponatraemia risk)"),
("نمک اور الکوحل سے پرہیز", "Reduce salt and avoid alcohol"),
("Compression stockings پہنیں", "Compression stockings reduce evening oedema"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 22,
"title": "Hydrocele",
"title_ur": "خصیے میں پانی",
"diagnosis": "Primary Hydrocele — Transilluminates; USS: fluid confirmed; No solid mass; Testis normal",
"diagnosis_ur": "خصیے میں پانی - پہلی قسم - روشنی سے چمکتا ہے",
"meds": [
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں دو بار ضرورت پر", "ضرورت پر"),
("No specific medication needed", "—", "دوا سے ٹھیک نہیں ہوتا", "جراحی ضروری"),
],
"prevention": [
("Jaboulay/Lord's procedure کروائیں", "Surgical repair — Jaboulay or Lord's procedure"),
("ضرورت نہ ہو تو انتظار کریں", "Can observe if small and asymptomatic"),
("خود ٹیکہ نہ لگوائیں", "Avoid aspiration — high recurrence rate"),
("ہر 6 ماہ بعد USS کروائیں", "USS surveillance every 6 months"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 23,
"title": "Renal Cell Carcinoma (Incidental Finding)",
"title_ur": "گردے کا کینسر - اتفاقی دریافت",
"diagnosis": "Incidental RCC — Right kidney 4 cm solid enhancing mass on CT (cT1b N0 M0); Bosniak IV or solid; Clear cell likely",
"diagnosis_ur": "گردے کا کینسر - 4 سینٹی میٹر - CT سکین پر اتفاقی ملا",
"meds": [
("No chemotherapy — surgery first line", "—", "آپریشن پہلا علاج ہے", "آنکولوجی ریفرل"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے", "جاری رہے"),
("TAB. AMLODIPINE (5 MG) - if HTN", "1 Tab", "روزانہ ایک بار - BP کنٹرول", "طویل مدتی"),
],
"prevention": [
("تمباکو نوشی بند کریں", "Stop smoking — major risk factor"),
("وزن کم کریں", "Lose weight — obesity is risk factor"),
("بلڈ پریشر قابو میں رکھیں", "Control hypertension strictly"),
("Partial Nephrectomy یا RFA کروائیں", "Partial nephrectomy / RFA for T1 lesions"),
("سالانہ CT urogram کروائیں", "Annual CT urogram surveillance post-surgery"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 24,
"title": "Priapism (Non-Ischaemic / Ischaemic)",
"title_ur": "بے وقت اور دردناک عضو تناسل کا سخت رہنا",
"diagnosis": "Ischaemic Priapism >4 hrs — Low-flow; Blood gas: pO2 <30 mmHg; Emergency aspiration + sympathomimetic required",
"diagnosis_ur": "اسکیمک پریاپزم - 4 گھنٹے سے زیادہ - ہنگامی علاج ضروری",
"meds": [
("INJ. PHENYLEPHRINE 200 mcg intracavernosal", "200 mcg", "ہر 3-5 منٹ میں - جب تک ڈھیلا نہ ہو", "ہنگامی طور پر"),
("ASPIRATION intracavernosal", "Aspiration", "فوری - ہنگامی", "ایک بار"),
("TAB. SILDENAFIL (50 MG)", "1 Tab", "بعد میں - ED کے لیے", "ED follow-up"),
],
"prevention": [
("Sickle cell disease والے خاص احتیاط کریں", "Sickle cell patients — hydroxurea, hydration"),
("Phosphodiesterase inhibitors کا غلط استعمال نہ کریں", "Avoid PDE5 inhibitor misuse"),
("ہنگامی صورت میں فوری A&E جائیں", "Any priapism >4 hrs is urological emergency"),
("تمام خون کی بیماریوں کو کنٹرول کریں", "Control underlying haematological disorders"),
],
},
# ══════════════════════════════════════════════════════════════
{
"no": 25,
"title": "Prostatitis — Acute Bacterial",
"title_ur": "پروسٹیٹ کا تیز انفیکشن",
"diagnosis": "Acute Bacterial Prostatitis — NIH Category I; PSA markedly raised (do NOT biopsy); Tender boggy prostate on DRE; E.coli on MSU",
"diagnosis_ur": "پروسٹیٹ کا تیز بخاری انفیکشن - NIH زمرہ اول - PSA بہت بلند",
"meds": [
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار", "4-6 ہفتے"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد", "2 ہفتے"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو - پیشاب کی سہولت کے لیے", "4 ہفتے"),
("TAB. PARACETAMOL (500 MG)", "2 Tabs", "دن میں چار بار - بخار پر", "ضرورت پر"),
],
"prevention": [
("پانی خوب پئیں", "Drink plenty of water — 2-3 L/day"),
("مکمل اینٹی بایوٹک کورس کریں", "Complete full antibiotic course — do not stop early"),
("علاج بعد PSA recheck کروائیں", "Recheck PSA 3 months after treatment"),
("مسالہ دار کھانا اور الکوحل بند", "Avoid spicy food and alcohol"),
("Prostatic abscess کا خیال رکھیں", "Monitor for prostatic abscess — TRUS if no improvement"),
],
},
]
# ─────────────────────────────────────────────────────────────────
# COLOR PALETTE
# ─────────────────────────────────────────────────────────────────
C_DARK_BLUE = colors.HexColor("#003366")
C_MID_BLUE = colors.HexColor("#0055A5")
C_LIGHT_BLUE = colors.HexColor("#D6E8FF")
C_TEAL = colors.HexColor("#006B6B")
C_ORANGE = colors.HexColor("#E87722")
C_LIGHT_ORANGE= colors.HexColor("#FFF3E0")
C_GREEN_LIGHT = colors.HexColor("#E8F5E9")
C_GREEN_DARK = colors.HexColor("#1B5E20")
C_RED_LIGHT = colors.HexColor("#FFEBEE")
C_RED_DARK = colors.HexColor("#B71C1C")
C_GRAY_LIGHT = colors.HexColor("#F5F5F5")
C_GRAY_MED = colors.HexColor("#BDBDBD")
C_YELLOW_SOFT = colors.HexColor("#FFFDE7")
# ─────────────────────────────────────────────────────────────────
# PAGE LAYOUT
# ─────────────────────────────────────────────────────────────────
PAGE_W, PAGE_H = A4
M = 1.5*cm # margin
def on_page(canvas, doc):
"""Header & footer on every page."""
canvas.saveState()
# Top bar
canvas.setFillColor(C_DARK_BLUE)
canvas.rect(0, PAGE_H - 1.2*cm, PAGE_W, 1.2*cm, fill=1, stroke=0)
canvas.setFillColor(colors.white)
canvas.setFont("Helvetica-Bold", 9)
canvas.drawCentredString(PAGE_W/2, PAGE_H - 0.85*cm,
"UROLOGY OPD CASES — 25 Most Important Cases | Based on Viva Practice for FRCS(Urol)")
# Bottom bar
canvas.setFillColor(C_DARK_BLUE)
canvas.rect(0, 0, PAGE_W, 1.1*cm, fill=1, stroke=0)
canvas.setFillColor(colors.white)
canvas.setFont("Helvetica", 8)
canvas.drawString(M, 0.4*cm, "Dr. Urology Clinic | FRCS(Urol) OPD Reference")
canvas.drawRightString(PAGE_W - M, 0.4*cm, f"Page {doc.page}")
canvas.restoreState()
def build_book():
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=M, rightMargin=M,
topMargin=1.5*cm, bottomMargin=1.5*cm,
title="Urology OPD 25 Cases",
author="FRCS(Urol) Reference",
)
styles = getSampleStyleSheet()
# Custom styles
s_cover_main = ParagraphStyle("CoverMain", fontName="Helvetica-Bold", fontSize=28,
textColor=C_DARK_BLUE, alignment=TA_CENTER, leading=36)
s_cover_sub = ParagraphStyle("CoverSub", fontName="Helvetica", fontSize=14,
textColor=C_TEAL, alignment=TA_CENTER, leading=20)
s_cover_note = ParagraphStyle("CoverNote", fontName="Helvetica-Oblique", fontSize=11,
textColor=colors.HexColor("#555555"), alignment=TA_CENTER)
s_case_num = ParagraphStyle("CaseNum", fontName="Helvetica-Bold", fontSize=11,
textColor=colors.white, alignment=TA_LEFT)
s_case_title = ParagraphStyle("CaseTitle",fontName="Helvetica-Bold", fontSize=13,
textColor=colors.white, alignment=TA_LEFT, leading=16)
s_case_ur = ParagraphStyle("CaseUr", fontName=URDU_FONT, fontSize=12,
textColor=colors.HexColor("#FFE082"), alignment=TA_RIGHT)
s_diag_label = ParagraphStyle("DiagLabel",fontName="Helvetica-Bold", fontSize=9,
textColor=C_RED_DARK)
s_diag_text = ParagraphStyle("DiagText", fontName="Helvetica-Bold", fontSize=9,
textColor=C_DARK_BLUE, leading=13)
s_diag_ur = ParagraphStyle("DiagUr", fontName=URDU_FONT, fontSize=10,
textColor=C_TEAL, alignment=TA_RIGHT)
s_med_hdr = ParagraphStyle("MedHdr", fontName="Helvetica-Bold", fontSize=8,
textColor=colors.white)
s_med_name = ParagraphStyle("MedName", fontName="Helvetica-Bold", fontSize=8,
textColor=C_DARK_BLUE, leading=11)
s_med_data = ParagraphStyle("MedData", fontName="Helvetica", fontSize=8,
textColor=colors.black, leading=11)
s_med_ur = ParagraphStyle("MedUr", fontName=URDU_FONT, fontSize=9,
textColor=C_TEAL, alignment=TA_RIGHT, leading=13)
s_med_dur = ParagraphStyle("MedDur", fontName="Helvetica-Bold", fontSize=8,
textColor=C_ORANGE)
s_prev_hdr = ParagraphStyle("PrevHdr", fontName="Helvetica-Bold", fontSize=9,
textColor=C_GREEN_DARK)
s_prev_ur = ParagraphStyle("PrevUr", fontName=URDU_FONT, fontSize=9,
textColor=colors.black, leading=13)
s_prev_en = ParagraphStyle("PrevEn", fontName="Helvetica-Oblique",fontSize=8,
textColor=colors.HexColor("#555555"), leading=11)
s_toc_title = ParagraphStyle("TocTitle", fontName="Helvetica-Bold", fontSize=20,
textColor=C_DARK_BLUE, alignment=TA_CENTER)
s_toc_item = ParagraphStyle("TocItem", fontName="Helvetica", fontSize=10,
textColor=colors.black, leading=16)
s_toc_bold = ParagraphStyle("TocBold", fontName="Helvetica-Bold", fontSize=10,
textColor=C_MID_BLUE, leading=16)
story = []
# ── COVER PAGE ──────────────────────────────────────────────
story.append(Spacer(1, 3*cm))
# Big orange accent bar
cover_bar = Table([[ Paragraph("", s_cover_main) ]], colWidths=[PAGE_W - 2*M])
cover_bar.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_ORANGE),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
]))
story.append(cover_bar)
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("UROLOGY OPD", s_cover_main))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("25 Most Important Cases", ParagraphStyle("CM2",
fontName="Helvetica-Bold", fontSize=22, textColor=C_ORANGE, alignment=TA_CENTER)))
story.append(Spacer(1, 0.4*cm))
story.append(HRFlowable(width="80%", thickness=2, color=C_DARK_BLUE, hAlign="CENTER"))
story.append(Spacer(1, 0.4*cm))
story.append(Paragraph("Diagnosis • Medicines (English) • Dose • Frequency (Urdu) • Prevention (Urdu)", s_cover_sub))
story.append(Spacer(1, 0.6*cm))
story.append(Paragraph("Based on:<br/><b>Viva Practice for the FRCS(Urol)</b>", s_cover_sub))
story.append(Paragraph("Manit Arya & Iqbal Shergill", s_cover_note))
story.append(Spacer(1, 0.8*cm))
# Decorative box
info_data = [[
Paragraph("<b>Campbell-Walsh-Wein Urology</b><br/>Smith & Tanagho General Urology<br/>EAU / NICE Guidelines 2024", ParagraphStyle("ref", fontName="Helvetica", fontSize=9, textColor=C_DARK_BLUE, leading=14))
]]
info_tbl = Table(info_data, colWidths=[PAGE_W - 2*M])
info_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_LIGHT_BLUE),
("BOX", (0,0), (-1,-1), 1, C_DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 14),
]))
story.append(info_tbl)
story.append(Spacer(1, 1*cm))
story.append(Paragraph("Urdu Dose & Prevention Guide for OPD Practice", s_cover_note))
story.append(PageBreak())
# ── TABLE OF CONTENTS ────────────────────────────────────────
story.append(Spacer(1, 0.5*cm))
story.append(Paragraph("TABLE OF CONTENTS", s_toc_title))
story.append(Spacer(1, 0.3*cm))
story.append(HRFlowable(width="100%", thickness=1.5, color=C_ORANGE))
story.append(Spacer(1, 0.3*cm))
toc_rows = []
for c in CASES:
toc_rows.append([
Paragraph(f"<b>{c['no']:02d}.</b>", s_toc_bold),
Paragraph(c["title"], s_toc_item),
Paragraph(c["title_ur"], ParagraphStyle("TocUr", fontName=URDU_FONT, fontSize=9,
textColor=C_TEAL, alignment=TA_RIGHT, leading=14)),
])
toc_tbl = Table(toc_rows, colWidths=[1*cm, 9.5*cm, 6.5*cm])
toc_tbl.setStyle(TableStyle([
("ROWBACKGROUNDS", (0,0), (-1,-1), [colors.white, C_GRAY_LIGHT]),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("GRID", (0,0), (-1,-1), 0.3, C_GRAY_MED),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(toc_tbl)
story.append(PageBreak())
# ── CASES ────────────────────────────────────────────────────
for c in CASES:
elements = []
# ── Case header ──
hdr_data = [[
Paragraph(f"CASE {c['no']:02d}", s_case_num),
Paragraph(c["title"], s_case_title),
Paragraph(c["title_ur"], s_case_ur),
]]
hdr_tbl = Table(hdr_data, colWidths=[1.5*cm, 10*cm, 5.5*cm])
hdr_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
elements.append(hdr_tbl)
elements.append(Spacer(1, 0.15*cm))
# ── Diagnosis ──
diag_data = [[
Paragraph("DIAGNOSIS:", s_diag_label),
Paragraph(c["diagnosis"], s_diag_text),
Paragraph(c["diagnosis_ur"], s_diag_ur),
]]
diag_tbl = Table(diag_data, colWidths=[2*cm, 9*cm, 6*cm])
diag_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_RED_LIGHT),
("BOX", (0,0), (-1,-1), 0.5, C_RED_DARK),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
elements.append(diag_tbl)
elements.append(Spacer(1, 0.15*cm))
# ── Medicines header ──
med_hdr_data = [[
Paragraph("S.No MEDICINE NAME", s_med_hdr),
Paragraph("DOSE", s_med_hdr),
Paragraph("FREQUENCY / TARTEEB (Urdu)", s_med_hdr),
Paragraph("DURATION", s_med_hdr),
]]
med_hdr_tbl = Table(med_hdr_data, colWidths=[7*cm, 1.8*cm, 6.2*cm, 2*cm])
med_hdr_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_MID_BLUE),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
]))
elements.append(med_hdr_tbl)
# ── Medicine rows ──
med_rows = []
for idx, (name, dose, freq_ur, dur) in enumerate(c["meds"]):
row_bg = colors.white if idx % 2 == 0 else C_GRAY_LIGHT
med_rows.append([
Paragraph(f"<b>{idx+1}.</b> {name}", s_med_name),
Paragraph(dose, s_med_data),
Paragraph(freq_ur, s_med_ur),
Paragraph(dur, s_med_dur),
])
med_tbl = Table(med_rows, colWidths=[7*cm, 1.8*cm, 6.2*cm, 2*cm])
row_fills = [("BACKGROUND", (0,i), (-1,i),
colors.white if i % 2 == 0 else C_GRAY_LIGHT) for i in range(len(med_rows))]
med_tbl.setStyle(TableStyle([
("GRID", (0,0), (-1,-1), 0.4, C_GRAY_MED),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
] + row_fills))
elements.append(med_tbl)
elements.append(Spacer(1, 0.15*cm))
# ── Prevention ──
prev_hdr = Table([[
Paragraph("احتیاطی تدابیر / PREVENTION & ADVICE", s_prev_hdr)
]], colWidths=[PAGE_W - 2*M])
prev_hdr.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_GREEN_LIGHT),
("BOX", (0,0), (-1,-1), 0.5, C_GREEN_DARK),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
elements.append(prev_hdr)
prev_rows = []
for i, (ur, en) in enumerate(c["prevention"]):
row_bg = colors.white if i % 2 == 0 else C_YELLOW_SOFT
prev_rows.append([
Paragraph(f"• {ur}", s_prev_ur),
Paragraph(f"({en})", s_prev_en),
])
prev_tbl = Table(prev_rows, colWidths=[9*cm, 8*cm])
row_fills2 = [("BACKGROUND", (0,i), (-1,i),
colors.white if i % 2 == 0 else C_YELLOW_SOFT) for i in range(len(prev_rows))]
prev_tbl.setStyle(TableStyle([
("GRID", (0,0), (-1,-1), 0.3, C_GRAY_MED),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
] + row_fills2))
elements.append(prev_tbl)
elements.append(Spacer(1, 0.3*cm))
# Keep case together if small enough, else just append
story.append(KeepTogether(elements))
story.append(PageBreak())
# ── Build PDF ──
doc.build(story, onFirstPage=on_page, onLaterPages=on_page)
print(f"PDF saved: {OUTPUT}")
if __name__ == "__main__":
build_book()
python3 /home/daytona/workspace/urology-opd-cases/build_book.py 2>&1
find /usr/share/fonts -name "*Noto*" -name "*.ttf" 2>/dev/null | grep -i "arabic\|urdu\|naskh\|nastaliq" | head -20; find /usr/share/fonts -name "*Arabic*" -o -name "*Urdu*" 2>/dev/null | head -10
find /usr/share/fonts -name "*.ttf" 2>/dev/null | head -20; find /home/daytona/.local/share/fonts -name "*.ttf" 2>/dev/null | head -10; ls /usr/share/fonts/ 2>/dev/null
pip install --user arabic-reshaper python-bidi --quiet 2>&1 | tail -3 && echo "Done"
# Download Noto Naskh Arabic font (supports Urdu) mkdir -p /home/daytona/workspace/urology-opd-cases/fonts wget -q "https://github.com/notofonts/arabic/releases/download/NotoNaskhArabic-v2.016/NotoNaskhArabic-v2.016.zip" \ -O /home/daytona/workspace/urology-opd-cases/fonts/noto.zip && \ unzip -q /home/daytona/workspace/urology-opd-cases/fonts/noto.zip -d /home/daytona/workspace/urology-opd-cases/fonts/ && \ find /home/daytona/workspace/urology-opd-cases/fonts/ -name "*.ttf" | head -5 && echo "Font downloaded"
ls /home/daytona/workspace/urology-opd-cases/fonts/NotoNaskhArabic/hinted/ttf/ && echo "Font files exist"
python3 -c " import arabic_reshaper from bidi.algorithm import get_display from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont FONT_PATH = '/home/daytona/workspace/urology-opd-cases/fonts/NotoNaskhArabic/hinted/ttf/NotoNaskhArabic-Regular.ttf' pdfmetrics.registerFont(TTFont('NotoNaskhArabic', FONT_PATH)) # Test reshaping test = 'روزانہ ایک بار کھانے کے ساتھ' reshaped = arabic_reshaper.reshape(test) bidi_text = get_display(reshaped) print('Reshaped:', repr(bidi_text[:30])) print('Font OK') "
complete above given task
~/urology-opd-cases/build_book_final.py
#!/usr/bin/env python3
"""
UROLOGY OPD CASES - Complete Book (25 Cases) — FINAL with Urdu font
"""
import os, sys
import arabic_reshaper
from bidi.algorithm import get_display
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
PageBreak, HRFlowable, KeepTogether
)
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
OUTPUT = "/home/daytona/workspace/urology-opd-cases/output/Urology_OPD_25_Cases_Book.pdf"
FONT_DIR = "/home/daytona/workspace/urology-opd-cases/fonts/NotoNaskhArabic/hinted/ttf"
pdfmetrics.registerFont(TTFont("NotoAr", f"{FONT_DIR}/NotoNaskhArabic-Regular.ttf"))
pdfmetrics.registerFont(TTFont("NotoArBold", f"{FONT_DIR}/NotoNaskhArabic-Bold.ttf"))
print("Urdu font loaded OK")
def u(text):
"""Reshape + bidi Urdu/Arabic text so ReportLab renders it correctly."""
reshaped = arabic_reshaper.reshape(str(text))
return get_display(reshaped)
# ─── COLOUR PALETTE ──────────────────────────────────────────────
C_DARK_BLUE = colors.HexColor("#003366")
C_MID_BLUE = colors.HexColor("#0055A5")
C_LIGHT_BLUE = colors.HexColor("#D6E8FF")
C_TEAL = colors.HexColor("#005F5F")
C_ORANGE = colors.HexColor("#E87722")
C_LIGHT_ORANGE= colors.HexColor("#FFF3E0")
C_GREEN_LIGHT = colors.HexColor("#E8F5E9")
C_GREEN_DARK = colors.HexColor("#1B5E20")
C_RED_LIGHT = colors.HexColor("#FFEBEE")
C_RED_DARK = colors.HexColor("#B71C1C")
C_GRAY_LIGHT = colors.HexColor("#F5F5F5")
C_GRAY_MED = colors.HexColor("#BDBDBD")
C_YELLOW_SOFT = colors.HexColor("#FFFDE7")
WHITE = colors.white
BLACK = colors.black
PAGE_W, PAGE_H = A4
M = 1.4*cm
# ─── CASE DATA (25 cases) ────────────────────────────────────────
# Each case: no, title, title_ur, diagnosis, diagnosis_ur,
# meds: [(name, dose, freq_ur, dur_ur)],
# prevention: [(ur, en)]
CASES = [
{
"no": 1,
"title": "Benign Prostatic Hyperplasia (BPH)",
"title_ur": "پروسٹیٹ غدود کا بڑھنا",
"diagnosis": "BPH Grade II | IPSS >20, Qmax <10 ml/s, PVR >100 ml",
"diagnosis_ur": "پروسٹیٹ کا بڑھنا - درجہ دوم",
"meds": [
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو سونے سے پہلے - روزانہ", "3 ماہ"),
("TAB. FINASTERIDE (5 MG)", "1 Tab", "روزانہ ایک بار - صبح", "6 ماہ"),
("TAB. SOLIFENACIN (5 MG)", "1 Tab", "روزانہ ایک بار - اگر عجلت بھی ہو", "1 ماہ"),
],
"prevention": [
("شام کے بعد پانی کم پئیں", "Reduce fluid intake after evening"),
("چائے، کافی اور الکوحل سے پرہیز کریں", "Avoid caffeine and alcohol"),
("ہر 6 ماہ بعد PSA ٹیسٹ کروائیں", "PSA check every 6 months"),
("قبض سے بچیں", "Avoid constipation"),
("باقاعدہ ورزش کریں", "Regular exercise"),
],
},
{
"no": 2,
"title": "Acute Uncomplicated UTI (Cystitis)",
"title_ur": "مثانے کا انفیکشن",
"diagnosis": "Acute Uncomplicated Cystitis | E.coli commonest | MSU: >10⁵ CFU/ml",
"diagnosis_ur": "مثانے کا تیز انفیکشن - بغیر پیچیدگی",
"meds": [
("TAB. NITROFURANTOIN (100 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ", "7 دن"),
("TAB. PHENAZOPYRIDINE (200 MG)", "1 Tab", "دن میں تین بار", "2 دن صرف"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "ضرورت پر کھانے کے بعد", "3 دن"),
],
"prevention": [
("روزانہ 2-3 لیٹر پانی پئیں", "Drink 2-3 L water daily"),
("پیشاب روکیں نہیں", "Do not hold urine"),
("صفائی آگے سے پیچھے کی طرف کریں", "Wipe front to back (females)"),
("جنسی تعلق کے بعد پیشاب کریں", "Void after intercourse"),
("Cranberry juice مفید ہے", "Cranberry juice reduces recurrence"),
],
},
{
"no": 3,
"title": "Ureteric Colic / Kidney Stone",
"title_ur": "گردے کی پتھری - یوریٹر میں",
"diagnosis": "Right Ureteric Calculus 6 mm | Lower 1/3rd | KUB + USS confirmed | No infection",
"diagnosis_ur": "دائیں یوریٹر میں پتھری - 6 ملی میٹر",
"meds": [
("TAB. DICLOFENAC SODIUM (75 MG)", "1 Tab", "دن میں دو بار کھانے کے بعد", "5 دن"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو - پتھری نکالنے کے لیے (MET)", "4 ہفتے"),
("TAB. METOCLOPRAMIDE (10 MG)", "1 Tab", "متلی پر دن میں تین بار", "3 دن"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے صبح", "5 دن"),
],
"prevention": [
("روزانہ 3 لیٹر سے زیادہ پانی پئیں", "Drink >3 L water daily — most important"),
("نمک کم کھائیں", "Reduce dietary salt"),
("پالک، ٹماٹر، مونگ پھلی کم کھائیں", "Reduce oxalate-rich foods"),
("سرخ گوشت اور پروٹین کم کریں", "Reduce red meat / animal protein"),
("پیشاب ہلکا پیلا رکھیں", "Keep urine pale yellow (hydration check)"),
],
},
{
"no": 4,
"title": "Painless Macroscopic Haematuria",
"title_ur": "بغیر درد پیشاب میں خون",
"diagnosis": "Painless Macroscopic Haematuria | URGENT: CT Urogram + Flexible Cystoscopy | ?TCC Bladder",
"diagnosis_ur": "بغیر درد پیشاب میں خون - مثانے کا کینسر ممکن",
"meds": [
("TAB. TRANEXAMIC ACID (500 MG)", "2 Tabs", "دن میں تین بار", "3 دن"),
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار", "5 دن"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "صبح کھانے سے پہلے", "5 دن"),
],
"prevention": [
("تمباکو نوشی فوری بند کریں", "Stop smoking immediately — #1 risk factor"),
("خوب پانی پئیں", "Drink plenty of water"),
("CT Urogram اور Cystoscopy لازمی", "CT urogram + cystoscopy mandatory"),
("خون بند نہ ہو تو فوری ہسپتال جائیں", "Emergency if bleeding does not stop"),
],
},
{
"no": 5,
"title": "Epididymo-Orchitis (STI Related)",
"title_ur": "خصیے کی سوزش - جنسی انفیکشن",
"diagnosis": "Acute Epididymo-Orchitis | STI origin (Chlamydia / N.gonorrhoeae) | NAAT positive",
"diagnosis_ur": "خصیے کی سوزش - جنسی طور پر منتقل",
"meds": [
("TAB. DOXYCYCLINE (100 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ", "14 دن"),
("INJ. CEFTRIAXONE 500 MG IM", "1 Inj", "صرف ایک بار IM - آج", "ایک بار صرف"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد", "7 دن"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے", "7 دن"),
],
"prevention": [
("جنسی تعلق میں condom استعمال کریں", "Use condoms — safe sex always"),
("جنسی ساتھی کا علاج بھی ضروری", "Treat sexual partner simultaneously"),
("STI مکمل اسکریننگ کروائیں", "Full STI screen (HIV, HepB, syphilis)"),
("خصیوں کو سہارا دیں / اونچا رکھیں", "Scrotal support and elevation"),
],
},
{
"no": 6,
"title": "Localised Prostate Cancer",
"title_ur": "پروسٹیٹ کا کینسر - ابتدائی مرحلہ",
"diagnosis": "Prostate Adenocarcinoma | Gleason 7 (3+4) | cT2b N0 M0 | PSA 12 ng/mL | ISUP Grade 2",
"diagnosis_ur": "پروسٹیٹ کینسر گلیسن 7 - مقامی مرحلہ",
"meds": [
("TAB. BICALUTAMIDE (50 MG)", "1 Tab", "روزانہ ایک بار", "3 ماہ"),
("INJ. LEUPROLIDE 3.75 MG IM", "3.75 mg","ہر ماہ ایک بار", "آنکولوجی کے مطابق"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو - LUTS کے لیے", "جاری رہے"),
("TAB. CALCIUM + VIT D3", "1 Tab", "روزانہ ایک بار", "طویل مدتی"),
],
"prevention": [
("سرخ گوشت اور چکنائی کم کریں", "Reduce red meat and saturated fat"),
("ٹماٹر اور سبز سبزیاں زیادہ کھائیں", "Increase lycopene — tomatoes, greens"),
("PSA ہر 3 ماہ بعد چیک کروائیں", "PSA monitoring every 3 months"),
("DEXA scan - ہارمون تھراپی دوران", "DEXA bone scan during ADT therapy"),
("باقاعدہ ورزش - ہڈیوں کے لیے", "Regular weight-bearing exercise"),
],
},
{
"no": 7,
"title": "Bladder Cancer TCC — Post-TURBT",
"title_ur": "مثانے کا کینسر - TURBT بعد BCG علاج",
"diagnosis": "TCC Bladder (Ta G2) — Post-TURBT | BCG intravesical immunotherapy required",
"diagnosis_ur": "مثانے کا کینسر - Ta G2 - TURBT کے بعد",
"meds": [
("BCG INTRAVESICAL (81 mg/vial)", "1 Vial", "ہفتے میں ایک بار - 6 ہفتے", "6 ہفتے"),
("TAB. OXYBUTYNIN (5 MG)", "1 Tab", "دن میں دو بار", "BCG دوران"),
("TAB. PHENAZOPYRIDINE (200 MG)", "1 Tab", "دن میں تین بار - جلن پر", "ضرورت پر"),
],
"prevention": [
("تمباکو نوشی مکمل بند کریں", "Stop smoking — strongest risk factor"),
("صنعتی کیمیکلز سے دور رہیں", "Avoid industrial chemicals / dyes"),
("خوب پانی پئیں", "Drink plenty of water"),
("Cystoscopy ہر 3 ماہ بعد لازمی", "Surveillance cystoscopy every 3 months"),
],
},
{
"no": 8,
"title": "Female Stress Urinary Incontinence",
"title_ur": "کھانسنے / ہنسنے پر پیشاب نکلنا",
"diagnosis": "Genuine Stress Urinary Incontinence (GSI) | Urodynamics: USI confirmed | No DO",
"diagnosis_ur": "حقیقی اسٹریس پیشاب بے قابوی - یورو ڈائنامکس تصدیق شدہ",
"meds": [
("TAB. DULOXETINE (40 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ", "3 ماہ"),
("VAGINAL ESTROGEN CREAM", "Apply", "رات کو لگائیں - اندام نہانی میں", "3 ماہ"),
("TAB. OXYBUTYNIN (5 MG)", "1 Tab", "رات کو - اگر عجلت بھی ہو", "1 ماہ"),
],
"prevention": [
("Kegel exercises روزانہ کریں - سب سے اہم", "Daily pelvic floor exercises — FIRST LINE"),
("وزن کم کریں اگر زیادہ ہو", "Lose weight if BMI > 30"),
("قبض سے بچیں", "Avoid constipation"),
("بھاری چیزیں اٹھانے سے بچیں", "Avoid heavy lifting"),
("چائے اور کافی کم کریں", "Reduce caffeine intake"),
],
},
{
"no": 9,
"title": "Erectile Dysfunction (ED)",
"title_ur": "مردانہ کمزوری",
"diagnosis": "Erectile Dysfunction — Mixed Organic (Vasculogenic + Diabetic Neuropathy) | IIEF-5 < 10",
"diagnosis_ur": "مردانہ کمزوری - ذیابطیس اور بلڈ پریشر کی وجہ سے",
"meds": [
("TAB. SILDENAFIL (50 MG)", "1 Tab", "جنسی تعلق سے 1 گھنٹہ پہلے ضرورت پر", "جاری رہے"),
("TAB. METFORMIN (500 MG)", "1 Tab", "دن میں دو بار کھانے کے ساتھ", "طویل مدتی"),
("TAB. TESTOSTERONE (if low)", "Per TFT","ڈاکٹر کی ہدایت کے مطابق", "3 ماہ ٹرائل"),
],
"prevention": [
("ذیابطیس اور بلڈ پریشر قابو میں رکھیں", "Control DM and hypertension"),
("تمباکو نوشی بند کریں", "Stop smoking — major vascular risk"),
("الکوحل سے پرہیز کریں", "Avoid alcohol"),
("باقاعدہ ورزش کریں", "Regular aerobic exercise"),
("ذہنی تناؤ کم کریں", "Manage psychological stress / anxiety"),
],
},
{
"no": 10,
"title": "Overactive Bladder (OAB)",
"title_ur": "مثانے کی بے قابوی اور عجلت",
"diagnosis": "OAB Wet Syndrome | Urodynamics: Detrusor Overactivity | MSU negative",
"diagnosis_ur": "مثانے کی زیادہ حرکت - ڈیٹروسر اوور ایکٹیوٹی",
"meds": [
("TAB. SOLIFENACIN (5 MG)", "1 Tab", "روزانہ ایک بار", "3 ماہ"),
("TAB. MIRABEGRON (50 MG)", "1 Tab", "روزانہ ایک بار - متبادل دوا", "3 ماہ"),
("TAB. OXYBUTYNIN (5 MG)", "1 Tab", "دن میں دو بار", "2 ماہ"),
],
"prevention": [
("مثانے کی ٹریننگ کریں - ہر ہفتے 5 منٹ دیر","Bladder retraining — delay voiding 5 min/week"),
("چائے اور کافی مکمل بند کریں", "Stop caffeine completely"),
("پیشاب کی ڈائری لکھیں", "Keep a voiding diary"),
("شام 6 بجے کے بعد پانی کم پئیں", "Restrict fluids after 6 PM"),
("روزانہ Kegel exercises کریں", "Daily pelvic floor exercises"),
],
},
{
"no": 11,
"title": "Varicocele + Male Infertility",
"title_ur": "خصیوں کی رگوں کا پھولنا اور بانجھ پن",
"diagnosis": "Left Varicocele Grade II | Semen: Oligoasthenospermia | USS Doppler confirmed",
"diagnosis_ur": "بائیں ورائیکوسیل گریڈ 2 - سپرم کی کمی",
"meds": [
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد", "1 ہفتہ"),
("TAB. VITAMIN E (400 IU)", "1 Cap", "روزانہ ایک بار", "3 ماہ"),
("TAB. FOLIC ACID (5 MG)", "1 Tab", "روزانہ ایک بار", "3 ماہ"),
("TAB. COENZYME Q10 (200 MG)", "1 Cap", "روزانہ ایک بار", "3 ماہ"),
],
"prevention": [
("Scrotal support / jockstrap پہنیں", "Wear scrotal support"),
("لمبے عرصے تک کھڑے نہ رہیں", "Avoid prolonged standing"),
("بھاری ورزش سے گریز کریں", "Avoid heavy weightlifting"),
("سالانہ سپرم ٹیسٹ کروائیں", "Annual semen analysis"),
("Varicocelectomy کی رائے لیں", "Surgical referral — microsurgical varicocelectomy"),
],
},
{
"no": 12,
"title": "PUJ Obstruction / Hydronephrosis",
"title_ur": "گردے کی نالی کی رکاوٹ",
"diagnosis": "Left PUJ Obstruction | MAG3: Obstructed | Differential Function 38% | Moderate hydronephrosis",
"diagnosis_ur": "بائیں گردے کی نالی میں رکاوٹ - MAG3 ثابت",
"meds": [
("TAB. DICLOFENAC SODIUM (50 MG)", "1 Tab", "دن میں دو بار کھانے کے بعد - درد پر", "5 دن ضرورت پر"),
("TAB. TRIMETHOPRIM (200 MG)", "1 Tab", "رات کو - آپریشن تک", "آپریشن تک"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے", "NSAID کے ساتھ"),
],
"prevention": [
("پانی آہستہ آہستہ پئیں - یکدم زیادہ نہیں", "Avoid rapid large fluid intake"),
("بخار یا شدید درد پر فوری ڈاکٹر", "Immediate review if fever / severe pain"),
("Laparoscopic Pyeloplasty کروائیں", "Surgical referral — pyeloplasty"),
("سالانہ MAG3 renogram کروائیں", "Annual MAG3 renogram follow-up"),
],
},
{
"no": 13,
"title": "Testicular Germ Cell Tumour",
"title_ur": "خصیے کا کینسر",
"diagnosis": "Right Testicular NSGCT | AFP elevated | betaHCG raised | LDH raised | Stage IS",
"diagnosis_ur": "دائیں خصیے کا نان سیمینوما کینسر - ابتدائی مرحلہ",
"meds": [
("SPERM BANKING (before surgery)", "Referral","آپریشن سے پہلے لازمی", "ایک بار"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "ضرورت پر کھانے کے بعد", "ضرورت پر"),
("TAB. ONDANSETRON (4 MG)", "1 Tab", "دن میں تین بار - کیموتھراپی دوران", "کیمو دوران"),
],
"prevention": [
("ماہانہ خصیوں کا خود معائنہ کریں", "Monthly testicular self-examination"),
("Undescended testis بچپن میں ٹھیک کروائیں","Treat cryptorchidism in childhood"),
("AFP، HCG، LDH ہر 6 ہفتے", "Tumour markers every 6 weeks"),
("دوسرے خصیے کا بھی معائنہ کریں", "Examine contralateral testis"),
],
},
{
"no": 14,
"title": "Acute Urinary Retention (AUR)",
"title_ur": "اچانک پیشاب بند ہو جانا",
"diagnosis": "AUR secondary to BPH | Bladder 650 ml on USS | Catheterised | TWOC at 3 days",
"diagnosis_ur": "BPH کی وجہ سے پیشاب بند - کیتھیٹر لگایا - TWOC 3 دن بعد",
"meds": [
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو - TWOC سے پہلے لازمی", "کم از کم 3 دن"),
("TAB. FINASTERIDE (5 MG)", "1 Tab", "روزانہ ایک بار", "طویل مدتی"),
("TAB. TRIMETHOPRIM (200 MG)", "1 Tab", "رات کو - کیتھیٹر دوران", "کیتھیٹر تک"),
("TAB. PARACETAMOL (500 MG)", "2 Tabs", "دن میں چار بار", "3 دن"),
],
"prevention": [
("یکدم بہت زیادہ پانی نہ پئیں", "Avoid rapid large fluid intake"),
("قبض سے بچیں", "Avoid constipation"),
("اینٹی ہسٹامین سے پرہیز کریں", "Avoid antihistamines / decongestants"),
("سردی سے بچیں - retention trigger", "Avoid cold weather — triggers AUR"),
("TWOC ناکام ہو تو TURP کی رائے لیں", "TURP referral if TWOC fails twice"),
],
},
{
"no": 15,
"title": "Chronic Prostatitis / CPPS",
"title_ur": "پروسٹیٹ کا دائمی درد",
"diagnosis": "Chronic Prostatitis / CPPS | NIH Category IIIB | CPSI Score 22 | MSU negative | >3 months",
"diagnosis_ur": "دائمی پروسٹیٹائٹس - NIH زمرہ IIIB",
"meds": [
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار", "4 ہفتے"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو", "3 ماہ"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد", "2 ہفتے"),
("TAB. AMITRIPTYLINE (10 MG)", "1 Tab", "رات کو سونے سے پہلے", "3 ماہ"),
],
"prevention": [
("مسالہ دار کھانا اور الکوحل سے پرہیز", "Avoid spicy food and alcohol"),
("گرم پانی میں بیٹھیں (Sitz bath)", "Warm sitz baths daily"),
("دیر تک بیٹھنے سے گریز کریں", "Avoid prolonged sitting"),
("باقاعدہ ورزش - تیراکی، چہل قدمی", "Regular exercise — swimming, walking"),
("ذہنی تناؤ کم کریں", "Stress management / psychological support"),
],
},
# ═══════════════ NEW CASES 16-25 ════════════════════════════
{
"no": 16,
"title": "Recurrent UTI in Women",
"title_ur": "خواتین میں بار بار پیشاب کا انفیکشن",
"diagnosis": "Recurrent UTI (≥2 /6 months or ≥3/year) | E.coli | Post-menopausal atrophic changes noted",
"diagnosis_ur": "بار بار UTI - سال میں 3 یا زیادہ بار",
"meds": [
("TAB. NITROFURANTOIN (100 MG)", "1 Tab", "رات کو صرف - طویل روک تھام", "6 ماہ"),
("VAGINAL ESTROGEN CREAM (Ovestin)","Apply", "رات کو اندام نہانی میں لگائیں", "3 ماہ"),
("TAB. TRIMETHOPRIM (200 MG)", "1 Tab", "جنسی تعلق کے فوری بعد - ایک بار", "ضرورت پر"),
],
"prevention": [
("روزانہ خوب پانی پئیں", "Drink plenty of water daily"),
("جنسی تعلق کے بعد ہر بار پیشاب کریں", "Void after every intercourse"),
("Probiotics (Lactobacillus) لیں", "Lactobacillus probiotics — evidence-based"),
("Cranberry extract روزانہ لیں", "Daily cranberry extract"),
("Postmenopausal: مقامی ایسٹروجن لیں", "Local oestrogen if postmenopausal"),
],
},
{
"no": 17,
"title": "Urethral Stricture",
"title_ur": "پیشاب کی نالی کا تنگ ہونا",
"diagnosis": "Anterior Urethral Stricture | Bulbar 1.5 cm | RGU confirmed | Qmax <5 ml/s | Plateau uroflow",
"diagnosis_ur": "پیشاب کی نالی کا تنگ ہونا - بلبر پوزیشن",
"meds": [
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار", "5 دن"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو - پیشاب کی دھار بہتر کرنے کو", "3 ماہ"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "ضرورت پر کھانے کے بعد", "ضرورت پر"),
],
"prevention": [
("Urethral Dilatation یا OIU کروائیں", "Urethral dilatation / OIU — definitive"),
("بار بار ہو تو Urethroplasty کروائیں", "Recurrent stricture → urethroplasty"),
("گونوریا انفیکشن سے بچاؤ", "Prevent gonorrhoea — common cause"),
("پیشاب کی دھار کمزور ہو تو فوری دکھائیں","Prompt review if flow worsens"),
],
},
{
"no": 18,
"title": "Chronic Scrotal Pain / Orchialgia",
"title_ur": "خصیوں میں دائمی درد",
"diagnosis": "Chronic Orchialgia / CSCP | >3 months | Infection excluded | No mass | USS normal",
"diagnosis_ur": "خصیوں میں دائمی درد - 3 ماہ سے زیادہ - انفیکشن یا گانٹھ نہیں",
"meds": [
("TAB. AMITRIPTYLINE (10 MG)", "1 Tab", "رات کو سونے سے پہلے", "3 ماہ"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں دو بار کھانے کے بعد", "2 ہفتے"),
("TAB. GABAPENTIN (300 MG)", "1 Tab", "رات کو - ضرورت پر", "3 ماہ"),
],
"prevention": [
("Scrotal support پہنیں", "Wear scrotal support at all times"),
("دیر تک بیٹھنے / سائیکلنگ سے گریز", "Avoid prolonged sitting / cycling"),
("گرم پانی میں بیٹھیں", "Warm baths for comfort"),
("ذہنی تناؤ کم کریں", "Psychological support / CBT if needed"),
("Pelvic floor physiotherapy کروائیں", "Pelvic physiotherapy often helps"),
],
},
{
"no": 19,
"title": "Interstitial Cystitis / Bladder Pain Syndrome",
"title_ur": "مثانے کا دائمی درد بغیر انفیکشن",
"diagnosis": "Bladder Pain Syndrome / IC | Pelvic pain >6 months | Frequency + Urgency | MSU negative | Cystoscopy: glomerulations",
"diagnosis_ur": "مثانے کا دائمی درد - 6 ماہ سے زیادہ - کلچر منفی",
"meds": [
("TAB. AMITRIPTYLINE (10-25 MG)", "1 Tab", "رات کو سونے سے پہلے", "3-6 ماہ"),
("TAB. HYDROXYZINE (25 MG)", "1 Tab", "رات کو", "3 ماہ"),
("HEPARIN INTRAVESICAL INSTILL", "Instill","ہفتے میں دو بار", "6 ہفتے"),
],
"prevention": [
("ایسڈک کھانا پینا بند کریں", "Avoid acidic foods: citrus, tomato, coffee"),
("ذہنی تناؤ کم کریں", "Stress reduction — major trigger"),
("IC diet follow کریں", "Follow IC-specific elimination diet"),
("Bladder training کریں", "Bladder retraining programme"),
],
},
{
"no": 20,
"title": "Phimosis / BXO (Lichen Sclerosus)",
"title_ur": "غلاف ختنہ کا تنگ ہونا - BXO",
"diagnosis": "Phimosis with BXO (Lichen Sclerosus) | White sclerotic plaques | Non-retractile foreskin | Recurrent balanitis",
"diagnosis_ur": "ختنے کا تنگ ہونا - BXO کے ساتھ",
"meds": [
("BETAMETHASONE 0.05% CREAM", "Apply", "دن میں دو بار - 4 سے 6 ہفتے", "4-6 ہفتے"),
("TAB. FLUCONAZOLE (150 MG)", "1 Tab", "ہفتے میں ایک بار", "4 ہفتے"),
("TAB. CETIRIZINE (10 MG)", "1 Tab", "رات کو - خارش پر", "2 ہفتے"),
],
"prevention": [
("روزانہ صابن سے صفائی کریں", "Daily hygiene with gentle soap"),
("Circumcision کی رائے لیں", "Circumcision — definitive for BXO"),
("BXO سے یوریترل stricture ممکن", "BXO increases urethral stricture / SCC risk"),
("Steroid cream 6 ہفتے سے زیادہ نہیں", "Do not use steroid cream > 6 weeks unsupervised"),
],
},
{
"no": 21,
"title": "Nocturia / Nocturnal Polyuria",
"title_ur": "رات کو بار بار پیشاب آنا",
"diagnosis": "Nocturnal Polyuria | FVC: NPI >33% | Nocturnal volume >2500 ml/night | No cardiac/renal cause",
"diagnosis_ur": "رات کو پیشاب زیادہ بننا - نوکٹرنل پولی یوریا",
"meds": [
("TAB. DESMOPRESSIN (0.1 MG)", "1 Tab", "رات کو سونے سے 1 گھنٹہ پہلے", "3 ماہ - Na+ ہفتہ وار چیک"),
("TAB. FUROSEMIDE (20 MG)", "1 Tab", "سہ پہر 4 تا 6 بجے", "4 ہفتے"),
("TAB. SOLIFENACIN (5 MG)", "1 Tab", "روزانہ ایک بار - اگر OAB بھی ہو", "3 ماہ"),
],
"prevention": [
("شام 6 بجے کے بعد پانی بالکل کم کریں", "Strictly restrict evening fluids after 6 PM"),
("Desmopressin پر سوڈیم مانیٹر", "Monitor serum Na+ weekly — hyponatraemia risk"),
("نمک اور الکوحل سے پرہیز", "Reduce salt and avoid alcohol"),
("Compression stockings پہنیں", "Compression stockings reduce evening oedema"),
],
},
{
"no": 22,
"title": "Hydrocele",
"title_ur": "خصیے میں پانی",
"diagnosis": "Primary Hydrocele | Transilluminates | USS: fluid only | No solid mass | Testis normal",
"diagnosis_ur": "خصیے میں پانی - روشنی سے چمکتا ہے - کینسر نہیں",
"meds": [
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں دو بار - ضرورت پر", "ضرورت پر"),
("Surgical repair required", "—", "دوا سے ٹھیک نہیں ہوتا - آپریشن ضروری", "جراحی"),
],
"prevention": [
("Jaboulay / Lord's procedure کروائیں", "Surgical repair — Jaboulay or Lord's procedure"),
("چھوٹا ہو اور تکلیف نہ ہو تو انتظار", "Can observe if small and asymptomatic"),
("خود ٹیکہ لگوانے سے گریز", "Avoid aspiration — high recurrence"),
("ہر 6 ماہ بعد USS کروائیں", "USS surveillance every 6 months"),
],
},
{
"no": 23,
"title": "Renal Cell Carcinoma (Incidental)",
"title_ur": "گردے کا کینسر - اتفاقی دریافت",
"diagnosis": "Incidental RCC | Right kidney 4 cm solid enhancing | cT1b N0 M0 | Clear cell likely",
"diagnosis_ur": "گردے کا کینسر - 4 سینٹی میٹر - CT سکین پر اتفاقی",
"meds": [
("Partial Nephrectomy / RFA — first line","—","آپریشن پہلا علاج ہے", "آنکولوجی ریفرل"),
("TAB. OMEPRAZOLE (20 MG)", "1 Tab", "کھانے سے پہلے", "جاری رہے"),
("TAB. AMLODIPINE 5 MG (if HTN)", "1 Tab", "روزانہ ایک بار - BP کنٹرول", "طویل مدتی"),
],
"prevention": [
("تمباکو نوشی بند کریں", "Stop smoking — major risk factor"),
("وزن کم کریں", "Lose weight — obesity is risk factor"),
("بلڈ پریشر قابو میں رکھیں", "Control hypertension strictly"),
("سالانہ CT urogram کروائیں", "Annual CT urogram surveillance post-surgery"),
],
},
{
"no": 24,
"title": "Ischaemic Priapism (Emergency)",
"title_ur": "بے وقت اور دردناک عضو تناسل - ہنگامی",
"diagnosis": "Ischaemic Priapism > 4 hrs | Low-flow | Blood gas: pO2 <30 mmHg | EMERGENCY aspiration required",
"diagnosis_ur": "اسکیمک پریاپزم - 4 گھنٹے سے زیادہ - ہنگامی علاج ضروری",
"meds": [
("INJ. PHENYLEPHRINE 200 mcg IC", "200 mcg","ہر 3-5 منٹ میں - جب تک ڈھیلا نہ ہو", "ہنگامی طور پر"),
("INTRACAVERNOSAL ASPIRATION", "Aspirate","فوری - ہنگامی", "ایک بار"),
("TAB. SILDENAFIL (50 MG)", "1 Tab", "بعد میں - ED follow-up کے لیے", "ED follow-up"),
],
"prevention": [
("Sickle cell والے: hydroxurea، ہائیڈریشن","Sickle cell: hydroxurea + hydration"),
("PDE5 inhibitors کا غلط استعمال نہ کریں","Avoid PDE5 inhibitor misuse"),
("4 گھنٹے سے زیادہ ہو تو فوری A&E جائیں","Any priapism > 4 hrs = urological emergency"),
("خون کی بیماریوں کو کنٹرول کریں", "Control underlying haematological disorders"),
],
},
{
"no": 25,
"title": "Acute Bacterial Prostatitis",
"title_ur": "پروسٹیٹ کا تیز بخاری انفیکشن",
"diagnosis": "Acute Bacterial Prostatitis | NIH Category I | PSA very high (do NOT biopsy now) | Tender boggy prostate | E.coli MSU",
"diagnosis_ur": "پروسٹیٹ کا تیز انفیکشن - NIH زمرہ اول - PSA بہت بلند",
"meds": [
("TAB. CIPROFLOXACIN (500 MG)", "1 Tab", "دن میں دو بار", "4 سے 6 ہفتے"),
("TAB. IBUPROFEN (400 MG)", "1 Tab", "دن میں تین بار کھانے کے بعد", "2 ہفتے"),
("TAB. TAMSULOSIN (0.4 MG)", "1 Tab", "رات کو - پیشاب کی سہولت", "4 ہفتے"),
("TAB. PARACETAMOL (500 MG)", "2 Tabs", "دن میں چار بار - بخار پر", "ضرورت پر"),
],
"prevention": [
("پانی خوب پئیں - 2 سے 3 لیٹر روزانہ", "Drink 2-3 L water daily"),
("مکمل اینٹی بایوٹک کورس کریں", "Complete full antibiotic course"),
("علاج بعد PSA 3 ماہ پر دوبارہ چیک", "Recheck PSA 3 months after treatment"),
("مسالہ دار کھانا اور الکوحل بند", "Avoid spicy food and alcohol"),
("Prostatic abscess کا خیال رکھیں", "Monitor for prostatic abscess — TRUS if no improvement"),
],
},
]
# ─── PAGE HEADER / FOOTER ────────────────────────────────────────
def on_page(canvas, doc):
canvas.saveState()
# Top bar
canvas.setFillColor(C_DARK_BLUE)
canvas.rect(0, PAGE_H - 1.1*cm, PAGE_W, 1.1*cm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica-Bold", 8)
canvas.drawCentredString(PAGE_W/2, PAGE_H - 0.75*cm,
"UROLOGY OPD — 25 Most Important Cases | Based on Viva Practice for FRCS(Urol) | Medicines in English | Frequency in Urdu")
# Bottom bar
canvas.setFillColor(C_DARK_BLUE)
canvas.rect(0, 0, PAGE_W, 1.0*cm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica", 7)
canvas.drawString(M, 0.35*cm, "Dr. Urology Clinic | FRCS(Urol) OPD Reference | EAU / NICE Guidelines")
canvas.drawRightString(PAGE_W - M, 0.35*cm, f"Page {doc.page} / 25 Cases")
canvas.restoreState()
# ─── STYLES ──────────────────────────────────────────────────────
def make_styles():
s = {}
def P(name, **kw):
s[name] = ParagraphStyle(name, **kw)
P("CoverH1", fontName="Helvetica-Bold", fontSize=32, textColor=C_DARK_BLUE, alignment=TA_CENTER, leading=38)
P("CoverH2", fontName="Helvetica-Bold", fontSize=20, textColor=C_ORANGE, alignment=TA_CENTER, leading=26)
P("CoverSub", fontName="Helvetica", fontSize=12, textColor=C_TEAL, alignment=TA_CENTER, leading=18)
P("CoverNote", fontName="Helvetica-Oblique",fontSize=10, textColor=colors.HexColor("#666666"), alignment=TA_CENTER)
P("TocTitle", fontName="Helvetica-Bold", fontSize=18, textColor=C_DARK_BLUE, alignment=TA_CENTER)
P("TocNo", fontName="Helvetica-Bold", fontSize=10, textColor=C_MID_BLUE, leading=16)
P("TocEn", fontName="Helvetica", fontSize=10, textColor=BLACK, leading=16)
P("TocUr", fontName="NotoAr", fontSize=10, textColor=C_TEAL, alignment=TA_RIGHT, leading=16)
P("CaseNo", fontName="Helvetica-Bold", fontSize=10, textColor=WHITE)
P("CaseTitle", fontName="Helvetica-Bold", fontSize=13, textColor=WHITE, leading=16)
P("CaseUr", fontName="NotoAr", fontSize=12, textColor=colors.HexColor("#FFE082"), alignment=TA_RIGHT)
P("DiagLbl", fontName="Helvetica-Bold", fontSize=8, textColor=C_RED_DARK)
P("DiagEn", fontName="Helvetica-Bold", fontSize=8, textColor=C_DARK_BLUE, leading=12)
P("DiagUr", fontName="NotoArBold", fontSize=10, textColor=C_TEAL, alignment=TA_RIGHT)
P("MedHdr", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)
P("MedName", fontName="Helvetica-Bold", fontSize=8, textColor=C_DARK_BLUE, leading=11)
P("MedDose", fontName="Helvetica", fontSize=8, textColor=BLACK, leading=11)
P("MedFreqUr", fontName="NotoAr", fontSize=10, textColor=C_TEAL, alignment=TA_RIGHT, leading=14)
P("MedDur", fontName="Helvetica-Bold", fontSize=8, textColor=C_ORANGE, leading=11)
P("PrevHdr", fontName="Helvetica-Bold", fontSize=9, textColor=C_GREEN_DARK)
P("PrevUr", fontName="NotoAr", fontSize=10, textColor=BLACK, alignment=TA_RIGHT, leading=14)
P("PrevEn", fontName="Helvetica-Oblique",fontSize=8, textColor=colors.HexColor("#555"), leading=11)
return s
# ─── HELPERS ─────────────────────────────────────────────────────
def divider(story, color=C_DARK_BLUE, width="100%", thickness=1):
story.append(HRFlowable(width=width, thickness=thickness, color=color, hAlign="CENTER"))
def sp(story, h=0.2):
story.append(Spacer(1, h*cm))
# ─── BUILD ───────────────────────────────────────────────────────
def build():
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=M, rightMargin=M,
topMargin=1.4*cm, bottomMargin=1.4*cm,
title="Urology OPD 25 Cases Book",
author="FRCS(Urol) Reference",
)
S = make_styles()
story = []
# ── COVER ──────────────────────────────────────────────────
sp(story, 2.5)
# Orange strip
strip = Table([[""]], colWidths=[PAGE_W - 2*M])
strip.setStyle(TableStyle([("BACKGROUND",(0,0),(-1,-1),C_ORANGE),
("TOPPADDING",(0,0),(-1,-1),3),("BOTTOMPADDING",(0,0),(-1,-1),3)]))
story.append(strip)
sp(story, 0.3)
story.append(Paragraph("UROLOGY OPD", S["CoverH1"]))
sp(story, 0.1)
story.append(Paragraph("25 Most Important Cases", S["CoverH2"]))
sp(story, 0.3)
divider(story, C_DARK_BLUE, "70%", 2)
sp(story, 0.3)
story.append(Paragraph(
"Diagnosis • Medicine (English) • Dose • Frequency in Urdu • Prevention in Urdu",
S["CoverSub"]))
sp(story, 0.5)
story.append(Paragraph(
"<b>Based on:</b> Viva Practice for the FRCS(Urol)<br/>"
"Manit Arya & Iqbal Shergill", S["CoverSub"]))
sp(story, 0.2)
story.append(Paragraph(
"Campbell-Walsh-Wein Urology • Smith & Tanagho General Urology • EAU / NICE Guidelines 2024",
S["CoverNote"]))
sp(story, 0.8)
info = Table([[Paragraph(
"<b>Medicines:</b> Generic names in CAPITAL LETTERS (English)<br/>"
"<b>Frequency / ترتیب:</b> Written in Urdu<br/>"
"<b>Prevention / احتیاطی تدابیر:</b> Urdu with English translation",
ParagraphStyle("InfoBox", fontName="Helvetica", fontSize=10, textColor=C_DARK_BLUE, leading=16))
]], colWidths=[PAGE_W - 2*M])
info.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), C_LIGHT_BLUE),
("BOX", (0,0),(-1,-1), 1, C_DARK_BLUE),
("TOPPADDING",(0,0),(-1,-1), 12), ("BOTTOMPADDING",(0,0),(-1,-1), 12),
("LEFTPADDING",(0,0),(-1,-1), 16),
]))
story.append(info)
story.append(PageBreak())
# ── TABLE OF CONTENTS ─────────────────────────────────────
sp(story, 0.4)
story.append(Paragraph("TABLE OF CONTENTS", S["TocTitle"]))
sp(story, 0.2)
divider(story, C_ORANGE, "100%", 2)
sp(story, 0.3)
toc_rows = []
for c in CASES:
toc_rows.append([
Paragraph(f"<b>{c['no']:02d}.</b>", S["TocNo"]),
Paragraph(c["title"], S["TocEn"]),
Paragraph(u(c["title_ur"]), S["TocUr"]),
])
toc_t = Table(toc_rows, colWidths=[1*cm, 9.5*cm, 6.5*cm])
toc_t.setStyle(TableStyle([
("ROWBACKGROUNDS", (0,0),(-1,-1), [WHITE, C_GRAY_LIGHT]),
("GRID", (0,0),(-1,-1), 0.3, C_GRAY_MED),
("TOPPADDING", (0,0),(-1,-1), 4), ("BOTTOMPADDING",(0,0),(-1,-1),4),
("LEFTPADDING", (0,0),(-1,-1), 6), ("RIGHTPADDING",(0,0),(-1,-1),6),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story.append(toc_t)
story.append(PageBreak())
# ── CASES ────────────────────────────────────────────────
for c in CASES:
elems = []
# Case header
hdr = Table([[
Paragraph(f"CASE {c['no']:02d}", S["CaseNo"]),
Paragraph(c["title"], S["CaseTitle"]),
Paragraph(u(c["title_ur"]), S["CaseUr"]),
]], colWidths=[1.5*cm, 10*cm, 5.5*cm])
hdr.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), C_DARK_BLUE),
("TOPPADDING",(0,0),(-1,-1),8),("BOTTOMPADDING",(0,0),(-1,-1),8),
("LEFTPADDING",(0,0),(-1,-1),8),("RIGHTPADDING",(0,0),(-1,-1),8),
("VALIGN",(0,0),(-1,-1),"MIDDLE"),
]))
elems.append(hdr)
elems.append(Spacer(1, 0.12*cm))
# Diagnosis
diag = Table([[
Paragraph("DIAGNOSIS:", S["DiagLbl"]),
Paragraph(c["diagnosis"], S["DiagEn"]),
Paragraph(u(c["diagnosis_ur"]), S["DiagUr"]),
]], colWidths=[2*cm, 9*cm, 6*cm])
diag.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), C_RED_LIGHT),
("BOX", (0,0),(-1,-1), 0.5, C_RED_DARK),
("TOPPADDING",(0,0),(-1,-1),6),("BOTTOMPADDING",(0,0),(-1,-1),6),
("LEFTPADDING",(0,0),(-1,-1),8),("RIGHTPADDING",(0,0),(-1,-1),6),
("VALIGN",(0,0),(-1,-1),"TOP"),
]))
elems.append(diag)
elems.append(Spacer(1, 0.12*cm))
# Medicine table header
med_hdr = Table([[
Paragraph("S.No MEDICINE NAME", S["MedHdr"]),
Paragraph("DOSE", S["MedHdr"]),
Paragraph("FREQUENCY / TARTEEB (Urdu)", S["MedHdr"]),
Paragraph("DURATION", S["MedHdr"]),
]], colWidths=[7*cm, 1.7*cm, 6.3*cm, 2*cm])
med_hdr.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), C_MID_BLUE),
("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6),
]))
elems.append(med_hdr)
med_rows = []
for idx, (name, dose, freq_ur, dur_ur) in enumerate(c["meds"]):
bg = WHITE if idx % 2 == 0 else C_GRAY_LIGHT
med_rows.append([
Paragraph(f"<b>{idx+1}.</b> {name}", S["MedName"]),
Paragraph(dose, S["MedDose"]),
Paragraph(u(freq_ur), S["MedFreqUr"]),
Paragraph(u(dur_ur), S["MedDur"]),
])
fills = [("BACKGROUND",(0,i),(-1,i), WHITE if i%2==0 else C_GRAY_LIGHT) for i in range(len(med_rows))]
med_t = Table(med_rows, colWidths=[7*cm, 1.7*cm, 6.3*cm, 2*cm])
med_t.setStyle(TableStyle([
("GRID", (0,0),(-1,-1),0.4, C_GRAY_MED),
("TOPPADDING", (0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
("LEFTPADDING", (0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6),
("VALIGN", (0,0),(-1,-1),"MIDDLE"),
] + fills))
elems.append(med_t)
elems.append(Spacer(1, 0.12*cm))
# Prevention header
prev_hdr_t = Table([[
Paragraph(u("احتیاطی تدابیر") + " / PREVENTION & ADVICE", S["PrevHdr"])
]], colWidths=[PAGE_W - 2*M])
prev_hdr_t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), C_GREEN_LIGHT),
("BOX", (0,0),(-1,-1), 0.5, C_GREEN_DARK),
("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
("LEFTPADDING",(0,0),(-1,-1),8),
]))
elems.append(prev_hdr_t)
prev_rows = []
for i, (pur, pen) in enumerate(c["prevention"]):
bg = WHITE if i%2==0 else C_YELLOW_SOFT
prev_rows.append([
Paragraph(u("• " + pur), S["PrevUr"]),
Paragraph(f"( {pen} )", S["PrevEn"]),
])
fills2 = [("BACKGROUND",(0,i),(-1,i), WHITE if i%2==0 else C_YELLOW_SOFT) for i in range(len(prev_rows))]
prev_t = Table(prev_rows, colWidths=[9*cm, 8*cm])
prev_t.setStyle(TableStyle([
("GRID", (0,0),(-1,-1),0.3, C_GRAY_MED),
("TOPPADDING", (0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
("LEFTPADDING", (0,0),(-1,-1),8),("RIGHTPADDING",(0,0),(-1,-1),6),
("VALIGN", (0,0),(-1,-1),"MIDDLE"),
] + fills2))
elems.append(prev_t)
elems.append(Spacer(1, 0.25*cm))
story.append(KeepTogether(elems))
story.append(PageBreak())
doc.build(story, onFirstPage=on_page, onLaterPages=on_page)
size = os.path.getsize(OUTPUT) / 1024
print(f"\n✓ PDF saved: {OUTPUT}")
print(f" Size: {size:.0f} KB | 25 cases")
if __name__ == "__main__":
build()
python3 /home/daytona/workspace/urology-opd-cases/build_book_final.py 2>&1
python3 -c " from pypdf import PdfReader r = PdfReader('/home/daytona/workspace/urology-opd-cases/output/Urology_OPD_25_Cases_Book.pdf') print(f'Pages: {len(r.pages)}') print(f'Title: {r.metadata.title}') # Print first few lines of first text page to verify for i in [2,3,4]: t = r.pages[i].extract_text() if t: print(f'Page {i+1} snippet: {t[:120]}') "
Urology OPD 25 Cases Book
PDF Document · PDF
| Section | Language |
|---|---|
| Case title | English + Urdu |
| Diagnosis with clinical details | English + Urdu |
| Medicine name | CAPITAL LETTERS in English |
| Dose | English |
| Frequency / ترتیب | Urdu (proper RTL Naskh font) |
| Duration | Urdu |
| احتیاطی تدابیر / Prevention | Urdu + English translation |
| # | Case |
|---|---|
| 1 | Benign Prostatic Hyperplasia (BPH) |
| 2 | Acute UTI / Cystitis |
| 3 | Ureteric Colic / Kidney Stone |
| 4 | Painless Macroscopic Haematuria |
| 5 | Epididymo-Orchitis (STI) |
| 6 | Localised Prostate Cancer |
| 7 | Bladder Cancer TCC - Post-TURBT |
| 8 | Female Stress Urinary Incontinence |
| 9 | Erectile Dysfunction |
| 10 | Overactive Bladder (OAB) |
| 11 | Varicocele + Male Infertility |
| 12 | PUJ Obstruction / Hydronephrosis |
| 13 | Testicular Germ Cell Tumour |
| 14 | Acute Urinary Retention (AUR) |
| 15 | Chronic Prostatitis / CPPS |
| 16 | Recurrent UTI in Women |
| 17 | Urethral Stricture |
| 18 | Chronic Scrotal Pain / Orchialgia |
| 19 | Interstitial Cystitis / Bladder Pain Syndrome |
| 20 | Phimosis / BXO (Lichen Sclerosus) |
| 21 | Nocturia / Nocturnal Polyuria |
| 22 | Hydrocele |
| 23 | Renal Cell Carcinoma (Incidental) |
| 24 | Ischaemic Priapism (Emergency) |
| 25 | Acute Bacterial Prostatitis |
give me pdf of 50 urology opd cases also include above given 25 cases every diagnose medicincine frequency dose and prevention should be in urdu .... write good title for book also mention made it by dr naveed ul hassan pgr urology make good and eyecatching book ... should be in both pdf and docx file
ls /home/daytona/workspace/urology-opd-cases/fonts/NotoNaskhArabic/hinted/ttf/ && python3 -c "import arabic_reshaper; from bidi.algorithm import get_display; print('libs OK')"
complete above given task
give me pdf of 50 urology opd cases also include above given 25 cases every diagnose medicincine frequency dose and prevention should be in urdu .... write good title for book also mention made it by dr naveed ul hassan pgr urology make good and eyecatching book ... should be in both pdf and docx fileuse only remaining credits to answer my prompt