Mitral stenosis pyqs pdf compilation from neet pg,upsc cms,inicet
mitral stenosis NEET PG UPSC CMS INICET previous year questions PYQ
mkdir -p /tmp/workspace/mitral-stenosis-pyq && ls /tmp/workspace/mitral-stenosis-pyq/
~/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}")
cd /tmp/workspace/mitral-stenosis-pyq && python generate_pyq.py
ls -lh /tmp/workspace/mitral-stenosis-pyq/Mitral_Stenosis_PYQ_Compilation.pdf
Mitral Stenosis PYQ Compilation
PDF Document · PDF
| Section | Questions | Key Topics |
|---|---|---|
| 1 - Etiology & Pathophysiology | Q1-4 | RHD, MVA, commissural fusion, LA-LV gradient |
| 2 - Clinical Features | Q5-10 | Dyspnea, Ortner's, presystolic accentuation, OS, apical impulse |
| 3 - Investigations | Q11-15 | Echo (IOC), PHT formula, CXR signs, Kerley B, P mitrale |
| 4 - Severity & Echo Score | Q16-17 | MVA classification, Wilkins score components |
| 5 - Complications | Q18-20 | AF, cardioembolic stroke, anticoagulation indications |
| 6 - Management | Q21-24 | PTMC indications/contraindications, rate control, pregnancy |
| 7 - High-Yield Special Topics | Q25-30 | A2-OS interval, double density CXR, Graham-Steell, transseptal approach, restenosis |
| Quick Revision Table | - | 25 key facts in a single printable table |
Similarly for entire cardiology pyqs compilation from neet pg,upsc cms,inicet exams
Similarly for entire cardiology pyqs compilation from neet pg,upsc cms,inicet exams
mkdir -p /tmp/workspace/cardiology-pyq && echo "dir ready"
Similarly for entire cardiology pyqs compilation from neet pg,upsc cms,inicet exams