Corticosteroid pharmacology handwritten notes
"glucocorticoids" AND "adverse effects"
| Class | Main receptor | Examples | Main use |
|---|---|---|---|
| Glucocorticoids | GR (glucocorticoid receptor) | Cortisol, prednisone, prednisolone, methylprednisolone, dexamethasone, hydrocortisone | Anti-inflammatory / immunosuppressive |
| Mineralocorticoids | MR (mineralocorticoid receptor) | Aldosterone, fludrocortisone | Na⁺/water retention, K⁺ excretion |
| Drug | Anti-inflammatory (glucocorticoid) potency | Duration |
|---|---|---|
| Cortisone | 0.8 | Short |
| Hydrocortisone | 1 | Short |
| Prednisone | 4 | Intermediate |
| Prednisolone | 4 | Intermediate |
| Methylprednisolone | 5 | Intermediate |
| Triamcinolone | ~5 | Intermediate |
| Dexamethasone | 25 | Long |
| Betamethasone | ~25 | Long |

/tmp/workspace
mkdir -p /tmp/workspace/corticosteroid-notes/assets && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/91441b59084a7651db913d0355852a3112b8613be1bb94110d8b336c9acbd688.png" > /tmp/workspace/corticosteroid-notes/assets/img.json && python3 -c " import json, base64 data = json.load(open('/tmp/workspace/corticosteroid-notes/assets/img.json')) for i, img in enumerate(data): if img.get('base64'): raw = base64.b64decode(img['base64'].split(',',1)[1]) with open(f'/tmp/workspace/corticosteroid-notes/assets/mechanism.png','wb') as f: f.write(raw) print('saved', len(raw)) else: print('error', img.get('error')) "
~/corticosteroid-notes/build_pdf.py
# -*- coding: utf-8 -*-
from reportlab.lib.pagesizes import letter
from reportlab.lib.units import inch
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, Image,
ListFlowable, ListItem, HRFlowable, PageBreak
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUT = "/tmp/workspace/corticosteroid-notes/Corticosteroid_Pharmacology_Notes.pdf"
IMG = "/tmp/workspace/corticosteroid-notes/assets/mechanism.png"
styles = getSampleStyleSheet()
navy = colors.HexColor("#1a2b4c")
teal = colors.HexColor("#0f6d66")
lightband = colors.HexColor("#eef3f8")
title_style = ParagraphStyle("TitleX", parent=styles["Title"], textColor=navy,
fontSize=22, spaceAfter=4, alignment=TA_LEFT)
subtitle_style = ParagraphStyle("SubtitleX", parent=styles["Normal"], textColor=teal,
fontSize=11, spaceAfter=14, alignment=TA_LEFT)
h1 = ParagraphStyle("H1", parent=styles["Heading1"], textColor=navy, fontSize=14.5,
spaceBefore=14, spaceAfter=6, borderPadding=0)
h2 = ParagraphStyle("H2", parent=styles["Heading2"], textColor=teal, fontSize=11.5,
spaceBefore=8, spaceAfter=4)
body = ParagraphStyle("BodyX", parent=styles["Normal"], fontSize=9.7, leading=13.5,
spaceAfter=4)
bullet = ParagraphStyle("BulletX", parent=body, leftIndent=14, bulletIndent=4, spaceAfter=3)
note_style = ParagraphStyle("NoteX", parent=body, fontSize=9.3, leading=12.5,
textColor=colors.HexColor("#333333"), backColor=lightband,
borderPadding=8, spaceAfter=8, spaceBefore=4)
caption_style = ParagraphStyle("Caption", parent=styles["Normal"], fontSize=8.3,
textColor=colors.grey, alignment=TA_CENTER, spaceAfter=10)
cite_style = ParagraphStyle("Cite", parent=styles["Normal"], fontSize=7.8,
textColor=colors.grey, spaceBefore=16)
def P(text, style=body):
return Paragraph(text, style)
def bullets(items, style=bullet):
return ListFlowable(
[ListItem(P(it, style), leftIndent=14) for it in items],
bulletType="bullet", start="•", leftIndent=10, spaceBefore=2, spaceAfter=6
)
story = []
# ---------- Header ----------
story.append(P("Corticosteroid Pharmacology", title_style))
story.append(P("Handwritten-style study notes — classification, mechanism, potency, uses, adverse effects", subtitle_style))
story.append(HRFlowable(width="100%", thickness=1.2, color=navy, spaceAfter=10))
# ---------- 1. Classification ----------
story.append(P("1. Classification", h1))
story.append(P("Corticosteroids are adrenal cortex steroid hormones, divided by receptor and dominant action:", body))
t1_data = [
["Class", "Main receptor", "Examples", "Main use"],
["Glucocorticoids", "GR", "Cortisol, prednisone, prednisolone,\nmethylprednisolone, dexamethasone, hydrocortisone", "Anti-inflammatory /\nimmunosuppressive"],
["Mineralocorticoids", "MR", "Aldosterone, fludrocortisone", "Na\u207a / water retention,\nK\u207a excretion"],
]
t1 = Table(t1_data, colWidths=[1.3*inch, 0.9*inch, 2.6*inch, 1.6*inch])
t1.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), navy),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTSIZE", (0,0), (-1,-1), 8.6),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("GRID", (0,0), (-1,-1), 0.5, colors.grey),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.white, lightband]),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(t1)
story.append(Spacer(1, 8))
story.append(bullets([
"Cortisol = principal endogenous glucocorticoid; secretion is <b>diurnal</b> (peak early morning, small secondary peak late afternoon), driven by stress and negative feedback on ACTH/CRH.",
"GR is widely distributed; MR is largely confined to kidney, colon, salivary/sweat glands (both also present in brain).",
]))
# ---------- 2. Mechanism of Action ----------
story.append(P("2. Mechanism of Action (MOA)", h1))
story.append(P("Genomic pathway (classic, slow — hours to days)", h2))
story.append(bullets([
"Lipophilic steroid diffuses across cell membrane → binds cytoplasmic <b>glucocorticoid receptor (GR)</b> → complex dimerizes → recruits coactivators/corepressors → translocates to nucleus → binds <b>glucocorticoid response elements (GREs)</b> on DNA.",
"<b>Transactivation</b> → switches ON anti-inflammatory genes (e.g. lipocortin-1/annexin A1, I\u03baB).",
"<b>Transrepression</b> → switches OFF pro-inflammatory genes (cytokines, COX-2, adhesion molecules) — thought to be the primary anti-inflammatory route.",
"Key effect: induces <b>lipocortin</b>, which inhibits <b>phospholipase A2</b> → blocks arachidonic acid release → \u2193 prostaglandins and leukotrienes.",
]))
story.append(P("Non-genomic pathway (rapid, high-dose)", h2))
story.append(bullets([
"Membrane-bound GR and direct membrane insertion of steroid produce faster effects — relevant to pulse/IV steroid therapy.",
]))
story.append(P("Cellular / immune effects", h2))
story.append(bullets([
"\u2193 T-cell function and circulating lymphocyte number (redistribution to lymphoid tissue, not destruction).",
"\u2193 eosinophils, basophils, monocytes; \u2191 neutrophils (demargination); \u2191 Hgb / platelets.",
"\u2193 Fc receptor expression, \u2193 cytokine production, stabilizes mast cell / basophil membranes (\u2193 histamine release).",
]))
# Mechanism image
try:
img = Image(IMG, width=4.6*inch, height=4.6*inch*0.62)
img.hAlign = "CENTER"
story.append(Spacer(1, 4))
story.append(img)
story.append(P("Fig. Mechanisms of the cellular actions of glucocorticoids.", caption_style))
except Exception:
pass
story.append(PageBreak())
# ---------- 3. Potency table ----------
story.append(P("3. Relative Potency & Duration of Action", h1))
story.append(P("All potencies relative to hydrocortisone = 1", body))
t2_data = [
["Drug", "Anti-inflammatory potency", "Duration"],
["Cortisone", "0.8", "Short"],
["Hydrocortisone", "1", "Short"],
["Prednisone", "4", "Intermediate"],
["Prednisolone", "4", "Intermediate"],
["Methylprednisolone", "5", "Intermediate"],
["Triamcinolone", "~5", "Intermediate"],
["Dexamethasone", "25", "Long"],
["Betamethasone", "~25", "Long"],
]
t2 = Table(t2_data, colWidths=[2.1*inch, 2.5*inch, 1.8*inch])
t2.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), teal),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9),
("GRID", (0,0), (-1,-1), 0.5, colors.grey),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.white, lightband]),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(t2)
story.append(Spacer(1, 6))
story.append(bullets([
"Prednisone (PO) and methylprednisolone (IV) preferred clinically for cost / half-life balance.",
"Mineralocorticoid activity is highest with hydrocortisone / fludrocortisone, minimal with dexamethasone — important when choosing an agent for adrenal insufficiency vs. pure anti-inflammatory use.",
]))
# ---------- 4. Therapeutic uses ----------
story.append(P("4. Therapeutic Uses", h1))
story.append(bullets([
"<b>Replacement therapy</b> — Addison disease (hydrocortisone, mimicking diurnal rhythm: 2/3 dose AM, 1/3 PM) ± fludrocortisone for mineralocorticoid deficiency.",
"<b>Anti-inflammatory / immunosuppressive</b> — asthma, allergic rhinitis, RA, IBD, autoimmune disease, transplant rejection, vasculitis.",
"<b>Allergic emergencies</b> — anaphylaxis, drug / serum / transfusion reactions.",
"<b>Malignancy</b> — component of chemo regimens (lymphoma, leukemia).",
"<b>Route-specific use minimizes systemic exposure</b>: inhaled (e.g. fluticasone) for asthma/rhinitis, topical for dermatoses, intra-articular for joint flares.",
]))
# ---------- 5. Adverse effects ----------
story.append(P("5. Adverse Effects", h1))
story.append(P("Dose- and duration-dependent; significant risk generally above ~10 mg/day prednisone-equivalent.", body))
t3_data = [
["System", "Effects"],
["Endocrine / metabolic", "Hyperglycemia, weight gain, iatrogenic Cushing syndrome, dyslipidemia"],
["Bone", "Osteoporosis; avascular necrosis (femoral/humeral head, tibial plateau)"],
["Cardiovascular", "Hypertension, fluid retention"],
["Ophthalmic", "Cataracts, glaucoma"],
["Immune", "\u2191 infection risk (TB reactivation, fungal, PCP); fever may be masked"],
["Dermatologic", "Acne, purpura, skin atrophy, striae"],
["Psychiatric", "Euphoria, insomnia, mood lability, depression, psychosis"],
["Musculoskeletal", "Steroid myopathy (proximal, painless, normal CK/EMG)"],
["GI", "Dyspepsia (take with food)"],
]
t3 = Table(t3_data, colWidths=[1.6*inch, 4.8*inch])
t3.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), navy),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.8),
("GRID", (0,0), (-1,-1), 0.5, colors.grey),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.white, lightband]),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(t3)
story.append(Spacer(1, 6))
story.append(P("Bone protection: give calcium + vitamin D \u00b1 bisphosphonate prophylaxis. Consider PJP prophylaxis if \u226520 mg prednisone-equivalent for >1 month.", body))
story.append(PageBreak())
# ---------- 6. HPA axis suppression ----------
story.append(P("6. HPA Axis Suppression & Withdrawal", h1))
story.append(bullets([
"Exogenous glucocorticoids suppress CRH/ACTH via negative feedback → adrenal cortisol production falls.",
"<b>Suppression risk</b> rises with dose >7.5–10 mg/day prednisone-equivalent and duration >2–3 weeks.",
"Abrupt discontinuation after prolonged use → <b>adrenal crisis</b> (hypotension, hypoglycemia, nausea, weakness — can be fatal). Must <b>taper</b> gradually.",
"Under physiologic stress (surgery, infection) in a patient with HPA suppression, give <b>stress-dose steroids</b>.",
]))
# ---------- 7. Quick memory points ----------
story.append(P("7. Quick Memory Points", h1))
story.append(note_style if False else None) # placeholder no-op
mem_items = [
"“Steroids don’t cure, they control” — suppress inflammation, don’t fix underlying disease.",
"<b>MOA in one line</b>: lipophilic → cytoplasmic GR → nuclear translocation → GRE binding → transactivation (anti-inflammatory genes \u2191) / transrepression (cytokine genes \u2193).",
"<b>Potency order (low→high)</b>: cortisone < hydrocortisone < prednisone ≈ prednisolone < methylprednisolone ≈ triamcinolone < dexamethasone ≈ betamethasone.",
"<b>Never stop abruptly</b> if on >3 weeks / >20 mg prednisone-equivalent → taper to avoid adrenal crisis.",
]
story.append(bullets(mem_items))
story.append(Spacer(1, 6))
story.append(P(
"<b>Recent evidence note:</b> A 2024 systematic review / meta-analysis (PMID: 38038629, <i>J Clin Endocrinol Metab</i>) "
"quantified neuropsychiatric adverse effects of synthetic glucocorticoids, reinforcing that mood/psychiatric effects are "
"frequent and clinically significant even at moderate doses.",
note_style
))
story.append(HRFlowable(width="100%", thickness=0.7, color=colors.grey, spaceBefore=14, spaceAfter=6))
story.append(P(
"Sources: Lippincott Illustrated Reviews – Pharmacology (Ch. 26); The Washington Manual of Medical Therapeutics; "
"Rheumatology, 2-Volume Set (Elsevier); Goodman & Gilman’s The Pharmacological Basis of Therapeutics; "
"Katzung’s Basic and Clinical Pharmacology. PubMed PMID 38038629.",
cite_style
))
doc = SimpleDocTemplate(
OUT, pagesize=letter,
leftMargin=0.7*inch, rightMargin=0.7*inch, topMargin=0.6*inch, bottomMargin=0.6*inch,
title="Corticosteroid Pharmacology Notes"
)
doc.build(story)
print("PDF built at", OUT)