Hypercalcemia
"hypercalcemia"[MeSH Terms] AND management
| Grade | Total Serum Calcium |
|---|---|
| Mild | < 12 mg/dL (3.0 mmol/L) |
| Moderate | 12-14 mg/dL (3.0-3.5 mmol/L) |
| Severe | > 14 mg/dL (3.5 mmol/L) |

| System | Manifestations |
|---|---|
| Renal | Nephrolithiasis, nephrocalcinosis, polyuria, polydipsia (nephrogenic DI), renal insufficiency |
| Bone | Bone pain, fractures, osteitis fibrosa cystica, brown tumors (severe/chronic) |
| GI | Nausea, vomiting, constipation, anorexia, peptic ulcers, pancreatitis, gallstones |
| Neuromuscular | Weakness, fatigue, proximal muscle weakness, hyporeflexia |
| CNS/Psychiatric | Depression, lethargy, confusion, stupor, coma (in severe cases) |
| Cardiac | Shortened QT interval, aortic/mitral valve calcifications, hypertension |
Want pdf
ls /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace
mkdir -p /home/daytona/workspace/hypercalcemia && cat << 'PYEOF' > /home/daytona/workspace/hypercalcemia/generate_pdf.py from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, KeepTogether from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY output_path = "/home/daytona/workspace/hypercalcemia/Hypercalcemia.pdf" doc = SimpleDocTemplate( output_path, pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm, title="Hypercalcemia", author="Orris Medical" ) styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle( 'CustomTitle', parent=styles['Title'], fontSize=22, textColor=colors.HexColor('#1a3a5c'), spaceAfter=6, fontName='Helvetica-Bold', alignment=TA_CENTER ) subtitle_style = ParagraphStyle( 'Subtitle', parent=styles['Normal'], fontSize=10, textColor=colors.HexColor('#555555'), spaceAfter=14, alignment=TA_CENTER ) h1_style = ParagraphStyle( 'H1', parent=styles['Heading1'], fontSize=13, textColor=colors.white, backColor=colors.HexColor('#1a3a5c'), spaceAfter=4, spaceBefore=10, leftIndent=-0.3*cm, rightIndent=-0.3*cm, fontName='Helvetica-Bold', leading=18, borderPad=4 ) h2_style = ParagraphStyle( 'H2', parent=styles['Heading2'], fontSize=11, textColor=colors.HexColor('#1a3a5c'), spaceAfter=3, spaceBefore=7, fontName='Helvetica-Bold', borderPadding=(0,0,2,0), ) h3_style = ParagraphStyle( 'H3', parent=styles['Heading3'], fontSize=10, textColor=colors.HexColor('#2e6da4'), spaceAfter=2, spaceBefore=5, fontName='Helvetica-Bold', ) body_style = ParagraphStyle( 'Body', parent=styles['Normal'], fontSize=9.5, leading=14, spaceAfter=5, alignment=TA_JUSTIFY, textColor=colors.HexColor('#222222') ) bullet_style = ParagraphStyle( 'Bullet', parent=body_style, leftIndent=14, bulletIndent=4, spaceAfter=2, ) note_style = ParagraphStyle( 'Note', parent=body_style, fontSize=8.5, textColor=colors.HexColor('#555555'), leftIndent=10, fontName='Helvetica-Oblique' ) def h1(text): return Paragraph(f" {text}", h1_style) def h2(text): return Paragraph(text, h2_style) def h3(text): return Paragraph(text, h3_style) def body(text): return Paragraph(text, body_style) def bullet(text, level=1): indent = 14 * level s = ParagraphStyle('b', parent=bullet_style, leftIndent=indent, bulletIndent=indent-10) return Paragraph(f"• {text}", s) def note(text): return Paragraph(text, note_style) def sp(h=4): return Spacer(1, h) def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor('#cccccc'), spaceAfter=4, spaceBefore=4) # TABLE STYLES def make_table(data, col_widths, header=True): t = Table(data, colWidths=col_widths, repeatRows=1 if header else 0) style = [ ('FONTNAME', (0,0), (-1,-1), 'Helvetica'), ('FONTSIZE', (0,0), (-1,-1), 9), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#cccccc')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, colors.HexColor('#f5f8fc')]), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 6), ('RIGHTPADDING', (0,0), (-1,-1), 6), ] if header: style += [ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#2e6da4')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ] t.setStyle(TableStyle(style)) return t # ---- BUILD CONTENT ---- story = [] # Title story.append(Paragraph("HYPERCALCEMIA", title_style)) story.append(Paragraph("A Comprehensive Clinical Reference", subtitle_style)) story.append(hr()) story.append(sp(6)) # 1. Definition story.append(h1("1. DEFINITION & SEVERITY")) story.append(sp(4)) story.append(body("Hypercalcemia is defined as a total serum calcium <b>>10.5 mg/dL</b> (2.62 mmol/L) or ionized calcium >5.25 mg/dL (1.31 mmol/L). Prevalence is ~1–2% in the general population and 2–5% in hospitalized patients.")) story.append(sp(4)) sev_data = [ ["Grade", "Total Serum Calcium", "Clinical Relevance"], ["Mild", "< 12 mg/dL (< 3.0 mmol/L)", "Often asymptomatic; outpatient workup"], ["Moderate", "12–14 mg/dL (3.0–3.5 mmol/L)", "Symptoms likely; urgent treatment if symptomatic"], ["Severe", "> 14 mg/dL (> 3.5 mmol/L)", "Hypercalcemic crisis; requires immediate treatment"], ] story.append(make_table(sev_data, [3*cm, 6*cm, 7.5*cm])) story.append(sp(6)) # 2. Pathophysiology story.append(h1("2. PATHOPHYSIOLOGY")) story.append(sp(4)) story.append(body("Hypercalcemia arises through three mechanisms:")) story.append(bullet("<b>Increased bone resorption</b> — most common; PTH/PTHrP activates osteoclasts via RANKL upregulation on osteoblasts, inhibiting osteoprotegerin")) story.append(bullet("<b>Increased GI calcium absorption</b> — excess vitamin D or its analogues (1,25-OH₂D)")) story.append(bullet("<b>Decreased renal calcium excretion</b> — thiazide diuretics, familial hypocalciuric hypercalcemia (FHH)")) story.append(sp(4)) story.append(body("PTH acts on osteoblasts → RANKL upregulation → osteoclast activation → calcium liberation from bone into extracellular fluid.")) story.append(sp(6)) # 3. Causes story.append(h1("3. CAUSES (Classified by PTH Level)")) story.append(sp(4)) story.append(h2("A. High PTH")) story.append(bullet("<b>Primary hyperparathyroidism</b> — most common cause overall")) story.append(bullet("Solitary adenoma (~80%), hyperplasia (~15%), carcinoma (<1%)", level=2)) story.append(bullet("Familial: MEN 1, MEN 2A, HPT-JT, FIHP", level=2)) story.append(bullet("<b>Tertiary hyperparathyroidism</b> — autonomous hyperplasia in chronic renal failure")) story.append(sp(4)) story.append(h2("B. Low PTH (Suppressed) — Most common cause of symptomatic hypercalcemia")) story.append(h3("Malignancy (~80% of cancer-related cases via PTHrP):")) story.append(bullet("<b>Humoral hypercalcemia of malignancy (HHM)</b>: PTHrP secretion — lung, esophagus, renal cell, ovary, bladder carcinoma")) story.append(bullet("<b>Local osteolytic hypercalcemia (LOH)</b>: Multiple myeloma, breast carcinoma")) story.append(bullet("<b>1,25(OH)₂D production</b>: Lymphoma, germinoma")) story.append(bullet("<b>Ectopic PTH secretion</b>: Rare")) story.append(sp(3)) story.append(h3("Excess Vitamin D:")) story.append(bullet("Exogenous: vitamin D toxicity (supplements, cod liver oil)")) story.append(bullet("Endogenous (granulomatous): Sarcoidosis, TB, histoplasmosis, coccidioidomycosis, leprosy, berylliosis, HIV, lymphoma")) story.append(sp(3)) story.append(h3("Drugs:")) story.append(bullet("Thiazide diuretics, lithium, milk-alkali syndrome (calcium carbonate), vitamin A toxicity, TPN, estrogens/antiestrogens, aminophylline, foscarnet, denosumab (rebound on discontinuation)")) story.append(sp(3)) story.append(h3("Other Endocrine Disorders:")) story.append(bullet("Thyrotoxicosis (mild, <12 mg/dL; responds to beta-blockers), pheochromocytoma, acute adrenal insufficiency, VIPoma")) story.append(bullet("Immobilization (especially Paget disease, prolonged bed rest)")) story.append(sp(3)) story.append(h2("C. Altered Calcium-Sensing Receptor Set Point")) story.append(bullet("<b>Familial Hypocalciuric Hypercalcemia (FHH)</b> — autosomal dominant; types 1–3 (CaSR, GNA11, AP2S1 mutations); asymptomatic, Ca:Cr clearance ratio <0.01, normal/mild PTH elevation, hypermagnesemia")) story.append(sp(3)) story.append(note("Primary hyperparathyroidism + malignancy account for ~90% of all cases of hypercalcemia.")) story.append(sp(6)) # 4. Clinical Features story.append(h1("4. CLINICAL FEATURES")) story.append(sp(4)) story.append(body('<b>"Bones, Stones, Moans, and Abdominal Groans"</b> — the classic mnemonic for hypercalcemia symptoms:')) story.append(sp(4)) feat_data = [ ["System", "Manifestations"], ["Renal (Stones)", "Nephrolithiasis, nephrocalcinosis, polyuria, polydipsia (nephrogenic DI), renal insufficiency"], ["Bone (Bones)", "Bone pain, fractures, osteitis fibrosa cystica, brown tumors (severe/chronic PHPT)"], ["GI (Abdominal Groans)", "Nausea, vomiting, constipation, anorexia, peptic ulcers, pancreatitis, gallstones"], ["CNS/Psychiatric (Moans)", "Depression, lethargy, confusion, cognitive impairment, stupor, coma (severe)"], ["Neuromuscular", "Proximal muscle weakness, fatigue, hyporeflexia"], ["Cardiac", "Shortened QT interval on ECG, hypertension, valve calcifications (aortic/mitral)"], ] story.append(make_table(feat_data, [4.5*cm, 12*cm])) story.append(sp(4)) story.append(note("Symptom severity correlates with the rapidity of calcium rise as much as the absolute level. Levels >14 mg/dL are almost universally symptomatic.")) story.append(sp(6)) # 5. Diagnosis story.append(h1("5. DIAGNOSTIC WORKUP")) story.append(sp(4)) story.append(body("<b>Step 1 – Confirm true hypercalcemia:</b> Correct for albumin (corrected Ca = measured Ca + 0.8 × [4 − albumin g/dL]) or measure ionized calcium directly.")) story.append(sp(3)) story.append(body("<b>Step 2 – Intact PTH</b> (the single most important test):")) story.append(bullet("Elevated or inappropriately normal PTH → primary hyperparathyroidism or FHH")) story.append(bullet("Suppressed PTH → malignancy, vitamin D excess, granulomatous disease")) story.append(sp(3)) diag_data = [ ["Test", "When to Order", "Interpretation"], ["Intact PTH", "All cases — first test", "High = PHPT; Low = non-parathyroid cause"], ["PTHrP", "PTH suppressed, malignancy suspected", "Elevated in humoral hypercalcemia of malignancy"], ["25-OH Vitamin D", "All cases", "Elevated in vitamin D toxicity"], ["1,25(OH)₂D", "PTH low, PTHrP negative", "Elevated in granulomatous/lymphoma"], ["24h Urinary Calcium", "PTH elevated", "Low (<100 mg/day, CCR <0.01) suggests FHH"], ["Serum Phosphorus", "All cases", "Low in PHPT (PTH promotes phosphaturia)"], ["Alkaline Phosphatase", "Bone disease suspected", "Elevated with osteitis fibrosa cystica"], ["DEXA scan", "Confirmed PHPT", "T-score < −2.5 is a surgical indication"], ["Sestamibi / Neck US", "Before parathyroid surgery", "Localise adenoma"], ] story.append(make_table(diag_data, [4*cm, 5.5*cm, 7*cm])) story.append(sp(4)) story.append(h3("Biochemical Profile in Primary Hyperparathyroidism (typical):")) bio_data = [ ["Parameter", "Typical Value", "Reference Range"], ["Serum Calcium", "10.7 ± mg/dL", "8.2–10.2 mg/dL"], ["Serum Phosphorus", "2.8 ± 0.1 mg/dL", "2.5–4.5 mg/dL"], ["Alkaline Phosphatase", "114 ± 5 IU/L", "< 100 IU/L"], ["PTH (IRMA)", "119 ± 7 pg/mL", "10–65 pg/mL"], ["25-OH Vitamin D", "19 ± 1 ng/mL", "9–52 ng/mL"], ["Urinary Calcium", "240 ± 11 mg/g Cr", "Elevated"], ] story.append(make_table(bio_data, [5*cm, 5*cm, 6.5*cm])) story.append(sp(6)) # 6. Management story.append(h1("6. MANAGEMENT")) story.append(sp(4)) story.append(h2("A. Acute/Severe Hypercalcemia (Ca >13.5–14 mg/dL or symptomatic)")) story.append(sp(3)) mgmt_data = [ ["Agent / Measure", "Dose", "Mechanism", "Onset / Notes"], ["IV Normal Saline", "2–4 L/day", "Volume expansion → ↑ renal Ca excretion", "Hours; First-line always"], ["Furosemide", "20–40 mg IV prn", "Loop diuretic → calciuresis", "Use only after adequate hydration; prevents fluid overload"], ["Calcitonin (salmon)", "4 IU/kg SC/IM q12h", "Inhibits osteoclasts; ↑ renal Ca excretion", "Rapid onset (hours); tachyphylaxis in 48–72h — use as bridge"], ["Zoledronic acid", "4 mg IV over 15 min", "Bisphosphonate; inhibits osteoclast resorption", "Onset 2–4 days; peak 4–7 days; preferred for malignancy"], ["Pamidronate", "60–90 mg IV over 2–4h", "Bisphosphonate", "Alternative to zoledronic acid"], ["Denosumab", "120 mg SC q4wk", "Anti-RANKL monoclonal antibody", "Bisphosphonate-refractory cases; risk of rebound hypercalcemia on discontinuation"], ["Glucocorticoids", "Prednisolone 40–60 mg/day", "↓ 1,25(OH)₂D production (macrophages)", "Granulomatous disease, vitamin D toxicity, lymphoma"], ["Hemodialysis", "Urgent", "Removes calcium directly", "Last resort; severe refractory or renal failure"], ] story.append(make_table(mgmt_data, [3.5*cm, 3.5*cm, 4.5*cm, 5*cm])) story.append(sp(6)) story.append(h2("B. Primary Hyperparathyroidism — Surgical Indications (Any One Criterion)")) story.append(sp(3)) surg_data = [ ["Criterion", "Threshold"], ["Serum calcium", "> 1 mg/dL above upper limit of normal"], ["Creatinine clearance", "< 60 mL/min"], ["Bone mineral density (DEXA)", "T-score < −2.5 at any site OR vertebral fracture"], ["24h urinary calcium", "> 400 mg/day (men), > 300 mg/day (women) + increased stone risk"], ["Age", "< 50 years"], ["Complications", "Nephrolithiasis, nephrocalcinosis, osteitis fibrosa cystica"], ["History", "Episode of life-threatening hypercalcemia"], ] story.append(make_table(surg_data, [7*cm, 9.5*cm])) story.append(sp(3)) story.append(note("Parathyroidectomy achieves biochemical cure in ~98% of cases when performed by an experienced surgeon. BMD improves over 6–10 years post-operatively with reduced fracture risk. Adapted from Bilezikian JP et al., J Bone Miner Res 2022.")) story.append(sp(5)) story.append(h2("C. Medical Management (When Surgery Not Feasible / Watchful Waiting)")) story.append(bullet("<b>Cinacalcet</b> (calcimimetic): 30 mg once daily, titrated to max 180 mg/day. Allosteric activator of calcium-sensing receptor; reduces PTH and serum calcium. Also used for severe secondary hyperparathyroidism in dialysis patients.")) story.append(bullet("<b>Bisphosphonates</b>: Alendronate or risedronate — improve bone density in PHPT; do not consistently lower serum calcium")) story.append(bullet("<b>Watchful waiting</b>: Annual serum Ca, PTH, 25-OH-D, eGFR, 24h urine Ca; DEXA every 1–2 years; ensure adequate hydration; avoid thiazides")) story.append(sp(6)) # 7. Special Entities story.append(h1("7. SPECIAL ENTITIES")) story.append(sp(4)) story.append(h2("Familial Hypocalciuric Hypercalcemia (FHH)")) story.append(bullet("Autosomal dominant; lifelong asymptomatic hypercalcemia")) story.append(bullet("Key: Ca:Cr clearance ratio <0.01, hypermagnesemia, PTH normal in 80%")) story.append(bullet("3 subtypes: FHH1 (CaSR), FHH2 (GNA11), FHH3 (AP2S1) — genetic testing is definitive")) story.append(bullet("<b>Parathyroidectomy is NOT beneficial</b> — do not confuse with PHPT")) story.append(sp(3)) story.append(h2("Milk-Alkali Syndrome")) story.append(bullet("Caused by excessive calcium carbonate ingestion (antacids, OTC supplements)")) story.append(bullet("Classic triad: hypercalcemia + metabolic alkalosis + renal insufficiency")) story.append(sp(3)) story.append(h2("Hypercalcemia of Malignancy — Mechanism by Tumor Type")) malignancy_data = [ ["Tumor Type", "Mechanism"], ["Squamous cell lung, renal, ovarian, bladder", "PTHrP secretion (HHM) — ~80%"], ["Multiple myeloma, breast cancer", "Local osteolytic hypercalcemia (LOH) — cytokines, DKK1, RANKL"], ["Lymphoma (Hodgkin, NHL)", "1,25(OH)₂D production by tumor cells"], ["Rare solid tumors", "Ectopic PTH secretion"], ] story.append(make_table(malignancy_data, [7*cm, 9.5*cm])) story.append(sp(3)) story.append(h2("Hypercalcemia of Immobilization")) story.append(bullet("Occurs with prolonged immobilization, especially young patients and those with high bone turnover (Paget disease)")) story.append(bullet("Treatment: mobilization, IV saline hydration, bisphosphonates if needed")) story.append(sp(6)) # 8. Quick Reference story.append(h1("8. QUICK REFERENCE SUMMARY")) story.append(sp(4)) qr_data = [ ["Key Point", "Answer"], ["Most common cause overall", "Primary hyperparathyroidism (adenoma)"], ["Most common cause of symptomatic hypercalcemia", "Malignancy"], ["These two causes account for", "~90% of all cases"], ["First investigation", "Intact PTH"], ["First treatment (acute)", "IV Normal Saline (aggressive hydration)"], ["Fastest-acting pharmacological agent", "Calcitonin (onset hours; tachyphylaxis ≤72h)"], ["Best for malignancy-related hypercalcemia", "IV Bisphosphonate (zoledronic acid)"], ["Only cure for primary hyperparathyroidism", "Parathyroidectomy (~98% cure rate)"], ["Do NOT confuse PHPT with", "FHH — check urinary calcium + genetic testing"], ["Glucocorticoids useful for", "Granulomatous disease, vitamin D toxicity, lymphoma"], ] story.append(make_table(qr_data, [8*cm, 8.5*cm])) story.append(sp(8)) # Sources story.append(hr()) story.append(note("<b>Sources:</b> Goldman-Cecil Medicine 22E (2025); Brenner & Rector's The Kidney; Robbins & Cotran Pathologic Basis of Disease; Textbook of Family Medicine 9E; Schwartz's Principles of Surgery 11E; Harrison's Principles of Internal Medicine 22E")) story.append(sp(3)) story.append(note("Generated by Orris Medical AI — July 2026. For clinical decisions, verify with current institutional guidelines.")) doc.build(story) print(f"PDF saved: {output_path}") PYEOF python3 /home/daytona/workspace/hypercalcemia/generate_pdf.py
Hypercalcemia
PDF Document · PDF