Cisplatin , high yield pdf notes according to kd tripathi chapater anti cancer drugs i need pdf notes
mkdir -p /home/daytona/workspace/cisplatin-notes && ls /home/daytona/workspace/cisplatin-notes/
~/cisplatin-notes/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/cisplatin-notes/Cisplatin_HighYield_KDTripathi.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.8*cm,
topMargin=2*cm, bottomMargin=2*cm
)
styles = getSampleStyleSheet()
# ── Custom Styles ──────────────────────────────────────────────────────────────
BLUE = colors.HexColor("#1565C0")
LBLUE = colors.HexColor("#E3F2FD")
DBLUE = colors.HexColor("#0D47A1")
RED = colors.HexColor("#C62828")
GREEN = colors.HexColor("#1B5E20")
ORANGE = colors.HexColor("#E65100")
YELLOW = colors.HexColor("#FFF9C4")
LGREY = colors.HexColor("#F5F5F5")
title_style = ParagraphStyle(
"TitleStyle", parent=styles["Title"],
fontSize=22, textColor=colors.white, alignment=TA_CENTER,
fontName="Helvetica-Bold", spaceAfter=4
)
subtitle_style = ParagraphStyle(
"SubtitleStyle", parent=styles["Normal"],
fontSize=11, textColor=colors.HexColor("#B0BEC5"), alignment=TA_CENTER,
fontName="Helvetica-Oblique", spaceAfter=2
)
h1_style = ParagraphStyle(
"H1", parent=styles["Heading1"],
fontSize=14, textColor=colors.white, fontName="Helvetica-Bold",
spaceBefore=10, spaceAfter=4, leftIndent=0
)
h2_style = ParagraphStyle(
"H2", parent=styles["Heading2"],
fontSize=12, textColor=DBLUE, fontName="Helvetica-Bold",
spaceBefore=8, spaceAfter=3, leftIndent=6
)
body_style = ParagraphStyle(
"Body", parent=styles["Normal"],
fontSize=10, leading=15, textColor=colors.HexColor("#212121"),
fontName="Helvetica", spaceAfter=4, leftIndent=10, alignment=TA_JUSTIFY
)
bullet_style = ParagraphStyle(
"Bullet", parent=styles["Normal"],
fontSize=10, leading=14, textColor=colors.HexColor("#212121"),
fontName="Helvetica", spaceAfter=3, leftIndent=20, bulletIndent=8
)
bold_bullet = ParagraphStyle(
"BoldBullet", parent=bullet_style,
fontName="Helvetica-Bold", textColor=DBLUE
)
warn_style = ParagraphStyle(
"Warn", parent=body_style,
textColor=RED, fontName="Helvetica-Bold", fontSize=10
)
highlight_style = ParagraphStyle(
"Highlight", parent=body_style,
backColor=YELLOW, borderPad=4, leading=16
)
mnemonic_style = ParagraphStyle(
"Mnemonic", parent=styles["Normal"],
fontSize=11, textColor=GREEN, fontName="Helvetica-Bold",
spaceBefore=4, spaceAfter=4, leftIndent=12, leading=16
)
footer_style = ParagraphStyle(
"Footer", parent=styles["Normal"],
fontSize=8, textColor=colors.grey, alignment=TA_CENTER
)
def section_header(title, color=BLUE):
"""Returns a coloured section-header band + spacer."""
data = [[Paragraph(title, h1_style)]]
t = Table(data, colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 0.5, colors.white),
]))
return t
def info_box(title, items, bg=LBLUE, title_color=BLUE):
"""Bordered box with title row and bullet items."""
rows = [[Paragraph(f"<b>{title}</b>", ParagraphStyle(
"IB", parent=styles["Normal"], fontSize=10.5,
textColor=colors.white, fontName="Helvetica-Bold"))]]
for item in items:
rows.append([Paragraph(f"• {item}", body_style)])
t = Table(rows, colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), title_color),
("BACKGROUND", (0,1), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1, title_color),
("INNERGRID", (0,0), (-1,-1), 0.3, colors.HexColor("#BBDEFB")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
return t
story = []
# ═══════════════════════════════════════════════════════════════════════════════
# TITLE PAGE BANNER
# ═══════════════════════════════════════════════════════════════════════════════
banner_data = [[
Paragraph("CISPLATIN", title_style),
],[
Paragraph("High-Yield Pharmacology Notes | Anti-Cancer Drugs", subtitle_style),
],[
Paragraph("Based on KD Tripathi — Essentials of Medical Pharmacology", subtitle_style),
]]
banner = Table(banner_data, colWidths=[doc.width])
banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DBLUE),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 15),
("BOX", (0,0), (-1,-1), 2, BLUE),
]))
story.append(banner)
story.append(Spacer(1, 0.4*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# QUICK-GLANCE IDENTITY BOX
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("📋 QUICK IDENTITY — AT A GLANCE"))
story.append(Spacer(1, 0.2*cm))
id_data = [
["Parameter", "Details"],
["Drug Class", "Platinum Coordination Complex / Alkylating-like Agent"],
["Chemical Name", "cis-diamminedichloroplatinum(II) [cis-DDP, CDDP]"],
["Discovery", "Rosenberg et al., 1969 (bacterial studies with Pt electrodes)"],
["FDA Approval", "1978"],
["Cell Cycle", "Cell-cycle non-specific (most vulnerable: G1 & S phase)"],
["Route", "IV only (never oral)"],
["Prototype of", "Platinum analogues (Carboplatin, Oxaliplatin)"],
]
id_table = Table(id_data, colWidths=[5*cm, doc.width - 5*cm])
id_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), BLUE),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9.5),
("BACKGROUND", (0,1), (0,-1), colors.HexColor("#E8EAF6")),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, LGREY]),
("BOX", (0,0), (-1,-1), 1, BLUE),
("INNERGRID", (0,0), (-1,-1), 0.4, colors.HexColor("#C5CAE9")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
story.append(id_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# MECHANISM OF ACTION
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("⚙️ MECHANISM OF ACTION"))
story.append(Spacer(1, 0.2*cm))
moa_steps = [
("Step 1 — Entry", "Enters cell via Cu²⁺ transporter CTR1 (SLC31A1). High plasma Cl⁻ keeps cisplatin in neutral, stable form."),
("Step 2 — Activation (Aquation)", "Inside cell, low Cl⁻ milieu → Cl⁻ ligands replaced by H₂O → positively charged aquated species formed."),
("Step 3 — DNA Binding", "Aquated cisplatin binds to N-7 of guanine (most common) → forms intra-strand and inter-strand cross-links (DNA adducts)."),
("Step 4 — Cytotoxic Effect", "DNA adducts → inhibit DNA polymerase (replication) and RNA polymerase (transcription) → block cell division → apoptosis (via p53 pathway)."),
("Key fact", "Adducts are recognised by HMG (High-Mobility Group) proteins — high HMG expression in testicular cancer = high cisplatin sensitivity."),
]
for title, text in moa_steps:
row_data = [[
Paragraph(f"<b>{title}</b>", ParagraphStyle("StepTitle",parent=styles["Normal"],
fontSize=9.5,fontName="Helvetica-Bold",textColor=DBLUE)),
Paragraph(text, body_style)
]]
t = Table(row_data, colWidths=[3.5*cm, doc.width - 3.5*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), colors.HexColor("#E8EAF6")),
("BACKGROUND", (1,0), (1,0), colors.white),
("BOX", (0,0), (-1,-1), 0.5, colors.HexColor("#9FA8DA")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
story.append(t)
story.append(Spacer(1, 0.1*cm))
story.append(Spacer(1, 0.25*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# PHARMACOKINETICS (ADME)
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("💊 PHARMACOKINETICS (ADME)"))
story.append(Spacer(1, 0.2*cm))
pk_data = [
["Parameter", "Details"],
["Absorption", "IV only — not given orally. Also intraperitoneal (IP) or intra-arterial (IA) for ovarian/bladder."],
["Distribution", "High conc. in liver, kidney, intestine, testes. POOR CNS penetration (does not cross BBB). >90% bound to plasma proteins."],
["Metabolism", "Minimal hepatic; loses Cl⁻ intracellularly (aquation). Aluminium inactivates cisplatin — do not use Al-containing equipment."],
["Excretion", "Primarily renal. t½ initial = 25–50 min; total Pt t½ = 24 h+. 25% excreted at 24 h; 43% by 5 days (bound to peptides/proteins)."],
["Infusion", "Diluted in dextrose + saline + mannitol → IV over 4–6 hours. Pre-hydration: 1–2 L NS before infusion."],
]
pk_table = Table(pk_data, colWidths=[3*cm, doc.width - 3*cm])
pk_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), BLUE),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9.5),
("BACKGROUND", (0,1), (0,-1), colors.HexColor("#E8EAF6")),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, LGREY]),
("BOX", (0,0), (-1,-1), 1, BLUE),
("INNERGRID", (0,0), (-1,-1), 0.4, colors.HexColor("#C5CAE9")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(pk_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# THERAPEUTIC USES
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("🎯 THERAPEUTIC USES (Indications)"))
story.append(Spacer(1, 0.2*cm))
uses_data = [
["Cancer Type", "Regimen / Notes"],
["Testicular Ca (★ CURABLE)", "BEP: Bleomycin + Etoposide + cis<b>P</b>latin → CURES 90% of patients (KD Tripathi high-yield fact)"],
["Ovarian Ca", "Cisplatin/Carboplatin + Paclitaxel → complete response in majority"],
["Bladder Ca", "Used alone or in combination (MVAC: MTX, Vinblastine, Adriamycin, Cisplatin)"],
["Head & Neck Ca", "First-line; also chemoradiation sensitizer"],
["Lung Ca (NSCLC & SCLC)", "Backbone of platinum-based doublet regimens"],
["Cervical & Endometrial Ca","Cisplatin-based combinations"],
["Esophageal Ca", "With 5-FU or radiation"],
["Colorectal Ca", "Oxaliplatin preferred (not cisplatin)"],
["Radiation Sensitizer", "Locally advanced lung, esophageal, H&N tumors — enhances radiation effect"],
]
uses_table = Table(uses_data, colWidths=[5*cm, doc.width - 5*cm])
uses_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1B5E20")),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9.5),
("BACKGROUND", (0,1), (-1,1), colors.HexColor("#C8E6C9")),
("FONTNAME", (0,1), (-1,1), "Helvetica-Bold"),
("TEXTCOLOR", (0,1), (-1,1), colors.HexColor("#1B5E20")),
("ROWBACKGROUNDS",(0,2), (-1,-1), [colors.white, colors.HexColor("#F1F8E9")]),
("BOX", (0,0), (-1,-1), 1, colors.HexColor("#2E7D32")),
("INNERGRID", (0,0), (-1,-1), 0.4, colors.HexColor("#A5D6A7")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(uses_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# ADVERSE EFFECTS — HIGH YIELD TABLE
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("⚠️ ADVERSE EFFECTS (HIGH YIELD)", color=RED))
story.append(Spacer(1, 0.2*cm))
ae_data = [
["Toxicity", "Details", "Prevention / Management"],
["Nephrotoxicity\n★ DOSE-LIMITING",
"Distal convoluted tubule + collecting duct damage. Tubular necrosis. Rise in creatinine.",
"Aggressive IV hydration (1–2 L NS pre + post). Mannitol diuresis. Amifostine (cytoprotectant)."],
["Severe Nausea & Vomiting\n★ MOST COMMON",
"Occurs in nearly 100% of patients. Begins within hours; may last 5 days.",
"Pre-medicate with 5-HT3 antagonists (Ondansetron) + NK1 antagonist (Aprepitant) + Dexamethasone."],
["Ototoxicity",
"High-frequency sensorineural hearing loss, tinnitus. Irreversible. More in children.",
"Audiometry before and after treatment. Sodium thiosulfate (protective, Phase 3 evidence)."],
["Peripheral Neuropathy",
"Sensory > motor. Stocking-glove pattern. Worsens after stopping drug. Worsened by taxanes.",
"Dose reduction. Cumulative and dose-related."],
["Myelosuppression\n(Mild–Moderate)",
"Leukopenia, thrombocytopenia, anemia. Less severe than carboplatin.",
"CBC monitoring. G-CSF if needed."],
["Electrolyte Wasting",
"Hypomagnesaemia, hypokalemia, hypocalcemia, hypophosphatemia (tubular damage).",
"Routine Mg²⁺ monitoring. Mg replacement. May cause tetany if uncorrected."],
["Anaphylaxis",
"Facial edema, bronchospasm, tachycardia, hypotension — within minutes.",
"Adrenaline (epinephrine) IV + corticosteroids + antihistamines."],
["Secondary AML",
"Rare; usually 4+ years post-treatment.",
"Long-term follow-up."],
]
ae_table = Table(ae_data, colWidths=[3.5*cm, 5.5*cm, doc.width-9*cm])
ae_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), RED),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9),
("BACKGROUND", (0,1), (0,2), colors.HexColor("#FFEBEE")),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("TEXTCOLOR", (0,1), (0,-1), RED),
("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, colors.HexColor("#FFF3E0")]),
("BOX", (0,0), (-1,-1), 1, RED),
("INNERGRID", (0,0), (-1,-1), 0.4, colors.HexColor("#FFCDD2")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(ae_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# RESISTANCE MECHANISMS
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("🔒 MECHANISMS OF RESISTANCE", color=colors.HexColor("#6A1B9A")))
story.append(Spacer(1, 0.2*cm))
resist_items = [
"Decreased uptake — reduced CTR1 transporter expression",
"Increased efflux — overexpression of ATP7A / ATP7B copper exporters and MRP1",
"Increased intracellular glutathione / metallothionein — binds & inactivates cisplatin",
"Enhanced DNA repair — overexpression of NER (Nucleotide Excision Repair) proteins",
"Loss of MMR (Mismatch Repair) — impairs apoptosis signal from unrepaired adducts (cisplatin-specific; NOT oxaliplatin)",
"DNA polymerase bypass — some polymerases replicate past Pt adducts",
"Cross-resistance: Carboplatin shares cross-resistance with cisplatin; Oxaliplatin does NOT",
]
story.append(info_box("Resistance Mechanisms", resist_items,
bg=colors.HexColor("#F3E5F5"), title_color=colors.HexColor("#6A1B9A")))
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# CISPLATIN vs CARBOPLATIN vs OXALIPLATIN
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("🔬 PLATINUM ANALOGUES COMPARISON", color=colors.HexColor("#00695C")))
story.append(Spacer(1, 0.2*cm))
comp_data = [
["Feature", "CISPLATIN", "CARBOPLATIN", "OXALIPLATIN"],
["Class", "Pt-II complex", "Pt-II complex", "Pt-II complex"],
["Dose-limiting tox", "Nephrotoxicity", "Myelosuppression", "Peripheral neuropathy"],
["Nausea/Vomiting", "Severe ★★★", "Mild ★", "Moderate ★★"],
["Nephrotoxicity", "Major", "Mild", "Mild"],
["Ototoxicity", "Yes (common)", "Rare", "Rare"],
["Neuropathy", "Moderate", "Mild", "Cold-induced ★ (unique)"],
["Myelosuppression", "Mild-moderate", "Dose-limiting ★", "Moderate"],
["Key use", "Testicular, H&N, Ovarian", "Ovarian (renally impaired pts)", "Colorectal Ca ★★"],
["Needs hydration", "YES — mandatory", "Less required", "No"],
["MMR dependence", "YES", "YES", "NO"],
["HMG protein dep.", "YES", "YES", "NO"],
["Dose calculation", "mg/m²", "AUC (Calvert formula)","mg/m²"],
]
comp_table = Table(comp_data, colWidths=[4.5*cm, 4.5*cm, 4.5*cm, 4.5*cm])
comp_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#00695C")),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("BACKGROUND", (0,1), (0,-1), colors.HexColor("#E0F2F1")),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9),
("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, colors.HexColor("#E0F2F1")]),
("BOX", (0,0), (-1,-1), 1, colors.HexColor("#00695C")),
("INNERGRID", (0,0), (-1,-1), 0.4, colors.HexColor("#80CBC4")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("ALIGN", (1,0), (-1,-1), "CENTER"),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(comp_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# KEY DRUG INTERACTIONS
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("💊 KEY DRUG INTERACTIONS", color=ORANGE))
story.append(Spacer(1, 0.2*cm))
di_data = [
["Drug / Agent", "Interaction"],
["Aminoglycosides", "Additive nephrotoxicity + ototoxicity — AVOID combination"],
["Loop diuretics (Furosemide)", "Additive ototoxicity"],
["Taxanes (Paclitaxel/Docetaxel)", "Additive neuropathy — sequence matters (cisplatin first, then taxane preferred)"],
["NSAIDs", "Reduce renal blood flow → worsen nephrotoxicity"],
["ALUMINIUM equipment", "Inactivates cisplatin — do NOT use Al needles/infusion sets"],
["Amifostine", "Cytoprotective — reduces nephro-, neuro-, ototoxicity without reducing anti-tumour effect"],
["Anticonvulsants (Phenytoin)", "Cisplatin reduces phenytoin absorption — monitor seizure control"],
["5-HT3 antagonists (Ondansetron)", "Pre-treatment for N&V — beneficial combination"],
]
di_table = Table(di_data, colWidths=[5*cm, doc.width - 5*cm])
di_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), ORANGE),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9.5),
("BACKGROUND", (0,1), (0,-1), colors.HexColor("#FFF3E0")),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, colors.HexColor("#FFF8E1")]),
("BOX", (0,0), (-1,-1), 1, ORANGE),
("INNERGRID", (0,0), (-1,-1), 0.4, colors.HexColor("#FFCC80")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(di_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# HIGH YIELD MNEMONICS & EXAM POINTS
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("⭐ HIGH-YIELD EXAM POINTS & MNEMONICS"))
story.append(Spacer(1, 0.2*cm))
mnemonic_box_data = [[Paragraph(
'<b>MNEMONIC — Cisplatin Toxicities: "RONE + N/V"</b><br/>'
'<font color="#1565C0"><b>R</b></font>eno-toxicity (dose-limiting)<br/>'
'<font color="#1565C0"><b>O</b></font>totoxicity (tinnitus, hearing loss)<br/>'
'<font color="#1565C0"><b>N</b></font>europathy (peripheral sensory)<br/>'
'<font color="#1565C0"><b>E</b></font>lectrolyte wasting (Mg²⁺, K⁺, Ca²⁺, PO₄)<br/>'
'<font color="#1565C0"><b>N/V</b></font> — most severe of all chemo drugs',
body_style)
]]
mn_table = Table(mnemonic_box_data, colWidths=[doc.width])
mn_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#E8F5E9")),
("BOX", (0,0), (-1,-1), 2, colors.HexColor("#2E7D32")),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
]))
story.append(mn_table)
story.append(Spacer(1, 0.2*cm))
exam_points = [
"★ Cisplatin is the MOST emetogenic anticancer drug — requires mandatory antiemetic cover.",
"★ Dose-limiting toxicity = NEPHROTOXICITY (unlike carboplatin = myelosuppression).",
"★ Mechanism = forms DNA ADDUCTS (Pt binds N7 of Guanine) → intra-strand cross-links.",
"★ Cell-cycle NON-SPECIFIC but most active in G1 and S phase.",
"★ Testicular cancer: BEP regimen = Bleomycin + Etoposide + cisPlatin → 90% cure rate.",
"★ Aluminium inactivates cisplatin — use only plastic/glass infusion equipment.",
"★ High Cl⁻ protects kidneys (keeps cisplatin stable) → pre-hydration with normal saline.",
"★ Amifostine = the ONLY approved chemoprotective agent for cisplatin nephrotoxicity.",
"★ Electrolyte wasting: HYPOMAGNESAEMIA is characteristic — must monitor and replace Mg²⁺.",
"★ Ototoxicity is IRREVERSIBLE — audiometry before and during treatment.",
"★ Oxaliplatin unique toxicity = cold-induced peripheral neuropathy (UNIQUE to oxaliplatin).",
"★ Carboplatin dose = calculated using AUC (Calvert formula using creatinine clearance).",
"★ Cisplatin resistance: overexpression of Cu exporters ATP7A/ATP7B = poor prognosis.",
"★ Secondary AML risk after cisplatin — seen 4+ years post-exposure.",
]
exam_box_data = [[Paragraph("<br/>".join(
[f'<font color="#C62828">•</font> {p}' for p in exam_points]),
body_style)
]]
exam_table = Table(exam_box_data, colWidths=[doc.width])
exam_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#FFF9C4")),
("BOX", (0,0), (-1,-1), 1.5, colors.HexColor("#F9A825")),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
story.append(exam_table)
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# CONTRAINDICATIONS & SPECIAL POPULATIONS
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("🚫 CONTRAINDICATIONS & CAUTIONS", color=RED))
story.append(Spacer(1, 0.2*cm))
ci_items = [
"Pre-existing renal impairment (relative CI — dose reduce or switch to carboplatin)",
"Pre-existing ototoxicity / significant hearing loss",
"Peripheral neuropathy",
"Myelosuppression (bone marrow failure)",
"Pregnancy (Category D — teratogenic, embryotoxic)",
"Hypersensitivity to platinum compounds",
"Concurrent use of other nephrotoxic drugs (aminoglycosides, NSAIDs) — use with extreme caution",
]
story.append(info_box("Contraindications / Cautions", ci_items,
bg=colors.HexColor("#FFEBEE"), title_color=RED))
story.append(Spacer(1, 0.3*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# IMPORTANT REGIMENS CONTAINING CISPLATIN
# ═══════════════════════════════════════════════════════════════════════════════
story.append(section_header("📌 IMPORTANT CISPLATIN-CONTAINING REGIMENS"))
story.append(Spacer(1, 0.2*cm))
reg_data = [
["Acronym", "Drugs", "Used For"],
["BEP", "Bleomycin + Etoposide + cisPlatin", "Testicular Ca ★ (90% cure)"],
["VBP/PVB", "Vinblastine + Bleomycin + cisPlatin", "Testicular Ca (older)"],
["MVAC", "MTX + Vinblastine + Adriamycin + Cisplatin", "Bladder Ca"],
["GC", "Gemcitabine + Cisplatin", "NSCLC, Bladder Ca"],
["TP", "Paclitaxel (Taxol) + cisPlatin", "Ovarian Ca, Lung Ca"],
["CF/PF", "Cisplatin + 5-FU", "H&N Ca, Esophageal Ca"],
["EP", "Etoposide + cisPlatin", "SCLC, Testicular Ca"],
["CAP", "Cyclophosphamide + Adriamycin + cisPlatin", "Ovarian Ca (older)"],
]
reg_table = Table(reg_data, colWidths=[2.5*cm, 7*cm, doc.width-9.5*cm])
reg_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DBLUE),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9.5),
("BACKGROUND", (0,1), (0,-1), LBLUE),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("TEXTCOLOR", (0,1), (0,-1), DBLUE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, LGREY]),
("BOX", (0,0), (-1,-1), 1, BLUE),
("INNERGRID", (0,0), (-1,-1), 0.4, colors.HexColor("#BBDEFB")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(reg_table)
story.append(Spacer(1, 0.4*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# FOOTER
# ═══════════════════════════════════════════════════════════════════════════════
story.append(HRFlowable(width="100%", thickness=1, color=BLUE))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
"High-Yield Pharmacology Notes — Cisplatin | Based on KD Tripathi (Essentials of Medical Pharmacology), "
"Goodman & Gilman's, and Lippincott Pharmacology | For Educational Use Only",
footer_style
))
# ─── Build ────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF generated: {OUTPUT}")
cd /home/daytona/workspace/cisplatin-notes && python generate_pdf.py 2>&1
Cisplatin HighYield KDTripathi
PDF Document · PDF
| Section | Content |
|---|---|
| Quick Identity | Drug class, chemical name, discovery, FDA approval, cell-cycle phase |
| Mechanism of Action | Step-by-step: Entry (CTR1) → Aquation → DNA adducts → Apoptosis |
| Pharmacokinetics (ADME) | IV only, protein binding >90%, renal excretion, t½, hydration protocol |
| Therapeutic Uses | BEP (testicular 90% cure), ovarian, bladder, H&N, lung, esophageal, radiation sensitizer |
| Adverse Effects | Full table: Nephrotoxicity (dose-limiting), N/V (most severe), ototoxicity, neuropathy, electrolyte wasting, anaphylaxis |
| Resistance Mechanisms | CTR1 downregulation, ATP7A/7B efflux, glutathione, NER, MMR loss |
| Platinum Analogues Comparison | Cisplatin vs Carboplatin vs Oxaliplatin — full comparison table |
| Drug Interactions | Aminoglycosides, taxanes, amifostine, aluminium equipment |
| High-Yield Exam Points | 14 starred exam-ready facts + "RONE + N/V" mnemonic |
| Important Regimens | BEP, MVAC, GC, TP, CF, EP, CAP with their uses |
| Contraindications | Renal failure, ototoxicity, pregnancy, etc. |