Pan systolic murmer heared in which heart condition
| Condition | Best heard | Radiation | Special maneuver |
|---|---|---|---|
| MR | Apex | Axilla | Louder with expiration/hand grip |
| TR | Left sternal border | - | Louder with inspiration (Carvallo's sign) |
| VSD | Lower left sternal edge | Widely | Thrill often palpable |
Valvular heart disease
Which aspect of valvular heart disease would you like a detailed breakdown of?
| Condition | Best heard | Radiation | Special maneuver |
|---|---|---|---|
| MR | Apex | Axilla | Louder with expiration/hand grip |
| TR | Left sternal border | - | Louder with inspiration (Carvallo's sign) |
| VSD | Lower left sternal edge | Widely | Thrill often palpable |
Cardicac case negative history taking
How to study cardiac case
Create a printable cardiac case history & exam proforma
mkdir -p /tmp/workspace/cardiac-proforma && ls -la /tmp/workspace/
~/cardiac-proforma/build_proforma.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.lib import colors
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, ListFlowable, ListItem)
OUT = "/tmp/workspace/cardiac-proforma/Cardiac_Case_Proforma.pdf"
doc = SimpleDocTemplate(OUT, pagesize=A4,
topMargin=14*mm, bottomMargin=14*mm,
leftMargin=16*mm, rightMargin=16*mm,
title="Cardiac Case History & Examination Proforma")
styles = getSampleStyleSheet()
title_style = ParagraphStyle('TitleC', parent=styles['Title'], fontSize=16, alignment=TA_CENTER, spaceAfter=2)
sub_style = ParagraphStyle('SubC', parent=styles['Normal'], fontSize=9, alignment=TA_CENTER, textColor=colors.grey, spaceAfter=10)
section_style = ParagraphStyle('Section', parent=styles['Heading2'], fontSize=12, textColor=colors.HexColor('#1a3d5c'),
spaceBefore=10, spaceAfter=4, borderPadding=0)
sub_section_style = ParagraphStyle('SubSection', parent=styles['Heading3'], fontSize=10.3, textColor=colors.HexColor('#333333'),
spaceBefore=6, spaceAfter=2)
body_style = ParagraphStyle('Body', parent=styles['Normal'], fontSize=9.3, leading=13)
note_style = ParagraphStyle('Note', parent=styles['Normal'], fontSize=8, textColor=colors.grey, leading=11)
line_style = ParagraphStyle('LineItem', parent=styles['Normal'], fontSize=9.3, leading=15)
elements = []
def section_header(text):
elements.append(HRFlowable(width="100%", thickness=1.1, color=colors.HexColor('#1a3d5c'), spaceBefore=2, spaceAfter=2))
elements.append(Paragraph(text, section_style))
def blank_line(label, width_frac=1.0):
"""A label with an underscore line for writing, as a table row."""
t = Table([[Paragraph(f"<b>{label}</b>", line_style), Paragraph(" ", line_style)]],
colWidths=[45*mm, 130*mm])
t.setStyle(TableStyle([
('LINEBELOW', (1,0), (1,0), 0.6, colors.black),
('VALIGN', (0,0), (-1,-1), 'BOTTOM'),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 2),
]))
elements.append(t)
def checkbox_row(items, cols=3):
"""items: list of strings -> render as checkbox grid."""
rows = []
row = []
for i, item in enumerate(items):
row.append(Paragraph(f"□ {item}", body_style))
if len(row) == cols:
rows.append(row)
row = []
if row:
while len(row) < cols:
row.append(Paragraph("", body_style))
rows.append(row)
colw = (178*mm)/cols
t = Table(rows, colWidths=[colw]*cols)
t.setStyle(TableStyle([
('TOPPADDING', (0,0), (-1,-1), 2),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 2),
]))
elements.append(t)
def free_lines(n=2, label=None):
if label:
elements.append(Paragraph(f"<b>{label}</b>", body_style))
for _ in range(n):
elements.append(Spacer(1, 4))
elements.append(HRFlowable(width="100%", thickness=0.5, color=colors.grey))
def bullet_list(items):
lf = ListFlowable(
[ListItem(Paragraph(i, body_style), bulletColor=colors.HexColor('#1a3d5c')) for i in items],
bulletType='bullet', leftIndent=12, bulletFontSize=6, spaceBefore=2, spaceAfter=2
)
elements.append(lf)
# ---------------- HEADER ----------------
elements.append(Paragraph("CARDIAC CASE - HISTORY & EXAMINATION PROFORMA", title_style))
elements.append(Paragraph("Clinical Medicine Worksheet | For educational and ward/exam use", sub_style))
# Patient Demographics
demo_table = Table([
[Paragraph("<b>Name:</b>", body_style), "", Paragraph("<b>Age/Sex:</b>", body_style), "", Paragraph("<b>Date:</b>", body_style), ""],
[Paragraph("<b>Occupation:</b>", body_style), "", Paragraph("<b>Address:</b>", body_style), "", "", ""],
[Paragraph("<b>IP/OP No:</b>", body_style), "", Paragraph("<b>Informant:</b>", body_style), "", Paragraph("<b>Reliability:</b>", body_style), ""],
], colWidths=[22*mm, 38*mm, 22*mm, 38*mm, 22*mm, 36*mm])
demo_table.setStyle(TableStyle([
('LINEBELOW', (1,0), (1,-1), 0.5, colors.black),
('LINEBELOW', (3,0), (3,-1), 0.5, colors.black),
('LINEBELOW', (5,0), (5,-1), 0.5, colors.black),
('VALIGN', (0,0), (-1,-1), 'BOTTOM'),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('FONTSIZE', (0,0), (-1,-1), 9),
]))
elements.append(demo_table)
# ---------------- 1. PRESENTING COMPLAINTS ----------------
section_header("1. CHIEF COMPLAINTS (with duration)")
free_lines(3)
# ---------------- 2. HISTORY OF PRESENT ILLNESS ----------------
section_header("2. HISTORY OF PRESENT ILLNESS")
elements.append(Paragraph("<b>a) Positive History</b> - describe onset, progression, character, aggravating/relieving factors for each complaint:", body_style))
checkbox_row(["Chest pain", "Dyspnea (grade NYHA I-IV)", "Palpitations", "Syncope/pre-syncope",
"Pedal edema", "Orthopnea/PND", "Fatigue", "Cough/Hemoptysis", "Fever"])
free_lines(4)
elements.append(Paragraph("<b>b) Negative History</b> - tick relevant absent symptoms / risk factors:", body_style))
elements.append(Paragraph("<i>Symptoms:</i>", note_style))
checkbox_row(["No chest pain", "No palpitations", "No dyspnea/orthopnea/PND", "No pedal edema",
"No syncope", "No fatigue", "No cough/hemoptysis", "No fever", "No hoarseness of voice"])
elements.append(Paragraph("<i>Risk factors:</i>", note_style))
checkbox_row(["No diabetes mellitus", "No hypertension", "No dyslipidemia", "No smoking",
"No alcohol use", "No rheumatic fever h/o", "No obesity", "No sedentary lifestyle",
"No FH of premature CAD/SCD"])
elements.append(Paragraph("<i>Complications:</i>", note_style))
checkbox_row(["No stroke/TIA", "No jaundice/abdominal distension", "No joint pains/rash",
"No weight loss/night sweats", "No previous embolic event"])
# ---------------- 3. PAST / PERSONAL / FAMILY / DRUG HISTORY ----------------
section_header("3. PAST, PERSONAL, FAMILY & DRUG HISTORY")
blank_line("Past History:")
blank_line(" (Similar episodes / hospitalization / cardiac surgery / intervention)")
elements.append(Spacer(1,4))
blank_line("Personal History:")
blank_line(" (Diet, addictions, sleep, bowel/bladder)")
elements.append(Spacer(1,4))
blank_line("Family History:")
blank_line(" (Premature CAD, sudden death, congenital heart disease)")
elements.append(Spacer(1,4))
blank_line("Drug/Allergy History:")
blank_line(" (Current medications, cardiotoxic drugs, known allergies)")
elements.append(PageBreak())
# ---------------- 4. GENERAL EXAMINATION ----------------
section_header("4. GENERAL EXAMINATION")
checkbox_row(["Build & nutrition", "Pallor", "Cyanosis (central/peripheral)", "Clubbing",
"Icterus", "Pedal edema", "Lymphadenopathy", "Xanthelasma"])
elements.append(Paragraph("<b>Stigmata of endocarditis/rheumatic activity:</b>", body_style))
checkbox_row(["Malar flush", "Osler's nodes", "Janeway lesions", "Splinter hemorrhages",
"Petechiae", "Roth spots"])
elements.append(Paragraph("<b>Vitals</b>", sub_section_style))
vit_table = Table([
[Paragraph("Pulse rate:", body_style), "", Paragraph("Rhythm:", body_style), "", Paragraph("Volume:", body_style), ""],
[Paragraph("Character:", body_style), "", Paragraph("Vessel wall:", body_style), "", Paragraph("Radio-femoral delay:", body_style), ""],
[Paragraph("BP (Right arm):", body_style), "", Paragraph("BP (Left arm):", body_style), "", Paragraph("BP (Lower limb):", body_style), ""],
[Paragraph("JVP:", body_style), "", Paragraph("Respiratory rate:", body_style), "", Paragraph("Temperature:", body_style), ""],
[Paragraph("SpO2:", body_style), "", Paragraph("BMI:", body_style), "", "", ""],
], colWidths=[28*mm, 25*mm, 30*mm, 25*mm, 32*mm, 20*mm])
vit_table.setStyle(TableStyle([
('LINEBELOW', (1,0), (1,-1), 0.5, colors.black),
('LINEBELOW', (3,0), (3,-1), 0.5, colors.black),
('LINEBELOW', (5,0), (5,-1), 0.5, colors.black),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('FONTSIZE', (0,0), (-1,-1), 9),
]))
elements.append(vit_table)
# ---------------- 5. LOCAL EXAMINATION - CVS ----------------
section_header("5. LOCAL EXAMINATION - CARDIOVASCULAR SYSTEM")
elements.append(Paragraph("<b>Inspection</b>", sub_section_style))
checkbox_row(["Precordium shape/symmetry", "Visible apical pulsation", "Parasternal pulsation",
"Scars/sinuses", "Engorged neck veins", "Chest wall deformity", "Epigastric pulsation"])
free_lines(1)
elements.append(Paragraph("<b>Palpation</b>", sub_section_style))
pal_table = Table([
[Paragraph("Apex beat - location:", body_style), "", Paragraph("Character:", body_style), ""],
[Paragraph("Parasternal heave:", body_style), "", Paragraph("Thrills (site/timing):", body_style), ""],
[Paragraph("Palpable P2:", body_style), "", Paragraph("Palpable S1/S3/S4:", body_style), ""],
], colWidths=[38*mm, 45*mm, 38*mm, 46*mm])
pal_table.setStyle(TableStyle([
('LINEBELOW', (1,0), (1,-1), 0.5, colors.black),
('LINEBELOW', (3,0), (3,-1), 0.5, colors.black),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('FONTSIZE', (0,0), (-1,-1), 9),
]))
elements.append(pal_table)
free_lines(1)
elements.append(Paragraph("<b>Percussion</b> (cardiac dullness borders, if indicated)", sub_section_style))
free_lines(1)
elements.append(Paragraph("<b>Auscultation</b>", sub_section_style))
ausc_data = [
[Paragraph("<b>Area</b>", body_style), Paragraph("<b>S1</b>", body_style), Paragraph("<b>S2</b>", body_style),
Paragraph("<b>Added sounds</b>", body_style), Paragraph("<b>Murmur (timing/grade/radiation)</b>", body_style)],
[Paragraph("Mitral (apex)", body_style), "", "", "", ""],
[Paragraph("Tricuspid (LLSB)", body_style), "", "", "", ""],
[Paragraph("Pulmonary (2nd L ICS)", body_style), "", "", "", ""],
[Paragraph("Aortic (2nd R ICS)", body_style), "", "", "", ""],
]
ausc_table = Table(ausc_data, colWidths=[30*mm, 15*mm, 15*mm, 34*mm, 74*mm])
ausc_table.setStyle(TableStyle([
('GRID', (0,0), (-1,-1), 0.5, colors.grey),
('BACKGROUND', (0,0), (-1,0), colors.HexColor('#dce6f0')),
('FONTSIZE', (0,0), (-1,-1), 8.5),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
]))
elements.append(ausc_table)
elements.append(Spacer(1,4))
elements.append(Paragraph("<i>Note: for any murmur, characterize timing, site of max intensity, radiation, grade (1-6), "
"and effect of posture / respiration / Valsalva / hand grip / squatting.</i>", note_style))
# ---------------- 6. OTHER SYSTEMS ----------------
section_header("6. EXAMINATION OF OTHER SYSTEMS")
blank_line("Respiratory system:")
blank_line(" (basal crepitations, pleural effusion)")
elements.append(Spacer(1,4))
blank_line("Abdomen:")
blank_line(" (hepatomegaly, ascites, splenomegaly)")
elements.append(Spacer(1,4))
blank_line("CNS:")
blank_line(" (focal deficits - embolic stroke)")
elements.append(PageBreak())
# ---------------- 7. SUMMARY & DIAGNOSIS ----------------
section_header("7. SUMMARY")
free_lines(3)
section_header("8. PROVISIONAL DIAGNOSIS")
free_lines(2)
section_header("9. DIFFERENTIAL DIAGNOSES (with justification)")
free_lines(4)
section_header("10. INVESTIGATIONS")
checkbox_row(["ECG", "Chest X-ray", "2D Echo", "Troponin/CK-MB", "BNP/NT-proBNP",
"CBC, RFT, LFT", "Lipid profile", "Blood culture (if IE suspected)", "Coagulation profile"])
free_lines(2, label="Findings summary:")
section_header("11. FINAL DIAGNOSIS")
free_lines(2)
section_header("12. MANAGEMENT PLAN")
free_lines(4)
# Footer
elements.append(Spacer(1, 10))
elements.append(HRFlowable(width="100%", thickness=0.8, color=colors.grey))
elements.append(Paragraph("Prepared for clinical/educational use - not a substitute for institutional case-sheet formats.",
note_style))
doc.build(elements)
print("PDF created:", OUT)
cd /tmp/workspace/cardiac-proforma && python3 build_proforma.py
cd /tmp/workspace/cardiac-proforma && python3 -c " from pypdf import PdfReader r = PdfReader('Cardiac_Case_Proforma.pdf') print('Pages:', len(r.pages)) " ls -la /tmp/workspace/cardiac-proforma/
Cardiac Case Proforma
PDF Document · PDF
Viva questions that can be asked in cardiac case
Viva questions asked in a cardiac case presentation
Viva question and answer for cardiac case presentation
Viva questions in cardiac for a final year mbbs students
Ask viva on repiratory case
| Finding | Consolidation | Pleural effusion | Pneumothorax | Collapse |
|---|---|---|---|---|
| Trachea | Central | Shifted away (if massive) | Shifted away (if tension) | Shifted toward |
| Percussion | Dull | Stony dull | Hyperresonant | Dull |
| Breath sounds | Bronchial | Absent/reduced | Absent/reduced | Absent/reduced |
| Vocal resonance | Increased | Decreased | Decreased | Decreased |
Viva format
By 'viva format' do you mean:
| Condition | Best heard | Radiation | Special maneuver |
|---|---|---|---|
| MR | Apex | Axilla | Louder with expiration/hand grip |
| TR | Left sternal border | - | Louder with inspiration (Carvallo's sign) |
| VSD | Lower left sternal edge | Widely | Thrill often palpable |
Cardiac Case Proforma
PDF Document · PDF
| Finding | Consolidation | Pleural effusion | Pneumothorax | Collapse |
|---|---|---|---|---|
| Trachea | Central | Shifted away (if massive) | Shifted away (if tension) | Shifted toward |
| Percussion | Dull | Stony dull | Hyperresonant | Dull |
| Breath sounds | Bronchial | Absent/reduced | Absent/reduced | Absent/reduced |
| Vocal resonance | Increased | Decreased | Decreased | Decreased |
ls -la /tmp/workspace/cardiac-proforma/ 2>/dev/null; mkdir -p /tmp/workspace/viva-qa
~/viva-qa/build_viva_qa.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER
from reportlab.lib import colors
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, HRFlowable, PageBreak)
OUT = "/tmp/workspace/viva-qa/Cardiac_Respiratory_Viva_QA.pdf"
doc = SimpleDocTemplate(OUT, pagesize=A4,
topMargin=14*mm, bottomMargin=14*mm,
leftMargin=16*mm, rightMargin=16*mm,
title="Cardiac & Respiratory Case Viva Q&A")
styles = getSampleStyleSheet()
title_style = ParagraphStyle('TitleC', parent=styles['Title'], fontSize=16, alignment=TA_CENTER, spaceAfter=2)
sub_style = ParagraphStyle('SubC', parent=styles['Normal'], fontSize=9, alignment=TA_CENTER, textColor=colors.grey, spaceAfter=10)
part_style = ParagraphStyle('Part', parent=styles['Heading1'], fontSize=15, textColor=colors.white,
backColor=colors.HexColor('#1a3d5c'), alignment=TA_CENTER,
spaceBefore=0, spaceAfter=12, borderPadding=8)
section_style = ParagraphStyle('Section', parent=styles['Heading2'], fontSize=11.5, textColor=colors.HexColor('#1a3d5c'),
spaceBefore=10, spaceAfter=4)
q_style = ParagraphStyle('Q', parent=styles['Normal'], fontSize=9.6, leading=13, spaceBefore=6,
textColor=colors.HexColor('#0d2436'), fontName='Helvetica-Bold')
a_style = ParagraphStyle('A', parent=styles['Normal'], fontSize=9.3, leading=13, spaceBefore=2, spaceAfter=4,
leftIndent=10)
note_style = ParagraphStyle('Note', parent=styles['Normal'], fontSize=8, textColor=colors.grey, leading=11)
elements = []
def cover():
elements.append(Spacer(1, 60))
elements.append(Paragraph("CARDIAC & RESPIRATORY CASE", title_style))
elements.append(Paragraph("VIVA QUESTIONS & ANSWERS", title_style))
elements.append(Paragraph("Final Year MBBS Clinical Exam Preparation", sub_style))
elements.append(Spacer(1, 20))
elements.append(HRFlowable(width="60%", thickness=1, color=colors.HexColor('#1a3d5c'), hAlign='CENTER'))
elements.append(Spacer(1, 20))
elements.append(Paragraph("How to use this sheet:", q_style))
elements.append(Paragraph(
"Cover the answer column, read each question, answer out loud as if to an examiner, "
"then check against the model answer. Focus on explaining the reasoning/mechanism, not just recalling the fact.",
a_style))
elements.append(PageBreak())
def part_header(text):
elements.append(Paragraph(text, part_style))
def section(text):
elements.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#1a3d5c'), spaceBefore=2, spaceAfter=2))
elements.append(Paragraph(text, section_style))
def qa(q, a):
elements.append(Paragraph("Q: " + q, q_style))
elements.append(Paragraph("A: " + a, a_style))
cover()
# ================= PART 1: CARDIAC =================
part_header("PART 1 — CARDIAC CASE")
section("History")
qa("Why do you ask about childhood sore throat, joint pains, or chorea?",
"To screen for a past history of rheumatic fever, the leading cause of mitral and aortic valve disease in many settings, especially mitral stenosis.")
qa("What is the significance of orthopnea and PND?",
"Both reflect pulmonary venous congestion from left heart failure. Orthopnea occurs on lying flat due to redistribution of blood centrally; PND is a more severe nocturnal form that wakes the patient from sleep.")
qa("Why is family history relevant in a cardiac case?",
"Screens for inherited conditions: premature CAD, sudden cardiac death (channelopathies, cardiomyopathy), and congenital heart disease.")
section("General Examination / Vitals")
qa("What are the peripheral signs of aortic regurgitation?",
"Corrigan's sign, water-hammer/collapsing pulse, wide pulse pressure, De Musset's sign, Quincke's sign, Duroziez's sign, Traube's sign, and Muller's sign.")
qa("What causes a collapsing (water-hammer) pulse?",
"Any condition with wide pulse pressure and rapid diastolic runoff: aortic regurgitation, PDA, large AV fistula, thyrotoxicosis, severe anemia.")
qa("What does an elevated JVP with a prominent 'a' wave vs a large 'v' wave signify?",
"Large 'a' wave: forceful atrial contraction against resistance (tricuspid stenosis, pulmonary hypertension). Large 'v'/cv wave: tricuspid regurgitation.")
qa("What is pulsus paradoxus?",
"An exaggerated fall (>10 mmHg) in systolic BP during inspiration; seen in cardiac tamponade, severe asthma, constrictive pericarditis.")
section("Palpation")
qa("Differentiate a heaving apex from a tapping apex.",
"Heaving (sustained, forceful) apex = pressure or volume overload with hypertrophy (AS, hypertension, AR/MR). Tapping apex = palpable, accentuated S1 of mitral stenosis, not true hypertrophy.")
qa("What does a parasternal heave indicate?",
"Right ventricular hypertrophy, usually from pulmonary hypertension or pulmonary/tricuspid valve disease.")
qa("How do you grade a thrill?",
"A thrill corresponds to a murmur of grade 4 or higher on the Levine scale: grade 4 = loud with palpable thrill; grade 5 = heard with stethoscope edge barely touching chest; grade 6 = audible without a stethoscope.")
section("Auscultation")
qa("How do you differentiate physiological from pathological splitting of S2?",
"Physiological splitting widens on inspiration, narrows on expiration. Wide fixed splitting (no respiratory variation) suggests ASD. Paradoxical (reversed) splitting suggests delayed aortic closure, as in LBBB or severe AS.")
qa("What is an opening snap and which condition produces it?",
"A high-pitched early diastolic sound just after S2, from sudden halting of a stenotic, doming mitral valve. Pathognomonic for mitral stenosis; a shorter S2-OS interval means more severe stenosis.")
qa("Differentiate S3 from an opening snap.",
"S3 is low-pitched, occurs later in diastole, best heard with the bell at the apex; physiological in young/pregnant patients or pathological in heart failure. Opening snap is high-pitched, occurs right after S2, specific to mitral stenosis.")
qa("Why does the TR murmur increase on inspiration but MR does not?",
"Carvallo's sign: inspiration increases venous return to the right heart, increasing RV stroke volume and the TR murmur. The left heart is not affected by respiration the same way.")
qa("What three conditions cause a pansystolic murmur, and how do you differentiate them at the bedside?",
"MR (loudest at apex, radiates to axilla), TR (loudest at left sternal border, increases with inspiration, prominent JVP 'v' wave), and VSD (loudest at lower left sternal edge, often with a palpable thrill, no radiation to axilla).")
qa("What is the Austin Flint murmur?",
"A mid-to-late diastolic, low-pitched murmur at the apex in severe AR, from the regurgitant jet interfering with mitral valve opening, mimicking mitral stenosis without true valve pathology.")
qa("What is a Graham Steell murmur?",
"An early diastolic murmur of pulmonary regurgitation secondary to severe pulmonary hypertension, heard at the pulmonary area.")
section("Diagnosis, Investigations, Management")
qa("What are the modified Duke criteria for infective endocarditis?",
"A framework of major criteria (positive blood cultures with typical organisms, endocardial involvement on echo or new regurgitant murmur) and minor criteria (predisposing condition/IV drug use, fever, vascular phenomena, immunologic phenomena, other microbiological evidence). Definite IE = 2 major, or 1 major + 3 minor, or 5 minor criteria.")
qa("What are the complications of longstanding mitral stenosis?",
"Atrial fibrillation, left atrial thrombus/systemic embolism, pulmonary hypertension, right heart failure, hemoptysis, and Ortner's syndrome (hoarseness from LA enlargement compressing the recurrent laryngeal nerve).")
qa("What ECG finding suggests left atrial enlargement?",
"P-mitrale: a broad, notched P wave in lead II (>120 ms), typical of mitral valve disease.")
qa("What chest X-ray findings occur in mitral stenosis?",
"Left atrial enlargement (double contour on the right heart border), straightening of the left heart border, and Kerley B lines from interstitial pulmonary edema.")
qa("What echo parameters determine severity of aortic stenosis?",
"Aortic valve area (severe if <1.0 cm2), mean transvalvular gradient (severe if >40 mmHg), and peak jet velocity (severe if >4 m/s).")
qa("How do you decide between valve repair and replacement?",
"Repair is preferred when anatomically feasible (especially for MR): preserves annulus/ventricular function, avoids anticoagulation, more durable. Replacement is chosen when the valve is too damaged/calcified.")
qa("Mechanical vs bioprosthetic valve: what determines the choice?",
"Mechanical valves last longer but need lifelong anticoagulation, favoring younger patients. Bioprosthetic valves degenerate faster (10-15 yrs) but avoid long-term anticoagulation, favoring older patients or those with contraindications to anticoagulation.")
elements.append(PageBreak())
# ================= PART 2: RESPIRATORY =================
part_header("PART 2 — RESPIRATORY CASE")
section("History")
qa("How do you grade dyspnea in a respiratory case?",
"Using the MMRC (Modified Medical Research Council) dyspnea scale, grade 0 to 4, based on activity level that provokes breathlessness.")
qa("Why is smoking history important, and how do you quantify it?",
"It is the major risk factor for COPD and lung cancer. Quantify as pack-years = (cigarettes/day divided by 20) x number of years smoked.")
qa("Why ask about weight loss, night sweats, and evening rise of temperature?",
"To screen for tuberculosis and malignancy, both of which classically present with these constitutional symptoms.")
section("General Examination")
qa("What conditions cause clubbing in a respiratory case?",
"Bronchiectasis, lung abscess, empyema, bronchogenic carcinoma, and interstitial lung disease/pulmonary fibrosis. Simple COPD or asthma does NOT cause clubbing.")
qa("What is the significance of paradoxical (abdominal) breathing?",
"Suggests diaphragmatic fatigue or paralysis, seen in severe COPD exacerbation or neuromuscular disease.")
section("Inspection and Palpation")
qa("How does tracheal/mediastinal shift help localize the pathology?",
"Trachea shifts TOWARD the lesion in collapse/fibrosis (volume loss), and AWAY from the lesion in massive effusion or tension pneumothorax (space-occupying/pressure effect).")
qa("What is tactile vocal fremitus and how does it change in consolidation vs effusion vs pneumothorax?",
"Increased in consolidation (solid tissue transmits vibration well); decreased/absent in pleural effusion and pneumothorax (fluid/air are poor conductors).")
section("Percussion")
qa("What are the percussion note types and what do they indicate?",
"Resonant = normal; dull = consolidation/collapse; stony dull = pleural effusion; hyperresonant = pneumothorax/emphysema.")
qa("What is shifting dullness and when do you check for it?",
"Change in the level of dullness with change in position, used to confirm free pleural fluid.")
section("Auscultation")
qa("Differentiate vesicular from bronchial breath sounds. When is bronchial breathing heard?",
"Vesicular: soft, low-pitched, inspiration longer than expiration, no gap. Bronchial: loud, high-pitched, expiration equal/longer than inspiration, with a gap between the two phases. Heard over consolidation, a large cavity, or just above a pleural effusion.")
qa("What is bronchophony, whispering pectoriloquy, and egophony?",
"All are forms of increased transmission of voice sounds through consolidated lung. Egophony (the 'E to A' change) is a strong predictor of consolidation, with a likelihood ratio around 8.6 for pneumonia when present.")
qa("Differentiate fine from coarse crepitations, and give an example condition for each.",
"Fine crepitations: high-pitched, late inspiratory, do not clear with cough, e.g. pulmonary fibrosis. Coarse crepitations: low-pitched, early inspiratory, may clear with cough, e.g. bronchiectasis or resolving pneumonia.")
qa("What is a pleural rub and when is it heard?",
"A creaking/grating sound from inflamed pleural surfaces rubbing together, heard in both phases of respiration; disappears if a significant effusion develops beneath it.")
qa("Why is vocal resonance decreased in effusion/pneumothorax but increased in consolidation?",
"Fluid and air are poor sound conductors, reducing vocal resonance. Consolidated lung tissue conducts sound better than normal air-filled lung, increasing vocal resonance.")
section("Differentiating Findings (table to recall verbally)")
qa("Fill in: Trachea / Percussion / Breath sounds / Vocal resonance for Consolidation, Effusion, Pneumothorax, Collapse.",
"Consolidation: central trachea, dull, bronchial breath sounds, increased vocal resonance. "
"Effusion: trachea shifted away (if massive), stony dull, absent/reduced breath sounds, decreased vocal resonance. "
"Pneumothorax: trachea shifted away (if tension), hyperresonant, absent/reduced breath sounds, decreased vocal resonance. "
"Collapse: trachea shifted toward, dull, absent/reduced breath sounds, decreased vocal resonance.")
section("Investigations and Management")
qa("Why does absence of mediastinal shift with a large pleural effusion raise suspicion of obstructive collapse underneath it?",
"The collapsed lung's volume loss counteracts the space-occupying effect of the fluid, 'holding' the mediastinum in place despite a large effusion volume.")
qa("How do you apply Light's criteria to pleural fluid?",
"Fluid is an exudate if it meets any one of: pleural fluid/serum protein ratio >0.5, pleural fluid/serum LDH ratio >0.6, or pleural fluid LDH above two-thirds the upper limit of normal serum LDH.")
qa("What is the management of a tension pneumothorax?",
"Emergency needle decompression (2nd intercostal space, mid-clavicular line) followed by intercostal tube drainage. This is time-critical and should never wait for imaging confirmation if clinically obvious.")
qa("What are the indications for intercostal tube drainage in pneumothorax vs simple observation?",
"Small, asymptomatic primary spontaneous pneumothorax may be observed. Large, symptomatic, secondary, tension, or recurrent pneumothorax generally requires intercostal tube drainage.")
elements.append(Spacer(1, 10))
elements.append(HRFlowable(width="100%", thickness=0.8, color=colors.grey))
elements.append(Paragraph("Prepared for clinical/educational self-study use.", note_style))
doc.build(elements)
print("PDF created:", OUT)
cd /tmp/workspace/viva-qa && python3 build_viva_qa.py
cd /tmp/workspace/viva-qa && python3 -c " from pypdf import PdfReader r = PdfReader('Cardiac_Respiratory_Viva_QA.pdf') print('Pages:', len(r.pages)) "
Cardiac Respiratory Viva QA
PDF Document · PDF