What a pharmacotherapeutics on asthama nd it's treatment algorithm with reference to standard books and research papers

Reading File
Finding Sources
Finding Sources
Searching PubMed

asthma pharmacotherapy treatment guidelines

Finding Sources
Searching PubMed

asthma management GINA guidelines inhaled corticosteroids

Good — Murray & Nadel's Respiratory Medicine and Family Medicine textbooks have asthma sections. Let me read the key blocks simultaneously.
Reading File
Reading File
Finding Sources
Searching PubMed

asthma stepwise therapy bronchodilator

Now let me read the main pharmacotherapy section from Murray & Nadel's and search for more targeted content:
Finding Sources
Finding Sources
Excellent — The Harriet Lane Handbook has a FIGURE 25.8 with asthma algorithm. Let me read it along with the surrounding content.
Reading File
Finding Sources
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
I now have comprehensive textbook content. Let me fetch the key algorithm images and also get the management exacerbation content:
Loading Image
Loading Image
Reading File
I now have all the content needed. Let me compile the comprehensive answer.# Pharmacotherapeutics of Asthma & Treatment Algorithm

1. Definition & Pathophysiology

Asthma is a chronic inflammatory airway disease characterized by three cardinal elements:
  1. Reversible airway obstruction
  2. Airway inflammation (mast cells, eosinophils, T-lymphocytes, epithelial cells)
  3. Increased airway hyperresponsiveness to various stimuli
The clinician must treat and prevent inflammation — which leads to mucosal edema, excessive secretions, histologic remodeling, and bronchospasm of smooth muscle origin. — Textbook of Family Medicine 9e, p. 311

2. Classification of Asthma Severity

Severity is determined by impairment (symptoms, SABA use, lung function) and risk (exacerbations). Classification is applied before initiating treatment.

Adults & Youths ≥12 Years

ComponentIntermittentMild PersistentModerate PersistentSevere Persistent
Daytime symptoms≤2 days/week>2 days/wk, not dailyDailyThroughout the day
Nighttime awakenings≤2×/month3–4×/month>1×/week but not nightlyOften 7×/week
SABA use (relief)≤2 days/week>2 days/wk, not dailyDailySeveral times/day
Activity limitationNoneMinorSomeExtremely limited
FEV₁>80% predicted>80% predicted>60–<80%<60%
FEV₁/FVCNormalNormalReduced 5%Reduced >5%
OCS exacerbations0–1/year≥2/year
Recommended initial step: Intermittent → Step 1 | Mild → Step 2 | Moderate → Step 3 | Severe → Step 4 or 5
Textbook of Family Medicine 9e, Fig 19-2; Harriet Lane Handbook 23rd ed., p. 842–843

3. Drug Classes: Mechanisms & Examples

A. Short-Acting β₂-Agonists (SABA) — Rescue

  • Examples: Albuterol (salbutamol), levalbuterol
  • Mechanism: Stimulate β₂-receptors on airway smooth muscle → ↑ cAMP → bronchodilation
  • Use: All steps as PRN relief; in steps 3–4 ICS-formoterol also used for rescue
  • Caution: Use >2 days/week for symptom relief (not EIB prevention) indicates inadequate control → step up required

B. Inhaled Corticosteroids (ICS) — First-Line Controller

  • Examples: Beclomethasone, budesonide, fluticasone, mometasone, flunisolide
  • Mechanism: Suppress inflammatory cascade (reduce eosinophil recruitment, cytokine production, mucosal edema); decrease airway hyperresponsiveness
  • Evidence: ICS reduces asthma exacerbations by 55% compared with placebo or SABA; more effective than leukotriene antagonists as first-line monotherapy (Sin et al., 2004 — cited in Family Medicine 9e)
  • Key principle: Most benefits achieved at low to medium doses; adding LABA preferred over escalating ICS dose
ICS Comparative Dose Table (Adults ≥12 years):
DrugLow DoseMedium DoseHigh Dose
Beclomethasone HFA80–240 μg/day>240–480 μg/day>480 μg/day
Budesonide DPI180–600 μg/day>600–1200 μg/day>1200 μg/day
Fluticasone HFA/MDI88–264 μg/day>264–440 μg/day>440 μg/day
Fluticasone DPI100–300 μg/day>300–500 μg/day>500 μg/day
Mometasone DPI200 μg/day400 μg/day>400 μg/day
Textbook of Family Medicine 9e, Table 16-4, p. 313

C. Long-Acting β₂-Agonists (LABA) — Add-on Controller

  • Examples: Formoterol, salmeterol, vilanterol
  • Mechanism: Same as SABA but prolonged (≥12 hours); formoterol has rapid onset (also usable as rescue in SMART therapy)
  • Key rule: NEVER use as monotherapy (FDA Black Box Warning — increased risk of asthma-related death). Must always be combined with ICS
  • Benefit: LABAs reduce exacerbations by 26% and are more effective add-ons than leukotriene antagonists (Ram et al., 2005)
  • SMART regimen (Steps 3–4, ≥12 years): ICS-formoterol used both as daily maintenance AND as-needed rescue; max 12 puffs (54 mcg)/day in adults; 8 puffs (36 mcg)/day in 5–11 years

D. Long-Acting Muscarinic Antagonists (LAMA) — Add-on (Steps 3–5)

  • Example: Tiotropium
  • Mechanism: Block M₃ muscarinic receptors on airway smooth muscle and mucus glands → bronchodilation + reduced secretions
  • Use: Step 3 alternative, Step 5 preferred addition (ICS-LABA+LAMA triple therapy)

E. Leukotriene Receptor Antagonists (LTRA)

  • Examples: Montelukast, zafirlukast, zileuton
  • Mechanism: Block cysteinyl leukotriene receptors (CysLT1) → reduce bronchoconstriction and eosinophilic inflammation
  • Status: Alternative controller at Step 2; add-on at Steps 3–5 alternative
  • ⚠️ FDA Boxed Warning (March 2020): Montelukast associated with neuropsychiatric events — restrict use to patients with inadequate response to alternative therapies

F. Theophylline (Methylxanthine)

  • Mechanism: Nonspecific PDE inhibitor → ↑ cAMP; also has modest anti-inflammatory effects and increases central respiratory drive
  • Use: Acceptable (not preferred) alternative to LABA as second-line add-on to ICS
  • Cautions: Narrow therapeutic window; adverse effects — nausea, tremors, palpitations, arrhythmias; should NOT be used in acute ED management
  • Serum level monitoring required (therapeutic range: 5–15 mcg/mL)

G. Biologics (Steps 5–6)

  • Anti-IgE: Omalizumab — binds free IgE; 98–99% reduction in circulating IgE; approved ≥6 years; reduces exacerbations and allows ICS dose reduction
  • Anti-IL-5/IL-5Rα: Mepolizumab, Reslizumab, Benralizumab — reduce eosinophilic airway inflammation
  • Anti-IL-4/IL-13: Dupilumab — blocks IL-4Rα shared by IL-4 and IL-13 pathways
  • Used in severe persistent allergic or eosinophilic asthma at steps 5–6

H. Cromolyn / Nedocromil

  • Mast cell stabilizers; alternative at Step 2 in children (0–4 years); not recommended in updated guidelines due to limited availability and inferior efficacy vs ICS

I. Systemic Corticosteroids

  • Oral prednisone/prednisolone: Used at Step 6 (daily) and in acute exacerbations
  • Short burst (3–10 days, 1–2 mg/kg/day up to 40–60 mg): Does not require tapering unless prolonged course
  • IV methylprednisolone: For hospitalized or severe exacerbations

J. Ipratropium Bromide (Short-acting anticholinergic)

  • Acute exacerbations only: Adding to albuterol nebulizer in severe airflow obstruction produces additional bronchodilation and reduces hospitalizations (Plotnick & Ducharme, 2000; Rodrigo & Castro-Rodriguez, 2005) — SOR: A

K. IV Magnesium Sulfate

  • Adjunct in acute severe asthma unresponsive to 1 hour of conventional therapy; improves pulmonary function and reduces hospitalization rate

L. Subcutaneous Allergen Immunotherapy (SCIT)

  • Conditionally recommended (Steps 2–4) for individuals ≥5 years with controlled allergic asthma; efficacy comparable to ICS

4. Stepwise Treatment Algorithm

NAEPP 2020 Algorithm — Ages 0–4 Years

StepPreferredAlternative
1PRN SABA; at start of RTI: short-course daily ICS
2Daily low-dose ICS + PRN SABADaily montelukast* or cromolyn* + PRN SABA
3Daily medium-dose ICS + PRN SABA
4Daily medium-dose ICS-LABA + PRN SABADaily medium-dose ICS + montelukast* + PRN SABA
5Daily high-dose ICS-LABA + PRN SABADaily high-dose ICS + montelukast* + PRN SABA
6Daily high-dose ICS-LABA + oral systemic CS + PRN SABA
*FDA Boxed Warning for montelukast; limited availability for cromolyn

NAEPP 2020 Algorithm — Ages 5–11 Years

Stepwise approach for managing asthma in children 5–11 years (NAEPP 2020)
Figure: Stepwise approach for persistent asthma, ages 5–11 years — The Harriet Lane Handbook, 23rd ed., Figure 25.7 (NAEPP 2020)

NAEPP 2020 Algorithm — Ages ≥12 Years & Adults

Stepwise approach for managing asthma in adolescents and adults ≥12 years (NAEPP 2020)
Figure: Stepwise approach for persistent asthma, ages ≥12 years — The Harriet Lane Handbook, 23rd ed., Figure 25.8 (NAEPP 2020)
Narrative summary (≥12 years):
StepPreferredAlternative
1 (Intermittent)PRN SABAPRN concomitant ICS+SABA
2 (Mild Persistent)Daily low-dose ICS + PRN SABADaily LTRA, Cromolyn*, Nedocromil*, Zileuton*, or Theophylline* + PRN SABA
3 (Moderate)Daily + PRN low-dose ICS-formoterolDaily medium-dose ICS; OR daily low-dose ICS-LABA; OR daily low-dose ICS+LAMA; OR daily low-dose ICS+LTRA* or ICS+Theophylline*; + PRN SABA
4 (Moderate–Severe)Daily + PRN medium-dose ICS-formoterolDaily medium-dose ICS-LABA or medium-dose ICS+LAMA; OR medium-dose ICS+LTRA*; OR medium-dose ICS+Theophylline*; OR medium-dose ICS+Zileuton*; + PRN SABA
5 (Severe)Daily medium–high dose ICS-LABA + LAMA + PRN SABADaily medium–high dose ICS-LABA or high-dose ICS+LTRA*; + PRN SABA; Consider biologics
6 (Very Severe)Daily high-dose ICS-LABA + oral systemic CS + PRN SABA
Steps 2–4: Conditionally recommend subcutaneous immunotherapy as adjunct for individuals ≥5 years with controlled allergic asthma. Steps 5–6: Consider asthma biologics (anti-IgE, anti-IL5, anti-IL5R, anti-IL4/IL13).
Assess Control at Each Step:
  • Check adherence, inhaler technique, environmental factors, comorbidities
  • Step up if needed; reassess in 2–6 weeks
  • Step down if well controlled for ≥3 consecutive months
  • Consult asthma specialist if Step 4 or higher required
The Harriet Lane Handbook, 23rd ed., Figures 25.6–25.8; Textbook of Family Medicine 9e, Figures 19-3, 19-4

5. Management of Acute Exacerbations

Emergency Department / In-Hospital Management:

  1. SABA: Albuterol nebulization — up to 3 treatments at 20-minute intervals
  2. Ipratropium: Add to albuterol for severe obstruction → fewer hospitalizations (SOR: A)
  3. Systemic corticosteroids: Oral prednisone or IV methylprednisolone — reduce relapse and hospitalization
  4. Oxygen: Titrate to SpO₂ ≥92%
  5. IV Magnesium sulfate: Consider if no improvement after 1 hour of conventional therapy
  6. Heliox-driven albuterol: Consider for refractory cases; heliox alone (as oxygen substitute) is NOT effective
  7. ⚠️ Theophylline/aminophylline: NOT recommended for acute ED or in-hospital management
Textbook of Family Medicine 9e, p. 348

6. ATS Impairment Rating (Post-treatment Assessment)

The American Thoracic Society uses a scoring system combining post-bronchodilator FEV₁, reversibility (or PC₂₀), and minimum medication need to assign impairment Classes 0–V. Class V represents asthma not controlled despite maximal treatment (FEV₁ <50% on ≥20 mg prednisone/day).
Murray & Nadel's Textbook of Respiratory Medicine, Table 35.3, p. 836

7. Special Considerations

Pregnancy

  • ~4% of pregnant women have asthma; one-third experience exacerbations
  • Moderate–severe asthma raises risk of preterm labor, LBW, perinatal death, preeclampsia
  • Management: SABA (albuterol) and ICS are safe; monitor PEFR several times daily in moderate–severe cases; target PEFR ≥80% of personal best
  • ICS doses in pregnancy are the same as for non-pregnant adults

Exercise-Induced Bronchospasm (EIB)

  • Pre-exercise SABA 15–30 minutes before activity
  • Regular ICS reduces EIB frequency; ICS-formoterol as needed covers both rescue and EIB prevention

Monitoring Metrics

  • FEV₁: Best objective measure of obstruction
  • PEFR: Practical portable monitoring tool
  • FeNO (fractional exhaled nitric oxide): Conditionally recommended in persistent allergic asthma ≥5 years to guide ICS therapy adjustments

8. Key Evidence from PubMed

StudyKey Finding
Murphy KR & Solis J, J Fam Pract 2021 (PMID 34432620)NAEPP 2020 focused updates — key changes for primary care including SMART therapy endorsement and LAMA addition
Laitano R et al., Expert Opin Pharmacother 2024 (PMID 38864834)Umbrella review: ICS/LABA/LAMA triple therapy significantly reduces exacerbation risk in asthma
Zhou XJ et al., Chin Med J 2021 (PMID 34784306)Salmeterol/fluticasone superior to montelukast ± fluticasone in children and adolescents
Sin DD et al. (cited in Family Medicine 9e)ICS reduced exacerbations 55% vs. placebo/SABA; LABAs reduced exacerbations 26%; ICS > LTRA as first-line monotherapy

9. Non-Pharmacological Management (Integral to Every Step)

  • Environmental control: Allergen avoidance (dust mites, cockroach, pet dander, mold, tobacco smoke)
  • Eliminating passive smoke exposure is the single most important environmental intervention
  • Patient education: Self-monitoring using peak-flow meter; written asthma action plan (MAP: Management, Action, Prevention)
  • Trigger identification: Exercise, ASA/NSAIDs (Samter's triad), occupational exposures, GERD, rhinitis treatment
  • Controlling allergic rhinitis is often necessary to improve asthma control
  • Weight management, smoking cessation

Summary: Evidence Hierarchy of Controllers

Drug ClassRankEvidence Base
ICSFirst-line controllerLevel A; reduces exacerbations 55%; superior to LTRA
ICS-LABAPreferred step-upLevel A; SMART therapy endorsed NAEPP 2020
LAMA (tiotropium)Add-on step 3–5Level A for triple therapy in NAEPP 2020
LTRA (montelukast)AlternativeLevel A; inferior to ICS; FDA boxed warning
Anti-IgE / biologicsSteps 5–6Level A for specific endotypes
TheophyllineAlternative add-onLevel A but narrow window; not preferred
ImmunotherapyAdjunct steps 2–4Conditional recommendation; comparable to ICS

Primary References:
  • National Asthma Education and Prevention Program (NAEPP) — Expert Panel Report 3, NHLBI 2007
  • NAEPP — 2020 Focused Updates to the Asthma Management Guidelines, December 2020
  • Textbook of Family Medicine, 9th ed. (Rakel) — Chapters 16 & 19
  • The Harriet Lane Handbook, 23rd ed. (Johns Hopkins) — Chapter 25
  • Murray & Nadel's Textbook of Respiratory Medicine, 2-Volume — Chapter 35
  • Murphy KR & Solis J. NAEPP 2020 Guidelines: What's Important for Primary Care. J Fam Pract. 2021. PMID 34432620
  • Laitano R et al. Asthma management with triple ICS/LABA/LAMA. Expert Opin Pharmacother. 2024. PMID 38864834The above is a comprehensive, evidence-based overview of asthma pharmacotherapeutics. Here is a quick orientation to the sections:
What's covered:
  1. Pathophysiology — inflammatory basis (mast cells, eosinophils, T-cells)
  2. Severity classification — NAEPP 4-tier system (Intermittent → Mild/Moderate/Severe Persistent) with FEV₁ cut-offs
  3. All drug classes — mechanisms, examples, doses, key warnings (LABA Black Box, montelukast FDA warning, theophylline monitoring)
  4. ICS dose equivalency table — beclomethasone, budesonide, fluticasone, mometasone (low/medium/high)
  5. Stepwise algorithm — NAEPP 2020, ages 0–4, 5–11, ≥12 years, with visual diagrams directly from textbooks
  6. SMART therapy — ICS-formoterol as both maintenance and rescue (Steps 3–4)
  7. Triple therapy — ICS+LABA+LAMA for severe persistent asthma
  8. Biologics — omalizumab, mepolizumab, benralizumab, dupilumab for Steps 5–6
  9. Acute exacerbation management — SABA + ipratropium + systemic steroids + magnesium sulfate
  10. Special populations — pregnancy, exercise-induced bronchospasm
  11. PubMed-cited recent evidence for triple therapy and pediatric LABA+ICS

Treatment algorithm in flow chart

Checking Date & Time
I'll create a detailed asthma treatment algorithm flowchart as a downloadable image/PDF. Let me build it using Python with matplotlib.
Running Command

ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace not found"

Running Command

mkdir -p /home/daytona/workspace/asthma-flowchart && echo "done"

Writing File

~/asthma-flowchart/asthma_flowchart.py

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.patches import FancyBboxPatch, FancyArrowPatch
import matplotlib.patheffects as pe
import numpy as np

fig = plt.figure(figsize=(28, 48))
ax = fig.add_axes([0, 0, 1, 1])
ax.set_xlim(0, 28)
ax.set_ylim(0, 48)
ax.axis('off')
fig.patch.set_facecolor('#F8F9FA')

# ── colour palette ──────────────────────────────────────────────────────────
C_TITLE   = '#1A237E'   # deep navy
C_DIAG    = '#283593'   # dark blue  – diagnosis / assessment boxes
C_SEVER   = '#1565C0'   # mid blue   – severity classification
C_STEP1   = '#2E7D32'   # dark green – step 1
C_STEP2   = '#388E3C'
C_STEP3   = '#F57F17'   # amber      – step 3
C_STEP4   = '#E65100'   # deep orange– step 4
C_STEP5   = '#B71C1C'   # dark red   – step 5/6
C_ACUTE   = '#880E4F'   # deep purple– acute exacerbation
C_CTRL    = '#00695C'   # teal       – control assessment
C_ARROW   = '#37474F'
C_WHITE   = 'white'
C_LIGHT   = '#E3F2FD'
C_WARN    = '#FFF9C4'
C_BIO     = '#4A148C'   # violet     – biologics

def box(ax, x, y, w, h, text, facecolor, textcolor='white', fontsize=9,
        bold=False, radius=0.3, alpha=1.0, style='round,pad=0.1',
        ha='center', va='center', wrap=True, border=None):
    bp = FancyBboxPatch((x - w/2, y - h/2), w, h,
                        boxstyle=f"round,pad=0.15",
                        linewidth=1.4,
                        edgecolor=border if border else facecolor,
                        facecolor=facecolor, alpha=alpha, zorder=3)
    ax.add_patch(bp)
    weight = 'bold' if bold else 'normal'
    ax.text(x, y, text, ha=ha, va=va, fontsize=fontsize,
            color=textcolor, fontweight=weight,
            wrap=True, zorder=4,
            multialignment='center',
            linespacing=1.35)

def diamond(ax, x, y, w, h, text, facecolor, textcolor='white', fontsize=8.5):
    dx, dy = w/2, h/2
    xs = [x, x+dx, x, x-dx, x]
    ys = [y+dy, y, y-dy, y, y+dy]
    poly = plt.Polygon(list(zip(xs, ys)), closed=True,
                       facecolor=facecolor, edgecolor=facecolor,
                       linewidth=1.4, zorder=3)
    ax.add_patch(poly)
    ax.text(x, y, text, ha='center', va='center', fontsize=fontsize,
            color=textcolor, fontweight='bold', zorder=4, multialignment='center')

def arrow(ax, x1, y1, x2, y2, label='', color=C_ARROW, lw=2.0):
    ax.annotate('', xy=(x2, y2), xytext=(x1, y1),
                arrowprops=dict(arrowstyle='->', color=color,
                                lw=lw, connectionstyle='arc3,rad=0.0'),
                zorder=5)
    if label:
        mx, my = (x1+x2)/2, (y1+y2)/2
        ax.text(mx+0.15, my, label, fontsize=7.5, color=color, va='center')

def harrow(ax, x1, y1, x2, y2, label='', color=C_ARROW, lw=1.8):
    """Horizontal or bent arrow."""
    ax.annotate('', xy=(x2, y2), xytext=(x1, y1),
                arrowprops=dict(arrowstyle='->', color=color, lw=lw,
                                connectionstyle='angle,angleA=0,angleB=90'),
                zorder=5)
    if label:
        ax.text((x1+x2)/2, (y1+y2)/2+0.15, label, fontsize=7.5,
                color=color, ha='center')

# ════════════════════════════════════════════════════════════════════════════
# TITLE
# ════════════════════════════════════════════════════════════════════════════
ax.add_patch(FancyBboxPatch((0.3, 46.2), 27.4, 1.5,
             boxstyle="round,pad=0.15", facecolor=C_TITLE,
             edgecolor=C_TITLE, linewidth=2, zorder=3))
ax.text(14, 47.15, 'ASTHMA PHARMACOTHERAPY — TREATMENT ALGORITHM',
        ha='center', va='center', fontsize=16, color='white',
        fontweight='bold', zorder=4)
ax.text(14, 46.65,
        'Based on NAEPP 2020 Focused Updates | NAEPP EPR-3 | Harriet Lane Handbook 23rd ed. | Textbook of Family Medicine 9th ed.',
        ha='center', va='center', fontsize=8.5, color='#BBDEFB', zorder=4)

# ════════════════════════════════════════════════════════════════════════════
# BLOCK 1 — PATIENT PRESENTATION
# ════════════════════════════════════════════════════════════════════════════
box(ax, 14, 45.3, 9, 0.75,
    'PATIENT PRESENTS WITH SUSPECTED ASTHMA',
    C_DIAG, fontsize=10, bold=True)
arrow(ax, 14, 44.92, 14, 44.3)

# ════════════════════════════════════════════════════════════════════════════
# BLOCK 2 — DIAGNOSIS
# ════════════════════════════════════════════════════════════════════════════
box(ax, 14, 43.85, 18, 0.8,
    'DIAGNOSIS\n'
    'History (wheeze, cough, dyspnoea, chest tightness) + Spirometry (FEV₁/FVC <0.70, ≥12% reversibility)\n'
    'R/O: COPD, CHF, foreign body, GERD, vocal cord dysfunction',
    C_DIAG, fontsize=8.2, bold=False)

arrow(ax, 14, 43.45, 14, 42.85)

# ════════════════════════════════════════════════════════════════════════════
# BLOCK 3 — SEVERITY CLASSIFICATION (diamond + table)
# ════════════════════════════════════════════════════════════════════════════
box(ax, 14, 42.55, 18, 0.7,
    'CLASSIFY SEVERITY (before starting treatment) — by Impairment & Risk',
    C_SEVER, fontsize=9, bold=True)

# four severity boxes side by side
sev_data = [
    ('INTERMITTENT\n'
     '≤2 days/wk symptoms\n'
     'Nighttime ≤2×/month\n'
     'SABA ≤2 d/wk\n'
     'FEV₁ >80% pred\n'
     '→ Start: Step 1', C_STEP1, 4.0),
    ('MILD PERSISTENT\n'
     '>2 d/wk but not daily\n'
     'Nighttime 3–4×/month\n'
     'Minor activity limit\n'
     'FEV₁ >80% pred\n'
     '→ Start: Step 2', C_STEP2, 10.0),
    ('MODERATE PERSISTENT\n'
     'Daily symptoms\n'
     'Nighttime >1×/wk\n'
     'Some activity limit\n'
     'FEV₁ 60–80% pred\n'
     '→ Start: Step 3', C_STEP3, '#5D4037', 16.0),
    ('SEVERE PERSISTENT\n'
     'Continuous symptoms\n'
     'Nighttime often 7×/wk\n'
     'Extreme limitation\n'
     'FEV₁ <60% pred\n'
     '→ Start: Step 4–5', C_STEP5, 22.0),
]

# 3-element tuples for first three, 2-element for last → fix
sev_fixed = [
    ('INTERMITTENT\n≤2 days/wk symptoms\nNighttime ≤2×/month\nSABA ≤2 d/wk\nFEV₁ >80% pred\n→ Start: Step 1',
     C_STEP1, 'white', 4.0),
    ('MILD PERSISTENT\n>2 d/wk but not daily\nNighttime 3–4×/month\nMinor activity limit\nFEV₁ >80% pred\n→ Start: Step 2',
     C_STEP2, 'white', 10.0),
    ('MODERATE PERSISTENT\nDaily symptoms\nNighttime >1×/wk\nSome activity limit\nFEV₁ 60–80% pred\n→ Start: Step 3',
     C_STEP3, '#1A0000', 16.0),
    ('SEVERE PERSISTENT\nContinuous symptoms\nNighttime often 7×/wk\nExtreme limitation\nFEV₁ <60% pred\n→ Start: Step 4–5',
     C_STEP5, 'white', 22.0),
]

for txt, fc, tc, xpos in sev_fixed:
    box(ax, xpos, 41.3, 5.2, 1.8, txt, fc, textcolor=tc, fontsize=7.6)

# arrows from severity bar to boxes
for xpos in [4.0, 10.0, 16.0, 22.0]:
    arrow(ax, xpos, 42.2, xpos, 42.2, color=C_ARROW, lw=0)
    ax.annotate('', xy=(xpos, 42.22), xytext=(14, 42.2),
                arrowprops=dict(arrowstyle='->', color=C_ARROW, lw=1.6,
                                connectionstyle='arc3,rad=0.0'), zorder=5)

# ── central down arrow from severity boxes to stepwise ───────────────────
for xpos in [4.0, 10.0, 16.0, 22.0]:
    arrow(ax, xpos, 40.4, xpos, 39.9, color=C_ARROW)
# converge
ax.annotate('', xy=(14, 39.55), xytext=(14, 39.9),
            arrowprops=dict(arrowstyle='->', color=C_ARROW, lw=2),
            zorder=5)
ax.plot([4.0, 22.0], [39.9, 39.9], color=C_ARROW, lw=1.8, zorder=5)
ax.plot([4.0, 4.0],  [40.4, 39.9], color=C_ARROW, lw=1.8, zorder=5)
ax.plot([22.0, 22.0],[40.4, 39.9], color=C_ARROW, lw=1.8, zorder=5)

# ════════════════════════════════════════════════════════════════════════════
# STEPWISE SECTION HEADER
# ════════════════════════════════════════════════════════════════════════════
box(ax, 14, 39.25, 20, 0.6,
    'STEPWISE PHARMACOTHERAPY (Ages ≥12 years — Adults & Adolescents)',
    C_TITLE, fontsize=10, bold=True)

# ════════════════════════════════════════════════════════════════════════════
# STEPS 1–6
# ════════════════════════════════════════════════════════════════════════════

steps = [
    # (step_label, preferred_text, alternative_text, y_centre, pref_color, alt_color)
    (
        'STEP 1\nIntermittent',
        '● PRN SABA (albuterol)\n'
        '● PRN concomitant ICS + SABA▲\n'
        '  (new NAEPP 2020 option)',
        '— No daily controller needed —',
        38.1, C_STEP1, '#A5D6A7'
    ),
    (
        'STEP 2\nMild Persistent',
        '● Daily LOW-DOSE ICS + PRN SABA\n'
        '  (e.g. fluticasone 88–264 μg/d)',
        '● Daily LTRA* (montelukast⚠) + PRN SABA\n'
        '● Cromolyn* / Nedocromil* / Theophylline* + PRN SABA\n'
        '  [*Limited availability; ⚠ FDA Black Box Warning]',
        36.3, C_STEP2, '#C8E6C9'
    ),
    (
        'STEP 3\nModerate',
        '● Daily + PRN LOW-DOSE ICS–formoterol▲\n'
        '  (SMART regimen; max 12 puffs/day)',
        '● Daily MEDIUM-DOSE ICS + PRN SABA\n'
        '● Daily low-dose ICS–LABA + PRN SABA\n'
        '● Daily low-dose ICS + LAMA▲ + PRN SABA\n'
        '● Daily low-dose ICS + LTRA* or Theophylline* + PRN SABA',
        34.2, C_STEP3, '#FFF9C4'
    ),
    (
        'STEP 4\nModerate–Severe',
        '● Daily + PRN MEDIUM-DOSE ICS–formoterol▲\n'
        '  (SMART; max 12 puffs/day)',
        '● Daily medium-dose ICS–LABA + PRN SABA\n'
        '● Daily medium-dose ICS + LAMA▲ + PRN SABA\n'
        '● Daily medium-dose ICS + LTRA* + PRN SABA\n'
        '● Daily medium-dose ICS + Zileuton* or Theophylline* + PRN SABA',
        31.9, C_STEP4, '#FFE0B2'
    ),
    (
        'STEP 5\nSevere Persistent',
        '● Daily MEDIUM–HIGH dose ICS–LABA\n'
        '  + LAMA (triple therapy) + PRN SABA▲\n'
        '  Consider BIOLOGICS:',
        '● Daily medium–high dose ICS–LABA\n'
        '● Daily HIGH-DOSE ICS + LTRA* + PRN SABA\n'
        'Biologics: anti-IgE (Omalizumab) | anti-IL5 (Mepolizumab,\n'
        'Reslizumab) | anti-IL5Rα (Benralizumab) | anti-IL4/13 (Dupilumab)',
        29.4, C_STEP5, '#FFCDD2'
    ),
    (
        'STEP 6\nVery Severe',
        '● Daily HIGH-DOSE ICS–LABA\n'
        '  + Oral systemic corticosteroid (prednisone)\n'
        '  + PRN SABA\n'
        '  Continue biologics if applicable',
        '● High-dose ICS + LTRA* + oral CS + PRN SABA\n'
        '● High-dose ICS + Theophylline* + oral CS + PRN SABA\n'
        '  Refer to Pulmonologist / Allergist',
        27.0, '#7B1FA2', '#E1BEE7'
    ),
]

for step_lbl, pref, alt, yc, pc, ac in steps:
    box_h = 1.55
    # step label (left)
    box(ax, 2.0, yc, 2.8, box_h, step_lbl, pc, fontsize=8.5, bold=True)
    # preferred (centre)
    box(ax, 10.5, yc, 10.5, box_h, '✔ PREFERRED\n' + pref,
        C_LIGHT, textcolor='#0D47A1', fontsize=7.8,
        border=pc)
    # alternative (right)
    box(ax, 22.5, yc, 9.5, box_h, '◈ ALTERNATIVE\n' + alt,
        C_WARN, textcolor='#4E342E', fontsize=7.4,
        border='#FFA000')
    # connect step→preferred, step→alternative
    arrow(ax, 3.4, yc, 5.25, yc, color=pc, lw=1.8)
    arrow(ax, 15.75, yc, 17.75, yc, color='#78909C', lw=1.4)

# down arrows between steps
step_ycs = [s[3] for s in steps]
for i in range(len(step_ycs)-1):
    y_top = step_ycs[i] - 0.78
    y_bot = step_ycs[i+1] + 0.78
    arrow(ax, 2.0, y_top, 2.0, y_bot, color='#263238', lw=2.2)
    ax.text(2.75, (y_top+y_bot)/2, 'Step\nUp', fontsize=7,
            color='#263238', ha='left', va='center', fontweight='bold')

# up arrows (step down)
for i in range(1, len(step_ycs)):
    y_bot = step_ycs[i] + 0.78
    y_top = step_ycs[i-1] - 0.78
    ax.annotate('', xy=(1.1, y_top), xytext=(1.1, y_bot),
                arrowprops=dict(arrowstyle='->', color='#2E7D32',
                                lw=1.5), zorder=5)

ax.text(0.55, (step_ycs[0]+step_ycs[-1])/2, 'Step\nDown\n(if ≥3 mo\ncontrolled)',
        fontsize=6.8, color='#2E7D32', ha='center', va='center',
        fontweight='bold', rotation=90)

# ════════════════════════════════════════════════════════════════════════════
# CONTROL ASSESSMENT BOX (between steps and acute)
# ════════════════════════════════════════════════════════════════════════════
arrow(ax, 14, 26.22, 14, 25.55)

box(ax, 14, 25.1, 22, 0.85,
    'ASSESS CONTROL AT EVERY VISIT  ▸  Check: adherence | inhaler technique | environmental triggers | comorbidities (rhinitis, GERD, obesity, OSA)\n'
    'Step UP if needed (reassess in 2–6 weeks)  |  Step DOWN if well-controlled ≥3 consecutive months  |  Consult specialist if Step 4+ required',
    C_CTRL, fontsize=8, bold=False)

# ════════════════════════════════════════════════════════════════════════════
# QUICK-RELIEF / RESCUE (below stepwise)
# ════════════════════════════════════════════════════════════════════════════
arrow(ax, 14, 24.67, 14, 24.05)

box(ax, 14, 23.65, 22, 0.75,
    'QUICK-RELIEF (all steps): SABA PRN  ▸  Up to 3 treatments q20 min for acute symptoms\n'
    'SABA use >2 days/week for relief (not EIB prevention) = inadequate control → Step Up',
    '#1565C0', fontsize=8.2)

# ════════════════════════════════════════════════════════════════════════════
# ACUTE EXACERBATION PANEL
# ════════════════════════════════════════════════════════════════════════════
arrow(ax, 14, 23.27, 14, 22.65)

box(ax, 14, 22.35, 26, 0.65,
    'ACUTE EXACERBATION MANAGEMENT  (Home → ED → Hospital)',
    C_ACUTE, fontsize=10, bold=True)

acute_steps = [
    ('① MILD–MODERATE\n(Home / Clinic)',
     '● SABA 2–4 puffs MDI q20 min × 3\n'
     '● Short-course oral prednisone\n'
     '  (0.5–1 mg/kg/d, max 40 mg × 5–7 d)\n'
     '● Continue controller medications\n'
     '● Review action plan',
     5.0, 21.1),
    ('② MODERATE–SEVERE\n(Emergency Dept)',
     '● Nebulised albuterol q20 min × 3\n'
     '● Add ipratropium (SOR: A)\n'
     '● IV/oral methylprednisolone\n'
     '● Supplemental O₂ (SpO₂ ≥92%)\n'
     '● Peak flow / spirometry monitoring',
     12.5, 21.1),
    ('③ SEVERE / REFRACTORY\n(ICU / Admit)',
     '● Continuous SABA nebulisation\n'
     '● IV magnesium sulfate (2 g over 20 min)\n'
     '● Heliox-driven albuterol (if available)\n'
     '● IV corticosteroids (high-dose)\n'
     '● Consider intubation / mechanical ventilation\n'
     '● NO aminophylline in acute setting',
     20.5, 21.1),
    ('④ RESPONSE?\nDischarge Planning',
     '● Good response: discharge with\n'
     '  3–5 day oral prednisone burst\n'
     '  + controller step review\n'
     '  + written action plan\n'
     '● Poor response: admit / ICU',
     26.5, 21.1),
]

for title, content, xpos, ypos in acute_steps:
    box(ax, xpos, ypos, 6.2, 2.0,
        title + '\n' + content,
        C_ACUTE, fontsize=7.4, alpha=0.88,
        border='#AD1457')

# ════════════════════════════════════════════════════════════════════════════
# BIOLOGICS REFERENCE BOX
# ════════════════════════════════════════════════════════════════════════════
arrow(ax, 14, 20.1, 14, 19.5)

box(ax, 14, 19.05, 26, 0.8,
    'BIOLOGICS (Steps 5–6)  |  For severe persistent allergic / eosinophilic asthma',
    C_BIO, fontsize=9.5, bold=True)

bio_data = [
    ('OMALIZUMAB\n(anti-IgE)\n'
     'Mechanism: Binds free IgE\n'
     '↓98–99% circulating IgE\n'
     'Dose: SC q2–4wk\n'
     'Age: ≥6 years\n'
     'Indication: Allergic asthma',
     4.0, '#7B1FA2'),
    ('MEPOLIZUMAB\nRESLIZUMAB\n(anti-IL-5)\n'
     'Mechanism: Block IL-5\n'
     '↓ eosinophil survival\n'
     'Indication: Eosinophilic\n'
     'severe asthma\n'
     'Age: ≥6 years (mepo)',
     9.5, '#512DA8'),
    ('BENRALIZUMAB\n(anti-IL-5Rα)\n'
     'Mechanism: Binds IL-5Rα\n'
     'Direct eosinophil depletion\n'
     'via ADCC\n'
     'Indication: Eosinophilic\n'
     'severe asthma ≥12 yr',
     15.0, '#4527A0'),
    ('DUPILUMAB\n(anti-IL-4Rα)\n'
     'Mechanism: Blocks shared\n'
     'IL-4/IL-13 receptor\n'
     'Indication: Moderate–severe\n'
     'uncontrolled, T2 asthma\n'
     'Age: ≥6 years',
     20.5, '#311B92'),
    ('TEZEPELUMAB\n(anti-TSLP)\n'
     'Mechanism: Blocks TSLP\n'
     '(upstream alarmin)\n'
     'Indication: Severe uncontrolled\n'
     'regardless of phenotype\n'
     'Age: ≥12 years',
     26.0, '#1A237E'),
]

for bio_txt, xpos, fc in bio_data:
    box(ax, xpos, 17.85, 5.2, 2.1, bio_txt, fc, fontsize=7.5, alpha=0.92)

# ════════════════════════════════════════════════════════════════════════════
# ICS DOSE TABLE
# ════════════════════════════════════════════════════════════════════════════
arrow(ax, 14, 16.8, 14, 16.25)

box(ax, 14, 15.95, 26, 0.6,
    'ICS COMPARATIVE DAILY DOSE TABLE (Adults ≥12 years)  — NAEPP EPR-3 / Family Medicine 9e, Table 16-4',
    '#0D47A1', fontsize=9, bold=True)

dose_headers = ['Drug', 'Formulation', 'Low Dose', 'Medium Dose', 'High Dose']
dose_data = [
    ['Beclomethasone HFA', '40 or 80 μg/puff', '80–240 μg', '>240–480 μg', '>480 μg'],
    ['Budesonide DPI',     '90/180/200 μg/inh','180–600 μg','>600–1200 μg','>1200 μg'],
    ['Fluticasone HFA/MDI','44/110/220 μg/puff','88–264 μg', '>264–440 μg', '>440 μg'],
    ['Fluticasone DPI',    '50/100/250 μg/inh','100–300 μg','>300–500 μg', '>500 μg'],
    ['Mometasone DPI',     '200 μg/inh',        '200 μg',    '400 μg',       '>400 μg'],
    ['Flunisolide',        '250 μg/puff',        '500–1000 μg','>1000–2000 μg','>2000 μg'],
]

col_xs = [3.2, 8.0, 13.0, 18.5, 23.5]
col_ws = [4.8, 4.8, 4.8, 4.8, 4.8]

# header row
y_tbl = 15.35
for i, (hdr, cx) in enumerate(zip(dose_headers, col_xs)):
    box(ax, cx, y_tbl, col_ws[i]-0.15, 0.45, hdr, '#0D47A1',
        fontsize=8, bold=True)

for row_i, row in enumerate(dose_data):
    y_row = y_tbl - 0.48*(row_i+1)
    for col_i, (val, cx) in enumerate(zip(row, col_xs)):
        fc = '#E3F2FD' if row_i % 2 == 0 else 'white'
        box(ax, cx, y_row, col_ws[col_i]-0.15, 0.42, val,
            fc, textcolor='#1A237E', fontsize=7.5, border='#90CAF9')

# ════════════════════════════════════════════════════════════════════════════
# SPECIAL POPULATIONS & KEY WARNINGS
# ════════════════════════════════════════════════════════════════════════════
y_sp = 12.1
box(ax, 14, y_sp + 0.4, 26, 0.5,
    'SPECIAL POPULATIONS & KEY WARNINGS', '#37474F', fontsize=9.5, bold=True)

sp_boxes = [
    ('PREGNANCY\n'
     '● Albuterol (SABA) and ICS: Safe\n'
     '● Monitor PEFR ≥80% personal best\n'
     '● Uncontrolled asthma → ↑ preterm\n'
     '  labour, LBW, preeclampsia\n'
     '● Treat same as non-pregnant',
     4.0, '#1565C0'),
    ('PAEDIATRICS (0–4 yrs)\n'
     '● Step 1: PRN SABA ± short-course ICS at RTI\n'
     '● Step 2: Low-dose ICS\n'
     '● Steps 4–6: Medium→high ICS+LABA\n'
     '● Montelukast: FDA Boxed Warning\n'
     '  (neuropsychiatric events) ⚠',
     10.5, '#1B5E20'),
    ('EIB (Exercise-Induced)\n'
     '● SABA 15–30 min pre-exercise\n'
     '● Regular ICS reduces EIB frequency\n'
     '● ICS-formoterol covers rescue + EIB\n'
     '● Warm-up before exercise helps',
     17.0, '#E65100'),
    ('KEY DRUG WARNINGS\n'
     '● LABA alone: FDA BLACK BOX (↑ death)\n'
     '● Montelukast: Neuropsychiatric ⚠\n'
     '● Theophylline: Narrow window;\n'
     '  NOT for acute ED use\n'
     '● Oral CS: Taper if prolonged use',
     23.5, '#B71C1C'),
]

for sp_txt, xpos, fc in sp_boxes:
    box(ax, xpos, y_sp - 0.55, 5.8, 1.8, sp_txt, fc, fontsize=7.5, alpha=0.9)

# ════════════════════════════════════════════════════════════════════════════
# MONITORING BOX
# ════════════════════════════════════════════════════════════════════════════
y_mon = 9.35
box(ax, 14, y_mon, 26, 0.5,
    'MONITORING & FOLLOW-UP', '#004D40', fontsize=9.5, bold=True)

mon_txt = ('FEV₁ (spirometry): Gold standard for obstruction severity  |  '
           'PEFR: Portable monitoring (≥80% personal best = well controlled)  |  '
           'FeNO: Conditionally recommended for ICS titration in allergic asthma ≥5 yrs\n'
           'Reassess in 2–6 weeks after any step change  |  '
           'Asthma control: Well-controlled (Step Down possible) | Not well-controlled (Step Up) | Very poorly controlled (Step Up 1–2 steps or oral CS)\n'
           'Written Asthma Action Plan (MAP: Management | Action | Prevention)  |  '
           'Inhaler technique check at every visit  |  Allergen avoidance counselling')
box(ax, 14, y_mon - 0.75, 26, 1.2, mon_txt,
    '#E0F2F1', textcolor='#004D40', fontsize=8.0, border='#004D40')

# ════════════════════════════════════════════════════════════════════════════
# REFERENCES FOOTER
# ════════════════════════════════════════════════════════════════════════════
y_ref = 7.15
box(ax, 14, y_ref, 26, 0.4,
    'REFERENCES', '#263238', fontsize=9, bold=True)

refs = [
    '1. National Asthma Education and Prevention Program (NAEPP). Expert Panel Report 3 (EPR-3). NHLBI, 2007.',
    '2. NAEPP. 2020 Focused Updates to the Asthma Management Guidelines. National Heart, Lung and Blood Institute, December 2020.',
    '3. The Harriet Lane Handbook, 23rd ed. (Johns Hopkins Hospital). Elsevier, 2021. — Chapter 25, Figures 25.4–25.8.',
    '4. Textbook of Family Medicine, 9th ed. (Rakel RE). Elsevier Saunders, 2015. — Chapters 16 & 19, Tables 16-3, 16-4.',
    '5. Murray & Nadel\'s Textbook of Respiratory Medicine, 2-Volume, 7th ed. Elsevier, 2022. — Chapter 35.',
    '6. Murphy KR & Solis J. NAEPP 2020 Guidelines: What\'s Important for Primary Care. J Fam Pract. 2021. PMID: 34432620.',
    '7. Laitano R et al. Asthma management with triple ICS/LABA/LAMA. Expert Opin Pharmacother. 2024. PMID: 38864834.',
    '8. GINA. Global Strategy for Asthma Management and Prevention. 2023 Update. ginasthma.org.',
]

ref_y_start = y_ref - 0.45
for i, ref in enumerate(refs):
    ax.text(1.0, ref_y_start - i * 0.43, ref, fontsize=7.2,
            color='#263238', va='top', ha='left')

# ════════════════════════════════════════════════════════════════════════════
# LEGEND / ABBREVIATIONS
# ════════════════════════════════════════════════════════════════════════════
legend_txt = ('Abbreviations: ICS = Inhaled Corticosteroid  |  LABA = Long-Acting β₂-Agonist  |  LAMA = Long-Acting Muscarinic Antagonist  |  '
              'SABA = Short-Acting β₂-Agonist  |  LTRA = Leukotriene Receptor Antagonist\n'
              'SMART = Single Maintenance And Reliever Therapy  |  EIB = Exercise-Induced Bronchoconstriction  |  '
              'PRN = as needed  |  OCS = Oral Corticosteroid  |  FeNO = Fractional exhaled Nitric Oxide\n'
              '▲ = New/updated recommendation in NAEPP 2020  |  * = Limited availability / increased monitoring required  |  '
              '⚠ = FDA Boxed Warning  |  SOR = Strength of Recommendation')
box(ax, 14, 3.55, 26, 0.95, legend_txt,
    '#ECEFF1', textcolor='#263238', fontsize=7.5, border='#90A4AE')

# ════════════════════════════════════════════════════════════════════════════
# COLOUR LEGEND
# ════════════════════════════════════════════════════════════════════════════
legend_items = [
    (C_STEP1, 'Step 1'),
    (C_STEP2, 'Step 2'),
    (C_STEP3, 'Step 3'),
    (C_STEP4, 'Step 4'),
    (C_STEP5, 'Step 5'),
    ('#7B1FA2', 'Step 6'),
    (C_ACUTE, 'Acute Exacerbation'),
    (C_BIO,   'Biologics'),
    (C_CTRL,  'Control Assessment'),
]
for i, (fc, lbl) in enumerate(legend_items):
    xp = 1.3 + i * 3.0
    ax.add_patch(FancyBboxPatch((xp - 0.35, 2.7), 0.7, 0.35,
                                boxstyle="round,pad=0.05",
                                facecolor=fc, edgecolor='none', zorder=3))
    ax.text(xp + 0.45, 2.875, lbl, fontsize=7, color='#263238',
            va='center', ha='left')

ax.text(14, 2.35, 'Colour Legend', ha='center', fontsize=7.8,
        color='#37474F', fontweight='bold')

plt.tight_layout(pad=0)
plt.savefig('/home/daytona/workspace/asthma-flowchart/asthma_treatment_algorithm.png',
            dpi=180, bbox_inches='tight', facecolor=fig.get_facecolor())
plt.savefig('/home/daytona/workspace/asthma-flowchart/asthma_treatment_algorithm_hires.png',
            dpi=300, bbox_inches='tight', facecolor=fig.get_facecolor())
print("Saved successfully.")
You've run out of free credits. Sign up for a free account to continue using Orris.
This is a shared conversation. Sign in to Orris to start your own chat.