Tomorrow is my ICMHE theory exam of mbbs 2nd year .and I dont know nothing about components of repiratory and abdominal examinations. And my professor will set questions from this slides of 5 marks . Please provide me answer in easy language and i will remember every points .
Tomorrow is my ICMHE theory exam of mbbs 2nd year .and I dont know nothing about this past. And my professor will set questions from this slides of 5 marks . Please provide me answer in very easy language and i will remember every points .
cd /home/daytona/workspace && python3 -c " import pdfplumber pdf_path = '/home/daytona/workspace/attachments/91afbbfa-1b8d-4e2e-b4db-72ac829e718f/a_practical_manual_of_cytogenetics_student_workbook_for_mbbs_first_year (1).pdf' with pdfplumber.open(pdf_path) as pdf: print(f'Total pages: {len(pdf.pages)}') # Print first 3 pages to understand structure for i, page in enumerate(pdf.pages[:5]): print(f'\n===PAGE {i+1}===') text = page.extract_text() if text: print(text[:1000]) else: print('[No text extracted]') "
python3 -c " import pdfplumber pdf_path = '/home/daytona/workspace/attachments/91afbbfa-1b8d-4e2e-b4db-72ac829e718f/a_practical_manual_of_cytogenetics_student_workbook_for_mbbs_first_year (1).pdf' with pdfplumber.open(pdf_path) as pdf: # Extract all pages for i, page in enumerate(pdf.pages): print(f'\n===PAGE {i+1}===') text = page.extract_text() if text: print(text[:2000]) else: print('[No text extracted]') " 2>/dev/null
Tomorrow is my ICMHE theory exam of mbbs 2nd year .and I dont know nothing about this past. And my professor will set questions from this slides of 5 marks . Please provide me answer in very easy language and i will remember every points .
python -m markitdown "/home/daytona/workspace/attachments/91afbbfa-1b8d-4e2e-b4db-72ac829e718f/MEDICAL_MALPRACTICE.pptx" 2>/dev/null
python3 -c " from pptx import Presentation prs = Presentation('/home/daytona/workspace/attachments/91afbbfa-1b8d-4e2e-b4db-72ac829e718f/MEDICAL_MALPRACTICE.pptx') print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides): print(f'\n=== SLIDE {i+1} ===') for shape in slide.shapes: if hasattr(shape, 'text') and shape.text.strip(): print(shape.text.strip()) " 2>/dev/null
pip install python-pptx --quiet 2>/dev/null; python3 -c "from pptx import Presentation; print('ok')"
python3 << 'EOF' from pptx import Presentation path = '/home/daytona/workspace/attachments/91afbbfa-1b8d-4e2e-b4db-72ac829e718f/MEDICAL_MALPRACTICE.pptx' prs = Presentation(path) print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides): print(f'\n=== SLIDE {i+1} ===') for shape in slide.shapes: if hasattr(shape, 'text') and shape.text.strip(): print(shape.text.strip()) # Also check tables if shape.has_table: for row in shape.table.rows: for cell in row.cells: if cell.text.strip(): print(cell.text.strip()) EOF
"Failure to exercise reasonable care and skill of an ordinary prudent medical practitioner, resulting in bodily injury, harm, or death of the patient."
| Type | Meaning | Easy Example |
|---|---|---|
| Act of Omission | NOT doing something a reasonable man would do | Doctor didn't give tetanus injection after a wound |
| Act of Commission | DOING something a reasonable man would NOT do | Doctor gave a wrong medicine |
Exam tip: If asked "what are the criteria/elements of medical negligence?" - write all 4 Ds with a one-line explanation each.
| Type | Meaning |
|---|---|
| Civil Negligence | Patient sues doctor for money (compensation) |
| Criminal Negligence | So serious/reckless that doctor gets arrested/jailed |
| Contributory Negligence | Patient ALSO contributed to their own harm |
"Any conduct which might be regarded as disgraceful or dishonorable as judged by a professional man of good repute and competence."
Association with unqualified persons Advertising Abortion (Criminal) Adultery Addiction Alcohol
| Topic | Key Point |
|---|---|
| Medical malpractice types | Negligence + Misconduct |
| 4 Ds of negligence | Duty, Dereliction, Damage, Direct causation |
| Res Ipsa Loquitur | "Thing speaks for itself" - doctor proves innocence |
| Statute of limitations | 6 months in Nepal (Civil Code 2074, Sec 684) |
| 6 As of misconduct | Association, Advertising, Abortion, Adultery, Addiction, Alcohol |
| Record keeping rule | 3 years retention, give within 72 hours |
| Erasure period | 2 years; restoration application after 2 years |
| Signboard size | 18 x 14 inch; blue on white |
Create a PDF cheat sheet of these notes for quick revision before exam
mkdir -p /home/daytona/workspace/medical-malpractice && ls /home/daytona/workspace/medical-malpractice/
~/medical-malpractice/generate_cheatsheet.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, PageTemplate, Frame
OUTPUT = "/home/daytona/workspace/medical-malpractice/Medical_Malpractice_CheatSheet.pdf"
# ── Colour palette ──────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a2e4a")
MED_BLUE = colors.HexColor("#2563eb")
LIGHT_BLUE = colors.HexColor("#dbeafe")
ACCENT_RED = colors.HexColor("#dc2626")
ACCENT_ORG = colors.HexColor("#ea580c")
ACCENT_GRN = colors.HexColor("#16a34a")
YELLOW_BG = colors.HexColor("#fef9c3")
YELLOW_DARK = colors.HexColor("#854d0e")
GREY_BG = colors.HexColor("#f1f5f9")
GREY_DARK = colors.HexColor("#334155")
WHITE = colors.white
BLACK = colors.black
# ── Page template with header/footer ───────────────────────────
def make_header_footer(canvas, doc):
canvas.saveState()
w, h = A4
# Header bar
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, h - 28*mm, w, 28*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica-Bold", 13)
canvas.drawString(14*mm, h - 12*mm, "MEDICAL MALPRACTICE — ICMHE Cheat Sheet")
canvas.setFont("Helvetica", 8)
canvas.drawRightString(w - 14*mm, h - 12*mm, "MBBS 2nd Year | KAHS, Jumla")
canvas.setFont("Helvetica", 7)
canvas.drawString(14*mm, h - 20*mm, "Dr. Pradeep Mahat | Lecturer, GP & EM")
# Footer
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, 0, w, 10*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica", 7)
canvas.drawString(14*mm, 3.5*mm, "Quick Revision Only — For Exam Use")
canvas.drawRightString(w - 14*mm, 3.5*mm, f"Page {doc.page}")
canvas.restoreState()
doc = BaseDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=13*mm, rightMargin=13*mm,
topMargin=32*mm, bottomMargin=14*mm,
)
frame = Frame(doc.leftMargin, doc.bottomMargin,
doc.width, doc.height, id='normal')
doc.addPageTemplates([PageTemplate(id='main', frames=frame,
onPage=make_header_footer)])
# ── Styles ──────────────────────────────────────────────────────
base = getSampleStyleSheet()
def S(name, parent="Normal", **kw):
return ParagraphStyle(name, parent=base[parent], **kw)
title_s = S("T", fontSize=15, textColor=WHITE, alignment=TA_CENTER,
backColor=DARK_BLUE, spaceAfter=2, spaceBefore=2,
borderPad=6, leading=20, fontName="Helvetica-Bold")
sec_s = S("Sec", fontSize=10, textColor=WHITE, alignment=TA_LEFT,
backColor=MED_BLUE, spaceAfter=2, spaceBefore=6,
borderPad=4, leading=14, fontName="Helvetica-Bold")
sub_s = S("Sub", fontSize=9, textColor=DARK_BLUE, alignment=TA_LEFT,
spaceAfter=1, spaceBefore=4, leading=12,
fontName="Helvetica-Bold")
body_s = S("Bod", fontSize=8, textColor=GREY_DARK, alignment=TA_LEFT,
spaceAfter=1, spaceBefore=0, leading=11,
fontName="Helvetica")
bullet_s = S("Bul", fontSize=8, textColor=GREY_DARK, alignment=TA_LEFT,
spaceAfter=1, spaceBefore=0, leading=11,
leftIndent=10, bulletIndent=2, fontName="Helvetica")
warn_s = S("Wrn", fontSize=8, textColor=ACCENT_RED, alignment=TA_LEFT,
spaceAfter=1, spaceBefore=2, leading=11,
fontName="Helvetica-Bold")
note_s = S("Nte", fontSize=7.5,textColor=YELLOW_DARK,alignment=TA_LEFT,
backColor=YELLOW_BG, spaceAfter=2, spaceBefore=2,
borderPad=4, leading=11, fontName="Helvetica-Oblique")
small_s = S("Sml", fontSize=7, textColor=GREY_DARK, alignment=TA_LEFT,
spaceAfter=0, spaceBefore=0, leading=10, fontName="Helvetica")
def HR(): return HRFlowable(width="100%", thickness=0.4,
color=colors.HexColor("#cbd5e1"), spaceAfter=2)
def section(title):
return [Spacer(1, 2*mm),
Paragraph(f" {title}", sec_s)]
def sub(title):
return Paragraph(title, sub_s)
def body(txt):
return Paragraph(txt, body_s)
def bul(txt):
return Paragraph(f"• {txt}", bullet_s)
def warn(txt):
return Paragraph(f"⚠ {txt}", warn_s)
def note(txt):
return Paragraph(txt, note_s)
def sp(h=2):
return Spacer(1, h*mm)
def table(data, col_widths, header_color=MED_BLUE, row_colors=None):
t = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0,0), (-1,0), header_color),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 7.5),
("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, GREY_BG]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#94a3b8")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING",(0,0), (-1,-1), 3),
("LEADING", (0,0), (-1,-1), 10),
]
if row_colors:
for (r, c) in row_colors:
style.append(("BACKGROUND", (0,r), (-1,r), c))
t.setStyle(TableStyle(style))
return t
# ── Content ─────────────────────────────────────────────────────
story = []
# ======= COVER BANNER =======
story.append(sp(1))
story.append(Paragraph("MEDICAL MALPRACTICE", title_s))
story.append(Paragraph("Complete Exam Cheat Sheet | 5-Mark Questions Ready", note_s))
story.append(sp(2))
# ======= SECTION 1: Overview =======
story += section("1. OVERVIEW — WHAT IS MEDICAL MALPRACTICE?")
story.append(sp(1))
story.append(body("Medical malpractice covers <b>all failures of a doctor</b> in their professional skills, ability, and patient relationships."))
story.append(sp(1))
story.append(table(
[["TYPE", "DESCRIPTION"],
["Medical Negligence", "Failure to exercise reasonable care resulting in patient harm/death"],
["Professional Misconduct", "Disgraceful/dishonorable conduct that abuses professional position"]],
[80, None],
))
# ======= SECTION 2: Medical Negligence =======
story += section("2. MEDICAL NEGLIGENCE")
story.append(sp(1))
story.append(note("DEFINITION (learn word-for-word): Failure to exercise reasonable care and skill of an ordinary prudent medical practitioner, resulting in bodily injury, harm, or death of the patient."))
story.append(sp(1))
story.append(sub("Acts of Negligence (2 Types)"))
story.append(table(
[["TYPE", "MEANING", "EXAMPLE"],
["Act of Omission", "NOT doing what a reasonable man would do", "Not giving tetanus injection after wound"],
["Act of Commission", "DOING what a reasonable man would NOT do", "Giving wrong medicine to patient"]],
[45, 90, 90],
))
story.append(sp(2))
# 4 Ds
story.append(sub("CRITERIA FOR NEGLIGENCE — THE 4 Ds (Black's Law Dictionary)"))
story.append(note("EXAM FAVOURITE — Write all 4 with one-line explanation each!"))
story.append(sp(1))
story.append(table(
[["D", "ELEMENT", "MEANING"],
["1st D", "DUTY of care", "A doctor-patient relationship existed — doctor had a duty"],
["2nd D", "DERELICTION of duty", "Doctor failed/breached that duty"],
["3rd D", "DAMAGE", "Patient suffered actual harm, injury, or death"],
["4th D", "DIRECT causation", "The doctor's failure directly caused the harm"]],
[25, 60, None],
row_colors=[(1, colors.HexColor("#fee2e2")), (2, GREY_BG),
(3, colors.HexColor("#fee2e2")), (4, GREY_BG)],
))
# ======= SECTION 3: Examples =======
story += section("3. EXAMPLES OF NEGLIGENCE BY SPECIALTY")
story.append(sp(1))
eg_data = [
["SPECIALTY", "EXAMPLES OF NEGLIGENCE"],
["General", "Inadequate records; no informed consent; wrong diagnosis"],
["Medicine", "No specialist referral; toxic drug effects"],
["Surgery", "Leaving instruments/swabs inside patient; wrong patient/wrong side operated"],
["Obstetrics/Gynecology", "Unwanted pregnancy after failed tubal ligation; abortion without indication"],
["Orthopedics/EM", "Over-tight plaster cast causing nerve damage; missed intracranial hemorrhage"],
["Anesthesiology", "Neurological damage from wrong spinal injection; excessive anesthetic use"],
]
story.append(table(eg_data, [50, None]))
# ======= SECTION 4: Defenses =======
story += section("4. DEFENSES AGAINST MEDICAL NEGLIGENCE (10 Defenses)")
story.append(sp(1))
story.append(note("Memory trick: NBI-CEM-RUL (No duty, No breach, Informed consent, Contributory, Error, Mistake, Res judicata, Unavoidable, Lack of causation, Limitations)"))
story.append(sp(1))
def_data = [
["#", "DEFENSE", "KEY POINT"],
["1", "No duty of care", "No doctor-patient relationship was established"],
["2", "No breach of standard", "Doctor followed prevailing medical standards"],
["3", "Informed consent", "Patient was duly informed of all consequences/risks"],
["4", "Contributory negligence", "Patient's own actions contributed to their injury"],
["5", "Error in judgment", "Honest mistake while acting with reasonable skill & care"],
["6", "Mistake of fact", "Wrong but honest understanding of the facts — no intent"],
["7", "Res judicata", "Case already decided; cannot be tried again between same parties"],
["8", "Unavoidable complications", "Harm was an inherent risk despite best efforts"],
["9", "Lack of causation", "Injury would have occurred regardless of the negligence"],
["10", "Statute of Limitations", "Patient filed after legal time limit (Nepal: 6 months — Civil Code 2074, Sec 684)"],
]
story.append(table(def_data, [12, 60, None]))
# ======= SECTION 5: Doctrines =======
story += section("5. IMPORTANT LEGAL DOCTRINES (Most Exam-Likely!)")
story.append(sp(1))
# Res Ipsa Loquitur
story.append(KeepTogether([
sub("A. Res Ipsa Loquitur — 'The Thing Speaks For Itself'"),
table(
[["KEY POINTS"],
["Patient does NOT need to prove negligence — error is SO obvious"],
["Doctor must prove his/her own innocence"],
["Applies to both civil AND criminal negligence"],
["3 CONDITIONS: (1) Injury wouldn't occur without negligence (2) Doctor had control (3) Patient didn't contribute"],
["EXAMPLES: Wrong site surgery • Leaving instruments inside • Prolonged splinting causing hand loss • Prescribing overdose"]],
[None],
header_color=ACCENT_RED,
),
sp(2),
]))
# Calculated Risk
story.append(KeepTogether([
sub("B. Calculated Risk Doctrine"),
bul("Applied when injury occurs even though <b>reasonable care was taken</b>"),
bul("Doctor must show <b>statistics</b> proving risk was unavoidable"),
bul("<b>Example:</b> Death during coronary bypass — inherent surgical risk of 2–5%"),
sp(2),
]))
# Common Knowledge
story.append(KeepTogether([
sub("C. Doctrine of Common Knowledge"),
bul("Negligence involves <b>common sense</b>, not specialized medical knowledge"),
bul("Similar to Res Ipsa Loquitur"),
bul("Patient must prove the act (commission/omission) but NOT standard of care"),
sp(2),
]))
# Avoidable Consequence
story.append(KeepTogether([
sub("D. Doctrine of Avoidable Consequence Rule"),
bul("Doctor NOT liable for <b>additional harm the patient could have avoided</b>"),
bul("Applies to patient's unreasonable conduct <b>AFTER</b> the injury"),
bul("<b>Example:</b> Patient refuses treatment for foot → needs amputation → cannot claim damages for foot loss"),
note("Differs from contributory negligence (which occurs BEFORE or DURING the wrongful act)"),
sp(2),
]))
# Novus Actus
story.append(KeepTogether([
sub("E. Novus Actus Interveniens — 'New Independent Act'"),
bul("A new act <b>breaks the chain of causation</b>"),
bul("Transfers responsibility from original cause to the new negligent act"),
bul("Rarely accepted by courts; negligence must be proven"),
bul("<b>Example:</b> Leaving a surgical instrument inside a patient after surgery"),
sp(1),
]))
# ======= SECTION 6: Prevention =======
story += section("6. PREVENTION OF MEDICAL NEGLIGENCE (12 Points)")
story.append(sp(1))
prev_data = [
["#", "MEASURE", "KEY ACTION"],
["1", "Legal & ethical awareness", "Follow ethics; obtain informed consent"],
["2", "Effective communication", "Clear doctor-patient talk; proper documentation"],
["3", "Continuous medical education", "Regular training; stay updated"],
["4", "Maintain standard of service", "Limit workload; follow protocols"],
["5", "Proper counseling & consent", "Mandatory before all procedures"],
["6", "Proper investigation", "Thorough exams; seek second opinions"],
["7", "Adequate supervision & referral", "Detect complications early; refer specialists"],
["8", "Surgical interventions", "Operate only where equipment & qualified staff exist"],
["9", "Meticulous record keeping", "Records can prove innocence"],
["10", "Morbidity & mortality audits", "Analyze errors to improve care"],
["11", "Medical insurance & risk mgmt", "Have malpractice insurance; hospital risk team"],
["12", "Patient safety measures", "Use checklists; double-check identity before procedures"],
]
story.append(table(prev_data, [12, 75, None]))
# ======= SECTION 7: Professional Misconduct =======
story += section("7. PROFESSIONAL MISCONDUCT")
story.append(sp(1))
story.append(note("DEFINITION: Any conduct regarded as disgraceful or dishonorable as judged by a professional man of good repute. Also called 'INFAMOUS CONDUCT'. Involves abuse of professional position."))
story.append(sp(1))
story.append(sub("When Does Misconduct Occur?"))
story.append(bul("Unethical advertising or endorsement"))
story.append(bul("Not maintaining indoor patient records for <b>3 years</b> OR refusing to provide within <b>72 hours</b> of request"))
story.append(bul("Not displaying registration number in clinic, prescriptions, and certificates"))
story.append(bul("Rural doctor absent on <b>2 or more occasions</b> during inspection"))
story.append(bul("Medical college faculty absent on 2+ occasions (certified by Principal/Medical Superintendent)"))
story.append(bul("Providing falsified or misleading information"))
story.append(sp(2))
# 6 As
story.append(KeepTogether([
sub("THE 6 As — IMPORTANT OFFENCES (Must Memorize!)"),
table(
[["A", "OFFENCE"],
["A1", "Association with unqualified persons"],
["A2", "Advertising"],
["A3", "Abortion (Criminal)"],
["A4", "Adultery"],
["A5", "Addiction"],
["A6", "Alcohol"]],
[20, None],
header_color=ACCENT_ORG,
),
sp(2),
]))
# What doctor must NOT do
story.append(sub("Unprofessional Actions — A Doctor Must NOT:"))
must_not = [
"Use touts or agents to get patients",
"Insult or misbehave with fellow doctors",
"Commit adultery or misbehave with patients",
"Be drunk and disorderly",
"Be convicted by court of law",
"Do sex determination test",
"Issue false or misleading certificates",
"Supply addiction-forming drugs",
"Perform illegal abortion/operation",
"Disclose professional secrets",
"Publish case reports/photographs without patient consent",
]
# 2-column layout
half = len(must_not)//2 + len(must_not)%2
left = must_not[:half]
right = must_not[half:]
rows = []
for i in range(half):
l = f"✗ {left[i]}"
r = f"✗ {right[i]}" if i < len(right) else ""
rows.append([l, r])
mn_t = Table(rows, colWidths=[doc.width/2 - 3*mm, doc.width/2 - 3*mm])
mn_t.setStyle(TableStyle([
("FONTSIZE", (0,0),(-1,-1), 7.5),
("TEXTCOLOR", (0,0),(-1,-1), ACCENT_RED),
("FONTNAME", (0,0),(-1,-1), "Helvetica"),
("VALIGN", (0,0),(-1,-1), "TOP"),
("ROWBACKGROUNDS",(0,0),(-1,-1), [WHITE, GREY_BG]),
("TOPPADDING",(0,0),(-1,-1), 2),
("BOTTOMPADDING",(0,0),(-1,-1), 2),
("GRID", (0,0),(-1,-1), 0.3, colors.HexColor("#fca5a5")),
]))
story.append(mn_t)
story.append(sp(1))
# Signboard rules
story.append(sub("Signboard Rules"))
story.append(table(
[["RULE", "DETAIL"],
["Size", "18 × 14 inch"],
["Content", "Name, NMC number, qualifications, titles, specialty"],
["Colors", "Blue letters on white background"],
["NOT allowed", "International Red Cross symbol; affixing on chemist's shop"]],
[50, None],
))
# ======= SECTION 8: Committee Powers =======
story += section("8. POWERS OF PROFESSIONAL CONDUCT & HEALTH COMMITTEE")
story.append(sp(1))
story.append(table(
[["ACTION", "WHEN USED", "KEY DETAIL"],
["1. Warn & conclude",
"Doctor found innocent",
"Case is closed"],
["2. Probation",
"Moderate misconduct",
"Referees appointed; if satisfactory report → case closed"],
["3. Strike off register",
"Serious misconduct or criminal conviction",
"Doctor CANNOT practice; Erasure = 2 YEARS (NMC Act)"],
["4. Restore registration",
"After 2 years from erasure",
"May be unconditional, conditional, or extended by 1 year; failed app → wait 12 months"],
],
[55, 55, None],
))
# ======= SECTION 9: Quick Revision Table =======
story += section("9. QUICK REVISION — KEY NUMBERS & FACTS")
story.append(sp(1))
qr_data = [
["TOPIC", "KEY FACT / NUMBER"],
["Nepal Statute of Limitations", "6 months (Civil Code 2074, Section 684)"],
["Record retention period", "3 years mandatory"],
["Record supply deadline", "72 hours after request"],
["Erasure of registration", "2 years (NMC Act)"],
["Restoration application", "After 2 years from erasure"],
["Failed restoration — wait", "12 months before re-applying"],
["Extend erasure (if needed)", "By 1 more year"],
["Signboard size", "18 × 14 inch; blue on white"],
["Res Ipsa Loquitur", "'Thing speaks for itself' — doctor proves innocence"],
["4 Ds of Negligence", "Duty, Dereliction, Damage, Direct causation"],
["6 As of Misconduct", "Association, Advertising, Abortion, Adultery, Addiction, Alcohol"],
["Act of Omission", "NOT doing what a reasonable man would do"],
["Act of Commission", "DOING what a reasonable man would NOT do"],
]
story.append(table(qr_data, [90, None], header_color=ACCENT_GRN))
# ======= SECTION 10: Likely Exam Questions =======
story += section("10. LIKELY 5-MARK EXAM QUESTIONS")
story.append(sp(1))
qs = [
"Define medical negligence. What are the criteria (4 Ds)?",
"What is Res Ipsa Loquitur? State conditions and give examples.",
"Write any 5 defenses against medical negligence.",
"What is professional misconduct? Write the 6 As.",
"How can medical negligence be prevented? (Any 5–6 points)",
"What are the powers of the Professional Conduct and Health Committee?",
"Differentiate between civil negligence and criminal negligence.",
"What is the Doctrine of Avoidable Consequence? Give an example.",
"What is Novus Actus Interveniens? Explain with example.",
"Write about unprofessional actions/misconducts of a physician.",
]
for i, q in enumerate(qs, 1):
story.append(bul(f"<b>Q{i}.</b> {q}"))
story.append(sp(3))
story.append(Paragraph(
"All the best for your ICMHE exam tomorrow! You've got this! 💪",
S("good", fontSize=9, textColor=ACCENT_GRN, alignment=TA_CENTER,
fontName="Helvetica-Bold", spaceAfter=2)
))
# ── Build ────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
python3 /home/daytona/workspace/medical-malpractice/generate_cheatsheet.py 2>&1
ls -lh /home/daytona/workspace/medical-malpractice/Medical_Malpractice_CheatSheet.pdf
Medical Malpractice CheatSheet
PDF Document · PDF
| Section | Content |
|---|---|
| Section 1 | Overview - 2 types of malpractice |
| Section 2 | Medical Negligence definition + Acts of Omission/Commission + 4 Ds |
| Section 3 | Examples by specialty (Surgery, Medicine, OBG, etc.) |
| Section 4 | All 10 Defenses against negligence |
| Section 5 | All 5 Legal Doctrines (Res Ipsa Loquitur, Calculated Risk, etc.) |
| Section 6 | 12 Prevention measures |
| Section 7 | Professional Misconduct + 6 As + Signboard rules + What NOT to do |
| Section 8 | Committee Powers (Warn → Probation → Strike off → Restore) |
| Section 9 | Quick Revision table of all key numbers & facts |
| Section 10 | 10 likely 5-mark exam questions |
Tomorrow is my ICMHE theory exam of mbbs 2nd year .and I dont know nothing about this past. And my professor will set questions from this slides of 5 marks . Please provide me answer in very easy language and i will remember every points .
python3 -c " import pdfplumber pdf_path = '/home/daytona/workspace/attachments/91afbbfa-1b8d-4e2e-b4db-72ac829e718f/Communication skill(1).pdf' with pdfplumber.open(pdf_path) as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): print(f'\n===PAGE {i+1}===') text = page.extract_text() if text: print(text) else: print('[No text]') " 2>/dev/null
Abilities you use to convey and receive messages effectively through verbal, non-verbal, written, and visual means — ensuring mutual understanding between sender and receiver.
| # | Element | Meaning |
|---|---|---|
| 1 | Communicator | The person sending the message (doctor) |
| 2 | Message | The information being sent |
| 3 | Method | How it is sent (verbal, written, non-verbal) |
| 4 | Recipient | The person receiving the message (patient) |
| 5 | Response | Feedback from the recipient |
Key fact for exam: Non-verbal communication makes up the MAJORITY of a message's impact!
| Component | Impact |
|---|---|
| Words alone | Only 7% of impact |
| Tone of voice | 38% of impact |
| Non-verbal communication | 55% of impact |
| Letter | Meaning | What to Ask |
|---|---|---|
| I | Ideas | What does the patient THINK is the problem? |
| C | Concerns | What is the patient WORRIED it may be? |
| E | Expectations | What does the patient EXPECT from this visit? (medicine, x-ray, reassurance?) |
When a patient decides NOT to tell you something important
| Topic | Memory Trick |
|---|---|
| Basic elements | C-M-M-R-R (Communicator, Message, Method, Recipient, Response) |
| Sequence of communication | P-O-G-P-E-C-N-C (Prepare, Open, Gather, Physical exam, Education, Close, Negotiate, Close) |
| Patient's perspective | ICE (Ideas, Concerns, Expectations) |
| Non-verbal impact | 7-38-55 (Words 7%, Tone 38%, Non-verbal 55%) |
| Speech censoring techniques | MPV (Mirroring, Pacing, Vocal copying) |
Exam tip: For any 5-mark question, write a short definition first, then give 4-5 numbered points with brief explanation. That always scores full marks! 💪
Create a PDF cheat sheet of communication skills for quick exam revision
mkdir -p /home/daytona/workspace/communication-skills && ls /home/daytona/workspace/communication-skills/
~/communication-skills/generate_cheatsheet.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import BaseDocTemplate, PageTemplate, Frame
OUTPUT = "/home/daytona/workspace/communication-skills/Communication_Skills_CheatSheet.pdf"
# ── Colour Palette ────────────────────────────────────────────
TEAL_DARK = colors.HexColor("#0f4c6b")
TEAL_MED = colors.HexColor("#0e7490")
TEAL_LIGHT = colors.HexColor("#cffafe")
PURPLE = colors.HexColor("#7c3aed")
PURPLE_LITE = colors.HexColor("#ede9fe")
ORANGE = colors.HexColor("#c2410c")
ORANGE_LITE = colors.HexColor("#ffedd5")
GREEN = colors.HexColor("#15803d")
GREEN_LITE = colors.HexColor("#dcfce7")
YELLOW_BG = colors.HexColor("#fef9c3")
YELLOW_DARK = colors.HexColor("#92400e")
GREY_BG = colors.HexColor("#f1f5f9")
GREY_DARK = colors.HexColor("#1e293b")
SLATE = colors.HexColor("#475569")
WHITE = colors.white
BLACK = colors.black
PINK = colors.HexColor("#be185d")
# ── Header / Footer ───────────────────────────────────────────
def make_header_footer(canvas, doc):
canvas.saveState()
w, h = A4
# Top gradient bar (two rects)
canvas.setFillColor(TEAL_DARK)
canvas.rect(0, h - 28*mm, w, 28*mm, fill=1, stroke=0)
canvas.setFillColor(colors.HexColor("#155e75"))
canvas.rect(0, h - 28*mm, w * 0.45, 28*mm, fill=1, stroke=0)
# Title text
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica-Bold", 14)
canvas.drawString(14*mm, h - 11*mm, "COMMUNICATION SKILLS — ICMHE Cheat Sheet")
canvas.setFont("Helvetica", 8)
canvas.drawRightString(w - 14*mm, h - 11*mm, "MBBS 2nd Year | KAHS, Jumla")
canvas.setFont("Helvetica-Oblique", 7.5)
canvas.drawString(14*mm, h - 19*mm, "Dr. Jeetendra Bhandari | GP & EM")
canvas.drawRightString(w - 14*mm, h - 19*mm, "Quick Revision Before Exam")
# Accent line
canvas.setFillColor(colors.HexColor("#22d3ee"))
canvas.rect(0, h - 28*mm, w, 1.5, fill=1, stroke=0)
# Footer
canvas.setFillColor(TEAL_DARK)
canvas.rect(0, 0, w, 10*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica", 7)
canvas.drawString(14*mm, 3.5*mm, "For Exam Use — Communication Skills")
canvas.drawRightString(w - 14*mm, 3.5*mm, f"Page {doc.page}")
canvas.restoreState()
doc = BaseDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=13*mm, rightMargin=13*mm,
topMargin=32*mm, bottomMargin=14*mm,
)
frame = Frame(doc.leftMargin, doc.bottomMargin,
doc.width, doc.height, id='normal')
doc.addPageTemplates([PageTemplate(id='main', frames=frame,
onPage=make_header_footer)])
# ── Styles ────────────────────────────────────────────────────
base = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, parent=base["Normal"], **kw)
sec_s = S("Sec", fontSize=9.5, textColor=WHITE, fontName="Helvetica-Bold",
backColor=TEAL_MED, spaceAfter=2, spaceBefore=5,
borderPad=4, leading=14)
sub_s = S("Sub", fontSize=8.5, textColor=TEAL_DARK, fontName="Helvetica-Bold",
spaceAfter=1, spaceBefore=3, leading=12)
body_s = S("Bod", fontSize=8, textColor=GREY_DARK, fontName="Helvetica",
spaceAfter=1, spaceBefore=0, leading=11)
bul_s = S("Bul", fontSize=8, textColor=GREY_DARK, fontName="Helvetica",
spaceAfter=1, spaceBefore=0, leading=11, leftIndent=10)
note_s = S("Nte", fontSize=7.5, textColor=YELLOW_DARK, fontName="Helvetica-Oblique",
backColor=YELLOW_BG, spaceAfter=2, spaceBefore=2,
borderPad=4, leading=11)
tip_s = S("Tip", fontSize=7.5, textColor=GREEN, fontName="Helvetica-Bold",
backColor=GREEN_LITE, spaceAfter=2, spaceBefore=2,
borderPad=4, leading=11)
warn_s = S("Wrn", fontSize=7.5, textColor=ORANGE, fontName="Helvetica-Bold",
backColor=ORANGE_LITE, spaceAfter=2, spaceBefore=2,
borderPad=4, leading=11)
big_s = S("Big", fontSize=11, textColor=TEAL_DARK, fontName="Helvetica-Bold",
alignment=TA_CENTER, spaceAfter=2, spaceBefore=2, leading=16)
def HR(): return HRFlowable(width="100%", thickness=0.4,
color=colors.HexColor("#94a3b8"), spaceAfter=2)
def sp(h=2): return Spacer(1, h*mm)
def sec(t): return [sp(1), Paragraph(f" {t}", sec_s)]
def sub(t): return Paragraph(t, sub_s)
def body(t): return Paragraph(t, body_s)
def bul(t): return Paragraph(f"• {t}", bul_s)
def note(t): return Paragraph(t, note_s)
def tip(t): return Paragraph(t, tip_s)
def tbl(data, widths, hdr=TEAL_MED, alt1=WHITE, alt2=GREY_BG, spans=None):
t = Table(data, colWidths=widths, repeatRows=1)
st = [
("BACKGROUND", (0,0),(-1,0), hdr),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),7.5),
("ROWBACKGROUNDS",(0,1),(-1,-1),[alt1, alt2]),
("GRID", (0,0),(-1,-1),0.3, colors.HexColor("#94a3b8")),
("VALIGN", (0,0),(-1,-1),"TOP"),
("LEFTPADDING", (0,0),(-1,-1),4),
("RIGHTPADDING", (0,0),(-1,-1),4),
("TOPPADDING", (0,0),(-1,-1),3),
("BOTTOMPADDING",(0,0),(-1,-1),3),
("LEADING", (0,0),(-1,-1),10),
]
if spans:
for s in spans:
st.append(s)
t.setStyle(TableStyle(st))
return t
# ── Story ─────────────────────────────────────────────────────
story = []
# ===== HERO BANNER =====
story.append(sp(1))
story.append(Paragraph("COMMUNICATION SKILLS", big_s))
story.append(note("Definition: Abilities used to convey & receive messages effectively through verbal, non-verbal, written & visual means — ensuring mutual understanding between sender and receiver."))
story.append(sp(1))
# ===== 1. BASIC ELEMENTS =====
story += sec("1. BASIC ELEMENTS OF COMMUNICATION (5 Elements — C M M R R)")
story.append(sp(1))
story.append(tbl(
[["#", "ELEMENT", "WHO / WHAT IT IS"],
["1", "Communicator", "The sender of the message (doctor)"],
["2", "Message", "The information/content being sent"],
["3", "Method", "How it is sent (verbal, non-verbal, written, visual)"],
["4", "Recipient", "The person receiving the message (patient)"],
["5", "Response", "Feedback given back by the recipient"],
],
[12, 42, None],
))
# ===== 2. SEQUENCE =====
story += sec("2. SEQUENCE OF COMMUNICATION (9 Steps — POGPECNC)")
story.append(sp(1))
story.append(note("Memory: Prepare → Open → Gather → (Physical exam) → Education → Close → Negotiate → Close"))
story.append(sp(1))
# Steps as a compact table
steps = [
["STEP", "NAME", "KEY ACTIONS"],
["1", "PREPARE",
"Review previous consult outcomes • Identify key medical issues • Check recent test results • Note family members accompanying • Note personal preferences (needle phobia, etc.)"],
["2", "OPEN",
"Greet patient by preferred name • Make patient comfortable • Smile • Appear unhurried & relaxed • Focus firmly on patient • Use open-ended questions • Reassuring gestures"],
["3", "GATHER",
"Active listening (tone, rhythm, context) • Note-taking without barriers • Facilitation: allow pauses, 'mm-hmm', echoing • Open-to-closed cone • Ask 'Anything else?' • Summarize & check: 'Is that right?'"],
["4", "PHYSICAL EXAM",
"Obtain consent before touching • Recognize exam can be intimidating • Explain process & findings during exam • Stay attentive to additional concerns"],
["5", "PATIENT EDUCATION",
"Signposting: state what's being done • Chunk & Check: small pieces + verify • Avoid jargon • Use visual aids & diagrams"],
["6", "PATIENT PERSPECTIVE",
"Explore ICE: Ideas (what patient thinks) • Concerns (what patient fears) • Expectations (what patient wants — meds, reassurance, X-ray)"],
["7", "NEGOTIATE & AGREE",
"Shared decision making • Mutual respect • Mindfulness of doctor's & patient's values • Empathic bridge • Build trust via shared experiences"],
["8", "CLOSE",
"Warn patient consultation is ending • Check for additional concerns • Summarize key points & planned actions • Safety net for unexpected outcomes • Thank & farewell with cultural sensitivity"],
]
story.append(tbl(steps, [12, 40, None],
alt1=WHITE, alt2=colors.HexColor("#f0fdfa")))
# ===== 3. NON-VERBAL COMMUNICATION =====
story += sec("3. NON-VERBAL COMMUNICATION")
story.append(sp(1))
# 7-38-55 rule — visual box
rule_data = [
["WORDS ALONE\n7%", "TONE OF VOICE\n38%", "NON-VERBAL\n55%"],
]
rt = Table(rule_data, colWidths=[doc.width/3 - 2*mm]*3)
rt.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,0), colors.HexColor("#dbeafe")),
("BACKGROUND", (1,0),(1,0), colors.HexColor("#fef9c3")),
("BACKGROUND", (2,0),(2,0), colors.HexColor("#dcfce7")),
("TEXTCOLOR", (0,0),(0,0), colors.HexColor("#1e40af")),
("TEXTCOLOR", (1,0),(1,0), colors.HexColor("#92400e")),
("TEXTCOLOR", (2,0),(2,0), colors.HexColor("#14532d")),
("FONTNAME", (0,0),(-1,-1),"Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),10),
("ALIGN", (0,0),(-1,-1),"CENTER"),
("VALIGN", (0,0),(-1,-1),"MIDDLE"),
("TOPPADDING", (0,0),(-1,-1),8),
("BOTTOMPADDING",(0,0),(-1,-1),8),
("GRID", (0,0),(-1,-1),0.5, colors.HexColor("#94a3b8")),
]))
story.append(Paragraph("<b>The 7 - 38 - 55 Rule</b> (Mehrabian)", sub_s))
story.append(rt)
story.append(sp(1))
nv_cols = [
[["TYPES OF NON-VERBAL CUES", "IMPORTANCE IN DOCTOR-PATIENT RELATIONSHIP"],
["Gestures", "Enhances communication and rapport"],
["Postures", "Helps understand patient concerns"],
["Distance (proximity)", "Builds trust and connection"],
["Head nodding", "Signals active listening"],
["Eye contact", "Shows engagement and empathy"],
],
[55, None]
]
story.append(tbl(*nv_cols, hdr=TEAL_MED))
story.append(sp(1))
story.append(tip("TIP: Awareness of body language helps doctors adjust their behavior for OPTIMAL communication."))
# ===== 4. ICE =====
story += sec("4. PATIENT'S PERSPECTIVE — ICE (Exam Favourite!)")
story.append(sp(1))
ice_data = [
["LETTER", "STANDS FOR", "MEANING", "EXAMPLE QUESTION"],
["I", "Ideas", "What the patient THINKS is the problem", '"What do you think is causing this?"'],
["C", "Concerns", "What the patient is WORRIED it may be", '"Is there anything specific you are worried about?"'],
["E", "Expectations", "What the patient EXPECTS from this consultation", '"What were you hoping I could do for you today?"'],
]
story.append(tbl(ice_data, [14, 30, 65, None], hdr=PURPLE))
story.append(sp(1))
story.append(note("EXAM TIP: Always explore ICE — it shows patient-centred approach and scores high marks!"))
# ===== 5. ACTIVE LISTENING & FACILITATION =====
story += sec("5. ACTIVE LISTENING & FACILITATION")
story.append(sp(1))
story.append(KeepTogether([
sub("Active Listening — Pay attention to MORE than words:"),
tbl(
[["ELEMENT", "WHAT TO OBSERVE"],
["Tone", "How the patient is saying it (angry? sad? scared?)"],
["Rhythm", "Speed of speech — rushed or slow?"],
["Context", "The situation around what is being said"],
],
[35, None], hdr=TEAL_MED
),
sp(1),
]))
story.append(sub("Facilitation Techniques:"))
story.append(tbl(
[["TECHNIQUE", "HOW TO DO IT"],
["Allow pauses", "Don't rush — silence gives patient time to think"],
["Encouraging sounds", "Say 'mm-hmm', 'yes', 'I see' to show you're listening"],
["Echoing", "Repeat patient's own words: 'So you feel tired and weak?'"],
["Open questions", "Start with broad questions, then narrow down (open-to-closed cone)"],
["Ask 'Anything else?'", "Ensures no important problem is missed"],
["Summarize & check", "'So if I understand correctly... is that right?'"],
],
[55, None],
))
# ===== 6. SPEECH CENSORING =====
story += sec("6. SPEECH CENSORING (When Patient Hides Something)")
story.append(sp(1))
story.append(note("DEFINITION: When a patient DECIDES NOT to tell the doctor something important."))
story.append(sp(1))
# Two-column layout: Why + Signs
why_signs = Table(
[
[
Paragraph("<b>WHY PATIENTS CENSOR SPEECH:</b>", sub_s),
Paragraph("<b>SIGNS TO DETECT IT:</b>", sub_s),
],
[
Paragraph(
"• Afraid or embarrassed<br/>"
"• Worried doctor will judge them<br/>"
"• Don't think doctor will be interested",
bul_s),
Paragraph(
"• Loses eye contact / looks away<br/>"
"• Stops talking mid-topic<br/>"
"• Hesitates mid-sentence or at the end<br/>"
"• Vague, unclear answers<br/>"
"• Changes topic mid-sentence<br/>"
"• Omits important details",
bul_s),
]
],
colWidths=[doc.width/2 - 3*mm, doc.width/2 - 3*mm]
)
why_signs.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,0), colors.HexColor("#ede9fe")),
("BACKGROUND", (1,0),(1,0), colors.HexColor("#fee2e2")),
("VALIGN", (0,0),(-1,-1),"TOP"),
("GRID", (0,0),(-1,-1),0.3, colors.HexColor("#94a3b8")),
("TOPPADDING", (0,0),(-1,-1),4),
("BOTTOMPADDING",(0,0),(-1,-1),4),
("LEFTPADDING", (0,0),(-1,-1),5),
]))
story.append(why_signs)
# ===== 7. TECHNIQUES TO OVERCOME SPEECH CENSORING =====
story += sec("7. TECHNIQUES TO OVERCOME SPEECH CENSORING (MPV)")
story.append(sp(1))
story.append(note("Memory trick: MPV → Mirroring, Pacing, Vocal copying"))
story.append(sp(1))
story.append(tbl(
[["TECHNIQUE", "HOW IT WORKS", "IMPORTANT NOTE"],
["MIRRORING",
"Copy the limb positions and body angles of the patient — form a mirror image",
"AVOID copying uncomfortable gestures (e.g., hands behind head)"],
["PACING",
"Copy the patient's natural rhythm in breathing, talking, and movements — creates rapport",
"Once rapport is built, change their pace by altering yours = called 'LEADING'"],
["VOCAL COPYING",
"Copy patient's: Intonation • Pitch • Volume • Pace • Rhythm • Breathing • Sentence length before pausing",
"Makes patient feel understood and less alone"],
],
[30, 90, None], hdr=PURPLE,
))
# ===== 8. KEY FEATURES OF GOOD COMMUNICATION =====
story += sec("8. KEY FEATURES OF GOOD COMMUNICATION (Take-Home Message)")
story.append(sp(1))
feat_data = [
["#", "FEATURE", "WHAT IT MEANS"],
["1", "Patient-centred approach", "Patient's needs, values, and preferences come first"],
["2", "Elicit all concerns", "Don't stop at the first complaint — ask 'anything else?'"],
["3", "Explore ICE", "Ideas, Concerns, Expectations of the patient"],
["4", "Show empathy & respect", "Acknowledge patient's feelings genuinely"],
["5", "Summarise", "Confirm understanding: 'Is that right?'"],
["6", "Avoid jargon", "Use simple words; no medical terms with patient"],
["7", "Collaborative decision making", "Plan treatment together — don't just dictate"],
["8", "Good closure", "Warn patient, summarize, safety net, thank & farewell"],
]
story.append(tbl(feat_data, [12, 65, None], hdr=GREEN))
# ===== 9. QUICK REFERENCE SUMMARY =====
story += sec("9. QUICK REFERENCE — ALL KEY FACTS AT A GLANCE")
story.append(sp(1))
qr = [
["TOPIC", "KEY FACT"],
["Impact of words alone", "Only 7% of total message impact"],
["Impact of tone of voice", "38% of total message impact"],
["Impact of non-verbal cues", "55% of total message impact — the MOST important"],
["ICE", "Ideas, Concerns, Expectations"],
["5 Basic elements", "Communicator, Message, Method, Recipient, Response"],
["Facilitation technique", "Pausing, mm-hmm, Echoing, Open-to-closed cone"],
["Chunk & Check", "Give info in small pieces, verify understanding each time"],
["Signposting", "Tell patient what has been done / is about to be done"],
["Speech censoring signs", "Loses eye contact, stops mid-topic, hesitates, vague, changes topic"],
["Speech censoring — techniques", "Mirroring, Pacing, Vocal copying (MPV)"],
["Pacing → 'Leading'", "Once rapport built, change your pace to change theirs"],
["Good closure", "Warn → Check concerns → Summarize → Safety net → Farewell"],
["Active listening elements", "Tone, Rhythm, Context (beyond just words)"],
["Patient education rule", "Signposting + Chunk & Check + No Jargon + Visual aids"],
]
story.append(tbl(qr, [85, None], hdr=TEAL_DARK))
# ===== 10. LIKELY EXAM QUESTIONS =====
story += sec("10. LIKELY 5-MARK EXAM QUESTIONS")
story.append(sp(1))
qs = [
("Q1", "Define communication skill. Write the basic elements of communication."),
("Q2", "Describe the sequence of communication in a doctor-patient consultation."),
("Q3", "What is non-verbal communication? Explain the 7-38-55 rule with types of non-verbal cues."),
("Q4", "What is ICE in clinical communication? Explain each component with an example."),
("Q5", "What is speech censoring? Write its signs and techniques to overcome it."),
("Q6", "What is active listening? Describe facilitation techniques used by a doctor."),
("Q7", "Explain 'Chunk & Check' and 'Signposting' in patient education."),
("Q8", "Write the key features of good communication skills in clinical practice."),
("Q9", "What is shared decision making / negotiation in a consultation?"),
("Q10","How should a doctor properly close a clinical consultation?"),
]
q_rows = [[Paragraph(f"<b>{n}.</b> {q}", body_s)] for n, q in qs]
qt = Table(q_rows, colWidths=[doc.width])
qt.setStyle(TableStyle([
("ROWBACKGROUNDS",(0,0),(-1,-1),[WHITE, colors.HexColor("#f0fdfa")]),
("GRID", (0,0),(-1,-1),0.3, colors.HexColor("#a7f3d0")),
("LEFTPADDING", (0,0),(-1,-1),5),
("TOPPADDING", (0,0),(-1,-1),3),
("BOTTOMPADDING",(0,0),(-1,-1),3),
]))
story.append(qt)
story.append(sp(2))
# ===== CLOSING =====
story.append(tip("EXAM FORMULA: For any 5-mark question → Short definition (1 mark) + 4-5 numbered points with brief explanation (4 marks) = FULL MARKS!"))
story.append(sp(2))
story.append(Paragraph(
"Good luck in your ICMHE exam today! You have got this!",
S("fin", fontSize=10, textColor=TEAL_DARK, fontName="Helvetica-Bold",
alignment=TA_CENTER, spaceAfter=2)
))
# ── Build ──────────────────────────────────────────────────────
doc.build(story)
print(f"PDF saved: {OUTPUT}")
python3 /home/daytona/workspace/communication-skills/generate_cheatsheet.py 2>&1
ls -lh /home/daytona/workspace/communication-skills/Communication_Skills_CheatSheet.pdf
Communication Skills CheatSheet
PDF Document · PDF
| Section | Content |
|---|---|
| Section 1 | 5 Basic Elements (C-M-M-R-R) |
| Section 2 | Full 9-step Sequence of Communication in a table |
| Section 3 | Non-verbal communication + 7-38-55 Rule (visual color box) |
| Section 4 | ICE - Ideas, Concerns, Expectations with example questions |
| Section 5 | Active Listening + all Facilitation Techniques |
| Section 6 | Speech Censoring - why it happens + signs (two-column layout) |
| Section 7 | MPV - Mirroring, Pacing, Vocal copying to overcome censoring |
| Section 8 | 8 Key Features of Good Communication |
| Section 9 | Master quick-reference table of ALL key facts |
| Section 10 | 10 likely 5-mark exam questions |