Chemotherapy induced vomiting DOC TSH LFT in umbilical hernia PAOD drugs Ovarian cyst size and surgery criteria Alcohol withdrawal Vit K in cholecystiti SR na SR k Sgot sgpt n value Acute pancreatitis Cephalexin metronidazole piptaz Linezolid ceftriazone moa Dog bite category Creat urea n value Why creat dec in dfs Scapula view Bioavailability of para metro Charcots joint EDH IDH SDH GCS Provide me best answer from best textbook for medicine and surgery
| # | Topic | Key Answer |
|---|---|---|
| 1 | Chemo vomiting DOC | Ondansetron (5-HT3); add NK-1 (aprepitant) + Dex for high emetogenicity |
| 2 | TSH/LFT in umbilical hernia | TSH - hypothyroidism check; LFT - cirrhosis/ascites (portal HTN) |
| 3 | PAOD drugs | Cilostazol (DOC for claudication), pentoxifylline, antiplatelet, statin |
| 4 | Ovarian cyst surgery | >5cm persisting, complex features, postmenopausal, symptoms |
| 5 | Alcohol withdrawal | Benzodiazepines (DOC); timeline: tremors → hallucinations → seizures → DT |
| 6 | Vit K in cholecystitis | Obstructive jaundice → fat-soluble Vit K malabsorption → coagulopathy → give preop |
| 7 | SR Na / K | Na: 135-145 mEq/L; K: 3.5-5.0 mEq/L |
| 8 | SGOT/SGPT normal | AST: 10-40 U/L; ALT: 7-56 U/L |
| 9 | Acute pancreatitis | Ranson's criteria; BISAP; Revised Atlanta Classification |
| 10 | Cephalexin/Metro/PipTaz | Cell wall inhibitor / DNA strand breaks / broad-spectrum cell wall + beta-lactamase inhibitor |
| 11 | Linezolid/Ceftriaxone MOA | 23S rRNA 50S subunit (initiation block) / PBP binding (transpeptidation block) |
| 12 | Dog bite category | I: intact skin; II: scratch/abrasion + vaccine; III: bite/mucous + vaccine + RIG |
| 13 | Creat/Urea normal | Creat: 0.6-1.2 mg/dL; BUN: 7-20 mg/dL |
| 14 | Creat decrease in pregnancy | GFR increases 40-60% → creatinine falls (upper limit 0.8 mg/dL in pregnancy) |
| 15 | Scapula view | Scapular Y-view = lateral; best for shoulder dislocation diagnosis |
| 16 | Bioavailability | Paracetamol: ~88-100%; Metronidazole: ~100% (oral = IV) |
| 17 | Charcot's joint | DM (most common), tabes, syringomyelia; painless destruction; "bag of bones" |
| 18 | EDH/SDH/IDH | EDH = biconvex/MMA; SDH = crescent/bridging veins; IDH = parenchymal |
| 19 | GCS | E(4)+V(5)+M(6)=15; ≤8 = severe, intubate |
Create a printable quick-reference card (PDF) for exam prep with all 19 topics
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"
mkdir -p /tmp/workspace/med-quickref && echo "dir created"
~/med-quickref/generate_pdf.py
#!/usr/bin/env python3
"""
Medical Exam Quick-Reference Card Generator
19 topics — A4 printable PDF using ReportLab
"""
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_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, PageBreak
)
from reportlab.platypus.flowables import HRFlowable
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
OUTPUT = "/tmp/workspace/med-quickref/Medical_Exam_QuickRef.pdf"
# ── Colour Palette ──────────────────────────────────────────────────────────
C_NAVY = colors.HexColor("#1a2a4a")
C_BLUE = colors.HexColor("#1e5fa8")
C_LBLUE = colors.HexColor("#d6e8fa")
C_TEAL = colors.HexColor("#0d7377")
C_LTEAL = colors.HexColor("#d0f0ef")
C_RED = colors.HexColor("#b02020")
C_LRED = colors.HexColor("#fde8e8")
C_GOLD = colors.HexColor("#c98a00")
C_LGOLD = colors.HexColor("#fff3cc")
C_GREEN = colors.HexColor("#1a6b2e")
C_LGREEN = colors.HexColor("#dff5e3")
C_PURPLE = colors.HexColor("#4a1a8a")
C_LPURPLE = colors.HexColor("#ece0ff")
C_GREY = colors.HexColor("#f0f2f5")
C_DGREY = colors.HexColor("#5a6472")
C_WHITE = colors.white
C_BLACK = colors.black
# Alternate row colors for tables
ROW_EVEN = colors.HexColor("#f7f9fc")
ROW_ODD = C_WHITE
PAGE_W, PAGE_H = A4
MARGIN = 1.5 * cm
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=MARGIN, rightMargin=MARGIN,
topMargin=1.8*cm, bottomMargin=1.5*cm,
title="Medical Exam Quick Reference",
author="Orris AI",
subject="Medicine & Surgery Exam Prep"
)
styles = getSampleStyleSheet()
# ── Custom Paragraph Styles ─────────────────────────────────────────────────
def ps(name, **kw):
return ParagraphStyle(name, **kw)
S_TITLE = ps("title",
fontName="Helvetica-Bold", fontSize=22, textColor=C_WHITE,
alignment=TA_CENTER, spaceAfter=2)
S_SUBTITLE = ps("subtitle",
fontName="Helvetica", fontSize=10, textColor=C_LBLUE,
alignment=TA_CENTER, spaceAfter=4)
S_TOPIC_HDR = ps("topichdr",
fontName="Helvetica-Bold", fontSize=11, textColor=C_WHITE,
alignment=TA_LEFT, leftIndent=4, spaceAfter=0, leading=14)
S_BODY = ps("body",
fontName="Helvetica", fontSize=8.5, textColor=C_BLACK,
alignment=TA_LEFT, leading=12, spaceAfter=2)
S_BODY_BOLD = ps("bodybold",
fontName="Helvetica-Bold", fontSize=8.5, textColor=C_NAVY,
alignment=TA_LEFT, leading=12, spaceAfter=2)
S_KEY = ps("key",
fontName="Helvetica-Bold", fontSize=9, textColor=C_RED,
alignment=TA_LEFT, leading=12, spaceAfter=1)
S_NOTE = ps("note",
fontName="Helvetica-Oblique", fontSize=7.5, textColor=C_DGREY,
alignment=TA_LEFT, leading=11, spaceAfter=1)
S_TH = ps("th",
fontName="Helvetica-Bold", fontSize=8, textColor=C_WHITE,
alignment=TA_CENTER, leading=10)
S_TD = ps("td",
fontName="Helvetica", fontSize=8, textColor=C_BLACK,
alignment=TA_LEFT, leading=10)
S_TD_C = ps("tdc",
fontName="Helvetica", fontSize=8, textColor=C_BLACK,
alignment=TA_CENTER, leading=10)
S_TD_BOLD = ps("tdbold",
fontName="Helvetica-Bold", fontSize=8, textColor=C_NAVY,
alignment=TA_LEFT, leading=10)
S_FOOTER = ps("footer",
fontName="Helvetica-Oblique", fontSize=7, textColor=C_DGREY,
alignment=TA_CENTER)
# ── Helper: coloured section header ─────────────────────────────────────────
def topic_header(num, title, bg=C_BLUE):
label = f" {num:02d}. {title}"
t = Table([[Paragraph(label, S_TOPIC_HDR)]], colWidths=[PAGE_W - 2*MARGIN])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("ROWBACKGROUNDS", (0,0), (-1,-1), [bg]),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("ROUNDEDCORNERS", [4]),
]))
return t
# ── Helper: simple two-column data table ────────────────────────────────────
def data_table(headers, rows, col_widths, hdr_bg=C_BLUE, alt=True):
TW = PAGE_W - 2*MARGIN
if col_widths is None:
col_widths = [TW/len(headers)] * len(headers)
data = [[Paragraph(h, S_TH) for h in headers]]
for i, row in enumerate(rows):
bg = ROW_EVEN if (i % 2 == 0 and alt) else ROW_ODD
data.append([Paragraph(str(c), S_TD) for c in row])
style = [
("BACKGROUND", (0, 0), (-1, 0), hdr_bg),
("ROWBACKGROUNDS",(0, 1), (-1, -1), [ROW_EVEN, ROW_ODD]),
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#c0c8d8")),
("TOPPADDING", (0, 0), (-1, -1), 3),
("BOTTOMPADDING", (0, 0), (-1, -1), 3),
("LEFTPADDING", (0, 0), (-1, -1), 5),
("RIGHTPADDING", (0, 0), (-1, -1), 5),
("VALIGN", (0, 0), (-1, -1), "TOP"),
]
t = Table(data, colWidths=col_widths)
t.setStyle(TableStyle(style))
return t
# ── Helper: key-value bullet list ────────────────────────────────────────────
def kv(key, val):
return Paragraph(f"<b>{key}:</b> {val}", S_BODY)
def bullet(text, color=C_BLUE):
return Paragraph(f"<font color='#{color.hexval()[2:]}'>●</font> {text}", S_BODY)
def sp(h=3):
return Spacer(1, h)
def hr(color=C_LBLUE):
return HRFlowable(width="100%", thickness=0.5, color=color, spaceAfter=4, spaceBefore=4)
# ══════════════════════════════════════════════════════════════════════════════
# PAGE 1 HEADER BANNER
# ══════════════════════════════════════════════════════════════════════════════
TW = PAGE_W - 2 * MARGIN
def cover_banner():
banner_data = [[
Paragraph("MEDICINE & SURGERY", S_TITLE),
Paragraph("Quick Reference Card", S_SUBTITLE),
Paragraph("19 High-Yield Exam Topics | Prepared with Orris AI | August 2026", S_SUBTITLE),
]]
# Stack vertically in one cell
inner = [
Paragraph("MEDICINE & SURGERY", S_TITLE),
Spacer(1, 3),
Paragraph("Quick Reference Card — 19 High-Yield Exam Topics", S_SUBTITLE),
Spacer(1, 2),
Paragraph("Sources: Schwartz's Surgery · Harrison's · Rosen's EM · Katzung's Pharmacology · Tintinalli's EM · Washington Manual", S_SUBTITLE),
]
t = Table([[inner]], colWidths=[TW])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_NAVY),
("TOPPADDING", (0,0), (-1,-1), 12),
("BOTTOMPADDING", (0,0), (-1,-1), 12),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
return t
# ══════════════════════════════════════════════════════════════════════════════
# BUILD CONTENT
# ══════════════════════════════════════════════════════════════════════════════
story = []
story.append(cover_banner())
story.append(sp(8))
# ── Topic colour cycling ──────────────────────────────────────────────────────
TOPIC_COLORS = [C_BLUE, C_TEAL, C_RED, C_PURPLE, C_GREEN, C_GOLD,
C_BLUE, C_TEAL, C_RED, C_PURPLE, C_GREEN, C_GOLD,
C_BLUE, C_TEAL, C_RED, C_PURPLE, C_GREEN, C_GOLD, C_BLUE]
def add_topic(n, title, content_fn):
bg = TOPIC_COLORS[n - 1]
block = [topic_header(n, title, bg=bg), sp(3)]
block += content_fn()
block.append(sp(6))
story.append(KeepTogether(block))
# ── 01. Chemotherapy-Induced Vomiting ────────────────────────────────────────
def t01():
items = [
kv("DOC", "Ondansetron (5-HT₃ receptor antagonist)"),
kv("High emetogenicity (Cisplatin)", "5-HT₃ + NK-1 (Aprepitant) + Dexamethasone — TRIPLE therapy"),
kv("Moderate emetogenicity", "5-HT₃ + Dexamethasone"),
kv("Low emetogenicity", "Dexamethasone or Metoclopramide"),
Paragraph("<b><font color='#b02020'>KEY:</font></b> Aprepitant = NK-1 antagonist (add for highly emetogenic chemo). "
"Dexamethasone potentiates antiemetic effect. "
"Lorazepam / Olanzapine = adjuncts.", S_NOTE),
]
return items
add_topic(1, "Chemotherapy-Induced Vomiting — DOC", t01)
# ── 02. TSH & LFT in Umbilical Hernia ────────────────────────────────────────
def t02():
rows = [
["TSH", "Rule out hypothyroidism → myxedema, ascites, poor wound healing, anesthetic risk"],
["LFT", "Rule out cirrhosis / portal hypertension → ascites (direct cause of umbilical hernia in adults)"],
["PT/INR", "Assess synthetic function pre-op (impaired in liver disease)"],
["S. Albumin", "Low albumin → poor healing, increased operative risk"],
]
items = [
Paragraph("<b>Pre-op workup:</b> Umbilical hernia in adults = think cirrhosis/ascites first.", S_BODY),
sp(2),
data_table(["Test", "Reason"], rows, [2.5*cm, TW-2.5*cm], hdr_bg=C_TEAL),
sp(2),
Paragraph("<b><font color='#b02020'>Pearl:</font></b> LFT non-correction after Vit K → hepatocellular damage (not obstructive).", S_NOTE),
]
return items
add_topic(2, "TSH & LFT in Umbilical Hernia", t02)
# ── 03. PAOD Drugs ───────────────────────────────────────────────────────────
def t03():
rows = [
["Cilostazol", "PDE-3 inhibitor", "Vasodilation + antiplatelet", "DOC for intermittent claudication; CI in HF"],
["Pentoxifylline", "Rheologic agent", "↓ blood viscosity, ↑ RBC flexibility", "Inferior to cilostazol"],
["Aspirin/Clopidogrel", "Antiplatelet", "↓ thrombotic events", "Lifelong; reduces CV mortality"],
["Statins", "HMG-CoA reductase inhibitor", "Plaque stabilisation", "Mandatory in all PAOD"],
["ACE inhibitors", "RAAS blockade", "↓ CV mortality", "e.g. Ramipril (HOPE trial)"],
]
items = [
data_table(["Drug", "Class", "MOA", "Note"],
rows, [3*cm, 3.5*cm, 5*cm, TW-11.5*cm], hdr_bg=C_RED),
sp(2),
Paragraph("<b><font color='#b02020'>First-line non-pharmacologic:</font></b> Supervised exercise therapy.", S_NOTE),
]
return items
add_topic(3, "PAOD (Peripheral Arterial Occlusive Disease) — Drugs", t03)
# ── 04. Ovarian Cyst — Surgery Criteria ──────────────────────────────────────
def t04():
rows = [
["< 5 cm, simple, premenopausal", "Conservative — USS follow-up in 6-8 weeks"],
["5–7 cm, simple", "Repeat imaging in 3-6 months"],
["> 5 cm persisting / > 7-10 cm", "Surgery recommended"],
["Any size, postmenopausal (>1 cm)", "Surgery / refer — malignancy risk"],
["Complex features (solid, septae, papillae)", "Surgery regardless of size"],
["Symptoms (torsion, rupture, pain)", "Emergency / urgent surgery"],
]
items = [
data_table(["Size / Feature", "Management"], rows, [6*cm, TW-6*cm], hdr_bg=C_PURPLE),
sp(2),
Paragraph("<b>Investigations:</b> USS (first-line), CA-125 (tumour marker), CT/MRI if malignancy suspected.", S_NOTE),
Paragraph("<b>Dermoid / Endometrioma:</b> Elective surgery. <b>Torsion:</b> Emergency surgery.", S_NOTE),
]
return items
add_topic(4, "Ovarian Cyst — Size & Surgery Criteria", t04)
# ── 05. Alcohol Withdrawal ──────────────────────────────────────────────────
def t05():
timeline_rows = [
["6–24 h", "Minor: tremor, anxiety, nausea, tachycardia, hypertension, insomnia"],
["24–48 h", "Hallucinations (tactile > auditory > visual) — 7-8% of patients"],
["36–60 h", "Withdrawal seizures (generalised tonic-clonic) — 5-10%"],
["60+ h", "Delirium Tremens (DT): agitation, disorientation, fever, diaphoresis — peaks day 5"],
]
items = [
data_table(["Time", "Manifestation"], timeline_rows, [2.5*cm, TW-2.5*cm], hdr_bg=C_GREEN),
sp(3),
kv("DOC", "Benzodiazepines (chlordiazepoxide / diazepam / lorazepam) — symptom-triggered (CIWA-Ar scale)"),
kv("Thiamine", "100 mg IV BEFORE glucose (Wernicke's prevention)"),
kv("Correct electrolytes", "K⁺, Mg²⁺, phosphate"),
Paragraph("<b><font color='#b02020'>DT mortality:</font></b> <5% with treatment (was 35% in early 20th century) "
"<i>[Tintinalli's EM]</i>", S_NOTE),
]
return items
add_topic(5, "Alcohol Withdrawal — Timeline & Treatment", t05)
# ── 06. Vitamin K in Cholecystitis ──────────────────────────────────────────
def t06():
items = [
Paragraph("<b>Mechanism:</b> Obstructive jaundice → blocked bile flow → ↓ bile salts in intestine → "
"impaired absorption of <b>fat-soluble vitamins (A, D, E, K)</b> → "
"Vit K deficiency → ↓ factors II, VII, IX, X → prolonged PT/INR → bleeding risk.", S_BODY),
sp(3),
kv("Pre-op Vit K", "Phytomenadione 10 mg IM/IV daily × 3 days before surgery"),
kv("Monitor", "PT/INR — should correct within 24-48 h if obstructive cause"),
Paragraph("<b><font color='#b02020'>Pearl:</font></b> PT does NOT correct with Vit K → "
"hepatocellular damage (liver cannot synthesise factors even with Vit K substrate).", S_NOTE),
Paragraph("<b>Also give:</b> Prophylactic antibiotics (cefuroxime + metronidazole), IV fluids, "
"correct coagulopathy, ERCP if CBD stone present.", S_NOTE),
]
return items
add_topic(6, "Vitamin K in Cholecystitis / Obstructive Jaundice", t06)
# ── 07. SR Na & SR K ────────────────────────────────────────────────────────
def t07():
rows = [
["Serum Sodium (Na⁺)", "135–145 mEq/L", "< 135 = Hyponatremia | > 145 = Hypernatremia"],
["Serum Potassium (K⁺)", "3.5–5.0 mEq/L", "< 3.5 = Hypokalemia | > 5.0 = Hyperkalemia"],
["Critical Na⁺", "< 120 or > 160 mEq/L", "Immediate intervention required"],
["Critical K⁺", "< 2.5 or > 6.5 mEq/L", "Cardiac arrhythmia risk"],
]
items = [
data_table(["Electrolyte", "Normal Range", "Notes"], rows,
[4.5*cm, 3.5*cm, TW-8*cm], hdr_bg=C_GOLD),
sp(3),
kv("Hyponatremia causes", "SIADH, cirrhosis, heart failure, hypothyroidism"),
kv("Hypokalemia causes", "Diuretics, vomiting, diarrhea, hyperaldosteronism"),
kv("Hyperkalemia causes", "Renal failure, ACEi/ARB, Addison's, K⁺-sparing diuretics"),
]
return items
add_topic(7, "Serum Na⁺ & K⁺ — Normal Values", t07)
# ── 08. SGOT / SGPT Normal Values ───────────────────────────────────────────
def t08():
rows = [
["SGPT (ALT)", "Serum Glutamate Pyruvate Transaminase", "7–56 U/L", "Liver-specific; elevated in viral hepatitis, NAFLD"],
["SGOT (AST)", "Serum Glutamate Oxaloacetate Transaminase", "10–40 U/L", "Less specific; also in heart, muscle, RBCs"],
]
items = [
data_table(["Enzyme", "Full Name", "Normal", "Clinical Note"],
rows, [2.5*cm, 5.5*cm, 2*cm, TW-10*cm], hdr_bg=C_BLUE),
sp(3),
kv("AST:ALT > 2:1", "Alcoholic hepatitis (mitochondrial AST released)"),
kv("ALT > AST", "Viral hepatitis, NAFLD, drug toxicity"),
kv("> 1000 U/L (both)", "Ischemic hepatitis (shock liver), acute viral hepatitis, paracetamol toxicity"),
]
return items
add_topic(8, "SGOT (AST) & SGPT (ALT) — Normal Values", t08)
story.append(PageBreak())
# ── 09. Acute Pancreatitis ───────────────────────────────────────────────────
def t09():
r_adm = [
["Glucose", "> 200 mg/dL"],
["Age", "> 55 years"],
["LDH", "> 350 IU/L"],
["AST (SGOT)", "> 250 U/L"],
["WBC", "> 16,000/mm³"],
]
r_48h = [
["Calcium", "< 8 mg/dL"],
["Hematocrit fall", "> 10%"],
["PaO₂", "< 60 mmHg"],
["BUN rise", "> 5 mg/dL"],
["Base deficit", "> 4 mEq/L"],
["Fluid sequestration", "> 6 L"],
]
# Side-by-side tables
t_adm = data_table(["On Admission (5)", "Value"], r_adm, [4*cm, 3*cm], hdr_bg=C_RED)
t_48h = data_table(["At 48 Hours (6)", "Value"], r_48h, [4*cm, 3*cm], hdr_bg=C_TEAL)
side = Table([[t_adm, sp(0.5), t_48h]], colWidths=[7.5*cm, 0.5*cm, 7.5*cm])
side.setStyle(TableStyle([("VALIGN", (0,0), (-1,-1), "TOP")]))
items = [
Paragraph("<b>Ranson's Criteria</b> (mnemonic: Admission = GA LAW; 48h = C HOBBS)", S_BODY_BOLD),
sp(2),
side,
sp(3),
Paragraph("<b>Scoring:</b> <3 = Mild (<1% mortality) | 3-4 = Moderate (15-20%) | "
"5-6 = Severe (40%) | >6 = >50% mortality", S_BODY),
sp(2),
Paragraph("<b>BISAP Score</b> (within 24h): BUN >25 | GCS <15 | SIRS | Age >60 | Pleural effusion", S_BODY),
sp(2),
Paragraph("<b>Revised Atlanta Classification:</b> "
"Mild (no organ failure) → Moderately severe (transient OF <48h or local complication) → "
"Severe (persistent OF >48h)", S_NOTE),
]
return items
add_topic(9, "Acute Pancreatitis — Ranson's Criteria & Severity", t09)
# ── 10. Cephalexin / Metronidazole / Piperacillin-Tazobactam ─────────────────
def t10():
rows = [
["Cephalexin", "1st-gen Cephalosporin",
"Binds PBPs → blocks transpeptidation → ↓ peptidoglycan cross-linking → bactericidal",
"Gram +ve (MSSA, Strep). NOT MRSA"],
["Metronidazole", "Nitroimidazole",
"Prodrug — activated by anaerobes → free radicals → DNA strand breaks → bactericidal",
"Anaerobes, H. pylori, Giardia, Entamoeba, Trichomonas"],
["Piperacillin-Tazobactam", "Antipseudomonal PCN + β-lactamase inhibitor",
"Pip: inhibits PBP3/PBP1a (cell wall); Taz: irreversibly inhibits β-lactamases",
"Broad: Gram+ve, Gram-ve (incl. Pseudomonas), anaerobes"],
]
items = [
data_table(["Drug", "Class", "Mechanism of Action", "Coverage/Notes"],
rows, [3.5*cm, 3.5*cm, 5.5*cm, TW-12.5*cm], hdr_bg=C_PURPLE),
]
return items
add_topic(10, "Cephalexin · Metronidazole · Piperacillin-Tazobactam", t10)
# ── 11. Linezolid & Ceftriaxone MOA ─────────────────────────────────────────
def t11():
rows = [
["Linezolid", "Oxazolidinone",
"Binds 23S rRNA of <b>50S ribosomal subunit</b> → prevents 70S initiation complex formation → "
"blocks protein synthesis at <b>initiation step</b>",
"Bacteriostatic (bactericidal vs streptococci). "
"Active: MRSA, VRE, drug-resistant Strep. Unique MOA — no cross-resistance."],
["Ceftriaxone", "3rd-gen Cephalosporin",
"Binds <b>Penicillin-Binding Proteins (PBPs)</b> → inhibits transpeptidation → "
"prevents peptidoglycan cross-linking → cell wall lysis → <b>bactericidal</b>",
"Long t½ (8h) — once daily. Gram +ve & -ve. CNS penetration (meningitis). "
"Biliary excretion (risk biliary sludge)."],
]
items = [
data_table(["Drug", "Class", "MOA", "Clinical Notes"],
rows, [2.5*cm, 3*cm, 6*cm, TW-11.5*cm], hdr_bg=C_GREEN),
]
return items
add_topic(11, "Linezolid & Ceftriaxone — Mechanism of Action", t11)
# ── 12. Dog Bite — WHO Category ─────────────────────────────────────────────
def t12():
rows = [
["I", "Touching/feeding animal; licks on INTACT skin",
"Wash with soap & water. No vaccine/RIG needed."],
["II", "Nibbling uncovered skin; minor scratch/abrasion WITHOUT bleeding",
"Wound washing + <b>Vaccination immediately</b>"],
["III", "Transdermal bite; licks on broken skin; mucous membrane contamination; bat exposure",
"Wound washing + <b>Vaccination + RIG immediately</b>"],
]
items = [
data_table(["Category", "Wound Description", "Management"],
rows, [2*cm, 6*cm, TW-8*cm], hdr_bg=C_RED),
sp(3),
kv("RIG dose (Cat III)", "HRIG: 20 IU/kg | ERIG: 40 IU/kg — infiltrate max into wound, rest IM"),
kv("Vaccine schedule", "Days 0, 3, 7, 14, 28 (5-dose) OR Days 0, 3, 7 (Zagreb 3-dose)"),
Paragraph("<b><font color='#b02020'>Pearl:</font></b> RIG and first vaccine dose given at SAME visit; "
"at DIFFERENT sites.", S_NOTE),
]
return items
add_topic(12, "Dog Bite — WHO Wound Category & Management", t12)
# ── 13. Creatinine & Urea Normal Values ────────────────────────────────────
def t13():
rows = [
["Serum Creatinine (male)", "0.6–1.2 mg/dL", "Muscle mass dependent; less affected by diet"],
["Serum Creatinine (female)", "0.5–1.1 mg/dL", "Lower due to less muscle mass"],
["Blood Urea Nitrogen (BUN)", "7–20 mg/dL", "Affected by protein intake, catabolism"],
["Serum Urea", "15–40 mg/dL", "BUN × 2.14"],
["BUN:Creatinine ratio", "10:1 to 20:1", "> 20:1 = pre-renal | < 10:1 = liver disease/malnutrition"],
]
items = [
data_table(["Parameter", "Normal Range", "Notes"], rows,
[5*cm, 3.5*cm, TW-8.5*cm], hdr_bg=C_GOLD),
]
return items
add_topic(13, "Creatinine & Urea — Normal Values", t13)
# ── 14. Why Creatinine Decreases in Pregnancy (DFS) ────────────────────────
def t14():
items = [
Paragraph("<b>DFS = Diluted / Physiologically reduced in pregnancy</b>", S_BODY_BOLD),
sp(2),
kv("Reason 1", "GFR increases 40–60% (due to ↑ cardiac output + ↑ renal blood flow) by end of 1st trimester"),
kv("Reason 2", "Renal plasma flow increases up to 75–85% above non-pregnant values"),
kv("Reason 3", "Plasma volume expansion (dilution effect)"),
sp(2),
Paragraph("<b>Result:</b> Serum creatinine, BUN, uric acid ALL fall in pregnancy.", S_BODY),
Paragraph("<b><font color='#b02020'>Clinical Pearl:</font></b> Normal non-pregnant creatinine "
"may represent RENAL INSUFFICIENCY in pregnancy. "
"Upper limit in pregnancy = 0.8 mg/dL. "
"<i>[Barash's Clinical Anesthesia, 9th ed.; Campbell-Walsh Urology]</i>", S_NOTE),
]
return items
add_topic(14, "Why Creatinine Decreases in Pregnancy (DFS)", t14)
story.append(PageBreak())
# ── 15. Scapula View (Radiology) ─────────────────────────────────────────────
def t15():
rows = [
["Scapular Y-view (True lateral)", "Beam parallel to spine of scapula; scapula forms 'Y' shape",
"BEST for diagnosing shoulder dislocation; anterior (head anterior to Y) vs posterior (head posterior to Y)"],
["Scapular AP view", "True AP of scapula", "Body/spine of scapula, AC joint"],
["Axillary view", "Arm abducted; beam inferior to superior", "GOLD STANDARD for shoulder dislocation; glenoid fractures"],
]
items = [
Paragraph("<b>Shoulder Trauma Series:</b> AP view + Scapular Y-view + Axillary view (3 views mandatory)", S_BODY_BOLD),
sp(2),
data_table(["View", "Technique", "Best For"], rows,
[4*cm, 4.5*cm, TW-8.5*cm], hdr_bg=C_TEAL),
sp(2),
Paragraph("<b>Normal Y-view:</b> Humeral head sits at junction (cup) of the Y = centred in glenoid.", S_NOTE),
]
return items
add_topic(15, "Scapula View — Radiology", t15)
# ── 16. Bioavailability of Paracetamol & Metronidazole ──────────────────────
def t16():
rows = [
["Paracetamol (Acetaminophen)", "~88–100% (oral)", "~85% (rectal)", "Peak in 30-60 min; hepatic first-pass low; IV faster onset but similar F"],
["Metronidazole", "~100% (oral)", "~100% (IV = oral)", "Switch oral early — bioequivalent; excellent tissue penetration"],
]
items = [
data_table(["Drug", "Oral Bioavailability", "Other Route", "Clinical Notes"],
rows, [4*cm, 3*cm, 3*cm, TW-10*cm], hdr_bg=C_PURPLE),
sp(3),
Paragraph("<b><font color='#b02020'>Key Point:</font></b> Metronidazole oral = IV (no need to continue IV once tolerating oral). "
"Paracetamol IV has <b>faster onset</b> but not better total bioavailability.", S_NOTE),
]
return items
add_topic(16, "Bioavailability — Paracetamol & Metronidazole", t16)
# ── 17. Charcot's Joint ──────────────────────────────────────────────────────
def t17():
cause_rows = [
["Diabetes mellitus", "Foot/ankle (tarsometatarsal)", "Most common cause today"],
["Tabes dorsalis (syphilis)", "Knee, hip", "Classic historical cause"],
["Syringomyelia", "Shoulder, elbow", "Upper limb involvement"],
["Leprosy", "Foot", "Peripheral neuropathy"],
["Alcoholic neuropathy", "Foot", "Chronic alcohol misuse"],
]
items = [
Paragraph("<b>Definition:</b> Progressive painless joint destruction due to impaired pain sensation / proprioception.", S_BODY),
sp(2),
data_table(["Cause", "Joint Affected", "Note"], cause_rows,
[4*cm, 4*cm, TW-8*cm], hdr_bg=C_GREEN),
sp(3),
kv("Clinical", "Hot, swollen, PAINLESS joint despite severe destruction"),
kv("X-ray (4 Ds)", "Distension | Density increase (sclerosis) | Debris (loose bodies) | Dislocation/Disorganisation"),
kv("'Bag of bones'", "Radiological appearance of advanced Charcot's joint"),
kv("Management", "Offloading, total contact cast, treat underlying cause; arthrodesis (late)"),
]
return items
add_topic(17, "Charcot's Joint — Neuropathic Arthropathy", t17)
# ── 18. EDH / SDH / IDH ──────────────────────────────────────────────────────
def t18():
rows = [
["Location", "Between skull & dura", "Between dura & arachnoid", "Within brain parenchyma"],
["Source", "Middle meningeal artery (pterion)", "Bridging veins (venous)", "Cortical artery / hypertensive"],
["CT shape", "<b>Biconvex (lens-shaped)</b>", "<b>Crescent-shaped</b>", "Irregular hyperdense area"],
["Crosses suture?", "<b>NO</b>", "<b>YES</b>", "N/A"],
["Lucid interval", "Classic feature", "Less common", "Absent"],
["Common in", "Young adults, trauma (pterion)", "Elderly, alcoholics, anticoagulants", "Elderly, hypertension"],
["Management", "Burr holes / craniotomy; >30mL evacuate", "Burr hole (chronic); craniotomy (acute)", "Conservative vs surgical (cerebellar >3cm)"],
]
items = [
data_table(["Feature", "EDH", "SDH", "IDH"],
rows, [3.5*cm, (TW-3.5*cm)/3, (TW-3.5*cm)/3, (TW-3.5*cm)/3], hdr_bg=C_RED),
sp(2),
Paragraph("<b><font color='#b02020'>SDH types:</font></b> "
"Acute (<3d, hyperdense) | Subacute (3-21d, isodense) | Chronic (>21d, hypodense)", S_NOTE),
]
return items
add_topic(18, "EDH · SDH · IDH — Intracranial Hemorrhage", t18)
# ── 19. GCS ───────────────────────────────────────────────────────────────────
def t19():
eye_rows = [
["4", "Spontaneous"],
["3", "To speech"],
["2", "To pain"],
["1", "No response"],
]
verbal_rows = [
["5", "Oriented"],
["4", "Confused conversation"],
["3", "Inappropriate words"],
["2", "Incomprehensible sounds"],
["1", "No response"],
]
motor_rows = [
["6", "Obeys commands"],
["5", "Localizes pain"],
["4", "Withdraws"],
["3", "Abnormal flexion (decorticate)"],
["2", "Extensor response (decerebrate)"],
["1", "No response"],
]
sev_rows = [
["14–15", "Mild TBI"],
["9–13", "Moderate TBI"],
["≤ 8", "Severe TBI — INTUBATE"],
["3", "Deep coma / brain death"],
]
te = data_table(["Score", "Eye Opening (E)"], eye_rows, [1.5*cm, 4.5*cm], hdr_bg=C_BLUE)
tv = data_table(["Score", "Verbal Response (V)"], verbal_rows, [1.5*cm, 4.5*cm], hdr_bg=C_TEAL)
tm = data_table(["Score", "Motor Response (M)"], motor_rows, [1.5*cm, 5*cm], hdr_bg=C_RED)
ts = data_table(["Total", "Severity"], sev_rows, [2*cm, 4*cm], hdr_bg=C_NAVY)
col_w = (TW - 1*cm) / 4
side = Table([[te, tv, tm, ts]], colWidths=[col_w]*4)
side.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 2),
("RIGHTPADDING", (0,0), (-1,-1), 2),
]))
items = [
Paragraph("<b>Total = E + V + M = 3 (minimum) to 15 (normal)</b> "
"<i>[Rosen's EM | Harrison's 22nd ed. | Bradley & Daroff's Neurology]</i>", S_BODY_BOLD),
sp(3),
side,
sp(3),
Paragraph("<b><font color='#b02020'>GCS ≤ 8 = Intubate.</font></b> "
"GCS is used for TBI severity classification, ICU triage, and prognostication.", S_NOTE),
]
return items
add_topic(19, "Glasgow Coma Scale (GCS)", t19)
# ── Footer note ──────────────────────────────────────────────────────────────
story.append(sp(6))
story.append(hr(C_NAVY))
story.append(Paragraph(
"Sources: Schwartz's Principles of Surgery 11e · Harrison's Principles of Internal Medicine 22e · "
"Rosen's Emergency Medicine · Katzung's Basic & Clinical Pharmacology 16e · "
"Tintinalli's Emergency Medicine · Washington Manual of Medical Therapeutics · "
"Barash's Clinical Anesthesia 9e · Bradley & Daroff's Neurology · Goldman-Cecil Medicine · "
"WHO Rabies Guidelines | Prepared with Orris AI — August 2026",
S_FOOTER))
# ── Page numbering ───────────────────────────────────────────────────────────
def on_page(canvas, doc):
canvas.saveState()
canvas.setFont("Helvetica", 7)
canvas.setFillColor(C_DGREY)
canvas.drawCentredString(PAGE_W / 2, 0.8*cm,
f"Medical Exam Quick Reference | Page {doc.page}")
canvas.restoreState()
# ── Build ────────────────────────────────────────────────────────────────────
doc.build(story, onFirstPage=on_page, onLaterPages=on_page)
print(f"PDF saved to: {OUTPUT}")
cd /tmp/workspace/med-quickref && python3 generate_pdf.py 2>&1
ls -lh /tmp/workspace/med-quickref/Medical_Exam_QuickRef.pdf
Medical Exam QuickRef
PDF Document · PDF
| Pages | Topics |
|---|---|
| Page 1 | Topics 1-8: Chemo vomiting, Umbilical hernia TSH/LFT, PAOD drugs, Ovarian cyst criteria, Alcohol withdrawal, Vit K, SR Na/K, SGOT/SGPT |
| Page 2 | Topics 9-14: Acute pancreatitis (Ranson's full table), Cephalexin/Metro/PipTaz, Linezolid/Ceftriaxone MOA, Dog bite WHO categories, Creat/Urea values, Creatinine in pregnancy |
| Page 3 | Topics 15-19: Scapula views, Bioavailability, Charcot's joint, EDH/SDH/IDH comparison table, GCS (all 3 components with scoring) |