attachment
attachment

Make it easy and simple way for norcet 11 2026

Here's a quick, easy-to-remember breakdown of the Hypertension topic from your notes for NORCET 11 2026!
Searching sources...
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
Good content retrieved. Now let me build the PDF.
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

The issue is the two_cols list is being used wrongly - two_cols[0][0] is already a Paragraph object, not a string. Let me fix that section.
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.