attachment
attachment

Make it easy and simple way for norcet 11 2026

Reading File
analyse_media
Here is your NORCET 11 2026 - Hypertension topic made super simple and easy to remember! 🎯

🩺 HYPERTENSION - Easy Notes for NORCET 11

πŸ”‘ Quick Definition

  • Force of blood against artery walls = TOO HIGH
  • High BP = above 120/80 mm Hg
  • Called "Silent Killer" = mostly asymptomatic

πŸ“Š AHA Blood Pressure Classification (MUST MEMORIZE TABLE)

ClassificationSystolic (SBP)Diastolic (DBP)
βœ… Normal< 120< 80
⚠️ Elevated120-129< 80
🟑 Stage-1 HTN130-13980-89
πŸ”΄ Stage-2 HTNβ‰₯ 140β‰₯ 90
🚨 Hypertensive Crisis> 180> 120
Trick to remember stages: 120 β†’ 130 β†’ 140 β†’ 180 (each jump = 10 then 40)

2️⃣ Two Types - Easy Way to Remember

PrimarySecondary
How common?95% (most common)5% (less common)
Cause?Unknown (idiopathic)Known cause
Why?SNS imbalance, RAAS, insulin resistanceRenal failure, heart failure, vascular disorders
Risk factorsFamily history, high salt, obesity, stressUnderlying pathology
Trick: "PRIMARY = 95% = cause UNKNOWN" | "SECONDARY = 5% = cause KNOWN"

πŸ”¬ Diagnosis - Easy 3-Point Rule

  1. Clinical features
  2. Sphygmomanometer
  3. 3 readings on 3 SEPARATE occasions = confirmed HTN

🚨 Malignant Hypertension (VERY IMPORTANT FOR EXAM!)

  • SBP > 180 + DBP > 120 = Hypertensive Crisis
  • It is a medical emergency
  • If untreated β†’ irreversible cardio-neuro changes
  • Drug of choice = Sodium Nitroprusside ⭐ (AIIMS Delhi 2015 asked this!)

😣 Signs & Symptoms - Mnemonic: "HEAD-C-TV"

LetterSymptom
HHeadache + flushed face
EEpistaxis (nosebleed)
A(Any) chest pain
DDizziness + Tinnitus
TTinnitus
VVisual disturbances

⚠️ Complications - Mnemonic: "COBS"

LetterComplication
CCoronary artery disease
OOrgan damage (heart, brain, kidneys, eyes)
BBrain - Stroke / CVA
SSystolic failure - CHF
⭐ Most common cause of CHF = HTN (high-yield exam point!)

⚑ Top 5 NORCET Exam Points

  1. HTN = "Silent Killer" (asymptomatic)
  2. Primary HTN = 95%, Secondary = 5%
  3. Diagnosis needs 3 readings on separate occasions
  4. Hypertensive crisis: SBP >180 / DBP >120
  5. Drug of choice in malignant HTN = Sodium Nitroprusside

All the best for NORCET 11 2026! You've got this! πŸ’ͺ

Create a study guide PDF for hypertension complications and management

Reading File
Reading File
Finding Sources
Finding Sources
Reading File
Reading File
Running Command

mkdir -p /tmp/workspace/hypertension-study-guide && ls /tmp/workspace/

Writing File

~/hypertension-study-guide/build_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import Flowable

OUTPUT = "/tmp/workspace/hypertension-study-guide/Hypertension_Study_Guide_NORCET11.pdf"

# ── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1A237E")
MED_BLUE    = colors.HexColor("#1565C0")
LIGHT_BLUE  = colors.HexColor("#E3F2FD")
ACCENT_RED  = colors.HexColor("#C62828")
ACCENT_AMBER= colors.HexColor("#F57F17")
GREEN       = colors.HexColor("#1B5E20")
LIGHT_GREEN = colors.HexColor("#E8F5E9")
LIGHT_AMBER = colors.HexColor("#FFF8E1")
LIGHT_RED   = colors.HexColor("#FFEBEE")
GRAY_DARK   = colors.HexColor("#37474F")
GRAY_LIGHT  = colors.HexColor("#ECEFF1")
WHITE       = colors.white

# ── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

def make_style(name, parent="Normal", **kw):
    return ParagraphStyle(name, parent=styles[parent], **kw)

title_style = make_style("DocTitle", fontSize=26, textColor=WHITE,
                         fontName="Helvetica-Bold", alignment=TA_CENTER,
                         spaceAfter=4, leading=32)
subtitle_style = make_style("DocSubtitle", fontSize=13, textColor=LIGHT_BLUE,
                            fontName="Helvetica-Bold", alignment=TA_CENTER,
                            spaceAfter=2)
tag_style = make_style("Tag", fontSize=10, textColor=LIGHT_BLUE,
                       fontName="Helvetica", alignment=TA_CENTER)

sec_style = make_style("Section", fontSize=14, textColor=WHITE,
                       fontName="Helvetica-Bold", alignment=TA_LEFT,
                       spaceAfter=2, leftIndent=6)
sub_style = make_style("SubSection", fontSize=11, textColor=MED_BLUE,
                       fontName="Helvetica-Bold", spaceAfter=4, spaceBefore=6)
body_style = make_style("Body", fontSize=9.5, textColor=GRAY_DARK,
                        fontName="Helvetica", leading=14, spaceAfter=3,
                        leftIndent=6)
bullet_style = make_style("Bullet", fontSize=9.5, textColor=GRAY_DARK,
                          fontName="Helvetica", leading=14, spaceAfter=2,
                          leftIndent=14, bulletIndent=6)
bold_body = make_style("BoldBody", fontSize=9.5, textColor=GRAY_DARK,
                       fontName="Helvetica-Bold", leading=14, spaceAfter=3,
                       leftIndent=6)
highlight_style = make_style("Highlight", fontSize=10, textColor=ACCENT_RED,
                              fontName="Helvetica-Bold", leading=14,
                              spaceAfter=3, leftIndent=6)
mnemonic_style = make_style("Mnemonic", fontSize=10, textColor=GREEN,
                             fontName="Helvetica-Bold", leading=15,
                             spaceAfter=3, leftIndent=6)
small_style = make_style("Small", fontSize=8, textColor=GRAY_DARK,
                         fontName="Helvetica", leading=11, spaceAfter=2,
                         leftIndent=6)
note_style = make_style("Note", fontSize=9, textColor=ACCENT_RED,
                        fontName="Helvetica-BoldOblique", leading=12,
                        spaceAfter=2, leftIndent=6)

# ── Helpers ───────────────────────────────────────────────────────────────────
def section_header(text, bg=MED_BLUE):
    data = [[Paragraph(text, sec_style)]]
    t = Table(data, colWidths=[17*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), bg),
        ("ROUNDEDCORNERS", [5, 5, 5, 5]),
        ("TOPPADDING",    (0,0),(-1,-1), 6),
        ("BOTTOMPADDING", (0,0),(-1,-1), 6),
        ("LEFTPADDING",   (0,0),(-1,-1), 10),
    ]))
    return t

def info_box(text, bg=LIGHT_BLUE, border=MED_BLUE):
    data = [[Paragraph(text, body_style)]]
    t = Table(data, colWidths=[17*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,-1), bg),
        ("BOX",          (0,0),(-1,-1), 1.2, border),
        ("TOPPADDING",   (0,0),(-1,-1), 7),
        ("BOTTOMPADDING",(0,0),(-1,-1), 7),
        ("LEFTPADDING",  (0,0),(-1,-1), 10),
    ]))
    return t

def alert_box(text, bg=LIGHT_RED, border=ACCENT_RED):
    data = [[Paragraph(text, highlight_style)]]
    t = Table(data, colWidths=[17*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,-1), bg),
        ("BOX",          (0,0),(-1,-1), 1.5, border),
        ("TOPPADDING",   (0,0),(-1,-1), 7),
        ("BOTTOMPADDING",(0,0),(-1,-1), 7),
        ("LEFTPADDING",  (0,0),(-1,-1), 10),
    ]))
    return t

def tip_box(text, bg=LIGHT_GREEN, border=GREEN):
    data = [[Paragraph(text, mnemonic_style)]]
    t = Table(data, colWidths=[17*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,-1), bg),
        ("BOX",          (0,0),(-1,-1), 1.2, border),
        ("TOPPADDING",   (0,0),(-1,-1), 7),
        ("BOTTOMPADDING",(0,0),(-1,-1), 7),
        ("LEFTPADDING",  (0,0),(-1,-1), 10),
    ]))
    return t

def bullet(text):
    return Paragraph(f"<bullet>&bull;</bullet> {text}", bullet_style)

def sp(h=6):
    return Spacer(1, h)

def hr():
    return HRFlowable(width="100%", thickness=0.5, color=GRAY_LIGHT,
                      spaceAfter=4, spaceBefore=4)

# ── Cover page builder ────────────────────────────────────────────────────────
def cover_page():
    elems = []
    # Title banner
    title_data = [
        [Paragraph("HYPERTENSION", title_style)],
        [Paragraph("Complications & Management", subtitle_style)],
        [Paragraph("NORCET 11 β€” 2026  |  Quick Study Guide", tag_style)],
    ]
    title_tbl = Table(title_data, colWidths=[17*cm])
    title_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,-1), DARK_BLUE),
        ("TOPPADDING",   (0,0),(-1,-1), 12),
        ("BOTTOMPADDING",(0,0),(-1,-1), 12),
        ("LEFTPADDING",  (0,0),(-1,-1), 14),
        ("RIGHTPADDING", (0,0),(-1,-1), 14),
        ("ROWBACKGROUNDS",(0,0),(-1,-1),[DARK_BLUE]),
    ]))
    elems.append(title_tbl)
    elems.append(sp(14))

    # Quick-look definition box
    elems.append(info_box(
        "<b>What is Hypertension?</b>  Persistently elevated arterial blood pressure (BP > 120/80 mmHg). "
        "Called the <b>'Silent Killer'</b> because it is largely asymptomatic yet silently damages end-organs. "
        "Affects ~1.28 billion adults worldwide (WHO 2023)."
    ))
    elems.append(sp(10))

    # AHA BP Classification Table
    elems.append(Paragraph("AHA Blood Pressure Classification", sub_style))
    bp_header = ["Classification", "Systolic (SBP)", "Diastolic (DBP)"]
    bp_data = [
        bp_header,
        ["Normal",              "< 120 mmHg",       "< 80 mmHg"],
        ["Elevated",            "120-129 mmHg",      "< 80 mmHg"],
        ["Stage 1 HTN",         "130-139 mmHg",      "80-89 mmHg"],
        ["Stage 2 HTN",         "\u2265 140 mmHg",   "\u2265 90 mmHg"],
        ["Hypertensive Crisis", "> 180 mmHg",        "> 120 mmHg"],
    ]
    row_colors = [
        ("BACKGROUND",(0,0),(-1,0), MED_BLUE),       # header
        ("BACKGROUND",(0,1),(-1,1), colors.HexColor("#E8F5E9")),  # normal
        ("BACKGROUND",(0,2),(-1,2), LIGHT_AMBER),    # elevated
        ("BACKGROUND",(0,3),(-1,3), colors.HexColor("#FFF9C4")),  # stage1
        ("BACKGROUND",(0,4),(-1,4), colors.HexColor("#FFCCBC")),  # stage2
        ("BACKGROUND",(0,5),(-1,5), LIGHT_RED),      # crisis
    ]
    bp_tbl = Table(bp_data, colWidths=[6*cm, 5.5*cm, 5.5*cm])
    style_cmds = [
        ("TEXTCOLOR",   (0,0),(-1,0), WHITE),
        ("FONTNAME",    (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTNAME",    (0,1),(-1,-1),"Helvetica"),
        ("FONTSIZE",    (0,0),(-1,-1), 9),
        ("ALIGN",       (0,0),(-1,-1), "CENTER"),
        ("VALIGN",      (0,0),(-1,-1), "MIDDLE"),
        ("ROWHEIGHT",   (0,0),(-1,-1), 18),
        ("GRID",        (0,0),(-1,-1), 0.5, colors.HexColor("#90A4AE")),
        ("TOPPADDING",  (0,0),(-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1),4),
    ] + list(row_colors)
    bp_tbl.setStyle(TableStyle(style_cmds))
    elems.append(bp_tbl)
    elems.append(sp(6))
    elems.append(Paragraph(
        "<i>Source: American Heart Association (AHA) Guidelines</i>", small_style))
    elems.append(sp(10))
    elems.append(alert_box(
        "EXAM ALERT: Diagnosis confirmed by 3 separate elevated BP readings "
        "on 3 separate occasions using a sphygmomanometer."))
    return elems

# ── Page 2 β€” Types & Pathophysiology ─────────────────────────────────────────
def types_page():
    elems = [PageBreak()]
    elems.append(section_header("TYPES OF HYPERTENSION"))
    elems.append(sp(8))

    two_cols = [
        [
            Paragraph("<b>PRIMARY (Essential) HTN</b>", sub_style),
            Paragraph("<b>SECONDARY HTN</b>", sub_style),
        ],
        [
            "\n".join([
                "β€’ Prevalence: ~95% of all HTN cases",
                "β€’ Cause: Unknown (idiopathic)",
                "β€’ Mechanism: SNS overactivity, RAAS",
                "  dysregulation, insulin resistance",
                "β€’ Risk Factors:",
                "   - Family history",
                "   - High sodium diet",
                "   - Obesity / overweight",
                "   - Stress",
                "   - Physical inactivity",
                "   - Advancing age",
            ]),
            "\n".join([
                "β€’ Prevalence: ~5% of all HTN cases",
                "β€’ Cause: Known underlying disease",
                "β€’ Common Causes:",
                "   - Renal: CKD, renal artery stenosis",
                "   - Endocrine: Hyperaldosteronism,",
                "     Cushing syndrome, pheochromocytoma",
                "   - Cardiovascular: Coarctation of aorta",
                "   - Drugs: NSAIDs, OCPs, steroids",
                "   - Obstructive sleep apnoea",
                "β€’ Clue: Onset < 30 yrs or resistant HTN",
            ]),
        ]
    ]

    col_data = [
        [Paragraph(two_cols[0][0], sub_style), Paragraph(two_cols[0][1], sub_style)],
        [Paragraph(two_cols[1][0].replace("\n","<br/>"), body_style),
         Paragraph(two_cols[1][1].replace("\n","<br/>"), body_style)],
    ]
    col_tbl = Table(col_data, colWidths=[8.3*cm, 8.7*cm])
    col_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(0,0), LIGHT_BLUE),
        ("BACKGROUND",   (1,0),(1,0), LIGHT_AMBER),
        ("BACKGROUND",   (0,1),(0,1), colors.HexColor("#F0F4FF")),
        ("BACKGROUND",   (1,1),(1,1), colors.HexColor("#FFFDE7")),
        ("BOX",          (0,0),(0,-1),1, MED_BLUE),
        ("BOX",          (1,0),(1,-1),1, ACCENT_AMBER),
        ("TOPPADDING",   (0,0),(-1,-1),6),
        ("BOTTOMPADDING",(0,0),(-1,-1),6),
        ("LEFTPADDING",  (0,0),(-1,-1),8),
        ("VALIGN",       (0,0),(-1,-1),"TOP"),
    ]))
    elems.append(col_tbl)
    elems.append(sp(10))

    elems.append(tip_box(
        "MEMORY TRICK: PRIMARY = 95% = cause UNKNOWN  |  SECONDARY = 5% = cause KNOWN"
    ))
    elems.append(sp(10))

    # Malignant HTN box
    elems.append(section_header("MALIGNANT HYPERTENSION (HYPERTENSIVE CRISIS)", bg=ACCENT_RED))
    elems.append(sp(6))
    mhtn = [
        ["Criteria",     "SBP > 180 mmHg  AND  DBP > 120 mmHg"],
        ["Type",         "Medical Emergency"],
        ["Risk",         "Irreversible cardio-neuro-renal changes if untreated"],
        ["Drug of Choice","Sodium Nitroprusside (IV)  β€” AIIMS Delhi 2015"],
        ["Other agents", "IV Labetalol, IV Nicardipine, IV Hydralazine"],
        ["Target",       "Reduce MAP by max 25% in first hour; then gradual"],
    ]
    mhtn_tbl = Table(mhtn, colWidths=[4.5*cm, 12.5*cm])
    mhtn_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(0,-1), LIGHT_RED),
        ("BACKGROUND",   (1,0),(1,-1), WHITE),
        ("FONTNAME",     (0,0),(0,-1), "Helvetica-Bold"),
        ("FONTNAME",     (1,0),(1,-1), "Helvetica"),
        ("FONTSIZE",     (0,0),(-1,-1), 9),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#EF9A9A")),
        ("TOPPADDING",   (0,0),(-1,-1), 5),
        ("BOTTOMPADDING",(0,0),(-1,-1), 5),
        ("LEFTPADDING",  (0,0),(-1,-1), 8),
        ("VALIGN",       (0,0),(-1,-1), "MIDDLE"),
    ]))
    elems.append(mhtn_tbl)
    return elems

# ── Page 3 β€” Signs, Symptoms & Diagnosis ─────────────────────────────────────
def signs_page():
    elems = [PageBreak()]
    elems.append(section_header("SIGNS, SYMPTOMS & DIAGNOSIS"))
    elems.append(sp(8))

    elems.append(Paragraph("Signs & Symptoms", sub_style))
    ss_data = [
        ["System",         "Symptom / Sign"],
        ["Neurological",   "Headache (especially occipital, morning)\nDizziness & Tinnitus\nVisual disturbances (blurred vision, papilloedema)"],
        ["Cardiac",        "Chest pain / palpitations\nS4 gallop (LV hypertrophy)\nWidened pulse pressure"],
        ["ENT",            "Epistaxis (nosebleed)"],
        ["General",        "Flushed face, sweating\nFatigue"],
        ["Renal",          "Nocturia, haematuria (in advanced disease)"],
    ]
    ss_tbl = Table(ss_data, colWidths=[3.5*cm, 13.5*cm])
    ss_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,0), MED_BLUE),
        ("TEXTCOLOR",    (0,0),(-1,0), WHITE),
        ("FONTNAME",     (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTNAME",     (0,1),(-1,-1),"Helvetica"),
        ("FONTSIZE",     (0,0),(-1,-1), 9),
        ("BACKGROUND",   (0,1),(0,-1), LIGHT_BLUE),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#90A4AE")),
        ("TOPPADDING",   (0,0),(-1,-1), 5),
        ("BOTTOMPADDING",(0,0),(-1,-1), 5),
        ("LEFTPADDING",  (0,0),(-1,-1), 8),
        ("VALIGN",       (0,0),(-1,-1), "TOP"),
        ("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, GRAY_LIGHT]),
    ]))
    elems.append(ss_tbl)
    elems.append(sp(6))
    elems.append(tip_box(
        'MNEMONIC for Symptoms: "HEAD-CTV" β€” '
        'Headache | Epistaxis | Anxiety | Dizziness | Chest pain | Tinnitus | Visual disturbances'
    ))
    elems.append(sp(10))

    elems.append(Paragraph("Diagnosis", sub_style))
    diag_data = [
        ["Method",            "Detail"],
        ["Clinical Features", "Based on history and physical examination"],
        ["Sphygmomanometer",  "3 separate readings on 3 separate occasions\n"
                               "Rest 5 min before each reading; seated position"],
        ["Ambulatory BP",     "24-hour ABPM β€” gold standard for white-coat HTN"],
        ["Home BP",           "HBPM β€” useful for ongoing monitoring"],
        ["Investigations",    "ECG, Echo (LVH), Renal function (creatinine, eGFR),\n"
                               "Urinalysis, Fundoscopy, Lipid profile, Blood glucose"],
    ]
    diag_tbl = Table(diag_data, colWidths=[4.5*cm, 12.5*cm])
    diag_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,0), MED_BLUE),
        ("TEXTCOLOR",    (0,0),(-1,0), WHITE),
        ("FONTNAME",     (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTNAME",     (0,1),(-1,-1),"Helvetica"),
        ("FONTSIZE",     (0,0),(-1,-1), 9),
        ("BACKGROUND",   (0,1),(0,-1), LIGHT_BLUE),
        ("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, GRAY_LIGHT]),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#90A4AE")),
        ("TOPPADDING",   (0,0),(-1,-1), 5),
        ("BOTTOMPADDING",(0,0),(-1,-1), 5),
        ("LEFTPADDING",  (0,0),(-1,-1), 8),
        ("VALIGN",       (0,0),(-1,-1), "TOP"),
    ]))
    elems.append(diag_tbl)
    return elems

# ── Page 4 β€” Complications ────────────────────────────────────────────────────
def complications_page():
    elems = [PageBreak()]
    elems.append(section_header("COMPLICATIONS OF HYPERTENSION", bg=ACCENT_RED))
    elems.append(sp(8))

    elems.append(info_box(
        "<b>Remember:</b> HTN causes target organ damage (TOD). The main targets are "
        "Heart, Brain, Kidneys, Eyes, and Blood Vessels β€” <b>\"HBKEB\"</b>"
    ))
    elems.append(sp(8))

    comp_data = [
        ["ORGAN",            "COMPLICATION",                          "KEY NOTES"],
        ["HEART\n(Cardiac)", "Left Ventricular Hypertrophy (LVH)\n"
                              "Coronary Artery Disease (CAD)\n"
                              "Heart Failure (HF)\n"
                              "Atrial Fibrillation",
                              "Most common cause of CHF = HTN\nECG: increased voltage\nEcho: LVH on imaging"],
        ["BRAIN\n(CNS)",     "Stroke / CVA (ischaemic or haemorrhagic)\n"
                              "Hypertensive Encephalopathy\n"
                              "Transient Ischaemic Attack (TIA)\n"
                              "Vascular Dementia",
                              "HTN = #1 modifiable risk factor for stroke\nEncephalopathy: BP > 180/120 + confusion"],
        ["KIDNEYS\n(Renal)", "Hypertensive Nephropathy\n"
                              "Chronic Kidney Disease (CKD)\n"
                              "Renal Artery Stenosis\n"
                              "End-Stage Renal Disease (ESRD)",
                              "Proteinuria is early sign\nACE inhibitors / ARBs are renoprotective\nTarget BP in CKD: < 130/80"],
        ["EYES\n(Retinal)",  "Hypertensive Retinopathy\n"
                              "Papilloedema\n"
                              "Retinal Haemorrhage\n"
                              "Visual disturbances / blindness",
                              "Keith-Wagener-Barker (KWB) grading\nGrade 4 = papilloedema = emergency\nFundoscopy is key examination"],
        ["VESSELS\n(Vascular)","Aortic Dissection\n"
                               "Peripheral Artery Disease (PAD)\n"
                               "Atherosclerosis (accelerated)\n"
                               "Aneurysm formation",
                               "Aortic dissection: tearing chest pain\nAnkle-Brachial Index (ABI) for PAD\nRisk doubles per 20/10 mmHg rise"],
    ]
    comp_tbl = Table(comp_data, colWidths=[2.8*cm, 7.5*cm, 6.7*cm])
    comp_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,0), ACCENT_RED),
        ("TEXTCOLOR",    (0,0),(-1,0), WHITE),
        ("FONTNAME",     (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTNAME",     (0,1),(-1,-1),"Helvetica"),
        ("FONTSIZE",     (0,0),(-1,-1), 8.5),
        ("BACKGROUND",   (0,1),(0,-1), LIGHT_RED),
        ("FONTNAME",     (0,1),(0,-1), "Helvetica-Bold"),
        ("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, GRAY_LIGHT]),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#EF9A9A")),
        ("TOPPADDING",   (0,0),(-1,-1), 5),
        ("BOTTOMPADDING",(0,0),(-1,-1), 5),
        ("LEFTPADDING",  (0,0),(-1,-1), 6),
        ("VALIGN",       (0,0),(-1,-1), "TOP"),
    ]))
    elems.append(comp_tbl)
    elems.append(sp(8))

    # Hypertensive Retinopathy grading mini-table
    elems.append(Paragraph("Hypertensive Retinopathy β€” KWB Grading (High Yield!)", sub_style))
    ret_data = [
        ["Grade", "Findings"],
        ["Grade I",  "Increased arteriolar light reflex (silver wiring)"],
        ["Grade II", "AV nipping / AV nicking (arteriovenous compression)"],
        ["Grade III","Flame haemorrhages, cotton wool spots, hard exudates"],
        ["Grade IV", "Papilloedema β€” EMERGENCY (Malignant HTN)"],
    ]
    ret_tbl = Table(ret_data, colWidths=[3.5*cm, 13.5*cm])
    ret_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,0), DARK_BLUE),
        ("TEXTCOLOR",    (0,0),(-1,0), WHITE),
        ("FONTNAME",     (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTSIZE",     (0,0),(-1,-1), 9),
        ("BACKGROUND",   (0,4),(-1,4), LIGHT_RED),
        ("FONTNAME",     (0,4),(-1,4), "Helvetica-Bold"),
        ("ROWBACKGROUNDS",(0,1),(-1,3),[WHITE, GRAY_LIGHT]),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#90A4AE")),
        ("TOPPADDING",   (0,0),(-1,-1), 5),
        ("BOTTOMPADDING",(0,0),(-1,-1), 5),
        ("LEFTPADDING",  (0,0),(-1,-1), 8),
        ("VALIGN",       (0,0),(-1,-1), "MIDDLE"),
    ]))
    elems.append(ret_tbl)
    return elems

# ── Page 5 β€” Management (Non-pharmacological) ────────────────────────────────
def management_nonpharm():
    elems = [PageBreak()]
    elems.append(section_header("MANAGEMENT OF HYPERTENSION", bg=GREEN))
    elems.append(sp(6))
    elems.append(Paragraph("A. Non-Pharmacological (Lifestyle) Management", sub_style))
    elems.append(info_box(
        "First-line therapy for all stages of HTN. For mild HTN, lifestyle changes alone "
        "may be sufficient. For moderate-severe, used alongside drugs."
    ))
    elems.append(sp(6))

    lifestyle_data = [
        ["Intervention",          "Recommendation",                      "BP Reduction"],
        ["Sodium Restriction",    "< 2.3 g/day (100 mmol/day)",          "2-8 mmHg"],
        ["DASH Diet",             "Fruits, vegetables, low-fat dairy;\nreduce saturated fat",    "8-14 mmHg"],
        ["Weight Reduction",      "Target BMI 18.5-24.9 kg/mΒ²",          "5-20 mmHg per 10 kg"],
        ["Aerobic Exercise",      "30 min moderate exercise,\n5 days/week", "4-9 mmHg"],
        ["Alcohol Restriction",   "Men: ≀2 units/day; Women: ≀1 unit/day","2-4 mmHg"],
        ["Smoking Cessation",     "Stop completely",                      "CV risk reduction"],
        ["Stress Reduction",      "Yoga, meditation, relaxation",         "Variable"],
    ]
    ls_tbl = Table(lifestyle_data, colWidths=[4.2*cm, 8.3*cm, 4.5*cm])
    ls_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,0), GREEN),
        ("TEXTCOLOR",    (0,0),(-1,0), WHITE),
        ("FONTNAME",     (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTNAME",     (0,1),(-1,-1),"Helvetica"),
        ("FONTSIZE",     (0,0),(-1,-1), 8.5),
        ("BACKGROUND",   (0,1),(0,-1), LIGHT_GREEN),
        ("FONTNAME",     (0,1),(0,-1), "Helvetica-Bold"),
        ("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, GRAY_LIGHT]),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#A5D6A7")),
        ("TOPPADDING",   (0,0),(-1,-1), 5),
        ("BOTTOMPADDING",(0,0),(-1,-1), 5),
        ("LEFTPADDING",  (0,0),(-1,-1), 6),
        ("VALIGN",       (0,0),(-1,-1), "TOP"),
    ]))
    elems.append(ls_tbl)
    elems.append(sp(6))
    elems.append(tip_box(
        'MNEMONIC for Lifestyle Changes: "DASH-WES" β€” '
        'Diet (DASH) | Alcohol reduce | Salt reduce | '
        'Hypertension target weight | Weight exercise | Exercise | Smoking cessation'
    ))
    return elems

# ── Page 6 β€” Pharmacological Management ───────────────────────────────────────
def management_pharm():
    elems = [PageBreak()]
    elems.append(section_header("PHARMACOLOGICAL MANAGEMENT", bg=MED_BLUE))
    elems.append(sp(6))

    elems.append(Paragraph("B. First-Line Antihypertensive Drugs (4 Classes)", sub_style))
    drug_data = [
        ["CLASS",                   "EXAMPLES",                     "KEY INDICATIONS / NOTES"],
        ["ACE Inhibitors\n(ACEi)",  "Ramipril\nEnalapril\nLisinopril",
                                     "DM + HTN (renoprotective)\nHeart failure, post-MI\nAVOID in pregnancy\nSide effect: Dry cough"],
        ["Angiotensin Receptor\nBlockers (ARBs)",
                                    "Losartan\nValsartan\nIrbesartan",
                                     "Same as ACEi but no cough\nUse if ACEi not tolerated\nAVOID in pregnancy\nRenoprotective in DM"],
        ["Calcium Channel\nBlockers (CCBs)",
                                    "Amlodipine\nNifedipine\nDiltiazem",
                                     "Elderly patients\nIsolated systolic HTN\nAngina + HTN\nSide effect: Ankle oedema"],
        ["Diuretics\n(Thiazide)",   "Hydrochlorothiazide\nIndapamide\nChlortalidone",
                                     "Elderly / Black patients\nHeart failure\nMonitor K+ and uric acid\nAvoid in gout"],
    ]
    drug_tbl = Table(drug_data, colWidths=[3.8*cm, 4.5*cm, 8.7*cm])
    drug_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,0), MED_BLUE),
        ("TEXTCOLOR",    (0,0),(-1,0), WHITE),
        ("FONTNAME",     (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTNAME",     (0,1),(-1,-1),"Helvetica"),
        ("FONTSIZE",     (0,0),(-1,-1), 8.5),
        ("BACKGROUND",   (0,1),(0,-1), LIGHT_BLUE),
        ("FONTNAME",     (0,1),(0,-1), "Helvetica-Bold"),
        ("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, GRAY_LIGHT]),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#90A4AE")),
        ("TOPPADDING",   (0,0),(-1,-1), 5),
        ("BOTTOMPADDING",(0,0),(-1,-1), 5),
        ("LEFTPADDING",  (0,0),(-1,-1), 6),
        ("VALIGN",       (0,0),(-1,-1), "TOP"),
    ]))
    elems.append(drug_tbl)
    elems.append(sp(8))

    elems.append(Paragraph("C. Additional / Special Situation Drugs", sub_style))
    add_data = [
        ["CLASS",                 "EXAMPLES",             "SPECIAL INDICATION"],
        ["Beta-Blockers",         "Metoprolol\nAtenolol\nCarvedilol",
                                   "Post-MI, Heart failure, Tachyarrhythmia\nNOT first-line for uncomplicated HTN"],
        ["Alpha-Blockers",        "Prazosin\nDoxazosin",
                                   "HTN + BPH (enlarged prostate)\nPhaeochromocytoma (Phenoxybenzamine)"],
        ["Aldosterone Antagonists","Spironolactone\nEplerenone",
                                   "Resistant HTN, Heart failure\nMonitor K+ (hyperkalemia risk)"],
        ["Centrally Acting",      "Methyldopa\nClonidine",
                                   "Methyldopa: Drug of choice in PREGNANCY HTN\nClonidine: Hypertensive urgency"],
        ["IV Emergency Drugs",    "Sodium Nitroprusside\nLabetalol\nNicardipine",
                                   "Nitroprusside: Malignant HTN (AIIMS 2015)\nLabetalol: Preferred in pregnancy crisis"],
    ]
    add_tbl = Table(add_data, colWidths=[3.8*cm, 4.5*cm, 8.7*cm])
    add_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,0), DARK_BLUE),
        ("TEXTCOLOR",    (0,0),(-1,0), WHITE),
        ("FONTNAME",     (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTNAME",     (0,1),(-1,-1),"Helvetica"),
        ("FONTSIZE",     (0,0),(-1,-1), 8.5),
        ("BACKGROUND",   (0,1),(0,-1), LIGHT_BLUE),
        ("FONTNAME",     (0,1),(0,-1), "Helvetica-Bold"),
        ("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, GRAY_LIGHT]),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#90A4AE")),
        ("TOPPADDING",   (0,0),(-1,-1), 5),
        ("BOTTOMPADDING",(0,0),(-1,-1), 5),
        ("LEFTPADDING",  (0,0),(-1,-1), 6),
        ("VALIGN",       (0,0),(-1,-1), "TOP"),
    ]))
    elems.append(add_tbl)
    elems.append(sp(8))

    elems.append(alert_box(
        "EXAM ALERT: Drug of choice in PREGNANCY HTN = Methyldopa  |  "
        "Drug of choice in MALIGNANT HTN = Sodium Nitroprusside  |  "
        "ACEi / ARBs are CONTRAINDICATED in pregnancy"
    ))
    return elems

# ── Page 7 β€” BP Targets & Special Populations ────────────────────────────────
def targets_page():
    elems = [PageBreak()]
    elems.append(section_header("BP TARGETS & SPECIAL POPULATIONS", bg=DARK_BLUE))
    elems.append(sp(8))

    target_data = [
        ["PATIENT GROUP",           "BP TARGET"],
        ["General population",      "< 130/80 mmHg"],
        ["CKD (with or without DM)","< 130/80 mmHg"],
        ["CKD + Proteinuria > 1g/day","< 130/80 mmHg"],
        ["Elderly (> 65 years)",    "< 130/80 (if tolerated); avoid < 110/70"],
        ["Pregnancy (pre-eclampsia)","< 140/90 mmHg (labetalol / methyldopa)"],
        ["Diabetes Mellitus",       "< 130/80 mmHg"],
        ["Heart Failure",           "< 130/80 mmHg (ACEi + Beta-blocker)"],
        ["Post Stroke / TIA",       "< 130/80 mmHg"],
    ]
    tgt_tbl = Table(target_data, colWidths=[9*cm, 8*cm])
    tgt_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,0), DARK_BLUE),
        ("TEXTCOLOR",    (0,0),(-1,0), WHITE),
        ("FONTNAME",     (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTNAME",     (0,1),(-1,-1),"Helvetica"),
        ("FONTSIZE",     (0,0),(-1,-1), 9),
        ("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, GRAY_LIGHT]),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#90A4AE")),
        ("TOPPADDING",   (0,0),(-1,-1), 5),
        ("BOTTOMPADDING",(0,0),(-1,-1), 5),
        ("LEFTPADDING",  (0,0),(-1,-1), 8),
        ("VALIGN",       (0,0),(-1,-1), "MIDDLE"),
    ]))
    elems.append(tgt_tbl)
    elems.append(sp(10))

    elems.append(section_header("NURSING MANAGEMENT OF HYPERTENSION", bg=GREEN))
    elems.append(sp(6))
    nursing_data = [
        ["NURSING ACTIONS",                         "RATIONALE"],
        ["Monitor BP every 1-4 hours (acute)",      "Early detection of dangerous elevations"],
        ["Administer antihypertensives as ordered",  "Achieve and maintain target BP"],
        ["Educate on DASH diet & sodium restriction","Lifestyle modification reduces BP"],
        ["Ensure medication adherence",             "Non-compliance is #1 cause of uncontrolled HTN"],
        ["Monitor weight daily",                    "Fluid status assessment"],
        ["Fall precautions (orthostatic hypotension)","BP medications can cause dizziness/falls"],
        ["Monitor renal function (creatinine, eGFR)","ACEi/ARBs may affect kidney function"],
        ["Monitor potassium levels",                "Diuretics cause hypokalaemia; ACEi cause hyperkalaemia"],
        ["Teach self-monitoring of BP at home",     "Empowers patient; improves adherence"],
        ["Assess for TOD signs",                    "Headache, vision changes, chest pain = emergency"],
    ]
    nr_tbl = Table(nursing_data, colWidths=[8.5*cm, 8.5*cm])
    nr_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,0), GREEN),
        ("TEXTCOLOR",    (0,0),(-1,0), WHITE),
        ("FONTNAME",     (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTNAME",     (0,1),(-1,-1),"Helvetica"),
        ("FONTSIZE",     (0,0),(-1,-1), 8.5),
        ("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, GRAY_LIGHT]),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#A5D6A7")),
        ("TOPPADDING",   (0,0),(-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("LEFTPADDING",  (0,0),(-1,-1), 6),
        ("VALIGN",       (0,0),(-1,-1), "TOP"),
    ]))
    elems.append(nr_tbl)
    return elems

# ── Page 8 β€” Quick Revision / Exam Points ────────────────────────────────────
def revision_page():
    elems = [PageBreak()]
    elems.append(section_header("QUICK REVISION β€” TOP EXAM POINTS", bg=ACCENT_RED))
    elems.append(sp(8))

    qr_data = [
        ["#", "HIGH-YIELD POINT",                                          "ANSWER"],
        ["1",  "HTN called ___?",                                           "Silent Killer"],
        ["2",  "Primary HTN prevalence?",                                   "~95%"],
        ["3",  "Secondary HTN prevalence?",                                 "~5%"],
        ["4",  "Diagnosis requires?",                                       "3 readings on 3 separate occasions"],
        ["5",  "Normal BP (AHA)?",                                          "< 120/80 mmHg"],
        ["6",  "Hypertensive crisis?",                                      "> 180/120 mmHg"],
        ["7",  "Drug of choice β€” Malignant HTN?",                           "Sodium Nitroprusside (IV)"],
        ["8",  "Drug of choice β€” Pregnancy HTN?",                           "Methyldopa"],
        ["9",  "ACEi side effect?",                                         "Dry cough"],
        ["10", "Drug to avoid in gout?",                                    "Thiazide diuretics"],
        ["11", "Most common cause of CHF?",                                 "Hypertension"],
        ["12", "KWB Grade 4 finding?",                                      "Papilloedema β€” emergency"],
        ["13", "ACEi / ARBs contraindicated in?",                           "Pregnancy"],
        ["14", "First-line for elderly / Black patients?",                  "CCB or Thiazide diuretic"],
        ["15", "BP target in CKD?",                                         "< 130/80 mmHg"],
        ["16", "RAAS stands for?",                                          "Renin-Angiotensin-Aldosterone System"],
        ["17", "Drug for HTN + BPH?",                                       "Alpha-blocker (Prazosin/Doxazosin)"],
        ["18", "Resistant HTN drug add-on?",                                "Spironolactone (aldosterone antagonist)"],
        ["19", "Most common cause of secondary HTN?",                       "Renal parenchymal disease (CKD)"],
        ["20", "Best BP measurement method for white-coat HTN?",            "24-hour Ambulatory BP Monitoring (ABPM)"],
    ]
    qr_tbl = Table(qr_data, colWidths=[0.7*cm, 9*cm, 7.3*cm])
    qr_tbl.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,0), ACCENT_RED),
        ("TEXTCOLOR",    (0,0),(-1,0), WHITE),
        ("FONTNAME",     (0,0),(-1,0), "Helvetica-Bold"),
        ("FONTNAME",     (0,1),(-1,-1),"Helvetica"),
        ("FONTSIZE",     (0,0),(-1,-1), 8.5),
        ("BACKGROUND",   (0,1),(0,-1), LIGHT_RED),
        ("FONTNAME",     (0,1),(0,-1), "Helvetica-Bold"),
        ("FONTNAME",     (2,1),(2,-1), "Helvetica-Bold"),
        ("TEXTCOLOR",    (2,1),(2,-1), MED_BLUE),
        ("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, GRAY_LIGHT]),
        ("GRID",         (0,0),(-1,-1), 0.5, colors.HexColor("#EF9A9A")),
        ("TOPPADDING",   (0,0),(-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("LEFTPADDING",  (0,0),(-1,-1), 5),
        ("VALIGN",       (0,0),(-1,-1), "MIDDLE"),
    ]))
    elems.append(qr_tbl)
    elems.append(sp(10))

    # Footer note
    elems.append(tip_box(
        "Sources: Braunwald's Heart Disease | Harrison's Principles (22E) | "
        "AHA Guidelines | NORCET 11 Syllabus 2026"
    ))
    elems.append(sp(6))
    elems.append(Paragraph(
        "<i>Study Guide compiled for NORCET 11 β€” 2026. "
        "Always cross-check with latest guidelines before clinical practice.</i>",
        small_style
    ))
    return elems

# ── Assemble & build ─────────────────────────────────────────────────────────
def build():
    doc = SimpleDocTemplate(
        OUTPUT,
        pagesize=A4,
        leftMargin=2*cm, rightMargin=2*cm,
        topMargin=1.5*cm, bottomMargin=1.5*cm,
        title="Hypertension Study Guide – NORCET 11 2026",
        author="Orris Medical AI",
        subject="Hypertension Complications and Management",
    )

    story = []
    story += cover_page()
    story += types_page()
    story += signs_page()
    story += complications_page()
    story += management_nonpharm()
    story += management_pharm()
    story += targets_page()
    story += revision_page()

    doc.build(story)
    print(f"PDF created: {OUTPUT}")

build()
Running Command

cd /tmp/workspace/hypertension-study-guide && python build_pdf.py 2>&1

Editing File

~/hypertension-study-guide/build_pdf.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/hypertension-study-guide/build_pdf.py'
Running Command

cd /tmp/workspace/hypertension-study-guide && python build_pdf.py 2>&1

Running Command

ls -lh /tmp/workspace/hypertension-study-guide/Hypertension_Study_Guide_NORCET11.pdf

Your NORCET 11 study guide PDF is ready! Download it here:

Hypertension Study Guide NORCET11

PDF Document Β· PDF


Here's what's inside the 8-page color-coded PDF:
PageContent
Page 1 - CoverAHA BP Classification Table, definition, diagnosis alert
Page 2 - TypesPrimary vs Secondary HTN side-by-side + Malignant HTN emergency table
Page 3 - Signs & DiagnosisSymptom table by system + diagnosis methods + mnemonic "HEAD-CTV"
Page 4 - ComplicationsFull organ damage table (Heart, Brain, Kidney, Eyes, Vessels) + KWB Retinopathy grading
Page 5 - Lifestyle MgmtDASH diet, sodium, exercise, alcohol - with expected BP reduction numbers
Page 6 - Drug Management4 first-line classes + special situation drugs + pregnancy/emergency drug alerts
Page 7 - BP Targets + NursingTargets for each special population + 10 nursing care actions with rationale
Page 8 - Quick Revision20 high-yield exam Q&A for last-minute revision
All content is sourced from Braunwald's Heart Disease, Harrison's Principles (22nd Ed), and AHA Guidelines. Best of luck for NORCET 11 2026! πŸ’ͺ
This is a shared conversation. Sign in to Orris to start your own chat.