Mitral stenosis pyqs pdf compilation from neet pg,upsc cms,inicet

Reading File
Finding Sources
Searching the Web

mitral stenosis NEET PG UPSC CMS INICET previous year questions PYQ

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

mkdir -p /tmp/workspace/mitral-stenosis-pyq && ls /tmp/workspace/mitral-stenosis-pyq/

Writing File

~/mitral-stenosis-pyq/generate_pyq.py

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

# ── Output path ──────────────────────────────────────────────────────────────
OUTPUT = "/tmp/workspace/mitral-stenosis-pyq/Mitral_Stenosis_PYQ_Compilation.pdf"

# ── Document ─────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=18*mm, rightMargin=18*mm,
    topMargin=20*mm, bottomMargin=20*mm,
    title="Mitral Stenosis PYQ Compilation",
    author="NEET PG | UPSC CMS | INICET",
    subject="Cardiology – Mitral Stenosis Previous Year Questions",
)

# ── Colour palette ────────────────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1A3A5C")
MED_BLUE    = colors.HexColor("#2E6DA4")
LIGHT_BLUE  = colors.HexColor("#D6E8F7")
ACCENT_GOLD = colors.HexColor("#E8A020")
ANS_GREEN   = colors.HexColor("#1B6E2E")
ANS_BG      = colors.HexColor("#EAF7EC")
OPT_WRONG   = colors.HexColor("#C0392B")
LIGHT_GRAY  = colors.HexColor("#F4F4F4")
HINT_BG     = colors.HexColor("#FFF8E1")
HINT_BORDER = colors.HexColor("#F0C040")

# ── Styles ────────────────────────────────────────────────────────────────────
base = getSampleStyleSheet()

COVER_TITLE = ParagraphStyle("CoverTitle",
    fontSize=28, leading=34, alignment=TA_CENTER,
    textColor=colors.white, fontName="Helvetica-Bold", spaceAfter=6)

COVER_SUB = ParagraphStyle("CoverSub",
    fontSize=13, leading=18, alignment=TA_CENTER,
    textColor=colors.HexColor("#D6E8F7"), fontName="Helvetica", spaceAfter=4)

SECTION_TITLE = ParagraphStyle("SectionTitle",
    fontSize=15, leading=20, alignment=TA_LEFT,
    textColor=colors.white, fontName="Helvetica-Bold",
    leftIndent=4*mm, spaceAfter=2*mm, spaceBefore=4*mm)

Q_NUM = ParagraphStyle("QNum",
    fontSize=9, leading=12, textColor=colors.HexColor("#666666"),
    fontName="Helvetica-BoldOblique", spaceAfter=1*mm)

Q_STEM = ParagraphStyle("QStem",
    fontSize=10.5, leading=15, textColor=DARK_BLUE,
    fontName="Helvetica-Bold", spaceAfter=2*mm, spaceBefore=1*mm)

OPT_STYLE = ParagraphStyle("Opt",
    fontSize=10, leading=14, textColor=colors.HexColor("#333333"),
    fontName="Helvetica", leftIndent=4*mm, spaceAfter=1.5*mm)

ANS_LABEL = ParagraphStyle("AnsLabel",
    fontSize=9.5, leading=13, textColor=ANS_GREEN,
    fontName="Helvetica-Bold", spaceAfter=1*mm)

ANS_BODY = ParagraphStyle("AnsBody",
    fontSize=9.5, leading=14, textColor=colors.HexColor("#1A3A1A"),
    fontName="Helvetica", leftIndent=4*mm, spaceAfter=0)

HINT_STYLE = ParagraphStyle("Hint",
    fontSize=9, leading=13, textColor=colors.HexColor("#5A4200"),
    fontName="Helvetica-Oblique", leftIndent=4*mm, spaceAfter=0)

TOPIC_HEAD = ParagraphStyle("TopicHead",
    fontSize=11, leading=15, textColor=MED_BLUE,
    fontName="Helvetica-Bold", spaceBefore=6*mm, spaceAfter=2*mm)

BULLET_STYLE = ParagraphStyle("Bullet",
    fontSize=9.5, leading=14, textColor=DARK_BLUE,
    fontName="Helvetica", leftIndent=6*mm, spaceAfter=1.5*mm,
    bulletIndent=2*mm)

TABLE_TITLE = ParagraphStyle("TableTitle",
    fontSize=10, leading=14, textColor=DARK_BLUE,
    fontName="Helvetica-Bold", spaceBefore=4*mm, spaceAfter=1*mm, alignment=TA_CENTER)

# ── Helper builders ───────────────────────────────────────────────────────────
def section_banner(text, color=MED_BLUE):
    """Returns a coloured banner row used as a section header."""
    tbl = Table([[Paragraph(text, SECTION_TITLE)]], colWidths=[174*mm])
    tbl.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), color),
        ("BOTTOMPADDING", (0,0), (-1,-1), 4),
        ("TOPPADDING", (0,0), (-1,-1), 4),
        ("LEFTPADDING", (0,0), (-1,-1), 3),
        ("RIGHTPADDING", (0,0), (-1,-1), 3),
        ("ROUNDEDCORNERS", [4]),
    ]))
    return tbl

def answer_box(answer_text, explanation):
    data = [
        [Paragraph(f"Correct Answer: {answer_text}", ANS_LABEL)],
        [Paragraph(explanation, ANS_BODY)],
    ]
    tbl = Table(data, colWidths=[170*mm])
    tbl.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), ANS_BG),
        ("BOX", (0,0), (-1,-1), 1, ANS_GREEN),
        ("TOPPADDING", (0,0), (-1,-1), 4),
        ("BOTTOMPADDING", (0,0), (-1,-1), 4),
        ("LEFTPADDING", (0,0), (-1,-1), 6),
        ("RIGHTPADDING", (0,0), (-1,-1), 6),
    ]))
    return tbl

def hint_box(hint_text):
    data = [[Paragraph(f"Exam Tip: {hint_text}", HINT_STYLE)]]
    tbl = Table(data, colWidths=[170*mm])
    tbl.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), HINT_BG),
        ("BOX", (0,0), (-1,-1), 1, HINT_BORDER),
        ("TOPPADDING", (0,0), (-1,-1), 3),
        ("BOTTOMPADDING", (0,0), (-1,-1), 3),
        ("LEFTPADDING", (0,0), (-1,-1), 6),
        ("RIGHTPADDING", (0,0), (-1,-1), 6),
    ]))
    return tbl

def mcq_block(num, exam_tag, stem, options, answer, explanation, hint=None):
    """Full MCQ block with number, stem, options, answer, explanation."""
    items = []
    items.append(Paragraph(f"Q{num}  [{exam_tag}]", Q_NUM))
    items.append(Paragraph(stem, Q_STEM))
    for opt in options:
        items.append(Paragraph(opt, OPT_STYLE))
    items.append(Spacer(1, 2*mm))
    items.append(answer_box(answer, explanation))
    if hint:
        items.append(Spacer(1, 1.5*mm))
        items.append(hint_box(hint))
    items.append(Spacer(1, 4*mm))
    items.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#CCCCCC")))
    items.append(Spacer(1, 3*mm))
    return KeepTogether(items)

# ══════════════════════════════════════════════════════════════════════════════
# DATA
# ══════════════════════════════════════════════════════════════════════════════

questions = [
    # ── ETIOLOGY & PATHOPHYSIOLOGY ──────────────────────────────────────────
    dict(
        num=1, exam_tag="NEET PG / UPSC CMS",
        stem="The most common cause of mitral stenosis (MS) in India is:",
        options=["A. Infective endocarditis",
                 "B. Rheumatic heart disease",
                 "C. Mitral annular calcification",
                 "D. Congenital mitral stenosis"],
        answer="B. Rheumatic heart disease",
        explanation=(
            "Rheumatic heart disease (RHD) accounts for the overwhelming majority of MS globally, "
            "especially in developing countries like India. It is 3x more common in women and "
            "typically presents in the 4th-5th decade. Mitral annular calcification is an "
            "increasingly recognised cause in elderly patients in developed nations. "
            "(Goldman-Cecil Medicine)"
        ),
        hint="In India context, always think Rheumatic MS first."
    ),
    dict(
        num=2, exam_tag="INICET",
        stem="Normal mitral valve area is approximately:",
        options=["A. 1-2 cm²",
                 "B. 2-3 cm²",
                 "C. 4-6 cm²",
                 "D. 6-8 cm²"],
        answer="C. 4-6 cm²",
        explanation=(
            "The normal mitral valve area is 4-6 cm². Symptoms generally appear when the area "
            "falls to about one third of normal (approx. 1.5-2.0 cm²). MS is classified as "
            "mild (>1.5 cm²), moderate (1.0-1.5 cm²), and severe (<1.0-1.5 cm²). "
            "(Goldman-Cecil Medicine; Braunwald's)"
        ),
        hint="MVA <1.5 cm² = significant MS; <1.0 cm² = very severe."
    ),
    dict(
        num=3, exam_tag="UPSC CMS",
        stem="In rheumatic mitral stenosis, which pathological change is the HALLMARK?",
        options=["A. Leaflet prolapse",
                 "B. Commissural fusion with diastolic doming",
                 "C. Chordal elongation",
                 "D. Papillary muscle rupture"],
        answer="B. Commissural fusion with diastolic doming",
        explanation=(
            "Rheumatic MS is characterised by commissural fusion, leaflet thickening, and "
            "chordal shortening/fusion. On 2D echo, the anterior mitral leaflet shows the "
            "classic 'hockey stick' or 'diastolic doming' deformity. This is also linked to "
            "the opening snap heard on auscultation. (Braunwald's; Fuster's Heart)"
        ),
        hint="'Hockey stick' deformity on echo = rheumatic MS."
    ),
    dict(
        num=4, exam_tag="NEET PG",
        stem=(
            "Which of the following correctly describes the pressure gradient in mitral stenosis?"
        ),
        options=["A. Elevated LV-to-LA gradient in diastole",
                 "B. Elevated LA-to-LV gradient in diastole",
                 "C. Elevated LA-to-LV gradient in systole",
                 "D. Elevated LV-to-Aorta gradient in systole"],
        answer="B. Elevated LA-to-LV gradient in diastole",
        explanation=(
            "In MS, the stenosed mitral valve impedes LV filling. A persistent diastolic "
            "pressure gradient exists from LA (high pressure) to LV (low pressure). This "
            "elevated LA pressure is transmitted back to the pulmonary veins causing "
            "pulmonary hypertension. (Goldman-Cecil; Tintinalli's)"
        ),
    ),
    # ── CLINICAL FEATURES ───────────────────────────────────────────────────
    dict(
        num=5, exam_tag="NEET PG / INICET",
        stem="The most common presenting symptom of mitral stenosis is:",
        options=["A. Palpitations",
                 "B. Exertional dyspnea",
                 "C. Hemoptysis",
                 "D. Chest pain"],
        answer="B. Exertional dyspnea",
        explanation=(
            "Exertional dyspnea is the most frequent presenting complaint in MS, resulting "
            "from elevated LA pressure and reduced cardiac output. Orthopnea and PND follow "
            "as disease progresses. Hemoptysis is characteristic but less common; it results "
            "from rupture of bronchial vein anastomoses under high LA pressure. "
            "(Goldman-Cecil; Tintinalli's)"
        ),
        hint="Dyspnea = #1 symptom. Hemoptysis = characteristic but not the most common."
    ),
    dict(
        num=6, exam_tag="UPSC CMS",
        stem=(
            "A patient with mitral stenosis develops hoarseness of voice. Which structure is "
            "compressed by the enlarged left atrium?"
        ),
        options=["A. Phrenic nerve",
                 "B. Recurrent laryngeal nerve (left)",
                 "C. Vagus nerve",
                 "D. Sympathetic chain"],
        answer="B. Recurrent laryngeal nerve (left)",
        explanation=(
            "Ortner syndrome (cardiovocal syndrome) occurs when a massively enlarged left "
            "atrium compresses the left recurrent laryngeal nerve as it loops under the "
            "aortic arch, causing hoarseness. The enlarged LA can also compress the esophagus "
            "causing dysphagia. (Goldman-Cecil Medicine)"
        ),
        hint="Ortner's syndrome = LA enlargement → Left RLN compression → hoarseness."
    ),
    dict(
        num=7, exam_tag="NEET PG",
        stem=(
            "Presystolic accentuation of the mid-diastolic murmur in mitral stenosis "
            "DISAPPEARS in:"
        ),
        options=["A. Sinus tachycardia",
                 "B. Atrial fibrillation",
                 "C. Complete heart block",
                 "D. Left bundle branch block"],
        answer="B. Atrial fibrillation",
        explanation=(
            "Presystolic accentuation results from atrial contraction pushing blood through "
            "the stenosed valve just before systole. When atrial fibrillation develops, "
            "there is no effective atrial contraction, so presystolic accentuation disappears. "
            "(Tintinalli's; Frameworks for Internal Medicine)"
        ),
        hint="Presystolic accentuation = atrial kick. AF = no atrial contraction = no accentuation."
    ),
    dict(
        num=8, exam_tag="INICET",
        stem=(
            "The opening snap (OS) in mitral stenosis is best described as:"
        ),
        options=[
            "A. Low-pitched, best heard at the apex during systole",
            "B. High-pitched early diastolic sound to the right of the apex",
            "C. Mid-systolic click heard at the left sternal border",
            "D. Late diastolic sound coinciding with P wave on ECG"
        ],
        answer="B. High-pitched early diastolic sound to the right of the apex",
        explanation=(
            "The opening snap is an early diastolic, high-pitched sound caused by sudden "
            "tensing of the abnormal mitral leaflets as the valve opens. It is best heard "
            "just to the right of the apex. It is analogous to the 'hockey stick' deformity "
            "seen on 2D echo. Disappears when valve is heavily calcified/fibrotic. "
            "(Fuster's Heart, 15th ed.)"
        ),
        hint="OS heard between apex and left sternal border; high-pitched; absent with heavily calcified valve."
    ),
    dict(
        num=9, exam_tag="NEET PG",
        stem=(
            "As mitral stenosis severity increases, the S2-OS interval:"
        ),
        options=["A. Increases",
                 "B. Decreases",
                 "C. Remains unchanged",
                 "D. First decreases then increases"],
        answer="B. Decreases",
        explanation=(
            "The S2-OS interval (A2-OS interval) reflects the time for LA pressure to fall "
            "from its systolic peak to the level at which the mitral valve pops open. In "
            "severe MS, LA pressure is very high, so it reaches valve opening pressure "
            "quickly after A2 → shorter A2-OS interval. Shorter interval = more severe MS."
        ),
        hint="Shorter A2-OS interval = more severe MS. (Mnemonic: More Severe = More Short)."
    ),
    dict(
        num=10, exam_tag="UPSC CMS / INICET",
        stem=(
            "The apical impulse in mitral stenosis is characteristically described as:"
        ),
        options=["A. Heaving, sustained, displaced outward",
                 "B. Small, tapping, non-displaced",
                 "C. Double apical impulse",
                 "D. Hyperdynamic, diffuse"],
        answer="B. Small, tapping, non-displaced",
        explanation=(
            "In MS, the LV is underfilled due to restricted mitral inflow. The LV is "
            "therefore small and the apical impulse is small and 'tapping'. It is NOT "
            "displaced (unlike in MR or DCM where LV is dilated). "
            "(Goldman-Cecil; Tintinalli's)"
        ),
        hint="Small tapping apex = underfilled LV in MS. Heaving apex = pressure overload (e.g. AS)."
    ),
    # ── INVESTIGATIONS ───────────────────────────────────────────────────────
    dict(
        num=11, exam_tag="NEET PG",
        stem="Investigation of choice for diagnosing and assessing severity of mitral stenosis is:",
        options=["A. Chest X-ray",
                 "B. ECG",
                 "C. 2D Echocardiography with Doppler",
                 "D. Cardiac catheterisation"],
        answer="C. 2D Echocardiography with Doppler",
        explanation=(
            "Transthoracic echocardiography (TTE) is the primary diagnostic tool, confirming "
            "diagnosis and assessing severity in nearly 100% of cases. It evaluates MVA by "
            "planimetry, pressure half-time (PHT) method, and Doppler gradients. Cardiac "
            "catheterisation is reserved for discordant clinical/echo findings or pre-operative "
            "coronary assessment. (Goldman-Cecil; Tintinalli's; Braunwald's)"
        ),
        hint="Echo = investigation of choice for ALL valve lesions."
    ),
    dict(
        num=12, exam_tag="NEET PG / INICET",
        stem=(
            "Mitral valve area (MVA) by pressure half-time (PHT) method is calculated as:"
        ),
        options=["A. MVA = PHT × 220",
                 "B. MVA = 220 / PHT",
                 "C. MVA = PHT / 220",
                 "D. MVA = 440 / PHT"],
        answer="B. MVA = 220 / PHT",
        explanation=(
            "The empirical formula derived from catheterisation data is: MVA (cm²) = 220 / T½ "
            "where T½ is the pressure half-time in milliseconds. A PHT of 220 ms corresponds "
            "to a MVA of 1.0 cm² (severe MS). Normal T½ < 60 ms. "
            "(Textbook of Clinical Echocardiography; Fuster's Heart)"
        ),
        hint="MVA = 220/PHT. PHT ≥220 ms = severe MS (MVA ≤1.0 cm²)."
    ),
    dict(
        num=13, exam_tag="UPSC CMS",
        stem=(
            "On chest X-ray in mitral stenosis, which of the following is an EARLY finding?"
        ),
        options=["A. Cardiomegaly with left ventricular enlargement",
                 "B. Straightening of the left heart border",
                 "C. Right heart enlargement",
                 "D. Boot-shaped heart"],
        answer="B. Straightening of the left heart border",
        explanation=(
            "The left atrial appendage fills the concavity between the main pulmonary artery "
            "and the left ventricle on the CXR, causing 'straightening' or 'bulging' of the "
            "left heart border — an early and typical sign of left atrial enlargement in MS. "
            "Double density at the right heart border (double contour sign) is also a feature. "
            "Boot-shaped heart = Tetralogy of Fallot. (Goldman-Cecil; Tintinalli's)"
        ),
        hint="Left heart border straightening = LAE from MS. Double density = right heart border."
    ),
    dict(
        num=14, exam_tag="NEET PG",
        stem="Kerley B lines on chest X-ray in mitral stenosis represent:",
        options=["A. Dilated lymphatics in the lung parenchyma",
                 "B. Thickened pulmonary septa from chronic venous engorgement",
                 "C. Pulmonary artery dilatation",
                 "D. Pleural effusion"],
        answer="B. Thickened pulmonary septa from chronic venous engorgement",
        explanation=(
            "Kerley B lines are short (1-2 cm), horizontal lines at the lung bases on CXR, "
            "representing thickening of the interlobular septa secondary to chronic pulmonary "
            "venous hypertension. They indicate elevated LA pressure transmitted to the "
            "pulmonary vasculature, as seen in significant MS. (Goldman-Cecil Medicine)"
        ),
        hint="Kerley B lines = interlobular septal thickening = chronic pulmonary venous HTN."
    ),
    dict(
        num=15, exam_tag="INICET",
        stem=(
            "On ECG in a patient with mitral stenosis in sinus rhythm, which P-wave "
            "abnormality is expected?"
        ),
        options=["A. Tall peaked P waves (P pulmonale)",
                 "B. Notched or biphasic P waves (P mitrale)",
                 "C. Absent P waves",
                 "D. Delta waves"],
        answer="B. Notched or biphasic P waves (P mitrale)",
        explanation=(
            "Left atrial enlargement in MS produces broad, notched P waves in lead II "
            "(P mitrale) and a negative terminal component of the P wave in V1 (Morris index). "
            "If pulmonary hypertension develops, right axis deviation and right ventricular "
            "hypertrophy may appear. Atrial fibrillation is very common, especially >50 years. "
            "(Tintinalli's; Goldman-Cecil)"
        ),
        hint="P mitrale = LAE. P pulmonale = RAE. MS = P mitrale early."
    ),
    # ── SEVERITY CLASSIFICATION ──────────────────────────────────────────────
    dict(
        num=16, exam_tag="NEET PG / UPSC CMS",
        stem="Severe mitral stenosis is defined by a mitral valve area of:",
        options=["A. < 2.5 cm²",
                 "B. < 1.5 cm²",
                 "C. < 1.0 cm²",
                 "D. < 0.5 cm²"],
        answer="B. < 1.5 cm²",
        explanation=(
            "Classification of MS: Mild: MVA > 1.5 cm² | Moderate: MVA 1.0-1.5 cm² | "
            "Severe: MVA ≤ 1.5 cm² (AHA/ACC Stage C-D) | Very severe: MVA < 1.0 cm². "
            "Symptoms generally appear when MVA falls below 1.5 cm². Pressure half-time ≥ 150 ms "
            "corresponds to severe MS (PHT ≥ 220 ms = very severe). "
            "(Goldman-Cecil; Fuster's Heart; Harrison's)"
        ),
        hint="Severe MS = MVA ≤1.5 cm². Very severe = <1.0 cm²."
    ),
    dict(
        num=17, exam_tag="INICET",
        stem=(
            "The Wilkins echocardiographic scoring system for mitral stenosis assesses all "
            "of the following EXCEPT:"
        ),
        options=["A. Leaflet mobility",
                 "B. Leaflet thickening",
                 "C. Calcification",
                 "D. Severity of mitral regurgitation",
                 "(E. Subvalvular thickening)"],
        answer="D. Severity of mitral regurgitation",
        explanation=(
            "The Wilkins (echo) score grades: (1) Leaflet mobility, (2) Leaflet thickening, "
            "(3) Calcification, and (4) Subvalvular apparatus thickening — each scored 1-4 "
            "(total 4-16). Score ≤ 8 is ideal for PTMC/balloon valvotomy (>90% success). "
            "Score > 8 has lower success rates. MR degree is assessed separately as a "
            "contraindication (> moderate MR = relative contraindication to PTMC). "
            "(Textbook of Clinical Echocardiography; Braunwald's)"
        ),
        hint="Wilkins score: Mobility + Thickening + Calcification + Subvalvular. Max = 16. ≤8 = ideal for PTMC."
    ),
    # ── COMPLICATIONS ────────────────────────────────────────────────────────
    dict(
        num=18, exam_tag="NEET PG",
        stem=(
            "The most common complication of mitral stenosis is:"
        ),
        options=["A. Pulmonary hypertension",
                 "B. Atrial fibrillation",
                 "C. Infective endocarditis",
                 "D. Systemic thromboembolism"],
        answer="B. Atrial fibrillation",
        explanation=(
            "Atrial fibrillation is the most common complication of MS, occurring in up to "
            "40-75% of cases, especially in older patients. Chronic LA dilation from elevated "
            "pressure leads to fibrosis and electrophysiological changes favouring AF. AF "
            "further reduces cardiac output and greatly increases the risk of LA thrombus "
            "and systemic embolism including stroke. (Goldman-Cecil; Braunwald's; Harrison's)"
        ),
        hint="AF = most common complication. Endocarditis is actually uncommon in pure MS."
    ),
    dict(
        num=19, exam_tag="UPSC CMS / INICET",
        stem=(
            "A patient with severe MS develops sudden onset hemiplegia. The most likely "
            "underlying mechanism is:"
        ),
        options=["A. Hypertensive bleed",
                 "B. Cardioembolic stroke from left atrial thrombus",
                 "C. Venous thromboembolism",
                 "D. Carotid atherosclerosis"],
        answer="B. Cardioembolic stroke from left atrial thrombus",
        explanation=(
            "MS with AF leads to blood stasis in the LA (especially the left atrial appendage), "
            "promoting thrombus formation. Embolisation of LA thrombus causes ischaemic "
            "(cardioembolic) stroke. This is the most feared embolic complication. "
            "Anticoagulation with warfarin (target INR 2-3) is indicated in MS with AF, "
            "prior embolic event, or LA thrombus. (Tintinalli's; Creasy-Resnik)"
        ),
        hint="LA appendage thrombus in MS + AF → cardioembolic stroke. Always anticoagulate."
    ),
    dict(
        num=20, exam_tag="NEET PG",
        stem=(
            "Anticoagulation in mitral stenosis is INDICATED in which of the following?"
        ),
        options=[
            "A. Asymptomatic MS with sinus rhythm and MVA 2.0 cm²",
            "B. MS with atrial fibrillation",
            "C. MS with mild dyspnoea on exertion only",
            "D. MS post-PTMC with no residual stenosis"
        ],
        answer="B. MS with atrial fibrillation",
        explanation=(
            "Indications for anticoagulation in MS: (1) Atrial fibrillation, (2) Prior "
            "thromboembolic event, (3) LA thrombus, (4) LA diameter > 55 mm. "
            "Warfarin (INR 2-3) is standard. Asymptomatic MS with sinus rhythm and normal "
            "LA size does not require anticoagulation. (Tintinalli's; Goldman-Cecil)"
        ),
        hint="AF + MS = always anticoagulate. NOACs are NOT preferred in MS (valvular AF = warfarin)."
    ),
    # ── MANAGEMENT ──────────────────────────────────────────────────────────
    dict(
        num=21, exam_tag="NEET PG / UPSC CMS",
        stem=(
            "The treatment of choice for symptomatic severe mitral stenosis with a pliable, "
            "non-calcified valve and no significant MR is:"
        ),
        options=["A. Mitral valve replacement (MVR)",
                 "B. Open surgical commissurotomy",
                 "C. Percutaneous Transvenous Mitral Commissurotomy (PTMC) / balloon valvotomy",
                 "D. Medical management only"],
        answer="C. Percutaneous Transvenous Mitral Commissurotomy (PTMC) / balloon valvotomy",
        explanation=(
            "PTMC (Inoue balloon technique) is the preferred intervention for suitable "
            "candidates: symptomatic severe MS, pliable valve, low Wilkins score (≤8), "
            "no significant MR (≤ mild-moderate), no LA thrombus. Produces commissurotomy "
            "by splitting the fused leaflets, substantially increasing MVA. "
            "(Goldman-Cecil; Tintinalli's; Braunwald's)"
        ),
        hint="Pliable valve + low Wilkins score = PTMC. Heavy calcification / significant MR = MVR."
    ),
    dict(
        num=22, exam_tag="INICET",
        stem=(
            "PTMC (Percutaneous Transvenous Mitral Commissurotomy) is CONTRAINDICATED in:"
        ),
        options=["A. Rheumatic MS with MVA 1.2 cm² in sinus rhythm",
                 "B. MS with left atrial thrombus on TEE",
                 "C. MS with mild mitral regurgitation",
                 "D. Pregnant patient with severe MS"],
        answer="B. MS with left atrial thrombus on TEE",
        explanation=(
            "Absolute contraindications to PTMC: (1) LA thrombus (risk of embolisation during "
            "transseptal puncture), (2) More than moderate MR (would worsen MR). "
            "Pregnancy with severe MS is actually an indication for PTMC (procedure of choice "
            "in pregnancy to avoid teratogenic surgery). A TEE must be done before PTMC to "
            "rule out LA thrombus. (Goldman-Cecil; Textbook of Clinical Echocardiography)"
        ),
        hint="ALWAYS do TEE before PTMC to exclude LA thrombus. LA thrombus = absolute contraindication."
    ),
    dict(
        num=23, exam_tag="UPSC CMS",
        stem=(
            "Rate control in mitral stenosis with atrial fibrillation is best achieved with:"
        ),
        options=["A. Digoxin alone",
                 "B. Beta-blockers or non-dihydropyridine calcium channel blockers",
                 "C. Amiodarone",
                 "D. Flecainide"],
        answer="B. Beta-blockers or non-dihydropyridine calcium channel blockers",
        explanation=(
            "Heart rate control is essential in MS with AF because tachycardia shortens "
            "diastolic filling time, worsening the gradient and symptoms. "
            "Beta-blockers (metoprolol, bisoprolol) or non-DHP CCBs (verapamil, diltiazem) "
            "are first-line for rate control. Digoxin can be used as an adjunct. "
            "(Tintinalli's; Goldman-Cecil)"
        ),
        hint="Slower HR = longer diastole = better LV filling in MS. Beta-blocker = first-line rate control."
    ),
    dict(
        num=24, exam_tag="NEET PG",
        stem=(
            "A 28-year-old pregnant woman at 20 weeks gestation is found to have severe "
            "mitral stenosis with dyspnoea at rest. The preferred intervention is:"
        ),
        options=["A. Mitral valve replacement under cardiopulmonary bypass",
                 "B. Medical management until delivery",
                 "C. Percutaneous balloon mitral valvotomy (PBMV)",
                 "D. Surgical commissurotomy"],
        answer="C. Percutaneous balloon mitral valvotomy (PBMV)",
        explanation=(
            "PBMV/PTMC is the procedure of choice for severe symptomatic MS in pregnancy. "
            "It avoids the risks of cardiopulmonary bypass (which carries high fetal "
            "mortality) and teratogenic exposure. It should be performed after 20 weeks "
            "(organogenesis complete) and with radiation shielding. AHA guidelines recommend "
            "valvuloplasty prior to conception for women with moderate-severe MS planning "
            "pregnancy. (Harrison's 22e; Creasy-Resnik Maternal-Fetal Medicine)"
        ),
        hint="Pregnant + severe MS = PTMC (avoid CPB). Perform after organogenesis (>20 wks)."
    ),
    # ── HIGH-YIELD SPECIAL TOPICS ────────────────────────────────────────────
    dict(
        num=25, exam_tag="INICET",
        stem=(
            "Which of the following physical signs suggests very severe / tight mitral stenosis?"
        ),
        options=["A. Long A2-OS interval",
                 "B. Short A2-OS interval with long diastolic murmur",
                 "C. Soft S1 with absent opening snap",
                 "D. Only A2 if valve is calcified"],
        answer="B. Short A2-OS interval with long diastolic murmur",
        explanation=(
            "In severe/tight MS: (1) A2-OS interval is SHORT (high LA pressure opens valve "
            "quickly after A2). (2) The diastolic murmur occupies most of diastole (longer). "
            "(3) S1 is loud (pliable valve). When the valve becomes heavily calcified, S1 "
            "softens and OS disappears. (Fuster's Heart; Goldman-Cecil)"
        ),
        hint="Short A2-OS + long diastolic murmur = tight MS. Calcified valve = soft S1, no OS."
    ),
    dict(
        num=26, exam_tag="NEET PG",
        stem=(
            "The 'double density' sign on PA chest X-ray in mitral stenosis indicates:"
        ),
        options=["A. Right ventricular enlargement",
                 "B. Left atrial enlargement producing a second right heart border shadow",
                 "C. Aortic knuckle prominence",
                 "D. Pulmonary artery dilatation"],
        answer="B. Left atrial enlargement producing a second right heart border shadow",
        explanation=(
            "The enlarged LA projects beyond the right border of the heart on the PA CXR, "
            "creating a 'double density' or 'double contour' sign at the right heart border "
            "(right and left atrial silhouettes overlapping). Straightening of the left heart "
            "border (LAA prominence) + double density at right = classic MS CXR. "
            "(Goldman-Cecil Medicine)"
        ),
        hint="Double density = right border. Straightening = left border. Both from LAE in MS."
    ),
    dict(
        num=27, exam_tag="UPSC CMS / INICET",
        stem=(
            "In mitral stenosis, which of the following is NOT a feature of pulmonary "
            "hypertension developing as a complication?"
        ),
        options=["A. Right ventricular hypertrophy",
                 "B. Tricuspid regurgitation",
                 "C. Left ventricular hypertrophy",
                 "D. Loud P2"],
        answer="C. Left ventricular hypertrophy",
        explanation=(
            "Pulmonary hypertension in MS causes RIGHT-sided pressure overload. Features "
            "include: RVH, loud P2, parasternal heave, tricuspid regurgitation, pulmonary "
            "regurgitation (Graham-Steell murmur), and eventually RV failure. LVH does NOT "
            "occur because MS actually reduces LV preload (inflow obstruction). "
            "(Tintinalli's; Goldman-Cecil; Fuster's Heart)"
        ),
        hint="MS → RV pressure overload (not LV). LVH is absent; RVH is the finding."
    ),
    dict(
        num=28, exam_tag="NEET PG",
        stem=(
            "Graham-Steell murmur, heard in mitral stenosis with severe pulmonary hypertension, is:"
        ),
        options=["A. Pansystolic murmur at apex",
                 "B. Early diastolic, high-pitched murmur at left sternal border",
                 "C. Mid-systolic click",
                 "D. Low-pitched mid-diastolic murmur"],
        answer="B. Early diastolic, high-pitched murmur at left sternal border",
        explanation=(
            "Graham-Steell murmur is an early diastolic, high-pitched, decrescendo murmur "
            "heard at the left sternal border. It results from pulmonary regurgitation (PR) "
            "secondary to severe pulmonary hypertension in MS. It must be differentiated from "
            "aortic regurgitation (AR) which is also early diastolic but radiates to apex. "
        ),
        hint="Graham-Steell = PR from PHT in MS. Mimics AR but pulmonary in origin."
    ),
    dict(
        num=29, exam_tag="INICET",
        stem=(
            "Trans-septal puncture is performed as part of PTMC to access the:"
        ),
        options=["A. Right atrium from the aorta",
                 "B. Left atrium from the right atrium via the interatrial septum",
                 "C. Left ventricle from the right ventricle",
                 "D. Pulmonary artery from the right ventricle"],
        answer="B. Left atrium from the right atrium via the interatrial septum",
        explanation=(
            "In PTMC (Inoue balloon technique), the catheter is advanced from the femoral "
            "vein → inferior vena cava → right atrium. A trans-septal puncture is made at "
            "the fossa ovalis to enter the left atrium. The balloon catheter then crosses "
            "the stenosed mitral valve into the LV and is inflated to perform commissurotomy. "
            "TEE guidance reduces complications (cardiac tamponade in ~5%). (Braunwald's)"
        ),
        hint="PTMC = transseptal approach via fossa ovalis (RA→LA). TEE guided."
    ),
    dict(
        num=30, exam_tag="NEET PG / UPSC CMS",
        stem=(
            "What is the most common cause of restenosis after successful PTMC for rheumatic "
            "mitral stenosis?"
        ),
        options=["A. Calcification of the mitral ring",
                 "B. Re-fusion of commissures",
                 "C. Papillary muscle dysfunction",
                 "D. Valve thrombosis"],
        answer="B. Re-fusion of commissures",
        explanation=(
            "After PTMC, the commissures have been split. If rheumatic activity continues "
            "(recurrent streptococcal pharyngitis without prophylaxis), progressive inflammatory "
            "changes can lead to re-fusion of the commissures and restenosis. This is why "
            "secondary prophylaxis with benzathine penicillin is mandatory after rheumatic "
            "fever. Rate of restenosis is ~5-7% at 7 years in ideal candidates. (Braunwald's)"
        ),
        hint="Restenosis after PTMC = re-fusion of commissures. Prevent with penicillin prophylaxis."
    ),
]

# ── QUICK REVISION TABLE ───────────────────────────────────────────────────────
def quick_reference_table():
    items = []
    items.append(Spacer(1, 4*mm))
    items.append(section_banner("QUICK REVISION: Key Facts at a Glance", DARK_BLUE))
    items.append(Spacer(1, 3*mm))

    data = [
        ["Parameter", "Value / Feature"],
        ["Normal MVA", "4-6 cm²"],
        ["Mild MS (MVA)", "> 1.5 cm²"],
        ["Moderate MS (MVA)", "1.0-1.5 cm²"],
        ["Severe MS (MVA)", "≤ 1.5 cm² (AHA/ACC Stage C-D)"],
        ["Very Severe MS (MVA)", "< 1.0 cm²"],
        ["PHT in severe MS", "≥ 150 ms  (very severe ≥ 220 ms)"],
        ["MVA by PHT formula", "MVA (cm²) = 220 / PHT (ms)"],
        ["Wilkins Score ideal for PTMC", "≤ 8 (max possible = 16)"],
        ["S2-OS interval in severe MS", "Shortened (< 0.08 s)"],
        ["Most common cause (India)", "Rheumatic heart disease"],
        ["Most common complication", "Atrial fibrillation"],
        ["Most common presenting symptom", "Exertional dyspnea"],
        ["ECG finding (sinus rhythm)", "P mitrale (broad, notched P waves)"],
        ["CXR early sign", "Straightening of left heart border (LAE)"],
        ["Murmur character", "Low-pitched mid-diastolic rumble with presystolic accentuation"],
        ["Presystolic accentuation absent", "Atrial fibrillation"],
        ["Opening snap absent", "Calcified/fibrotic valve"],
        ["Ortner syndrome", "LA enlargement → Left RLN compression → hoarseness"],
        ["Graham-Steell murmur", "Pulmonary regurgitation from pulmonary hypertension in MS"],
        ["Treatment of choice", "PTMC (pliable valve, Wilkins ≤ 8, no LA thrombus, ≤ mild MR)"],
        ["Contraindication to PTMC", "LA thrombus, > moderate MR"],
        ["Anticoagulation indication", "AF, prior embolism, LA thrombus, LA diameter > 55 mm"],
        ["MS in pregnancy", "PTMC is preferred (after 20 wks; avoid CPB)"],
        ["Kerley B lines", "Interlobular septal thickening from pulmonary venous HTN"],
    ]

    col_widths = [70*mm, 100*mm]
    tbl = Table(data, colWidths=col_widths, repeatRows=1)
    tbl.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
        ("TEXTCOLOR", (0,0), (-1,0), colors.white),
        ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
        ("FONTSIZE", (0,0), (-1,0), 9.5),
        ("BACKGROUND", (0,1), (-1,-1), colors.white),
        ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.white, LIGHT_BLUE]),
        ("FONTNAME", (0,1), (-1,-1), "Helvetica"),
        ("FONTSIZE", (0,1), (-1,-1), 9),
        ("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
        ("TEXTCOLOR", (0,1), (0,-1), DARK_BLUE),
        ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#AAAAAA")),
        ("TOPPADDING", (0,0), (-1,-1), 4),
        ("BOTTOMPADDING", (0,0), (-1,-1), 4),
        ("LEFTPADDING", (0,0), (-1,-1), 5),
        ("RIGHTPADDING", (0,0), (-1,-1), 5),
        ("ALIGN", (0,0), (-1,-1), "LEFT"),
        ("VALIGN", (0,0), (-1,-1), "MIDDLE"),
    ]))
    items.append(tbl)
    return items

# ══════════════════════════════════════════════════════════════════════════════
# COVER PAGE
# ══════════════════════════════════════════════════════════════════════════════

def cover_page():
    items = []
    # top banner
    cover_data = [
        [Paragraph("MITRAL STENOSIS", COVER_TITLE)],
        [Paragraph("Previous Year Questions Compilation", COVER_SUB)],
        [Paragraph("NEET PG  ·  UPSC CMS  ·  INICET", COVER_SUB)],
    ]
    cover_tbl = Table(cover_data, colWidths=[174*mm])
    cover_tbl.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
        ("TOPPADDING", (0,0), (-1,-1), 10),
        ("BOTTOMPADDING", (0,0), (-1,-1), 10),
        ("LEFTPADDING", (0,0), (-1,-1), 8),
        ("RIGHTPADDING", (0,0), (-1,-1), 8),
        ("ROUNDEDCORNERS", [8]),
    ]))
    items.append(cover_tbl)
    items.append(Spacer(1, 8*mm))

    # Info box
    info_data = [
        [Paragraph("Topic", ParagraphStyle("lbl", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_BLUE)),
         Paragraph("Mitral Stenosis — Cardiology", ParagraphStyle("val", fontSize=9, fontName="Helvetica"))],
        [Paragraph("Exams Covered", ParagraphStyle("lbl", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_BLUE)),
         Paragraph("NEET PG, UPSC CMS, INICET", ParagraphStyle("val", fontSize=9, fontName="Helvetica"))],
        [Paragraph("Total Questions", ParagraphStyle("lbl", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_BLUE)),
         Paragraph("30 MCQs + Quick Revision Table", ParagraphStyle("val", fontSize=9, fontName="Helvetica"))],
        [Paragraph("Topics", ParagraphStyle("lbl", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_BLUE)),
         Paragraph("Etiology · Pathophysiology · Clinical Features · Investigations · Severity · Complications · Management",
                   ParagraphStyle("val", fontSize=9, fontName="Helvetica"))],
        [Paragraph("Sources", ParagraphStyle("lbl", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_BLUE)),
         Paragraph("Harrison's 22e · Braunwald's Heart Disease · Goldman-Cecil Medicine · Fuster's Heart 15e · Tintinalli's EM",
                   ParagraphStyle("val", fontSize=9, fontName="Helvetica"))],
    ]
    info_tbl = Table(info_data, colWidths=[40*mm, 130*mm])
    info_tbl.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), LIGHT_GRAY),
        ("BOX", (0,0), (-1,-1), 1, MED_BLUE),
        ("INNERGRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
        ("TOPPADDING", (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LEFTPADDING", (0,0), (-1,-1), 6),
        ("RIGHTPADDING", (0,0), (-1,-1), 6),
    ]))
    items.append(info_tbl)
    items.append(Spacer(1, 6*mm))

    # How to use
    items.append(Paragraph("How to Use This Compilation", TOPIC_HEAD))
    for bullet in [
        "Each MCQ is labelled with the exam it is commonly asked in.",
        "Read the stem carefully — pay attention to the clinical scenario.",
        "The answer box shows the correct option with a concise explanation.",
        "Exam Tips highlight high-yield patterns frequently tested.",
        "Use the Quick Revision Table at the end for last-minute review.",
    ]:
        items.append(Paragraph(f"• {bullet}", BULLET_STYLE))
    items.append(Spacer(1, 4*mm))
    items.append(PageBreak())
    return items

# ══════════════════════════════════════════════════════════════════════════════
# SECTION HEADERS PER TOPIC
# ══════════════════════════════════════════════════════════════════════════════

section_markers = {
    1:  ("SECTION 1: Etiology & Pathophysiology", MED_BLUE),
    5:  ("SECTION 2: Clinical Features", colors.HexColor("#1B6E2E")),
    11: ("SECTION 3: Investigations & Diagnosis", colors.HexColor("#7B3F00")),
    16: ("SECTION 4: Severity Classification & Echo Score", colors.HexColor("#5B2D8E")),
    18: ("SECTION 5: Complications", colors.HexColor("#B8390E")),
    21: ("SECTION 6: Management", colors.HexColor("#1A5276")),
    25: ("SECTION 7: High-Yield Special Topics", DARK_BLUE),
}

# ══════════════════════════════════════════════════════════════════════════════
# BUILD STORY
# ══════════════════════════════════════════════════════════════════════════════

story = []
story.extend(cover_page())

for q in questions:
    n = q["num"]
    if n in section_markers:
        title, col = section_markers[n]
        story.append(section_banner(title, col))
        story.append(Spacer(1, 3*mm))
    story.append(mcq_block(
        num=q["num"],
        exam_tag=q["exam_tag"],
        stem=q["stem"],
        options=q["options"],
        answer=q["answer"],
        explanation=q["explanation"],
        hint=q.get("hint"),
    ))

story.extend(quick_reference_table())

# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF written to {OUTPUT}")
Running Command

cd /tmp/workspace/mitral-stenosis-pyq && python generate_pyq.py

Running Command

ls -lh /tmp/workspace/mitral-stenosis-pyq/Mitral_Stenosis_PYQ_Compilation.pdf

Your Mitral Stenosis PYQ Compilation PDF is ready for download:

Mitral Stenosis PYQ Compilation

PDF Document · PDF


What's Inside

30 MCQs across 7 topic-based sections, each with the correct answer, explanation, and an exam tip box. Sourced from Harrison's 22e, Braunwald's, Goldman-Cecil, Fuster's Heart 15e, and Tintinalli's.
SectionQuestionsKey Topics
1 - Etiology & PathophysiologyQ1-4RHD, MVA, commissural fusion, LA-LV gradient
2 - Clinical FeaturesQ5-10Dyspnea, Ortner's, presystolic accentuation, OS, apical impulse
3 - InvestigationsQ11-15Echo (IOC), PHT formula, CXR signs, Kerley B, P mitrale
4 - Severity & Echo ScoreQ16-17MVA classification, Wilkins score components
5 - ComplicationsQ18-20AF, cardioembolic stroke, anticoagulation indications
6 - ManagementQ21-24PTMC indications/contraindications, rate control, pregnancy
7 - High-Yield Special TopicsQ25-30A2-OS interval, double density CXR, Graham-Steell, transseptal approach, restenosis
Quick Revision Table-25 key facts in a single printable table

Top High-Yield Points for Exams

  • MVA = 220 / PHT (ms) - this formula is directly tested
  • Wilkins score ≤ 8 = ideal for PTMC (4 parameters: Mobility, Thickening, Calcification, Subvalvular)
  • Presystolic accentuation disappears in AF (no atrial kick)
  • Shorter A2-OS interval = more severe MS
  • Ortner's syndrome = hoarseness from left RLN compression by giant LA
  • PTMC is the procedure of choice in pregnancy (avoid cardiopulmonary bypass)
  • LA thrombus = absolute contraindication to PTMC (always do TEE first)
  • Graham-Steell murmur = pulmonary regurgitation from pulmonary hypertension in MS

Similarly for entire cardiology pyqs compilation from neet pg,upsc cms,inicet exams

Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources

Similarly for entire cardiology pyqs compilation from neet pg,upsc cms,inicet exams

Running Command

mkdir -p /tmp/workspace/cardiology-pyq && echo "dir ready"

Similarly for entire cardiology pyqs compilation from neet pg,upsc cms,inicet exams

Your credits are exhausted. You can purchase a top-up or subscribe to a plan to continue using Orris. If you're already subscribed, your daily credits will reset tomorrow.
This is a shared conversation. Sign in to Orris to start your own chat.