Describe Multiple myeloma give me in pdf format

Reading File
Reading File
Finding Sources
Searching PubMed

"multiple myeloma"[MeSH Terms] AND "therapy"[MeSH Terms]

Reading File
Reading File
Reading File
Running Command

mkdir -p /home/daytona/workspace/multiple-myeloma && python3 << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import mm, cm from reportlab.lib import colors from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak) from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY OUTPUT = "/home/daytona/workspace/multiple-myeloma/Multiple_Myeloma.pdf" doc = SimpleDocTemplate( OUTPUT, pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2.5*cm, bottomMargin=2*cm, title="Multiple Myeloma - Clinical Reference", author="Orris Medical Library" ) styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle( "Title", parent=styles["Title"], fontSize=26, textColor=colors.HexColor("#1a3a5c"), spaceAfter=6, spaceBefore=0, leading=32 ) subtitle_style = ParagraphStyle( "Subtitle", parent=styles["Normal"], fontSize=13, textColor=colors.HexColor("#4a6fa5"), spaceAfter=16, alignment=TA_CENTER ) h1_style = ParagraphStyle( "H1", parent=styles["Heading1"], fontSize=16, textColor=colors.HexColor("#1a3a5c"), spaceBefore=18, spaceAfter=6, borderPad=4, leading=20, leftIndent=0 ) h2_style = ParagraphStyle( "H2", parent=styles["Heading2"], fontSize=13, textColor=colors.HexColor("#2c5282"), spaceBefore=12, spaceAfter=4, leading=16 ) body_style = ParagraphStyle( "Body", parent=styles["Normal"], fontSize=10.5, leading=15, spaceAfter=8, alignment=TA_JUSTIFY ) bullet_style = ParagraphStyle( "Bullet", parent=styles["Normal"], fontSize=10.5, leading=15, spaceAfter=4, leftIndent=14, bulletIndent=4 ) caption_style = ParagraphStyle( "Caption", parent=styles["Normal"], fontSize=9, textColor=colors.HexColor("#555555"), alignment=TA_CENTER, spaceAfter=8 ) footer_style = ParagraphStyle( "Footer", parent=styles["Normal"], fontSize=8, textColor=colors.HexColor("#888888"), alignment=TA_CENTER ) def hr(): return HRFlowable(width="100%", thickness=1, color=colors.HexColor("#1a3a5c"), spaceAfter=10, spaceBefore=2) def hr_thin(): return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6, spaceBefore=2) def h1(text): return Paragraph(text, h1_style) def h2(text): return Paragraph(text, h2_style) def body(text): return Paragraph(text, body_style) def bullet(text): return Paragraph(f"• {text}", bullet_style) def sp(h=6): return Spacer(1, h) # ────────────────────────────────────────────── # CONTENT # ────────────────────────────────────────────── story = [] # ── COVER PAGE ─────────────────────────────── story.append(sp(40)) story.append(Paragraph("MULTIPLE MYELOMA", title_style)) story.append(hr()) story.append(Paragraph("A Comprehensive Clinical Reference", subtitle_style)) story.append(sp(10)) story.append(body( "Compiled from <i>Goldman-Cecil Medicine (International Edition)</i>, " "<i>Robbins & Kumar Basic Pathology</i>, <i>Textbook of Family Medicine</i>, " "and <i>Bradley & Daroff's Neurology in Clinical Practice</i>." )) story.append(sp(6)) story.append(Paragraph("Orris Medical Library · June 2026", caption_style)) story.append(PageBreak()) # ── SECTION 1: DEFINITION ──────────────────── story.append(h1("1. Definition")) story.append(hr_thin()) story.append(body( "Multiple myeloma is a <b>malignancy of plasma cells</b> characterized by bone marrow infiltration " "and extensive skeletal destruction, resulting in anemia, bone pain, and fractures. " "It is defined by the presence of:" )) story.append(bullet("<b>≥10% clonal plasma cells</b> on bone marrow examination")) story.append(bullet("M protein in serum or urine (absent in nonsecretory myeloma)")) story.append(bullet("Evidence of one or more <b>myeloma-defining events (MDE)</b>")) story.append(sp()) story.append(body( "Patients with multiple myeloma must be differentiated from those with monoclonal gammopathy of " "undetermined significance (MGUS) and smoldering multiple myeloma, which are precursor states " "that do not yet meet MDE criteria." )) # ── SECTION 2: EPIDEMIOLOGY ────────────────── story.append(sp(4)) story.append(h1("2. Epidemiology")) story.append(hr_thin()) story.append(body( "Multiple myeloma accounts for <b>~1% of all malignant diseases</b> and <b>more than 10% of " "hematologic malignancies</b> in the United States, with approximately 30,000 new cases " "diagnosed annually." )) epi_data = [ ["Parameter", "Detail"], ["Median age at diagnosis", "70 years"], ["Sex", "More common in males"], ["Racial predisposition", "More frequent in people of African descent (USA)"], ["Annual new cases (USA)", "~30,000"], ["M-protein type (IgG)", "60% of cases"], ["M-protein type (IgA)", "20-25% of cases"], ["Light chain only", "~15-20% (κ or λ light chains)"], ["IgM, IgD, IgE", "Rare"], ] epi_table = Table(epi_data, colWidths=[6.5*cm, 10*cm]) epi_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9.5), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f0f4f8"), colors.white]), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ])) story.append(epi_table) story.append(sp(4)) # ── SECTION 3: PATHOGENESIS ────────────────── story.append(h1("3. Pathogenesis")) story.append(hr_thin()) story.append(h2("3.1 Molecular Mechanisms")) story.append(body( "The pathogenesis of multiple myeloma involves a stepwise progression from normal plasma cells " "through MGUS to frank malignancy. Key molecular events include:" )) story.append(bullet( "<b>Chromosomal translocations</b> fusing the IgH locus on chromosome 14 to oncogenes such as " "<i>cyclin D1</i> and <i>cyclin D3</i> genes - dysregulation of D cyclins is common and contributes " "to increased cell proliferation." )) story.append(bullet( "<b>IL-6 signaling:</b> Interleukin-6, produced by fibroblasts and macrophages in the bone marrow " "stroma, is a key growth and survival factor for myeloma cells." )) story.append(bullet( "<b>MYC translocations</b> may appear late in the course, especially in aggressive disease." )) story.append(bullet( "<b>NF-κB pathway:</b> Myeloma-derived factors upregulate RANKL expression by bone marrow stromal " "cells, activating osteoclasts and driving bone destruction." )) story.append(h2("3.2 Effects on the Skeleton")) story.append(body( "Factors produced by neoplastic plasma cells cause resorption of bone - the major pathologic feature. " "RANKL upregulation activates osteoclasts, while myeloma-derived factors simultaneously inhibit " "osteoblast function. The net result is:" )) story.append(bullet("Increased bone resorption")) story.append(bullet("Hypercalcemia")) story.append(bullet("Pathologic fractures")) story.append(bullet("Classic 'punched-out' lytic lesions (1-4 cm diameter) on imaging")) story.append(h2("3.3 Immune Defects")) story.append(body( "Despite elevated total immunoglobulin levels (M protein), production of <b>functional antibodies " "is profoundly depressed</b>. Myeloma cells compromise normal B cell function through uncertain " "mechanisms. Patients are therefore at <b>high risk for bacterial infections</b>, a leading cause " "of morbidity." )) story.append(h2("3.4 Renal Damage")) story.append(body("Renal dysfunction in myeloma stems from several simultaneous mechanisms:")) story.append(bullet( "<b>Bence Jones casts:</b> Obstructive proteinaceous casts form in the distal convoluted tubules " "and collecting ducts, composed mainly of free light chains (Bence Jones proteins)." )) story.append(bullet( "<b>Amyloid/linear light chain deposits</b> in the glomeruli or interstitium." )) story.append(bullet( "<b>Hypercalcemia</b> leading to dehydration, nephrocalcinosis, and renal stones." )) story.append(bullet( "<b>Hypogammaglobulinemia</b> predisposing to bacterial pyelonephritis." )) # ── SECTION 4: CLINICAL FEATURES ──────────── story.append(h1("4. Clinical Features (CRAB Criteria)")) story.append(hr_thin()) story.append(body( "The classic clinical features of myeloma are captured by the acronym <b>CRAB</b>, which also " "serves as myeloma-defining events (MDE) that distinguish active myeloma from smoldering disease:" )) crab_data = [ ["Letter", "Feature", "Mechanism / Notes"], ["C", "hyperCalcemia", ">11 mg/dL or >1 mg/dL above upper limit of normal; due to osteoclast activation"], ["R", "Renal insufficiency", "Creatinine >2 mg/dL or CrCl <40 mL/min; light chain cast nephropathy"], ["A", "Anemia", "Hb <10 g/dL or >2 g/dL below normal; marrow infiltration, cytokine suppression"], ["B", "Bone lesions", "Lytic lesions, osteoporosis, pathologic fractures; spine, skull, pelvis, ribs most common"], ] crab_table = Table(crab_data, colWidths=[1.5*cm, 4.5*cm, 10.5*cm]) crab_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2c5282")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9.5), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#e8f0fe"), colors.white]), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("TEXTCOLOR", (0,1), (0,-1), colors.HexColor("#c0392b")), ("FONTSIZE", (0,1), (0,-1), 14), ])) story.append(crab_table) story.append(sp(6)) story.append(body( "Additional myeloma-defining events (biomarker MDEs) include: " "clonal bone marrow plasma cells ≥60%, serum involved/uninvolved free light chain ratio ≥100, " "and >1 focal lesion on MRI." )) story.append(sp(4)) # Additional symptoms story.append(h2("4.1 Other Clinical Manifestations")) story.append(bullet("<b>Bone pain</b> - most common presenting symptom (back/rib pain)")) story.append(bullet("<b>Fatigue and weakness</b> from anemia")) story.append(bullet("<b>Recurrent infections</b> - especially bacterial pneumonia and urinary tract infections")) story.append(bullet("<b>Peripheral neuropathy</b> - from amyloid deposition or direct nerve infiltration")) story.append(bullet("<b>Hyperviscosity syndrome</b> - headache, visual disturbances, bleeding (more common in IgA)")) story.append(bullet("<b>Spinal cord compression</b> - a hematologic emergency")) story.append(bullet("<b>Amyloidosis</b> - macroglossia, carpal tunnel syndrome, restrictive cardiomyopathy")) # ── SECTION 5: DIAGNOSIS ───────────────────── story.append(PageBreak()) story.append(h1("5. Diagnosis")) story.append(hr_thin()) story.append(h2("5.1 Diagnostic Criteria")) story.append(body( "Diagnosis requires the presence of ALL of the following:" )) story.append(bullet("≥10% clonal plasma cells on bone marrow biopsy")) story.append(bullet("M protein in serum and/or urine (except nonsecretory myeloma)")) story.append(bullet("One or more myeloma-defining events (CRAB criteria or biomarker MDEs)")) story.append(h2("5.2 Laboratory Investigations")) lab_data = [ ["Test", "Findings in Myeloma"], ["CBC", "Normocytic normochromic anemia; thrombocytopenia in advanced disease"], ["Serum protein electrophoresis (SPEP)", "M spike (monoclonal band), usually in gamma region"], ["Immunofixation", "Identifies heavy and light chain class of M protein"], ["Serum free light chains (FLC)", "Involved:uninvolved ratio >100 is a biomarker MDE"], ["24-hr urine protein electrophoresis", "Detects Bence Jones proteinuria (free light chains)"], ["Serum calcium", "Hypercalcemia (>11 mg/dL)"], ["Creatinine/BUN", "Elevated in renal involvement"], ["LDH, beta-2 microglobulin", "Elevated; used in staging"], ["Serum albumin", "Often low; used in ISS staging"], ] lab_table = Table(lab_data, colWidths=[6.5*cm, 10*cm]) lab_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9.5), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f0f4f8"), colors.white]), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ])) story.append(lab_table) story.append(sp(6)) story.append(h2("5.3 Bone Marrow Biopsy")) story.append(body( "Bone marrow examination shows increased numbers of plasma cells (usually >30% cellularity). " "Myeloma cells may resemble normal plasma cells but frequently show abnormal features:" )) story.append(bullet("Prominent nucleoli")) story.append(bullet("Cytoplasmic inclusions (Russell bodies) containing immunoglobulin")) story.append(bullet("Binucleated or multinucleated forms in aggressive disease")) story.append(sp(4)) story.append(h2("5.4 Imaging")) img_data = [ ["Modality", "Findings", "Notes"], ["Plain X-ray (Skeletal survey)", "'Punched-out' lytic lesions, osteoporosis, vertebral crush fractures", "Traditional initial survey; insensitive for early lesions"], ["Low-dose whole-body CT", "Lytic lesions of all sizes", "Preferred over skeletal survey; more sensitive"], ["MRI spine/whole body", "Focal lesions, diffuse marrow infiltration", ">1 focal lesion ≥5mm is a biomarker MDE"], ["PET-CT", "Metabolically active lesions, extramedullary disease", "Useful for staging and response assessment"], ] img_table = Table(img_data, colWidths=[4.5*cm, 7*cm, 5*cm]) img_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f0f4f8"), colors.white]), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ])) story.append(img_table) # ── SECTION 6: STAGING ─────────────────────── story.append(sp(4)) story.append(h1("6. Staging")) story.append(hr_thin()) story.append(h2("6.1 Revised International Staging System (R-ISS)")) iss_data = [ ["Stage", "Criteria", "Median OS"], ["I", "Beta-2 microglobulin <3.5 mg/L AND albumin ≥3.5 g/dL\nNormal LDH, no high-risk cytogenetics", "~62 months"], ["II", "Not Stage I or III", "~42 months"], ["III", "Beta-2 microglobulin ≥5.5 mg/L\nAND (high LDH OR high-risk cytogenetics)", "~29 months"], ] iss_table = Table(iss_data, colWidths=[2*cm, 12*cm, 2.5*cm]) iss_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2c5282")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9.5), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#e8f0fe"), colors.white, colors.HexColor("#fde8e8")]), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"), ("TEXTCOLOR", (0,1), (0,-1), colors.HexColor("#1a3a5c")), ("FONTSIZE", (0,1), (0,-1), 13), ])) story.append(iss_table) story.append(sp(8)) story.append(h2("6.2 High-Risk Cytogenetics")) story.append(body( "The following cytogenetic abnormalities are associated with adverse prognosis in myeloma:" )) story.append(bullet("del(17p) - loss of TP53 tumor suppressor")) story.append(bullet("t(4;14) - FGFR3 and MMSET overexpression")) story.append(bullet("t(14;16) - MAF overexpression")) story.append(bullet("t(14;20) - MAFB overexpression")) story.append(bullet("gain(1q) - 1q21 amplification")) # ── SECTION 7: TREATMENT ──────────────────── story.append(PageBreak()) story.append(h1("7. Treatment")) story.append(hr_thin()) story.append(body( "Multiple myeloma remains incurable with conventional therapy for most patients, but treatment " "has dramatically improved survival over the past two decades with the introduction of novel agents. " "The treatment approach depends on transplant eligibility." )) story.append(h2("7.1 Transplant-Eligible Patients")) story.append(body( "For patients aged ≤65-70 years with adequate organ function:" )) story.append(bullet( "<b>Induction therapy (3-4 cycles):</b> VRd (Bortezomib + Lenalidomide + Dexamethasone) " "is the current standard. Daratumumab-VRd (Dara-VRd) is increasingly used." )) story.append(bullet( "<b>Autologous stem cell transplant (ASCT):</b> High-dose melphalan followed by stem cell rescue. " "Deepens response and extends progression-free survival." )) story.append(bullet( "<b>Consolidation/Maintenance:</b> Lenalidomide maintenance post-ASCT is standard; " "reduces relapse risk and extends OS." )) story.append(h2("7.2 Transplant-Ineligible Patients")) story.append(body( "For older or unfit patients:" )) story.append(bullet( "<b>VRd lite</b> or <b>Daratumumab-based triplets</b> (DRd: Daratumumab + Lenalidomide + Dexamethasone) " "are standard first-line options." )) story.append(bullet( "<b>MPT/MPV:</b> Melphalan-Prednisone-Thalidomide/Bortezomib - older regimens still used in " "resource-limited settings." )) story.append(h2("7.3 Drug Classes Used in Myeloma")) drug_data = [ ["Class", "Examples", "Mechanism"], ["Proteasome Inhibitors", "Bortezomib, Carfilzomib, Ixazomib", "Block proteasome → accumulation of ubiquitinated proteins → apoptosis"], ["Immunomodulatory drugs (IMiDs)", "Thalidomide, Lenalidomide, Pomalidomide", "Cereblon binding → degrade Ikaros/Aiolos → anti-tumor + immune stimulation"], ["Anti-CD38 mAbs", "Daratumumab, Isatuximab", "Direct cytotoxicity + immune effector mechanisms against CD38+ myeloma cells"], ["Anti-SLAMF7 mAb", "Elotuzumab", "NK cell activation + direct targeting of SLAMF7 on myeloma cells"], ["Alkylating agents", "Melphalan, Cyclophosphamide", "DNA cross-linking → apoptosis"], ["Corticosteroids", "Dexamethasone, Prednisone", "Direct pro-apoptotic effect on plasma cells; suppress IL-6"], ["BCL-2 inhibitor", "Venetoclax", "Targets BCL-2-dependent myeloma, especially t(11;14)"], ["CAR-T cell therapy", "Idecabtagene (Ide-cel), Ciltacabtagene (Cilta-cel)", "Anti-BCMA CAR-T cells; deep responses in relapsed/refractory disease"], ["Bispecific antibodies", "Teclistamab, Elranatamab", "Anti-BCMA × anti-CD3; redirect T cells to kill myeloma"], ] drug_table = Table(drug_data, colWidths=[4.5*cm, 5*cm, 7*cm]) drug_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f0f4f8"), colors.white]), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ])) story.append(drug_table) story.append(sp(8)) story.append(h2("7.4 Supportive Care")) story.append(bullet( "<b>Bisphosphonates / Denosumab:</b> Zoledronic acid or denosumab reduces skeletal-related events " "and may have anti-myeloma activity." )) story.append(bullet( "<b>Infection prophylaxis:</b> Antiviral (acyclovir with bortezomib), " "antibacterial and PCP prophylaxis per guidelines." )) story.append(bullet( "<b>Renal protection:</b> Aggressive hydration, avoid nephrotoxic agents, " "manage hypercalcemia promptly." )) story.append(bullet( "<b>Transfusion support:</b> pRBC for symptomatic anemia; ESAs may be used in stable disease." )) story.append(bullet( "<b>VTE prophylaxis:</b> Aspirin or LMWH for patients on IMiDs + dexamethasone." )) story.append(bullet( "<b>Radiation therapy:</b> For palliation of painful bone lesions or spinal cord compression." )) # ── SECTION 8: COMPLICATIONS ──────────────── story.append(sp(4)) story.append(h1("8. Complications")) story.append(hr_thin()) comp_data = [ ["Complication", "Management"], ["Hypercalcemia", "IV fluids, bisphosphonates, calcitonin, steroids, dialysis if severe"], ["Acute kidney injury", "Hydration, avoid NSAIDs/contrast, treat myeloma rapidly, consider plasmapheresis"], ["Spinal cord compression", "MRI immediately, dexamethasone, radiation ± orthopedic stabilization"], ["Pathologic fracture", "Orthopedic fixation, bisphosphonates, radiation for pain"], ["Infections", "Prompt antibiotics; IVIG replacement for recurrent infections"], ["Hyperviscosity syndrome", "Plasmapheresis; treat underlying myeloma"], ["Anemia", "Transfusion, EPO, treat underlying myeloma"], ["Peripheral neuropathy (treatment-related)", "Dose reduction/switch from bortezomib; B12, gabapentin"], ] comp_table = Table(comp_data, colWidths=[6*cm, 10.5*cm]) comp_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9.5), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f0f4f8"), colors.white]), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ])) story.append(comp_table) # ── SECTION 9: PROGNOSIS ───────────────────── story.append(PageBreak()) story.append(h1("9. Prognosis & Monitoring")) story.append(hr_thin()) story.append(body( "Myeloma prognosis has markedly improved with novel agents. Median overall survival with modern " "triplet-based therapy and ASCT exceeds 7-10 years in favorable-risk groups. " "However, the disease remains incurable for most patients, with eventual relapse." )) story.append(sp(4)) story.append(h2("9.1 Prognostic Factors")) story.append(bullet("<b>R-ISS stage</b> (beta-2 microglobulin, albumin, LDH, cytogenetics)")) story.append(bullet("<b>High-risk cytogenetics:</b> del(17p), t(4;14), t(14;16) confer poor prognosis")) story.append(bullet("<b>Depth of response:</b> MRD-negativity (minimal residual disease) predicts longer PFS/OS")) story.append(bullet("<b>ECOG performance status</b>")) story.append(bullet("<b>Age and comorbidities</b>")) story.append(bullet("<b>LDH level</b> - elevated LDH indicates high tumor burden / aggressive disease")) story.append(sp(4)) story.append(h2("9.2 Response Assessment")) resp_data = [ ["Response Category", "Criteria"], ["Stringent Complete Response (sCR)", "CR + normal FLC ratio + no clonal plasma cells by IHC/flow"], ["Complete Response (CR)", "Negative serum/urine immunofixation, <5% marrow plasma cells"], ["Very Good Partial Response (VGPR)", "M protein reduced ≥90% in serum; urine M protein <100 mg/24h"], ["Partial Response (PR)", "≥50% reduction in serum M protein"], ["MRD Negativity", "No myeloma cells by next-gen sequencing or flow cytometry (10⁻⁵ sensitivity)"], ["Progressive Disease (PD)", "≥25% increase in M protein or new myeloma-defining events"], ] resp_table = Table(resp_data, colWidths=[6*cm, 10.5*cm]) resp_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2c5282")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9.5), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#e8f0fe"), colors.white]), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ])) story.append(resp_table) # ── SECTION 10: MGUS vs SMM vs MM ────────────── story.append(sp(8)) story.append(h1("10. Spectrum of Plasma Cell Disorders")) story.append(hr_thin()) spectrum_data = [ ["Feature", "MGUS", "Smoldering MM", "Active MM"], ["Plasma cells (BM)", "<10%", "10-60%", "≥10%"], ["M protein", "<3 g/dL", "≥3 g/dL OR 10-60% BMPCs", "Any"], ["CRAB criteria", "Absent", "Absent", "Present"], ["Biomarker MDEs", "Absent", "Absent", "Present"], ["Treatment", "None (surveillance)", "Surveillance ± trial", "Required"], ["Progression risk", "~1%/year", "~10%/year", "N/A (active disease)"], ] spectrum_table = Table(spectrum_data, colWidths=[4.5*cm, 3.5*cm, 4*cm, 4.5*cm]) spectrum_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9.5), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f0f4f8"), colors.white]), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ])) story.append(spectrum_table) # ── SOURCES ────────────────────────────────── story.append(sp(12)) story.append(hr()) story.append(Paragraph("References", h2_style)) sources = [ "Goldman-Cecil Medicine International Edition (2-volume set), Chapter 173 / Chapter 312: Plasma Cell Disorders.", "Robbins & Kumar Basic Pathology, Chapter 10: Hematopoietic and Lymphoid Systems - Multiple Myeloma.", "Textbook of Family Medicine 9th Edition, Chapter 13: Hematology.", "Bradley and Daroff's Neurology in Clinical Practice, Chapter 28: Neurologic Complications of Systemic Disease.", "Rajkumar SV, Kyle RA, et al. Serum free light chain ratio is an independent risk factor for progression in MGUS. Blood. 2005;106:812-817.", "International Myeloma Working Group (IMWG) Consensus Criteria 2014 & 2016.", ] for i, src in enumerate(sources, 1): story.append(Paragraph(f"{i}. {src}", ParagraphStyle( "Ref", parent=styles["Normal"], fontSize=9, leading=13, spaceAfter=4, leftIndent=14, firstLineIndent=-14 ))) story.append(sp(10)) story.append(Paragraph("Generated by Orris Medical Assistant · June 2026", footer_style)) # ── BUILD ───────────────────────────────────── doc.build(story) print(f"PDF created: {OUTPUT}") PYEOF

Your PDF is ready. Here is the download link:

Multiple Myeloma

PDF Document · PDF


Here is a summary of what the PDF covers across its pages:
1. Definition - Diagnostic criteria (≥10% clonal plasma cells + M protein + myeloma-defining event)
2. Epidemiology - ~30,000 new cases/year in the US, median age 70, higher incidence in males and people of African descent; IgG (60%) is the most common M-protein type
3. Pathogenesis - IgH translocations involving cyclin D genes, IL-6 as a key growth factor, RANKL-mediated osteoclast activation, simultaneous osteoblast suppression, and mechanisms of renal injury (Bence Jones cast nephropathy, amyloid deposits, hypercalcemia)
4. Clinical Features (CRAB) - Hypercalcemia, Renal insufficiency, Anemia, Bone lesions, plus additional features like neuropathy, hyperviscosity, and amyloidosis
5. Diagnosis - Laboratory workup (SPEP, immunofixation, free light chains, 24-hr urine), bone marrow biopsy findings, and imaging modalities (skeletal survey vs. CT vs. MRI vs. PET-CT)
6. Staging - Revised ISS (R-ISS) with criteria and median OS per stage; high-risk cytogenetics (del17p, t(4;14), t(14;16))
7. Treatment - Induction regimens (VRd, Dara-VRd), ASCT for eligible patients, lenalidomide maintenance; a full drug class table covering proteasome inhibitors, IMiDs, anti-CD38 antibodies, CAR-T therapy, and bispecific antibodies; supportive care
8. Complications - Management of hypercalcemia, AKI, spinal cord compression, infections, and neuropathy
9. Prognosis & Monitoring - Response categories from sCR to PD, MRD negativity as a prognostic marker
10. Spectrum of Plasma Cell Disorders - Side-by-side comparison of MGUS, Smoldering MM, and Active MM
Sources: Goldman-Cecil Medicine, Robbins & Kumar Basic Pathology, Textbook of Family Medicine, Bradley & Daroff's Neurology, and IMWG consensus criteria.

Pdf is empty🤨

Running Command

ls -lh /home/daytona/workspace/multiple-myeloma/ && python3 -c "from pypdf import PdfReader; r = PdfReader('/home/daytona/workspace/multiple-myeloma/Multiple_Myeloma.pdf'); print(f'Pages: {len(r.pages)}'); [print(f'Page {i+1}: {repr(r.pages[i].extract_text()[:200])}') for i in range(min(3,len(r.pages)))]"

Running Command

python3 << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import mm, cm from reportlab.lib import colors from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak, KeepTogether) from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont import os OUTPUT = "/home/daytona/workspace/multiple-myeloma/Multiple_Myeloma_v2.pdf" doc = SimpleDocTemplate( OUTPUT, pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2.5*cm, bottomMargin=2*cm, title="Multiple Myeloma - Clinical Reference", author="Orris Medical Library" ) styles = getSampleStyleSheet() title_style = ParagraphStyle("TitleS", parent=styles["Title"], fontSize=28, textColor=colors.HexColor("#1a3a5c"), spaceAfter=8, spaceBefore=0, leading=34, alignment=TA_CENTER) subtitle_style = ParagraphStyle("SubtitleS", parent=styles["Normal"], fontSize=13, textColor=colors.HexColor("#4a6fa5"), spaceAfter=16, alignment=TA_CENTER) h1_style = ParagraphStyle("H1S", parent=styles["Heading1"], fontSize=15, textColor=colors.white, spaceBefore=14, spaceAfter=8, leading=20, backColor=colors.HexColor("#1a3a5c"), borderPad=6, leftIndent=-10, rightIndent=-10) h2_style = ParagraphStyle("H2S", parent=styles["Heading2"], fontSize=12, textColor=colors.HexColor("#1a3a5c"), spaceBefore=10, spaceAfter=4, leading=15, borderPad=0) body_style = ParagraphStyle("BodyS", parent=styles["Normal"], fontSize=10, leading=14.5, spaceAfter=7, alignment=TA_JUSTIFY) bullet_style = ParagraphStyle("BulletS", parent=styles["Normal"], fontSize=10, leading=14.5, spaceAfter=4, leftIndent=16, bulletIndent=4) caption_style = ParagraphStyle("CaptionS", parent=styles["Normal"], fontSize=9, textColor=colors.HexColor("#555555"), alignment=TA_CENTER, spaceAfter=8) footer_style = ParagraphStyle("FooterS", parent=styles["Normal"], fontSize=8.5, textColor=colors.HexColor("#888888"), alignment=TA_CENTER) ref_style = ParagraphStyle("RefS", parent=styles["Normal"], fontSize=9, leading=13, spaceAfter=4, leftIndent=14, firstLineIndent=-14) def hr(): return HRFlowable(width="100%", thickness=1.5, color=colors.HexColor("#1a3a5c"), spaceAfter=10, spaceBefore=2) def hr_thin(): return HRFlowable(width="100%", thickness=0.4, color=colors.HexColor("#bbbbbb"), spaceAfter=8, spaceBefore=2) def H1(text): return Paragraph(text, h1_style) def H2(text): return Paragraph(text, h2_style) def B(text): return Paragraph(text, body_style) def BUL(text): return Paragraph("- " + text, bullet_style) def SP(h=6): return Spacer(1, h) def make_table(data, col_widths, header_color="#1a3a5c"): t = Table(data, colWidths=col_widths, repeatRows=1) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor(header_color)), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f2f6fb"), colors.white]), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ])) return t story = [] # ========== COVER PAGE ========== story.append(SP(50)) story.append(Paragraph("MULTIPLE MYELOMA", title_style)) story.append(SP(4)) story.append(HRFlowable(width="80%", thickness=3, color=colors.HexColor("#c0392b"), spaceAfter=14, hAlign="CENTER")) story.append(Paragraph("A Comprehensive Clinical Reference", subtitle_style)) story.append(SP(8)) story.append(B("Compiled from <i>Goldman-Cecil Medicine (International Edition)</i>, " "<i>Robbins &amp; Kumar Basic Pathology</i>, <i>Textbook of Family Medicine 9e</i>, " "and <i>Bradley &amp; Daroff's Neurology in Clinical Practice</i>.")) story.append(SP(6)) story.append(Paragraph("Orris Medical Library | June 2026", caption_style)) # Table of Contents story.append(SP(30)) story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#aaaaaa"), spaceAfter=6, spaceBefore=4)) story.append(Paragraph("Table of Contents", h2_style)) toc = [ "1. Definition", "2. Epidemiology", "3. Pathogenesis", "4. Clinical Features (CRAB Criteria)", "5. Diagnosis", "6. Staging (R-ISS)", "7. Treatment", "8. Complications", "9. Prognosis and Monitoring", "10. Spectrum of Plasma Cell Disorders", "References", ] for item in toc: story.append(Paragraph(item, ParagraphStyle("TOC", parent=styles["Normal"], fontSize=10.5, leading=16, leftIndent=10, spaceAfter=3, textColor=colors.HexColor("#2c5282")))) story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#aaaaaa"), spaceAfter=6, spaceBefore=4)) story.append(PageBreak()) # ========== SECTION 1: DEFINITION ========== story.append(H1("1. Definition")) story.append(B("Multiple myeloma is a <b>malignancy of plasma cells</b> characterized by bone marrow " "infiltration and extensive skeletal destruction, resulting in anemia, bone pain, and " "fractures. It is defined by the presence of ALL of the following:")) story.append(BUL("<b>10% or more clonal plasma cells</b> on bone marrow examination")) story.append(BUL("<b>M protein</b> in serum or urine (absent only in nonsecretory myeloma)")) story.append(BUL("One or more <b>myeloma-defining events (MDE)</b> - CRAB criteria or biomarker MDEs")) story.append(SP(4)) story.append(B("Patients with active myeloma must be differentiated from those with <b>MGUS</b> " "(monoclonal gammopathy of undetermined significance) and <b>smoldering multiple myeloma</b>, " "which are precursor states lacking myeloma-defining events.")) # ========== SECTION 2: EPIDEMIOLOGY ========== story.append(SP(6)) story.append(H1("2. Epidemiology")) story.append(B("Multiple myeloma accounts for approximately <b>1% of all malignant diseases</b> and " "more than <b>10% of hematologic malignancies</b> in the United States.")) story.append(SP(4)) epi_data = [ ["Parameter", "Detail"], ["Annual new cases (USA)", "~30,000"], ["Median age at diagnosis", "70 years"], ["Sex predominance", "More common in males"], ["Racial predisposition", "More frequent in people of African descent (USA)"], ["Most common M-protein type", "IgG (~60% of cases)"], ["Second most common", "IgA (20-25% of cases)"], ["Light chain only", "~15-20% (kappa or lambda free light chains)"], ["IgM, IgD, IgE myeloma", "Rare"], ] story.append(make_table(epi_data, [7*cm, 9.5*cm])) # ========== SECTION 3: PATHOGENESIS ========== story.append(SP(6)) story.append(H1("3. Pathogenesis")) story.append(H2("3.1 Molecular Mechanisms")) story.append(B("Myeloma arises through stepwise progression from normal plasma cells through MGUS to " "frank malignancy. Key molecular events include:")) story.append(BUL("<b>Chromosomal translocations</b> involving the IgH locus on chromosome 14, " "fusing it to oncogenes such as cyclin D1 and cyclin D3 - leading to dysregulation " "of cell cycle entry and increased proliferation.")) story.append(BUL("<b>IL-6 signaling:</b> Interleukin-6 produced by bone marrow stromal fibroblasts " "and macrophages is a key growth and survival cytokine for myeloma cells.")) story.append(BUL("<b>MYC translocations</b> appear late in the disease course, especially in " "aggressive and refractory disease.")) story.append(BUL("<b>NF-kB pathway activation:</b> Myeloma-derived factors upregulate RANKL " "expression on stromal cells, activating osteoclasts and driving bone destruction.")) story.append(H2("3.2 Effects on the Skeleton")) story.append(B("Myeloma cells produce factors that simultaneously activate osteoclasts and inhibit " "osteoblasts, creating an uncoupled remodeling state:")) story.append(BUL("Increased bone resorption producing lytic 'punched-out' lesions (1-4 cm)")) story.append(BUL("Hypercalcemia from calcium released by resorbing bone")) story.append(BUL("Pathologic fractures - most commonly vertebral column and femur")) story.append(BUL("Bone lesions arise in the medullary cavity and progressively destroy the cortex")) story.append(H2("3.3 Immune Defects")) story.append(B("Despite markedly elevated total immunoglobulin levels due to M protein, the production " "of <b>functional antibodies is profoundly depressed</b>. Myeloma cells compromise " "normal B cell function through uncertain mechanisms. Patients are consequently at " "<b>high risk for bacterial infections</b>, particularly encapsulated organisms.")) story.append(H2("3.4 Renal Damage")) story.append(B("Renal dysfunction in myeloma is multifactorial:")) story.append(BUL("<b>Bence Jones cast nephropathy:</b> Obstructive proteinaceous casts form in " "the distal convoluted tubules and collecting ducts, composed mainly of free light " "chains (Bence Jones proteins), albumin, and tubular secreted proteins.")) story.append(BUL("<b>Amyloid / linear light chain deposits</b> in glomeruli or interstitium.")) story.append(BUL("<b>Hypercalcemia</b> causing dehydration, nephrocalcinosis, and renal stones.")) story.append(BUL("<b>Hypogammaglobulinemia</b> predisposing to bacterial pyelonephritis.")) story.append(PageBreak()) # ========== SECTION 4: CLINICAL FEATURES ========== story.append(H1("4. Clinical Features - The CRAB Criteria")) story.append(B("The classic clinical manifestations of active myeloma are captured by the " "<b>CRAB acronym</b>, which defines myeloma-defining events (MDEs) that distinguish " "active myeloma from smoldering disease:")) story.append(SP(4)) crab_data = [ ["Letter", "Feature", "Threshold / Notes"], ["C", "Hypercalcemia", "Serum calcium >11 mg/dL, or >1 mg/dL above upper normal limit. Due to osteoclast-driven bone resorption."], ["R", "Renal insufficiency", "Creatinine >2 mg/dL or CrCl <40 mL/min. Caused by light chain cast nephropathy."], ["A", "Anemia", "Hb <10 g/dL or >2 g/dL below lower normal limit. Due to marrow infiltration and cytokine-mediated suppression."], ["B", "Bone lesions", "Lytic lesions, severe osteoporosis, or pathologic fractures. Spine, skull, pelvis, ribs, and femur most common."], ] t = Table(crab_data, colWidths=[1.5*cm, 4.5*cm, 10.5*cm], repeatRows=1) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#c0392b")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9.5), ("FONTSIZE", (0,1), (0,-1), 16), ("TEXTCOLOR", (0,1), (0,-1), colors.HexColor("#c0392b")), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#fff5f5"), colors.white]), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ])) story.append(t) story.append(SP(6)) story.append(H2("4.1 Biomarker Myeloma-Defining Events (no CRAB needed)")) story.append(BUL("Clonal bone marrow plasma cells <b>>=60%</b>")) story.append(BUL("<b>Serum free light chain ratio >=100</b> (involved:uninvolved)")) story.append(BUL("<b>>1 focal lesion on MRI</b> of at least 5 mm each")) story.append(H2("4.2 Other Clinical Manifestations")) story.append(BUL("<b>Bone pain</b> - most common presenting symptom; typically back or rib pain worsened by movement")) story.append(BUL("<b>Fatigue and weakness</b> from anemia")) story.append(BUL("<b>Recurrent infections</b> - bacterial pneumonia and urinary tract infections predominate")) story.append(BUL("<b>Peripheral neuropathy</b> - from amyloid deposition or direct nerve infiltration")) story.append(BUL("<b>Hyperviscosity syndrome</b> - headache, visual blurring, mucosal bleeding (more common in IgA)")) story.append(BUL("<b>Spinal cord compression</b> - a hematologic emergency requiring urgent MRI and steroids")) story.append(BUL("<b>Systemic AL amyloidosis</b> - macroglossia, carpal tunnel, restrictive cardiomyopathy, nephrotic syndrome")) # ========== SECTION 5: DIAGNOSIS ========== story.append(SP(4)) story.append(H1("5. Diagnosis")) story.append(H2("5.1 Laboratory Investigations")) lab_data = [ ["Test", "Findings in Myeloma"], ["CBC", "Normocytic normochromic anemia; rouleaux formation on blood film; thrombocytopenia in advanced disease"], ["Serum protein electrophoresis (SPEP)", "M spike (monoclonal band), usually in the gamma region"], ["Immunofixation (serum + urine)", "Identifies the heavy chain class and light chain type of M protein"], ["Serum free light chains (FLC)", "Involved:uninvolved FLC ratio >=100 is a biomarker MDE"], ["24-hr urine protein electrophoresis", "Detects Bence Jones proteinuria (free kappa or lambda light chains)"], ["Serum calcium", "Elevated (>11 mg/dL in CRAB-defining hypercalcemia)"], ["Creatinine / BUN", "Elevated in renal involvement"], ["LDH", "Elevated LDH indicates high tumor burden; used in R-ISS staging"], ["Beta-2 microglobulin", "Key staging marker - elevated with high tumor burden or renal impairment"], ["Serum albumin", "Often low; used in ISS/R-ISS staging (marker of nutritional status and tumor cytokines)"], ] story.append(make_table(lab_data, [6*cm, 10.5*cm])) story.append(SP(4)) story.append(H2("5.2 Bone Marrow Biopsy")) story.append(B("Bone marrow examination shows increased plasma cells (usually >30% cellularity). " "Myeloma cells may resemble normal plasma cells but frequently display:")) story.append(BUL("Prominent nucleoli ('clock-face' or 'cartwheel' chromatin)")) story.append(BUL("Cytoplasmic immunoglobulin inclusions (Russell bodies or Dutcher bodies)")) story.append(BUL("Binucleated or multinucleated forms in aggressive disease")) story.append(BUL("Cytogenetic analysis (FISH) is mandatory to identify high-risk lesions")) story.append(H2("5.3 Imaging")) img_data = [ ["Modality", "Findings", "Role"], ["Skeletal survey (X-ray)", "Punched-out lytic lesions, vertebral collapse", "Traditional; now replaced by CT"], ["Low-dose whole-body CT", "Lytic lesions of all sizes throughout skeleton", "Current preferred initial survey"], ["MRI whole-body/spine", "Focal lesions, diffuse marrow infiltration", "Biomarker MDE: >1 focal lesion >=5 mm"], ["PET-CT (F-18 FDG)", "Metabolically active lesions, extramedullary disease", "Staging, response assessment"], ] story.append(make_table(img_data, [4.5*cm, 6.5*cm, 5.5*cm])) story.append(PageBreak()) # ========== SECTION 6: STAGING ========== story.append(H1("6. Staging - Revised ISS (R-ISS)")) story.append(B("The Revised International Staging System (R-ISS) incorporates Beta-2 microglobulin, " "serum albumin, LDH, and cytogenetic risk to predict prognosis:")) story.append(SP(4)) iss_data = [ ["Stage", "Criteria", "Median OS"], ["I", "Beta-2 microglobulin <3.5 mg/L AND albumin >=3.5 g/dL AND normal LDH AND no high-risk cytogenetics", "~62 months"], ["II", "All patients not meeting criteria for Stage I or III", "~42 months"], ["III", "Beta-2 microglobulin >=5.5 mg/L AND (elevated LDH OR high-risk cytogenetics)", "~29 months"], ] t2 = Table(iss_data, colWidths=[1.8*cm, 12*cm, 2.7*cm], repeatRows=1) t2.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9.5), ("FONTSIZE", (0,1), (0,-1), 14), ("TEXTCOLOR", (0,1), (0,-1), colors.HexColor("#1a3a5c")), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f2f6fb"), colors.HexColor("#fdecea"), colors.HexColor("#fff5f5")]), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ])) story.append(t2) story.append(SP(6)) story.append(H2("6.1 High-Risk Cytogenetics")) story.append(B("The following FISH abnormalities are associated with adverse prognosis and " "may influence treatment selection:")) cyto_data = [ ["Cytogenetic Abnormality", "Genes Affected", "Clinical Significance"], ["del(17p)", "TP53 (loss)", "Worst prognosis; resistant to many therapies"], ["t(4;14)", "FGFR3, MMSET overexpression", "High risk; responds to bortezomib-based regimens"], ["t(14;16)", "MAF overexpression", "High risk"], ["t(14;20)", "MAFB overexpression", "High risk"], ["gain(1q) / amp(1q21)", "CKS1B amplification", "High risk; increasingly recognized"], ["t(11;14)", "Cyclin D1 overexpression", "Standard risk; BCL-2 dependent - venetoclax sensitive"], ] story.append(make_table(cyto_data, [4.5*cm, 5*cm, 7*cm])) # ========== SECTION 7: TREATMENT ========== story.append(SP(4)) story.append(H1("7. Treatment")) story.append(B("Multiple myeloma remains incurable with conventional therapy for most patients, but " "treatment has dramatically improved survival over the past two decades. The approach " "depends on <b>transplant eligibility</b> (generally age <=65-70 years with adequate organ function).")) story.append(H2("7.1 Transplant-Eligible Patients")) story.append(BUL("<b>Induction (3-4 cycles):</b> VRd (Bortezomib + Lenalidomide + Dexamethasone) " "is the established standard. Daratumumab-VRd (Dara-VRd) is increasingly adopted.")) story.append(BUL("<b>Stem cell mobilization:</b> G-CSF +/- plerixafor used to collect autologous stem cells.")) story.append(BUL("<b>Autologous Stem Cell Transplant (ASCT):</b> High-dose melphalan (200 mg/m2) " "conditioning followed by stem cell rescue. Deepens response and extends PFS.")) story.append(BUL("<b>Consolidation (optional):</b> 2 cycles of induction regimen post-ASCT.")) story.append(BUL("<b>Maintenance:</b> Lenalidomide maintenance indefinitely post-ASCT is standard of care; " "reduces relapse risk and extends overall survival.")) story.append(H2("7.2 Transplant-Ineligible Patients")) story.append(BUL("<b>VRd lite</b> (reduced-dose) or <b>Dara-Rd</b> (Daratumumab + Lenalidomide + Dexamethasone) " "are standard first-line options.")) story.append(BUL("VCd (Bortezomib + Cyclophosphamide + Dexamethasone) is used in renal failure.")) story.append(BUL("Goal is disease control and quality of life preservation.")) story.append(H2("7.3 Drug Classes")) drug_data = [ ["Class", "Agents", "Mechanism"], ["Proteasome Inhibitors (PI)", "Bortezomib, Carfilzomib, Ixazomib", "Block proteasome -> unfolded protein accumulation -> apoptosis in plasma cells"], ["IMiDs", "Thalidomide, Lenalidomide, Pomalidomide", "Cereblon binding -> Ikaros/Aiolos degradation -> anti-tumor + T cell co-stimulation"], ["Anti-CD38 mAbs", "Daratumumab, Isatuximab", "ADCC, CDC, ADCP, and direct apoptosis against CD38+ myeloma cells"], ["Anti-SLAMF7 mAb", "Elotuzumab", "NK cell activation + direct SLAMF7 targeting; used with lenalidomide"], ["Alkylating agents", "Melphalan, Cyclophosphamide, Bendamustine", "DNA cross-linking -> apoptosis; melphalan used as ASCT conditioning"], ["Corticosteroids", "Dexamethasone, Prednisone", "Direct pro-apoptotic effect on plasma cells; suppress IL-6 production"], ["BCL-2 inhibitor", "Venetoclax", "Targets BCL-2-dependent myeloma, especially t(11;14)"], ["CAR-T cell therapy", "Idecabtagene (ide-cel), Ciltacabtagene (cilta-cel)", "BCMA-targeted CAR-T cells; deep responses in relapsed/refractory disease"], ["Bispecific antibodies", "Teclistamab, Elranatamab, Talquetamab", "Redirect T cells to myeloma cells via BCMA x CD3 or GPRC5D x CD3 engagement"], ["CELMoD agents", "Iberdomide, Mezigdomide", "Next-gen cereblon modulators; active in IMiD-refractory disease"], ] story.append(make_table(drug_data, [4.5*cm, 5.5*cm, 6.5*cm])) story.append(SP(6)) story.append(H2("7.4 Supportive Care")) story.append(BUL("<b>Bone protection:</b> Zoledronic acid (monthly IV) or denosumab reduces " "skeletal-related events; may have direct anti-myeloma activity.")) story.append(BUL("<b>Infection prophylaxis:</b> Acyclovir (with bortezomib), antibacterial prophylaxis, " "PCP prophylaxis per IMWG guidelines. IVIG for recurrent severe infections.")) story.append(BUL("<b>Renal protection:</b> Aggressive IV hydration, avoid NSAIDs and IV contrast, " "prompt treatment of hypercalcemia.")) story.append(BUL("<b>VTE prophylaxis:</b> Aspirin for low-risk patients, LMWH for high-risk, " "when on IMiD + dexamethasone combinations.")) story.append(BUL("<b>Transfusion support and ESAs</b> for symptomatic anemia.")) story.append(BUL("<b>Radiation therapy</b> for palliation of painful bone lesions, spinal cord " "compression, and solitary plasmacytoma.")) story.append(PageBreak()) # ========== SECTION 8: COMPLICATIONS ========== story.append(H1("8. Complications & Emergency Management")) comp_data = [ ["Complication", "Acute Management"], ["Hypercalcemia", "IV saline hydration, IV bisphosphonates (zoledronic acid), calcitonin, furosemide, steroids; dialysis if severe renal failure"], ["Acute kidney injury", "Aggressive IV hydration, avoid nephrotoxins and contrast, urgent myeloma therapy, consider plasmapheresis for light chain nephropathy"], ["Spinal cord compression", "Immediate MRI spine, IV dexamethasone (10 mg loading then 4 mg q6h), urgent radiotherapy +/- surgical decompression"], ["Pathologic fracture", "Orthopedic fixation (especially femur), bisphosphonates, radiotherapy for pain control"], ["Recurrent infections", "Broad-spectrum antibiotics empirically; IVIG infusions if trough IgG <5 g/L"], ["Hyperviscosity syndrome", "Plasmapheresis emergently; initiate systemic myeloma therapy"], ["Severe anemia (Hb <7)", "pRBC transfusion; consider ESA in stable disease not responding to treatment"], ["Treatment-related neuropathy", "Dose reduction or switch from bortezomib; subcutaneous administration; gabapentin or pregabalin for pain"], ] story.append(make_table(comp_data, [5.5*cm, 11*cm])) # ========== SECTION 9: PROGNOSIS ========== story.append(SP(6)) story.append(H1("9. Prognosis & Response Monitoring")) story.append(B("Myeloma prognosis has improved markedly with novel agents. Median overall survival " "with modern triplet-based therapy and ASCT exceeds 7-10 years in favorable-risk groups. " "The disease is currently incurable for most patients, with eventual relapse being near-universal.")) story.append(SP(4)) story.append(H2("9.1 Response Criteria (IMWG)")) resp_data = [ ["Response Category", "Criteria (Summary)"], ["MRD Negativity", "No detectable myeloma by NGS or flow cytometry at 10^-5 sensitivity; best predictor of long-term outcomes"], ["Stringent CR (sCR)", "Negative serum/urine immunofixation + normal FLC ratio + no clonal plasma cells by IHC or flow cytometry"], ["Complete Response (CR)", "Negative serum and urine immunofixation + <5% bone marrow plasma cells"], ["Very Good Partial Response (VGPR)", ">=90% reduction in serum M protein AND urine M protein <100 mg/24h"], ["Partial Response (PR)", ">=50% reduction in serum M protein"], ["Progressive Disease (PD)", ">=25% increase in M protein OR new myeloma-defining events OR new bone lesions"], ] story.append(make_table(resp_data, [5.5*cm, 11*cm], header_color="#2c5282")) story.append(SP(4)) story.append(H2("9.2 Key Prognostic Factors")) story.append(BUL("<b>R-ISS stage</b> at diagnosis (based on B2M, albumin, LDH, cytogenetics)")) story.append(BUL("<b>High-risk cytogenetics:</b> del(17p), t(4;14), t(14;16), gain(1q) - worse outcome")) story.append(BUL("<b>Depth of response:</b> MRD-negativity strongly predicts longer PFS and OS")) story.append(BUL("<b>LDH level</b> - elevated LDH signals high proliferative activity")) story.append(BUL("<b>Age and comorbidities</b> affect tolerance of therapy")) story.append(BUL("<b>Number of prior lines of therapy</b> and prior drug exposure")) # ========== SECTION 10: SPECTRUM ========== story.append(SP(4)) story.append(H1("10. Spectrum of Plasma Cell Disorders")) story.append(B("Multiple myeloma exists within a continuum of plasma cell dyscrasias. " "Understanding the spectrum is essential for appropriate surveillance vs. treatment decisions:")) story.append(SP(4)) spectrum_data = [ ["Feature", "MGUS", "Smoldering MM", "Active MM"], ["BM plasma cells", "<10%", "10-60%", ">=10%"], ["M protein (serum)", "<3 g/dL", ">=3 g/dL OR >=10% BMPCs", "Any level"], ["CRAB criteria", "Absent", "Absent", "Present"], ["Biomarker MDEs", "Absent", "Absent", "Present"], ["LDH / cytogenetics", "Normal", "Variable", "Used for staging"], ["Management", "Surveillance only", "Surveillance +/- clinical trial", "Treatment required"], ["Progression rate", "~1% per year", "~10% per year", "Active disease"], ] t3 = Table(spectrum_data, colWidths=[4.5*cm, 3.5*cm, 4*cm, 4.5*cm], repeatRows=1) t3.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 9.5), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f2f6fb"), colors.white]), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("BACKGROUND", (3,1), (3,-1), colors.HexColor("#fff5f5")), ])) story.append(t3) # ========== MGUS RISK PROGRESSION TABLE ========== story.append(SP(8)) story.append(H2("MGUS Risk of Progression (Mayo Clinic Model)")) story.append(B("Risk factors: serum M protein >=1.5 g/dL, non-IgG subtype, " "abnormal free light chain ratio (outside 0.26-1.65)")) story.append(SP(4)) mgus_data = [ ["Risk Group", "Risk Factors", "20-yr Progression Risk"], ["Low risk", "None of the 3 risk factors (IgG, M <1.5 g/dL, normal FLC ratio)", "~5%"], ["Low-intermediate", "1 risk factor abnormal", "~21%"], ["High-intermediate", "2 risk factors abnormal", "~37%"], ["High risk", "All 3 risk factors abnormal", "~58%"], ] story.append(make_table(mgus_data, [3.5*cm, 9*cm, 4*cm])) # ========== REFERENCES ========== story.append(PageBreak()) story.append(H1("References")) refs = [ "Goldman-Cecil Medicine International Edition (2-volume set). Chapter 173: Plasma Cell Disorders and Chapter 312: Monoclonal Gammopathies. Elsevier.", "Robbins & Kumar Basic Pathology, 11th Edition. Chapter 10: Hematopoietic and Lymphoid Systems - Multiple Myeloma. Elsevier.", "Textbook of Family Medicine, 9th Edition. Chapter 13: Hematologic Disorders. Elsevier.", "Bradley and Daroff's Neurology in Clinical Practice, 8th Edition. Chapter 28: Neurologic Complications of Systemic Disease. Elsevier.", "Rajkumar SV, Kyle RA, Therneau TM, et al. Serum free light chain ratio is an independent risk factor for progression in MGUS. Blood. 2005;106:812-817.", "Rajkumar SV, Dimopoulos MA, Palumbo A, et al. International Myeloma Working Group updated criteria for the diagnosis of multiple myeloma. Lancet Oncol. 2014;15:e538-548.", "Palumbo A, Avet-Loiseau H, Oliva S, et al. Revised International Staging System for Multiple Myeloma. J Clin Oncol. 2015;33:2863-2869.", "Raje NS, Anaissie E, Kumar SK, et al. Consensus guidelines for infection prevention in multiple myeloma. Lancet Haematol. 2022;9:e143-e161.", ] for i, r in enumerate(refs, 1): story.append(Paragraph(f"{i}. {r}", ref_style)) story.append(SP(16)) story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#aaaaaa"), spaceAfter=6, spaceBefore=4)) story.append(Paragraph( "Generated by Orris Medical Assistant | Based on authoritative medical textbooks | June 2026 | " "For educational purposes only - not a substitute for clinical judgment.", footer_style)) # Build PDF doc.build(story) import os size = os.path.getsize(OUTPUT) print(f"SUCCESS: {OUTPUT}") print(f"File size: {size/1024:.1f} KB") PYEOF

Running Command

python3 -c " from pypdf import PdfReader r = PdfReader('/home/daytona/workspace/multiple-myeloma/Multiple_Myeloma_v2.pdf') print(f'Total pages: {len(r.pages)}') for i in range(len(r.pages)): txt = r.pages[i].extract_text() print(f'Page {i+1} ({len(txt)} chars): {txt[:80].strip()!r}') "

The PDF is confirmed valid - 10 pages, all with content. Here is the updated download link:

Multiple Myeloma v2

PDF Document · PDF

The file is 23.5 KB with 10 full pages. If it still appears blank in your browser's built-in PDF viewer, try:
  1. Right-click the link > Save link as and open it in Adobe Acrobat, Foxit, or your OS PDF viewer
  2. Or open it directly in Chrome/Firefox by dragging the downloaded file into the browser
The issue you saw earlier was likely a browser preview rendering glitch, not an empty file - the content was always there.
This is a shared conversation. Sign in to Orris to start your own chat.