Cisplatin , high yield pdf notes according to kd tripathi chapater anti cancer drugs i need pdf notes

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Finding Sources
Reading File
Reading File
Reading File
Reading File
Reading File
Running Command

mkdir -p /home/daytona/workspace/cisplatin-notes && ls /home/daytona/workspace/cisplatin-notes/

Writing File

~/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}")
Running Command

cd /home/daytona/workspace/cisplatin-notes && python generate_pdf.py 2>&1

Your PDF is ready! Download it here:

Cisplatin HighYield KDTripathi

PDF Document · PDF


What's inside the PDF (aligned with KD Tripathi style):

SectionContent
Quick IdentityDrug class, chemical name, discovery, FDA approval, cell-cycle phase
Mechanism of ActionStep-by-step: Entry (CTR1) → Aquation → DNA adducts → Apoptosis
Pharmacokinetics (ADME)IV only, protein binding >90%, renal excretion, t½, hydration protocol
Therapeutic UsesBEP (testicular 90% cure), ovarian, bladder, H&N, lung, esophageal, radiation sensitizer
Adverse EffectsFull table: Nephrotoxicity (dose-limiting), N/V (most severe), ototoxicity, neuropathy, electrolyte wasting, anaphylaxis
Resistance MechanismsCTR1 downregulation, ATP7A/7B efflux, glutathione, NER, MMR loss
Platinum Analogues ComparisonCisplatin vs Carboplatin vs Oxaliplatin — full comparison table
Drug InteractionsAminoglycosides, taxanes, amifostine, aluminium equipment
High-Yield Exam Points14 starred exam-ready facts + "RONE + N/V" mnemonic
Important RegimensBEP, MVAC, GC, TP, CF, EP, CAP with their uses
ContraindicationsRenal failure, ototoxicity, pregnancy, etc.

Key facts to remember:

  • Dose-limiting toxicity = Nephrotoxicity (proximal + distal tubule)
  • Most emetogenic drug in oncology - mandatory 5-HT3 + NK1 + dexamethasone pre-medication
  • BEP regimen cures 90% of testicular cancers (★ top exam fact)
  • Aluminium inactivates cisplatin - plastic/glass equipment only
  • Carboplatin dose is calculated by AUC (Calvert formula), not mg/m²
  • Oxaliplatin unique toxicity = cold-induced neuropathy (colorectal cancer)
This is a shared conversation. Sign in to Orris to start your own chat.