Why the atherosclerosis occur only in heart
why does atherosclerosis affect all arteries not just heart

| Artery | Disease Caused |
|---|---|
| Coronary arteries | Ischemic heart disease, myocardial infarction |
| Cerebral / carotid arteries | Stroke, TIA |
| Aorta | Aortic aneurysm |
| Renal arteries | Renovascular hypertension, renal failure |
| Mesenteric arteries | Intestinal ischemia (mesenteric ischemia) |
| Peripheral (femoral, popliteal, iliac) arteries | Peripheral artery disease (PAD), gangrene |
| Non-modifiable | Modifiable |
|---|---|
| Age, male sex | Hyperlipidemia |
| Family history / genetics | Hypertension |
| Cigarette smoking | |
| Diabetes | |
| Chronic inflammation |
Management and treatment for cystic fibrosis
"cystic fibrosis"[MeSH Terms] AND "therapeutics"[MeSH Terms]
cystic fibrosis management treatment guidelines 2024 2025 CFTR modulators
https://www.uspharmacist.com/article/pharmacologic-managemen…
| Drug | Class | Mechanism | Mutation Targeted |
|---|---|---|---|
| Ivacaftor (Kalydeco) | Potentiator | Augments CFTR channel gating | Gating mutations (G551D, 38+ others) ~4% of patients |
| Lumacaftor + Ivacaftor (Orkambi) | Corrector + Potentiator | Corrects protein folding + augments gating | F508del homozygous |
| Tezacaftor + Ivacaftor (Symdeko) | Corrector + Potentiator | Better side effect profile than lumacaftor | F508del homozygous / heterozygous |
| Elexacaftor + Tezacaftor + Ivacaftor (Trikafta/ETI) | Triple therapy | Most potent; improves FEV1 by 10-14% | F508del (homo or hetero) - covers ~90% of patients |
| Vanzacaftor + Tezacaftor + Deutivacaftor (Alyftrek) | Triple therapy | Once-daily; non-inferior to ETI | F508del or other responsive mutations; FDA approved 2024 |
| Agent | Dose | Mechanism |
|---|---|---|
| Dornase alfa (Pulmozyme) | 2.5 mg once daily inhaled | Cleaves extracellular DNA polymers in mucus |
| Hypertonic saline 7% | 4 mL nebulized twice daily | Osmotic rehydration of airway surface |
| N-acetylcysteine | 10% solution, 10-30 mL q6h | Breaks disulfide bonds in mucus |
| Mannitol | Inhaled | Osmotic expectorant |
Note: The SIMPLIFY trial found that in patients on ETI with mild/no lung disease, discontinuing hypertonic saline or dornase alfa did not significantly worsen lung function at 6 weeks - suggesting mucolytic burden may be reducible in stable ETI-treated patients - US Pharmacist 2024.
| Domain | Key Interventions |
|---|---|
| CFTR modulation | Elexacaftor/tezacaftor/ivacaftor (Trikafta), ivacaftor, vanzacaftor (Alyftrek - 2024) |
| Airway clearance | Chest PT, oscillating vests, dornase alfa, hypertonic saline |
| Infection control | Inhaled tobramycin/aztreonam, IV antibiotics for exacerbations, azithromycin |
| Anti-inflammation | Azithromycin, high-dose ibuprofen (children), steroids for ABPA |
| Nutrition | PERT, fat-soluble vitamins, high-calorie diet, salt supplements |
| GI management | Bowel regimen, DIOS treatment |
| Endocrine | Annual glucose testing, insulin for CFRD |
| Lung transplant | End-stage disease |
2024 update: Vanzacaftor-tezacaftor-deutivacaftor (Alyftrek) received FDA approval in 2024 as a once-daily triple CFTR modulator, showing non-inferiority to Trikafta in a phase 3 trial of >1000 patients. The 2024 CF Year in Review also highlights new guidelines on CFTR modulator use in pregnancy and treatment burden simplification in the ETI era.
Create a CF management checklist or quick reference PDF for patients
ls -la /tmp/workspace/ 2>/dev/null || echo "workspace does not exist yet"
mkdir -p /tmp/workspace/cf-checklist
~/cf-checklist/build_cf_pdf.py
"""
Cystic Fibrosis Management Checklist - Patient Quick Reference PDF
Built with ReportLab
"""
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm, cm
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT
from reportlab.platypus import Flowable
# ── Colour palette ────────────────────────────────────────────────────────────
CF_BLUE = colors.HexColor("#1A5F9E") # deep blue header
CF_LIGHT_BLUE = colors.HexColor("#D6E8F8") # row / section bg
CF_TEAL = colors.HexColor("#0B8A8F") # sub-heading accent
CF_GREEN = colors.HexColor("#2E7D32") # checkmark / positive
CF_ORANGE = colors.HexColor("#E65100") # warning
CF_GREY = colors.HexColor("#F5F5F5") # alternating row
CF_DARK = colors.HexColor("#212121") # body text
WHITE = colors.white
OUTPUT = "/tmp/workspace/cf-checklist/CF_Management_Checklist.pdf"
# ── Document setup ─────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=18*mm, rightMargin=18*mm,
topMargin=16*mm, bottomMargin=16*mm,
title="Cystic Fibrosis Management Checklist",
author="Orris Medical Reference",
subject="Patient Quick Reference – CF Management",
)
W = A4[0] - 36*mm # usable width
# ── Styles ─────────────────────────────────────────────────────────────────────
base = getSampleStyleSheet()
def S(name, parent="Normal", **kw):
return ParagraphStyle(name, parent=base[parent], **kw)
styles = {
"title": S("title", "Title",
fontSize=22, textColor=WHITE, leading=28,
fontName="Helvetica-Bold", alignment=TA_CENTER),
"subtitle": S("subtitle",
fontSize=11, textColor=CF_LIGHT_BLUE, leading=15,
fontName="Helvetica", alignment=TA_CENTER),
"disclaimer": S("disclaimer",
fontSize=7.5, textColor=colors.HexColor("#FFFFFF"),
leading=10, fontName="Helvetica-Oblique", alignment=TA_CENTER),
"section": S("section",
fontSize=12, textColor=WHITE, leading=16,
fontName="Helvetica-Bold", alignment=TA_LEFT,
leftPadding=6, spaceAfter=1),
"body": S("body", fontSize=9, textColor=CF_DARK, leading=13,
fontName="Helvetica", spaceAfter=2),
"body_bold": S("body_bold", fontSize=9, textColor=CF_DARK, leading=13,
fontName="Helvetica-Bold", spaceAfter=2),
"small": S("small", fontSize=8, textColor=colors.HexColor("#555555"),
leading=11, fontName="Helvetica"),
"warn": S("warn", fontSize=8.5, textColor=CF_ORANGE, leading=12,
fontName="Helvetica-Bold"),
"note": S("note", fontSize=8, textColor=CF_TEAL, leading=11,
fontName="Helvetica-Oblique"),
"check_label": S("check_label", fontSize=9, textColor=CF_DARK, leading=13,
fontName="Helvetica", leftIndent=4),
}
# ── Helpers ────────────────────────────────────────────────────────────────────
class SectionHeader(Flowable):
"""Full-width coloured banner for a section heading."""
def __init__(self, text, width, bg=CF_BLUE, fg=WHITE, height=18*mm/2):
super().__init__()
self.text = text
self._w = width
self.bg = bg
self.fg = fg
self._h = height
def wrap(self, *_):
return self._w, self._h
def draw(self):
c = self.canv
# banner
c.setFillColor(self.bg)
c.roundRect(0, 0, self._w, self._h, 3, fill=1, stroke=0)
# text
c.setFillColor(self.fg)
c.setFont("Helvetica-Bold", 10.5)
c.drawString(8, self._h/2 - 4, self.text)
def check_row(label, detail=""):
"""Return a one-row table that looks like a checklist item."""
box = Paragraph("☐", styles["body_bold"])
lbl = Paragraph(f"<b>{label}</b> <font color='#555555'>{detail}</font>",
styles["body"])
t = Table([[box, lbl]], colWidths=[10*mm, W - 10*mm])
t.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 2),
("RIGHTPADDING", (0,0), (-1,-1), 2),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING",(0,0), (-1,-1), 2),
]))
return t
def two_col_table(rows, col_ratios=(0.42, 0.58), header=None, header_bg=CF_BLUE):
"""Generic two-column table."""
col_w = [W * r for r in col_ratios]
data = []
if header:
data.append([
Paragraph(header[0], styles["section"]),
Paragraph(header[1], styles["section"]),
])
for i, (a, b) in enumerate(rows):
pa = Paragraph(a, styles["body"])
pb = Paragraph(b, styles["body"])
data.append([pa, pb])
style = [
("VALIGN", (0,0), (-1,-1), "TOP"),
("FONTNAME",(0,0), (-1,-1), "Helvetica"),
("FONTSIZE",(0,0), (-1,-1), 8.5),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING",(0,0), (-1,-1), 3),
]
if header:
style += [
("BACKGROUND", (0,0), (-1,0), header_bg),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
]
# alternate data rows
for i in range(1, len(data)):
bg = CF_LIGHT_BLUE if i % 2 == 0 else CF_GREY
style.append(("BACKGROUND", (0,i), (-1,i), bg))
else:
for i in range(len(data)):
bg = CF_LIGHT_BLUE if i % 2 == 0 else CF_GREY
style.append(("BACKGROUND", (0,i), (-1,i), bg))
t = Table(data, colWidths=col_w)
t.setStyle(TableStyle(style))
return t
def warning_box(text):
data = [[Paragraph("⚠ " + text, styles["warn"])]]
t = Table(data, colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#FFF3E0")),
("LINEABOVE", (0,0), (-1,0), 1.5, CF_ORANGE),
("LINEBELOW", (0,0), (-1,-1), 1.5, CF_ORANGE),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
]))
return t
def note_box(text):
data = [[Paragraph("ℹ " + text, styles["note"])]]
t = Table(data, colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#E0F7FA")),
("LINEABOVE", (0,0), (-1,0), 1, CF_TEAL),
("LINEBELOW", (0,0), (-1,-1), 1, CF_TEAL),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0), (-1,-1), 4),
]))
return t
sp = lambda h=4: Spacer(1, h*mm)
# ══════════════════════════════════════════════════════════════════════════════
# BUILD CONTENT
# ══════════════════════════════════════════════════════════════════════════════
story = []
# ── TITLE BANNER ──────────────────────────────────────────────────────────────
title_data = [[
Paragraph("Cystic Fibrosis", styles["title"]),
]]
title_sub = [[
Paragraph("Patient Management Checklist & Quick Reference Guide", styles["subtitle"]),
]]
disc = [[
Paragraph(
"For use alongside your CF care team. This checklist does not replace individualised medical advice. "
"Always consult your CF specialist before changing your treatment.",
styles["disclaimer"]
)
]]
title_table = Table(title_data, colWidths=[W])
title_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), CF_BLUE),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING",(0,0), (-1,-1), 2),
("ROUNDEDCORNERS", [5]),
]))
sub_table = Table(title_sub, colWidths=[W])
sub_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), CF_TEAL),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0), (-1,-1), 4),
]))
disc_table = Table(disc, colWidths=[W])
disc_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#37474F")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0), (-1,-1), 6),
("ROUNDEDCORNERS", [5]),
]))
story += [title_table, sub_table, disc_table, sp(5)]
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 1 — DAILY ROUTINE CHECKLIST
# ══════════════════════════════════════════════════════════════════════════════
story.append(SectionHeader("☑ SECTION 1 — DAILY ROUTINE CHECKLIST", W))
story.append(sp(2))
story.append(Paragraph("<b>Morning</b>", styles["body_bold"]))
for label, detail in [
("Airway Clearance (1st session)", "Chest PT / oscillating vest · 20–30 min"),
("Mucolytic before clearance", "Dornase alfa (Pulmozyme) 2.5 mg inhaled OR hypertonic saline 7% 4 mL"),
("Bronchodilator", "Albuterol/salbutamol inhaler before mucolytic if prescribed"),
("CFTR Modulator – morning dose", "e.g. Elexacaftor/Tezacaftor/Ivacaftor (Trikafta) — with fat-containing food"),
("Pancreatic Enzymes (PERT)", "Take with ALL meals and snacks — dose per dietitian instructions"),
("Breakfast — high calorie/protein", "Target ~120–150% of normal caloric intake"),
("Fat-soluble vitamins", "Vitamins A, D, E, K (AquADEKs or equivalent)"),
("Salt supplement", "~6000 mg/day total — especially in hot weather or exercise"),
]:
story.append(check_row(label, detail))
story.append(sp(3))
story.append(Paragraph("<b>Afternoon / Evening</b>", styles["body_bold"]))
for label, detail in [
("PERT with every meal & snack", "Do NOT eat without enzymes if pancreatic insufficient"),
("Airway Clearance (2nd session)", "Repeat chest PT / vest · 20–30 min"),
("Evening CFTR Modulator dose", "Trikafta: take evening ivacaftor dose 12 h after morning dose"),
("Nasal saline irrigation", "Especially for sinus symptoms / nasal polyps"),
("Exercise", "Any physical activity counts — helps mucus clearance"),
("Bowel check", "Bowel movement daily; use prescribed softener/laxative if constipated"),
]:
story.append(check_row(label, detail))
story.append(sp(3))
story.append(Paragraph("<b>Before Bed</b>", styles["body_bold"]))
for label, detail in [
("3rd airway clearance session (if prescribed)", "Some patients do 2–3 sessions/day"),
("Record symptoms", "Cough change, sputum colour/volume, breathlessness, weight"),
("Nebuliser cleaning", "Clean all nebuliser parts after every use — prevents contamination"),
]:
story.append(check_row(label, detail))
story.append(sp(4))
story.append(warning_box(
"SEEK URGENT CARE if: increased breathlessness · coughing up blood · "
"fever >38.5°C (101.3°F) · significant drop in exercise tolerance · "
"weight loss >1 kg in 1 week"
))
story.append(sp(5))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 2 — CFTR MODULATOR QUICK REFERENCE
# ══════════════════════════════════════════════════════════════════════════════
story.append(SectionHeader("💊 SECTION 2 — CFTR MODULATOR QUICK REFERENCE", W))
story.append(sp(2))
story.append(note_box(
"CFTR modulators treat the underlying protein defect — not just symptoms. "
"Always take with FAT-containing food (improves absorption ~3-fold)."
))
story.append(sp(3))
modulator_rows = [
("<b>Elexacaftor / Tezacaftor / Ivacaftor</b><br/>(Trikafta — triple therapy)",
"≥2 yrs with ≥1 F508del allele (~90% of CF patients)<br/>Morning: 2 tablets (ELX+TEZ+IVA) · Evening: 1 tablet (IVA)<br/>Most effective modulator available"),
("<b>Vanzacaftor / Tezacaftor / Deutivacaftor</b><br/>(Alyftrek — FDA approved 2024)",
"≥6 yrs with F508del or responsive mutation<br/>Once daily (non-inferior to Trikafta)<br/>Simpler dosing schedule"),
("<b>Tezacaftor / Ivacaftor</b><br/>(Symdeko / Symkevi)",
"≥6 yrs; F508del homozygous or heterozygous<br/>TEZ 100 mg + IVA 150 mg morning · IVA 150 mg evening"),
("<b>Ivacaftor</b><br/>(Kalydeco — potentiator only)",
"Gating mutations (G551D & 37 others) ≥4 months<br/>150 mg twice daily with fat<br/>Not effective for F508del alone"),
]
story.append(two_col_table(
modulator_rows,
col_ratios=(0.40, 0.60),
header=["Drug (Brand Name)", "Who / How to Take"],
))
story.append(sp(3))
story.append(warning_box(
"CFTR modulators interact with CYP3A inhibitors (itraconazole, clarithromycin, grapefruit). "
"DOSE REDUCTION required. Tell your pharmacist about ALL medications."
))
story.append(sp(5))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 3 — AIRWAY CLEARANCE & MUCOLYTICS
# ══════════════════════════════════════════════════════════════════════════════
story.append(SectionHeader("🫁 SECTION 3 — AIRWAY CLEARANCE & MUCOLYTICS", W))
story.append(sp(2))
ac_rows = [
("<b>Dornase alfa</b> (Pulmozyme)", "2.5 mg once daily inhaled · Cleaves DNA in mucus · Do 30 min before airway clearance"),
("<b>Hypertonic Saline 7%</b>", "4 mL nebulised twice daily · Rehydrates airway surface · Use bronchodilator first"),
("<b>N-Acetylcysteine</b>", "10% solution 10–30 mL q6h · Breaks mucus disulfide bonds"),
("<b>Mannitol</b> (Bronchitol)", "Inhaled · Osmotic expectorant · Some countries only"),
("<b>Chest Physiotherapy</b>", "Postural drainage + percussion · 2–3 × daily · 20–30 min per session"),
("<b>Oscillating Vest (HFCWO)</b>", "High-frequency chest wall oscillation · Alternative to manual CPT"),
("<b>PEP Mask / Flutter device</b>", "Positive expiratory pressure · Loosens mucus · Portable option"),
("<b>Exercise</b>", "Any aerobic activity · Augments mucus clearance · Aim ≥30 min most days"),
]
story.append(two_col_table(
ac_rows,
col_ratios=(0.32, 0.68),
header=["Treatment", "Details"],
header_bg=CF_TEAL,
))
story.append(sp(5))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 4 — INFECTION & ANTIBIOTIC GUIDE
# ══════════════════════════════════════════════════════════════════════════════
story.append(SectionHeader("🦠 SECTION 4 — INFECTION MANAGEMENT", W))
story.append(sp(2))
story.append(Paragraph("<b>Know your organisms</b> — sputum culture drives antibiotic choice:", styles["body"]))
story.append(sp(2))
inf_rows = [
("<b>Pseudomonas aeruginosa</b><br/>(chronic suppression)",
"Inhaled tobramycin 300 mg BD (28 days on/off)<br/>OR inhaled aztreonam 75 mg q8h (28 days on/off)<br/>OR aerosolised colistin 1–2 million units BD"),
("<b>Staphylococcus aureus</b><br/>(MSSA / MRSA)",
"No evidence for routine chronic therapy<br/>MRSA: vancomycin IV or linezolid 600 mg BD (per sensitivity)"),
("<b>Burkholderia cepacia</b><br/>(complex)",
"High morbidity/mortality · Specialist management<br/>Multidrug resistance common · Isolate from other CF patients"),
("<b>Non-tuberculous Mycobacteria</b><br/>(NTM)",
"Rule out before starting azithromycin<br/>Screen every 6–12 months on chronic azithromycin"),
("<b>Mild Exacerbation</b><br/>(oral, 2–3 weeks)",
"Ciprofloxacin 500–750 mg BD<br/>OR co-trimoxazole (TMP/SMX) · amoxicillin 1g TDS<br/>Choice based on sputum sensitivities"),
("<b>Severe Exacerbation</b><br/>(IV, 2 weeks)",
"Two anti-Pseudomonal agents IV (e.g. pip-tazo + tobramycin)<br/>Aminoglycosides: monitor levels/renal function<br/>Consider hospital admission"),
("<b>Azithromycin</b><br/>(long-term anti-inflammatory)",
"250–500 mg 3 × per week · Improves FEV1 & weight<br/>Screen for NTM before starting · Monitor for macrolide resistance"),
]
story.append(two_col_table(
inf_rows,
col_ratios=(0.33, 0.67),
header=["Organism / Situation", "Treatment"],
))
story.append(sp(5))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 5 — NUTRITION CHECKLIST
# ══════════════════════════════════════════════════════════════════════════════
story.append(SectionHeader("🥗 SECTION 5 — NUTRITION & GI MANAGEMENT", W))
story.append(sp(2))
nutr_rows = [
("<b>Pancreatic Enzyme Replacement (PERT)</b>",
"Take with ALL meals and snacks (not just main meals)<br/>Enteric-coated capsules — do not crush<br/>Target: no steatorrhoea, normal stools"),
("<b>Caloric Goals</b>",
"120–150% of normal daily requirements<br/>High-calorie, high-fat, high-protein diet<br/>Do NOT restrict fat — fat absorption requires PERT"),
("<b>Fat-Soluble Vitamins</b>",
"A, D, E, K — monitor blood levels annually<br/>AquADEKs supplement or individual preparations<br/>Vitamin D: aim 25-OH-D >30 ng/mL"),
("<b>Salt / Sodium</b>",
"~6000 mg sodium/day<br/>Increase during hot weather, fever, heavy exercise<br/>Salt-containing snacks encouraged"),
("<b>CF-Related Diabetes (CFRD)</b>",
"Annual OGTT from age 10 (all CF patients)<br/>Treatment: insulin (similar to T1DM)<br/>Do NOT restrict carbohydrates — calories are priority"),
("<b>Bowel Regularity</b>",
"Daily laxative regimen (polyethylene glycol or senna)<br/>DIOS: PEG-electrolyte solution ± Gastrografin enema<br/>Seek surgical review if obstruction persists"),
("<b>Liver Disease</b>",
"Annual liver function tests and ultrasound<br/>Ursodeoxycholic acid if biliary involvement<br/>Refer to hepatologist for portal hypertension"),
("<b>GERD</b>",
"Very common in CF (~80% of adults)<br/>Lifestyle measures + PPI cautiously (↑ pneumonia risk)<br/>Consider H2 blocker instead of PPI"),
]
story.append(two_col_table(
nutr_rows,
col_ratios=(0.35, 0.65),
header=["Area", "Guidance"],
header_bg=CF_GREEN,
))
story.append(sp(5))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 6 — MONITORING SCHEDULE
# ══════════════════════════════════════════════════════════════════════════════
story.append(SectionHeader("📅 SECTION 6 — MONITORING & FOLLOW-UP SCHEDULE", W))
story.append(sp(2))
mon_rows = [
("<b>Every clinic visit</b><br/>(every 3 months minimum)",
"Weight, height, BMI · Spirometry (FEV1, FVC) · Sputum culture<br/>O2 saturation · Review medications & adherence · Physiotherapy review"),
("<b>Annually</b>",
"Oral glucose tolerance test (from age 10)<br/>DEXA bone density scan · Chest X-ray<br/>Liver function tests + ultrasound · Fat-soluble vitamin levels<br/>HbA1c if CFRD diagnosed · Renal function · Audiology (if on aminoglycosides)"),
("<b>When starting azithromycin</b>",
"Sputum for NTM culture before starting<br/>Repeat NTM screen every 6–12 months"),
("<b>If on aminoglycosides (IV)</b>",
"Therapeutic drug monitoring (trough & peak)<br/>Renal function (serum creatinine) every 2–3 days<br/>Audiology if prolonged or repeated courses"),
("<b>Mental health</b>",
"Screen for depression & anxiety at every visit<br/>Refer to psychologist/psychiatrist as needed"),
("<b>Reproductive health</b>",
"Men: referral to urologist / fertility specialist<br/>Women: CF-specialist input before/during pregnancy<br/>Preimplantation genetic testing available with IVF"),
]
story.append(two_col_table(
mon_rows,
col_ratios=(0.30, 0.70),
header=["Frequency", "What to Check"],
header_bg=colors.HexColor("#6A1B9A"),
))
story.append(sp(5))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 7 — WHEN TO SEEK URGENT HELP
# ══════════════════════════════════════════════════════════════════════════════
story.append(SectionHeader("🚨 SECTION 7 — WHEN TO SEEK URGENT HELP", W))
story.append(sp(2))
urgent_items = [
("Haemoptysis", "Any blood in coughed sputum — especially >1 teaspoon"),
("Severe breathlessness", "Can't complete sentences · Resting breathlessness · Blue lips/fingers"),
("Fever >38.5°C (101.3°F)", "With increased cough, coloured sputum, or decline in function"),
("Chest pain", "Especially sharp, sudden, pleuritic — rule out pneumothorax"),
("Rapid weight loss", ">1 kg in a week or sustained decline"),
("Abdominal distension/pain", "No bowel movement >2 days + pain — may be DIOS"),
("Fainting / collapse", "Possible severe hypoxia or arrhythmia"),
("Significant FEV1 drop", "Home spirometry drop >10% from personal best"),
]
for label, detail in urgent_items:
story.append(check_row(f"🔴 {label}", detail))
story.append(sp(3))
story.append(note_box(
"Keep your CF Centre phone number saved in your phone. "
"For life-threatening emergencies, call 999 (UK) / 911 (US) / 000 (Australia) / 112 (EU)."
))
story.append(sp(5))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 8 — MY PERSONAL CF PLAN (fillable-style)
# ══════════════════════════════════════════════════════════════════════════════
story.append(SectionHeader("📋 SECTION 8 — MY PERSONAL CF PLAN", W))
story.append(sp(2))
story.append(Paragraph(
"Fill in with your CF care team at your next clinic appointment.",
styles["small"]
))
story.append(sp(2))
plan_data = [
["My CF Centre:", "_" * 40, "Team Phone:", "_" * 20],
["My CFTR Mutation:", "_" * 40, "My Modulator:", "_" * 20],
["Dornase alfa dose:", "_" * 40, "Hypertonic saline:", "_" * 20],
["PERT dose (meals):", "_" * 40, "PERT dose (snacks):", "_" * 20],
["My target weight:", "_" * 40, "Last FEV1 (%):", "_" * 20],
["My inhaled antibiotic:", "_" * 40, "Azithromycin dose:", "_" * 20],
["Next clinic date:", "_" * 40, "Next OGTT:", "_" * 20],
["Notes / Other meds:", "_" * 40, "", ""],
]
plan_style = [
("FONTSIZE", (0,0), (-1,-1), 8.5),
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("FONTNAME", (2,0), (2,-1), "Helvetica-Bold"),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("BACKGROUND", (0,0), (-1,-1), CF_GREY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
]
for i in range(0, len(plan_data), 2):
plan_style.append(("BACKGROUND", (0,i), (-1,i), CF_LIGHT_BLUE))
plan_t = Table(plan_data, colWidths=[W*0.22, W*0.28, W*0.22, W*0.28])
plan_t.setStyle(TableStyle(plan_style))
story.append(plan_t)
story.append(sp(5))
# ══════════════════════════════════════════════════════════════════════════════
# FOOTER NOTE
# ══════════════════════════════════════════════════════════════════════════════
story.append(HRFlowable(width=W, thickness=1, color=CF_BLUE))
story.append(sp(2))
story.append(Paragraph(
"References: Goldman-Cecil Medicine 26e · Murray & Nadel's Respiratory Medicine · "
"Sleisenger & Fordtran's GI and Liver Disease · US Pharmacist 2024 · "
"Medscape CF Treatment Guidelines 2024. "
"Produced by Orris Medical Reference — July 2026.",
styles["small"]
))
story.append(sp(1))
story.append(Paragraph(
"This document is for educational purposes only and does not constitute medical advice. "
"Always follow the guidance of your CF multidisciplinary team.",
styles["small"]
))
# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace/cf-checklist && python build_cf_pdf.py 2>&1
ls -lh /tmp/workspace/cf-checklist/CF_Management_Checklist.pdf
CF Management Checklist
PDF Document · PDF
| Section | Contents |
|---|---|
| 1. Daily Routine Checklist | Morning / afternoon / evening / bedtime checklists with checkbox-style items |
| 2. CFTR Modulator Quick Reference | Trikafta, Alyftrek (2024), Symdeko, Kalydeco - who takes what and how |
| 3. Airway Clearance & Mucolytics | Dornase alfa, hypertonic saline, PEP mask, vest therapy, exercise |
| 4. Infection Management | Pseudomonas suppression, exacerbation antibiotics, azithromycin guidance |
| 5. Nutrition & GI Management | PERT dosing rules, caloric goals, vitamins, CFRD, DIOS, liver disease |
| 6. Monitoring Schedule | Every-visit vs. annual tests - spirometry, OGTT, DEXA, cultures |
| 7. Urgent Warning Signs | 8 red-flag situations to seek emergency care immediately |
| 8. My Personal CF Plan | Fillable table to complete with your CF team at clinic |
How the thiazide diuretics used in the DI
thiazide diuretics mechanism action diabetes insipidus paradoxical effect nephrogenic
"Although it may seem counterintuitive to treat a disorder of increased urine volume with a diuretic, thiazides reduce the kidney's ability to excrete free water: they increase proximal tubular water reabsorption (secondary to volume contraction) and block the ability of the DCT to form dilute urine."
Step 1: Thiazide blocks NCC in DCT
↓
Step 2: Sodium and chloride lost in urine → Net Na⁺ loss
↓
Step 3: Mild volume depletion (ECF contraction)
↓
Step 4: Compensatory ↑ proximal tubular Na⁺ and water reabsorption
↓
LESS fluid reaches the distal nephron & collecting duct
↓
Overall urine volume FALLS by up to 50%
| Type of DI | First-Line | Role of Thiazides |
|---|---|---|
| Central DI (ADH deficiency) | Desmopressin (DDAVP) intranasal or oral | Secondary / adjunct; rarely needed |
| Nephrogenic DI (ADH resistance) | Thiazide + low-Na diet | Primary treatment - desmopressin largely ineffective |
| Gestational DI | Desmopressin | Not first-line |
| Primary Polydipsia | Treat underlying psychiatry | Not used |
| Adverse Effect | Comment |
|---|---|
| Hypokalemia | Countered by amiloride co-prescription |
| Volume depletion / hypotension | The desired mechanism - must not over-deplete |
| Hyponatremia | Paradoxically possible with aggressive thiazide use |
| Hyperuricemia | Gout precipitation |
| ↑ Drug concentrations | Volume depletion can raise plasma levels of other drugs (e.g., lithium toxicity) - Goldman-Cecil Medicine |
| Glucose intolerance | Unmasks latent diabetes mellitus |
NEPHROGENIC DI
│
▼
Kidney cannot respond to ADH
→ Dilute polyuria (urine osm <200 mOsm/kg)
│
▼
THIAZIDE (HCTZ 12.5–25 mg/day)
+ LOW-Na DIET
+ AMILORIDE (5–10 mg/day)
│
▼
↓ NCC in DCT → Na⁺ loss → Volume contraction
│
▼
↑ Proximal tubule Na⁺ + H₂O reabsorption (RAAS/SNS activation)
↓ GFR (less filtrate produced)
DCT cannot form dilute urine
│
▼
Less fluid reaches collecting duct
→ Urine volume ↓ 30–50%
→ Urine osmolality ↑
→ Hypernatremia improved