Make 100 CBT questions for ot technitian West Bengal for 2026 Preparation
OT Technician West Bengal 2026 exam syllabus CBT pattern
| Section | Questions | Topics |
|---|---|---|
| A | 1-20 | Anatomy & Physiology |
| B | 21-35 | Sterilization, Disinfection & Asepsis |
| C | 36-50 | OT Instruments & Equipment |
| D | 51-65 | Anesthesia |
| E | 66-80 | Surgical Procedures & OT Protocols |
| F | 81-90 | Patient Care, Safety & Emergency |
| G | 91-100 | Microbiology, Pharmacology & General |
Generate a presentation on OT Technician exam preparation strategy
mkdir -p /tmp/workspace/ot-technician-ppt && ls /tmp/workspace/
~/ot-technician-ppt/create_ppt.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.util import Inches, Pt
import io
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank_layout = prs.slide_layouts[6]
# ── Color Palette ──────────────────────────────────────────────────────────────
DARK_BLUE = RGBColor(0x0D, 0x3B, 0x6E) # header/title bg
MED_BLUE = RGBColor(0x14, 0x5D, 0xA0) # accent
LIGHT_BLUE = RGBColor(0xD6, 0xEA, 0xF8) # card bg
GREEN = RGBColor(0x1A, 0x7A, 0x45) # highlight / tick
ORANGE = RGBColor(0xE8, 0x6F, 0x0A) # warning / important
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
DARK_GRAY = RGBColor(0x2C, 0x2C, 0x2C)
LIGHT_GRAY = RGBColor(0xF4, 0xF6, 0xF9)
GOLD = RGBColor(0xF0, 0xB4, 0x29)
RED = RGBColor(0xC0, 0x39, 0x2B)
# ── Helpers ────────────────────────────────────────────────────────────────────
def add_rect(slide, x, y, w, h, fill_color, transparency=0):
shape = slide.shapes.add_shape(
1, # MSO_SHAPE_TYPE.RECTANGLE
Inches(x), Inches(y), Inches(w), Inches(h)
)
shape.line.fill.background()
fill = shape.fill
fill.solid()
fill.fore_color.rgb = fill_color
return shape
def add_textbox(slide, text, x, y, w, h, font_size=18, bold=False,
color=DARK_GRAY, align=PP_ALIGN.LEFT, italic=False,
v_anchor=MSO_ANCHOR.MIDDLE, word_wrap=True):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = word_wrap
tf.vertical_anchor = v_anchor
tf.margin_left = Pt(2)
tf.margin_right = Pt(2)
tf.margin_top = 0
tf.margin_bottom = 0
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.size = Pt(font_size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
run.font.name = "Calibri"
return tb
def add_multiline(slide, lines, x, y, w, h, font_size=14,
color=DARK_GRAY, bold=False, line_spacing=None, align=PP_ALIGN.LEFT):
"""lines: list of (text, bold, color)"""
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = Pt(4)
tf.margin_right = Pt(4)
tf.margin_top = Pt(4)
tf.margin_bottom = Pt(4)
for i, item in enumerate(lines):
if isinstance(item, tuple):
txt, b, c = item
else:
txt, b, c = item, bold, color
if i == 0:
p = tf.paragraphs[0]
else:
p = tf.add_paragraph()
p.alignment = align
if line_spacing:
p.line_spacing = Pt(line_spacing)
run = p.add_run()
run.text = txt
run.font.size = Pt(font_size)
run.font.bold = b
run.font.color.rgb = c
run.font.name = "Calibri"
return tb
def header_bar(slide, title, subtitle=None):
"""Dark blue header bar across the top"""
add_rect(slide, 0, 0, 13.333, 1.15, DARK_BLUE)
add_rect(slide, 0, 1.15, 13.333, 0.06, ORANGE)
add_textbox(slide, title, 0.3, 0.05, 10, 0.7,
font_size=30, bold=True, color=WHITE, align=PP_ALIGN.LEFT)
if subtitle:
add_textbox(slide, subtitle, 0.3, 0.72, 10, 0.45,
font_size=15, bold=False, color=GOLD, align=PP_ALIGN.LEFT)
def footer(slide, text="WBHRB OT Technician CBT 2026 | Exam Preparation Strategy"):
add_rect(slide, 0, 7.15, 13.333, 0.35, DARK_BLUE)
add_textbox(slide, text, 0.3, 7.15, 12.5, 0.35,
font_size=10, color=WHITE, align=PP_ALIGN.CENTER)
def card(slide, x, y, w, h, bg=LIGHT_BLUE, border_color=MED_BLUE):
r = add_rect(slide, x, y, w, h, bg)
r.line.color.rgb = border_color
r.line.width = Pt(1.2)
return r
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 1 – TITLE SLIDE
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, DARK_BLUE)
# diagonal accent
add_rect(slide, 0, 5.0, 13.333, 2.5, MED_BLUE)
add_rect(slide, 0, 4.9, 13.333, 0.12, ORANGE)
add_rect(slide, 0, 7.15, 13.333, 0.35, RGBColor(0x0A, 0x2A, 0x50))
# Badge circle simulation via rectangle
add_rect(slide, 5.5, 0.3, 2.4, 0.55, ORANGE)
add_textbox(slide, "WBHRB 2026", 5.5, 0.3, 2.4, 0.55,
font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, "OT TECHNICIAN", 1.0, 1.1, 11.5, 1.1,
font_size=52, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, "CBT EXAM", 1.0, 2.1, 11.5, 0.9,
font_size=46, bold=True, color=GOLD, align=PP_ALIGN.CENTER)
add_textbox(slide, "PREPARATION STRATEGY", 1.0, 2.95, 11.5, 0.75,
font_size=30, bold=False, color=WHITE, align=PP_ALIGN.CENTER)
add_rect(slide, 3.5, 3.75, 6.333, 0.05, ORANGE)
add_textbox(slide, "West Bengal Health Recruitment Board", 1.0, 3.9, 11.5, 0.5,
font_size=18, color=LIGHT_BLUE, align=PP_ALIGN.CENTER)
add_textbox(slide, "Complete Roadmap • Subject Wise Tips • High Yield Topics • Mock Test Strategy",
0.5, 5.15, 12.333, 0.5, font_size=14, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, "Prepared by: Orris AI | August 2026", 0.5, 7.15, 12.5, 0.35,
font_size=10, color=LIGHT_BLUE, align=PP_ALIGN.CENTER)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 2 – EXAM OVERVIEW
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "Exam Overview", "WBHRB OT Technician Computer Based Test (CBT)")
footer(slide)
info = [
("Conducting Body", "West Bengal Health Recruitment Board (WBHRB)"),
("Exam Mode", "Computer Based Test (CBT) - Online"),
("Total Questions", "100 MCQs (4 options each)"),
("Duration", "90 Minutes"),
("Marking Scheme", "+1 for correct | Negative marking may apply"),
("Medium", "English & Bengali"),
("Eligibility", "10+2 (Science) + OT Technician Diploma/Certificate"),
]
col_x = [0.4, 4.5]
col_w = [4.0, 8.5]
for i, (label, value) in enumerate(info):
row_y = 1.4 + i * 0.73
bg = WHITE if i % 2 == 0 else RGBColor(0xEB, 0xF5, 0xFB)
add_rect(slide, 0.4, row_y, 12.5, 0.68, bg)
r = slide.shapes[-1]
r.line.color.rgb = RGBColor(0xCC, 0xCC, 0xCC)
r.line.width = Pt(0.5)
add_textbox(slide, label, 0.5, row_y, 3.8, 0.68,
font_size=14, bold=True, color=DARK_BLUE)
add_textbox(slide, value, 4.4, row_y, 8.3, 0.68,
font_size=14, color=DARK_GRAY)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 3 – SYLLABUS BREAKDOWN
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "Syllabus Breakdown", "7 Core Subject Areas – Know Your Weightage")
footer(slide)
subjects = [
("Anatomy & Physiology", "~20 Qs", MED_BLUE),
("Sterilization & Asepsis", "~15 Qs", GREEN),
("OT Instruments & Equipment", "~15 Qs", RGBColor(0x7D, 0x3C, 0x98)),
("Anesthesia (Types & Drugs)", "~15 Qs", ORANGE),
("Surgical Procedures & Protocols", "~15 Qs", RED),
("Patient Care & Safety", "~10 Qs", RGBColor(0x17, 0x7B, 0x8A)),
("Microbiology & Pharmacology", "~10 Qs", RGBColor(0x5D, 0x60, 0x37)),
]
for i, (subject, qs, color) in enumerate(subjects):
row_y = 1.38 + i * 0.82
col = i % 2
add_rect(slide, 0.3, row_y, 0.28, 0.55, color)
add_rect(slide, 0.58, row_y, 9.5, 0.55, WHITE)
r = slide.shapes[-1]
r.line.color.rgb = color
r.line.width = Pt(1.5)
add_textbox(slide, subject, 0.7, row_y, 8.5, 0.55, font_size=15, bold=True, color=DARK_GRAY)
add_rect(slide, 10.2, row_y, 1.4, 0.55, color)
add_textbox(slide, qs, 10.2, row_y, 1.4, 0.55,
font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 4 – 90-DAY STUDY PLAN
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "90-Day Study Plan", "Phase-wise Strategy for WBHRB OT Technician CBT")
footer(slide)
phases = [
("PHASE 1", "Days 1-30", "Foundation Building",
["Anatomy & Physiology: all body systems",
"Basic Microbiology & Infection Control",
"OT zones, layout & environment",
"Daily: 2 hours study + 20 MCQs practice"],
MED_BLUE),
("PHASE 2", "Days 31-60", "Core OT Skills",
["Sterilization methods (autoclave, ETO, dry heat)",
"OT Instruments (names, uses, care)",
"Anesthesia types, drugs & reversal agents",
"Daily: 3 hours study + 40 MCQs practice"],
GREEN),
("PHASE 3", "Days 61-90", "Revision & Mock Tests",
["Surgical procedures & WHO Safety Checklist",
"Patient care, positioning & emergencies",
"Full-length mock CBTs (100 Qs/90 min)",
"Weekly: 2 full tests + error analysis"],
ORANGE),
]
for i, (phase_num, days, title, bullets, color) in enumerate(phases):
x = 0.3 + i * 4.35
add_rect(slide, x, 1.35, 4.1, 5.65, WHITE)
r = slide.shapes[-1]
r.line.color.rgb = color
r.line.width = Pt(2)
add_rect(slide, x, 1.35, 4.1, 0.9, color)
add_textbox(slide, phase_num, x, 1.35, 4.1, 0.45,
font_size=18, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, days, x, 1.78, 4.1, 0.45,
font_size=13, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, title, x+0.1, 2.3, 3.9, 0.5,
font_size=14, bold=True, color=color, align=PP_ALIGN.CENTER)
for j, bullet in enumerate(bullets):
by = 2.85 + j * 0.82
add_textbox(slide, "• " + bullet, x+0.15, by, 3.8, 0.78,
font_size=12, color=DARK_GRAY, word_wrap=True)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 5 – HIGH YIELD TOPICS (STERILIZATION)
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "High Yield: Sterilization & Asepsis", "Most Frequently Tested Area – Expected 12-15 Questions")
footer(slide)
table_data = [
("Method", "Temp / Agent", "Time", "Used For", "Key Point"),
("Autoclave", "121°C / 15 psi", "15-20 min", "Metal instruments", "Gold standard"),
("Flash Autoclave", "132-134°C / 30 psi", "3-4 min", "Unwrapped instruments", "Immediate use"),
("Dry Heat (Oven)", "160-170°C", "60-120 min", "Glassware, oils", "NOT rubber/plastic"),
("ETO Gas", "Ethylene Oxide", "4-6 hours", "Heat-sensitive items", "Toxic - ventilate"),
("Glutaraldehyde 2%", "Room temp", "10 hrs", "Endoscopes", "High-level disinfection"),
("Formaldehyde", "Fumigation", "Overnight", "OT fumigation", "Seal OT 24 hrs"),
]
col_widths = [2.1, 2.1, 1.5, 2.5, 2.8]
col_xs = [0.3, 2.4, 4.5, 6.0, 8.5]
row_h = 0.74
for r_i, row in enumerate(table_data):
row_y = 1.35 + r_i * row_h
for c_i, cell in enumerate(row):
bg = DARK_BLUE if r_i == 0 else (LIGHT_BLUE if r_i % 2 == 0 else WHITE)
fc = WHITE if r_i == 0 else DARK_GRAY
add_rect(slide, col_xs[c_i], row_y, col_widths[c_i]-0.05, row_h-0.02, bg)
s = slide.shapes[-1]
s.line.color.rgb = RGBColor(0xAA, 0xAA, 0xAA)
s.line.width = Pt(0.5)
add_textbox(slide, cell, col_xs[c_i]+0.05, row_y, col_widths[c_i]-0.1, row_h-0.02,
font_size=12, bold=(r_i == 0), color=fc, align=PP_ALIGN.CENTER,
v_anchor=MSO_ANCHOR.MIDDLE)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 6 – HIGH YIELD TOPICS (INSTRUMENTS)
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "High Yield: OT Instruments", "Know the Name, Function & Category of Each Instrument")
footer(slide)
instruments = [
("HOLDING / GRASPING",
["Babcock Forceps – holds delicate structures (bowel, fallopian tube)",
"Kocher's Forceps – clamps large vessels/tough tissue (has teeth)",
"Allis Forceps – grasps fascia/non-crushing soft tissue",
"Sponge Holding Forceps – holds gauze for skin prep"],
MED_BLUE),
("CUTTING",
["Scalpel No.10/20 – large incisions; No.15 – fine cuts",
"Mayo Scissors – cutting heavy tissue/sutures",
"Metzenbaum Scissors – delicate tissue dissection",
"Gigli Saw – cutting bone (craniotomy/amputation)"],
GREEN),
("RETRACTING",
["Langenbeck Retractor – held by assistant; general use",
"Deaver Retractor – deep abdominal retraction",
"Balfour Retractor – self-retaining; abdominal surgery",
"Finochietto Retractor – self-retaining; thoracic surgery"],
ORANGE),
("SPECIAL",
["Needle Holder (Mayo-Hegar) – holds suture needle",
"Towel Clips – secures sterile drapes",
"Bone Rongeur – cuts/nibbles bone",
"Tourniquet – bloodless field for limb surgery"],
RED),
]
for i, (category, items, color) in enumerate(instruments):
x = 0.3 + (i % 2) * 6.5
y = 1.35 + (i // 2) * 3.0
add_rect(slide, x, y, 6.3, 2.75, WHITE)
r = slide.shapes[-1]
r.line.color.rgb = color
r.line.width = Pt(2)
add_rect(slide, x, y, 6.3, 0.45, color)
add_textbox(slide, category, x, y, 6.3, 0.45,
font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
for j, item in enumerate(items):
add_textbox(slide, "▸ " + item, x+0.15, y+0.5+j*0.54, 5.95, 0.52,
font_size=12, color=DARK_GRAY, word_wrap=True)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 7 – HIGH YIELD TOPICS (ANESTHESIA)
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "High Yield: Anesthesia", "Drugs, Types & Complications – 12-15 Expected Questions")
footer(slide)
# Left column – types
add_rect(slide, 0.3, 1.35, 5.9, 5.65, WHITE)
slide.shapes[-1].line.color.rgb = MED_BLUE
slide.shapes[-1].line.width = Pt(1.5)
add_rect(slide, 0.3, 1.35, 5.9, 0.5, MED_BLUE)
add_textbox(slide, "ANESTHESIA TYPES", 0.3, 1.35, 5.9, 0.5,
font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
anest_types = [
("General (GA)", "IV + inhalational; loss of consciousness"),
("Spinal (SA)", "Subarachnoid space; T4-L1 level; fast onset"),
("Epidural", "Epidural space; obstetrics & post-op pain"),
("Local", "Infiltration; minor procedures"),
("Regional", "Nerve blocks; brachial plexus, femoral etc."),
("Dissociative", "Ketamine; sedation with analgesia"),
]
for i, (atype, desc) in enumerate(anest_types):
ry = 1.95 + i * 0.82
add_rect(slide, 0.4, ry, 1.3, 0.7, MED_BLUE)
add_textbox(slide, atype, 0.4, ry, 1.3, 0.7,
font_size=10, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, desc, 1.75, ry, 4.3, 0.7,
font_size=12, color=DARK_GRAY, word_wrap=True)
# Right column – drugs
add_rect(slide, 6.5, 1.35, 6.5, 5.65, WHITE)
slide.shapes[-1].line.color.rgb = GREEN
slide.shapes[-1].line.width = Pt(1.5)
add_rect(slide, 6.5, 1.35, 6.5, 0.5, GREEN)
add_textbox(slide, "KEY DRUGS & REVERSAL AGENTS", 6.5, 1.35, 6.5, 0.5,
font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
drugs = [
("Propofol", "IV induction; milky white; short acting"),
("Thiopentone", "IV induction; ultrashort barbiturate"),
("Ketamine", "Dissociative; used in paeds & burns"),
("Succinylcholine", "Depolarizing MR; rapid intubation"),
("Neostigmine", "Reversal of non-depolarizing MR"),
("Naloxone", "Opioid reversal / antidote"),
("Flumazenil", "Benzodiazepine reversal"),
("Atropine", "Given with neostigmine; prevents bradycardia"),
]
for i, (drug, desc) in enumerate(drugs):
ry = 1.95 + i * 0.68
add_rect(slide, 6.6, ry, 1.6, 0.62, GREEN)
add_textbox(slide, drug, 6.6, ry, 1.6, 0.62,
font_size=10, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, desc, 8.25, ry, 4.6, 0.62,
font_size=11, color=DARK_GRAY, word_wrap=True)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 8 – WHO SURGICAL SAFETY CHECKLIST
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "WHO Surgical Safety Checklist", "3 Phases – Frequently Tested in WBHRB OT Technician Exam")
footer(slide)
phases_who = [
("SIGN IN", "Before Induction of Anaesthesia", MED_BLUE,
["Patient confirmed identity, site & procedure",
"Informed consent verified",
"Site marked if applicable",
"Anaesthesia machine & medication check",
"Pulse oximeter on & functioning",
"Allergies known? Airway risk assessed?",
"Blood loss risk assessed"]),
("TIME OUT", "Before Skin Incision", GREEN,
["Team introductions (all members by name & role)",
"Confirm patient name, procedure, site",
"Antibiotic prophylaxis given?",
"Critical steps discussed (surgeon)",
"Sterility confirmed (scrub nurse)",
"Imaging displayed if needed",
"Estimated blood loss discussed"]),
("SIGN OUT", "Before Patient Leaves OT", ORANGE,
["Procedure performed – confirmed in record",
"Instrument / sponge / needle count correct",
"Specimen labeled correctly",
"Equipment problems to address?",
"Surgeon reviews key concerns for recovery",
"Anaesthesia concerns for recovery noted",
"Nursing concerns reviewed"]),
]
for i, (phase, subtitle, color, items) in enumerate(phases_who):
x = 0.25 + i * 4.35
add_rect(slide, x, 1.35, 4.2, 5.65, WHITE)
slide.shapes[-1].line.color.rgb = color
slide.shapes[-1].line.width = Pt(2)
add_rect(slide, x, 1.35, 4.2, 1.0, color)
add_textbox(slide, phase, x, 1.35, 4.2, 0.52,
font_size=20, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, subtitle, x, 1.85, 4.2, 0.5,
font_size=11, color=WHITE, align=PP_ALIGN.CENTER, italic=True)
for j, item in enumerate(items):
add_textbox(slide, "✔ " + item, x+0.1, 2.42+j*0.52, 4.0, 0.5,
font_size=11, color=DARK_GRAY, word_wrap=True)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 9 – OT ZONES & ASEPTIC PRINCIPLES
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "OT Zones & Aseptic Principles", "Layout, Dress Code & Sterile Technique – High Yield")
footer(slide)
zones = [
("ZONE 1", "Unrestricted Zone", MED_BLUE,
"Street clothes allowed. Reception, waiting area, locker rooms."),
("ZONE 2", "Semi-Restricted Zone", GREEN,
"Scrub suit required. Corridors, scrub sinks, instrument storage."),
("ZONE 3", "Restricted Zone", ORANGE,
"Full OT attire + mask. Operating theater, scrub area, sterile corridor."),
("ZONE 4", "Sterile Zone", RED,
"Sterile gown & gloves. Surgical field, instrument table, scrubbed team."),
]
for i, (num, name, color, desc) in enumerate(zones):
y = 1.4 + i * 1.4
add_rect(slide, 0.3, y, 1.4, 1.25, color)
add_textbox(slide, num, 0.3, y, 1.4, 0.6,
font_size=16, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, name, 0.3, y+0.6, 1.4, 0.65,
font_size=10, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_rect(slide, 1.75, y, 7.5, 1.25, WHITE)
slide.shapes[-1].line.color.rgb = color
slide.shapes[-1].line.width = Pt(1.5)
add_textbox(slide, desc, 1.9, y, 7.2, 1.25,
font_size=13, color=DARK_GRAY, word_wrap=True)
# Aseptic principles box on right
add_rect(slide, 9.5, 1.35, 3.5, 5.65, WHITE)
slide.shapes[-1].line.color.rgb = MED_BLUE
slide.shapes[-1].line.width = Pt(2)
add_rect(slide, 9.5, 1.35, 3.5, 0.5, MED_BLUE)
add_textbox(slide, "ASEPTIC PRINCIPLES", 9.5, 1.35, 3.5, 0.5,
font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
principles = [
"Only sterile items enter the sterile field",
"Sterile persons touch only sterile items",
"Non-sterile persons avoid sterile field",
"Sterile field edges (1-inch border) = unsterile",
"Sterile gown front (chest to waist) only is sterile",
"Hands kept above waist at all times",
"Moisture transfers contamination",
"Questionable sterility = UNSTERILE",
"Sterile field prepared just before use",
]
for i, p in enumerate(principles):
add_textbox(slide, "• " + p, 9.6, 1.9+i*0.55, 3.3, 0.53,
font_size=10, color=DARK_GRAY, word_wrap=True)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 10 – PATIENT POSITIONING
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "Patient Positioning in OT", "Common Positions & Their Surgical Applications")
footer(slide)
positions = [
("Supine", "Lying flat on back", "Abdominal, chest, lower limb surgery", MED_BLUE),
("Prone", "Lying face down", "Spine, posterior cranium, rectal surgery", GREEN),
("Lateral", "On side (left or right)", "Nephrectomy, thoracotomy, hip surgery", ORANGE),
("Lithotomy", "Legs elevated in stirrups", "Perineal, rectal, gynecological, urological", RED),
("Trendelenburg", "Head-down tilt (15-30°)", "Pelvic surgery, shock management", RGBColor(0x7D, 0x3C, 0x98)),
("Reverse Trend.", "Head-up tilt (15-30°)", "Head/neck, thyroid, laparoscopic (upper)", RGBColor(0x17, 0x7B, 0x8A)),
("Sitting/Fowler's","Semi-reclined 45-90°", "Craniotomy (posterior fossa), shoulder", RGBColor(0x5D, 0x60, 0x37)),
("Jackknife", "Prone with hips elevated", "Perianal/rectal surgery", DARK_BLUE),
]
col_labels = ["POSITION", "DESCRIPTION", "SURGERY USED FOR"]
col_xs2 = [0.3, 2.4, 5.0]
col_ws2 = [2.0, 2.5, 6.8]
# header row
for ci, lbl in enumerate(col_labels):
add_rect(slide, col_xs2[ci], 1.35, col_ws2[ci]-0.05, 0.5, DARK_BLUE)
add_textbox(slide, lbl, col_xs2[ci], 1.35, col_ws2[ci]-0.05, 0.5,
font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
for ri, (pos, desc, surgery, color) in enumerate(positions):
ry = 1.9 + ri * 0.7
bg = RGBColor(0xEB, 0xF5, 0xFB) if ri % 2 == 0 else WHITE
for ci in range(3):
add_rect(slide, col_xs2[ci], ry, col_ws2[ci]-0.05, 0.68, bg)
slide.shapes[-1].line.color.rgb = RGBColor(0xCC, 0xCC, 0xCC)
slide.shapes[-1].line.width = Pt(0.4)
add_rect(slide, 0.3, ry, 0.12, 0.68, color)
add_textbox(slide, pos, 0.45, ry, 1.85, 0.68,
font_size=12, bold=True, color=DARK_GRAY)
add_textbox(slide, desc, 2.42, ry, 2.45, 0.68,
font_size=11, color=DARK_GRAY, word_wrap=True)
add_textbox(slide, surgery, 5.02, ry, 6.75, 0.68,
font_size=11, color=DARK_GRAY, word_wrap=True)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 11 – LAST-MINUTE REVISION TIPS
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "Last-Minute Revision Tips", "Final 2 Weeks Before the Exam – Smart Revision Strategy")
footer(slide)
tips_left = [
("MUST MEMORIZE", MED_BLUE, [
"Autoclave: 121°C / 15 psi / 15-20 min",
"Flash: 132-134°C / 30 psi / 3 min",
"Hot air oven: 160°C / 60 min",
"O2 cylinder = Black + White shoulders",
"N2O cylinder = Blue (Indian standard)",
"Normal SpO2 = 95-100%",
"Normal BP = 120/80 mmHg",
"Spinal anaesthesia = subarachnoid space",
]),
("REVERSAL DRUGS", GREEN, [
"Opioids → Naloxone",
"Benzodiazepines → Flumazenil",
"Non-depol. MR → Neostigmine + Atropine",
"Heparin → Protamine Sulfate",
"Warfarin → Vitamin K / FFP",
]),
]
tips_right = [
("EXAM DAY TIPS", ORANGE, [
"Attempt all questions – no blank",
"Read ALL 4 options before marking",
"Eliminate obviously wrong options",
"Mark & review doubtful questions",
"Time: ~54 sec per question",
"Don't change first instinct unless sure",
]),
("COMMON MISTAKES TO AVOID", RED, [
"Confusing autoclave temp with oven temp",
"Mixing up Kocher vs Babcock forceps use",
"Forgetting WHO checklist phases",
"Sign-in = before anaesthesia (NOT incision)",
"Succinylcholine = DEPOLARIZING (not non-dep.)",
"MRSA = Staphylococcus, NOT Streptococcus",
]),
]
for gi, group in enumerate([tips_left, tips_right]):
base_x = 0.3 + gi * 6.6
cy = 1.35
for (category, color, items) in group:
add_rect(slide, base_x, cy, 6.3, 0.45, color)
add_textbox(slide, category, base_x, cy, 6.3, 0.45,
font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_rect(slide, base_x, cy+0.45, 6.3, len(items)*0.54+0.1, WHITE)
slide.shapes[-1].line.color.rgb = color
slide.shapes[-1].line.width = Pt(1.5)
for j, item in enumerate(items):
add_textbox(slide, "✓ " + item, base_x+0.1, cy+0.5+j*0.54, 6.1, 0.52,
font_size=12, color=DARK_GRAY, word_wrap=True)
cy += 0.55 + len(items)*0.54 + 0.25
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 12 – MOCK TEST STRATEGY
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "Mock Test Strategy", "Practice Like It Is the Real Exam")
footer(slide)
# Timeline bar
timeline = [
("Week 1-2", "10 Qs/day\nSubject-wise", MED_BLUE),
("Week 3-4", "25 Qs/day\nMixed topics", GREEN),
("Week 5-6", "50 Qs/day\nFull sections", ORANGE),
("Week 7-8", "Full 100 Qs\nTimed test", RED),
("Week 9-10", "2 tests/week\nError review", RGBColor(0x7D, 0x3C, 0x98)),
]
for i, (week, action, color) in enumerate(timeline):
x = 0.5 + i * 2.5
add_rect(slide, x, 1.4, 2.2, 1.6, color)
add_textbox(slide, week, x, 1.4, 2.2, 0.55,
font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, action, x, 1.95, 2.2, 1.05,
font_size=12, color=WHITE, align=PP_ALIGN.CENTER)
if i < 4:
add_textbox(slide, "→", x+2.2, 1.9, 0.3, 0.7,
font_size=22, bold=True, color=MED_BLUE, align=PP_ALIGN.CENTER)
# DOs and DON'Ts
add_rect(slide, 0.3, 3.25, 6.0, 3.75, WHITE)
slide.shapes[-1].line.color.rgb = GREEN
slide.shapes[-1].line.width = Pt(2)
add_rect(slide, 0.3, 3.25, 6.0, 0.5, GREEN)
add_textbox(slide, "DOs ✔", 0.3, 3.25, 6.0, 0.5,
font_size=15, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
dos = [
"Simulate real exam: 90 min, no interruptions",
"Review every wrong answer immediately after",
"Maintain an error log notebook",
"Practice on WBHRB previous year papers",
"Use a timer app – aim <54 sec per question",
"Revise weak topics after each mock test",
]
for i, d in enumerate(dos):
add_textbox(slide, "✓ " + d, 0.45, 3.82+i*0.52, 5.7, 0.5,
font_size=12, color=DARK_GRAY, word_wrap=True)
add_rect(slide, 6.8, 3.25, 6.2, 3.75, WHITE)
slide.shapes[-1].line.color.rgb = RED
slide.shapes[-1].line.width = Pt(2)
add_rect(slide, 6.8, 3.25, 6.2, 0.5, RED)
add_textbox(slide, "DON'Ts ✗", 6.8, 3.25, 6.2, 0.5,
font_size=15, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
donts = [
"Do NOT leave questions blank (attempt all)",
"Avoid changing answers without strong reason",
"Don't cram the night before – sleep well",
"Avoid studying new topics in final week",
"Don't skip error analysis after mock tests",
"Avoid studying >4 hrs continuously; take breaks",
]
for i, d in enumerate(donts):
add_textbox(slide, "✗ " + d, 6.95, 3.82+i*0.52, 5.9, 0.5,
font_size=12, color=DARK_GRAY, word_wrap=True)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 13 – RECOMMENDED RESOURCES
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
header_bar(slide, "Recommended Resources", "Books, Online Platforms & Practice Resources")
footer(slide)
resources = [
("TEXTBOOKS", MED_BLUE, [
"BD Chaurasia – Human Anatomy (Vol I, II, III)",
"AK Jain – Textbook of Physiology",
"Ananthanarayanan – Microbiology (Textbook)",
"Morgan & Mikhail – Clinical Anesthesiology",
"Meeker & Rothrock – Alexander's Care of OT Patient",
"Brunner & Suddarth – Medical-Surgical Nursing",
]),
("ONLINE PRACTICE", GREEN, [
"WBHRB Official Website – wbhrb.in",
"Testpaperlive App – OT Technician CBT",
"SkilEdu.sg / similar platforms – MCQ banks",
"YouTube – Search 'WBHRB OT Technician Mock Test'",
"Previous Year Papers (2020-2025) – PDF available",
"Telegram groups – WBHRB OT Technician 2026",
]),
("QUICK REFERENCE", ORANGE, [
"WHO Surgical Safety Checklist (2 pages)",
"Autoclave & sterilization parameter chart",
"OT instrument photo cards (flashcards)",
"Anesthesia drug-dose-reversal quick chart",
"Normal lab values reference card",
"Medical abbreviations list (OT specific)",
]),
]
for i, (category, color, items) in enumerate(resources):
x = 0.3 + i * 4.35
add_rect(slide, x, 1.35, 4.1, 5.65, WHITE)
slide.shapes[-1].line.color.rgb = color
slide.shapes[-1].line.width = Pt(2)
add_rect(slide, x, 1.35, 4.1, 0.55, color)
add_textbox(slide, category, x, 1.35, 4.1, 0.55,
font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
for j, item in enumerate(items):
add_textbox(slide, "▸ " + item, x+0.1, 2.0+j*0.84, 3.9, 0.8,
font_size=12, color=DARK_GRAY, word_wrap=True)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 14 – MOTIVATIONAL CLOSING SLIDE
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank_layout)
add_rect(slide, 0, 0, 13.333, 7.5, DARK_BLUE)
add_rect(slide, 0, 3.5, 13.333, 0.1, ORANGE)
add_rect(slide, 0, 5.2, 13.333, 2.3, MED_BLUE)
add_rect(slide, 0, 7.15, 13.333, 0.35, RGBColor(0x0A, 0x2A, 0x50))
add_textbox(slide, "YOU ARE READY!", 0.5, 0.8, 12.333, 1.2,
font_size=52, bold=True, color=GOLD, align=PP_ALIGN.CENTER)
add_textbox(slide, "Consistent preparation today = Success on exam day",
0.5, 2.0, 12.333, 0.7,
font_size=22, color=WHITE, align=PP_ALIGN.CENTER, italic=True)
add_textbox(slide, "Final Checklist Before Exam Day:",
1.5, 3.7, 10.333, 0.55,
font_size=16, bold=True, color=GOLD, align=PP_ALIGN.CENTER)
checklist = ["✔ Complete 90-day study plan",
"✔ Attempt minimum 10 full mock tests",
"✔ Revise autoclave parameters, drug reversals & WHO checklist",
"✔ Sleep well the night before the exam",
"✔ Carry Admit Card + valid photo ID"]
for i, item in enumerate(checklist):
add_textbox(slide, item, 2.0, 4.35+i*0.46, 9.5, 0.44,
font_size=13, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, "Best of Luck from Orris AI | WBHRB OT Technician CBT 2026",
0.5, 7.15, 12.5, 0.35,
font_size=10, color=LIGHT_BLUE, align=PP_ALIGN.CENTER)
# ── Save ───────────────────────────────────────────────────────────────────────
output_path = "/tmp/workspace/ot-technician-ppt/OT_Technician_WB_2026_Exam_Strategy.pptx"
prs.save(output_path)
print(f"Saved: {output_path}")
cd /tmp/workspace/ot-technician-ppt && python create_ppt.py
ls -lh /tmp/workspace/ot-technician-ppt/
OT Technician WB 2026 Exam Strategy
Presentation · PPTX
| Slide | Title |
|---|---|
| 1 | Title Slide - OT Technician CBT Exam Preparation Strategy |
| 2 | Exam Overview (WBHRB pattern, marks, duration, eligibility) |
| 3 | Syllabus Breakdown (7 subjects with expected question count) |
| 4 | 90-Day Study Plan (3 phases with daily targets) |
| 5 | High Yield: Sterilization & Asepsis (parameter table) |
| 6 | High Yield: OT Instruments (4 categories with key instruments) |
| 7 | High Yield: Anesthesia (types + key drugs & reversal agents) |
| 8 | WHO Surgical Safety Checklist (all 3 phases in detail) |
| 9 | OT Zones & Aseptic Principles (4 zones + 9 principles) |
| 10 | Patient Positioning (8 positions with surgical uses) |
| 11 | Last-Minute Revision Tips + Common Mistakes to Avoid |
| 12 | Mock Test Strategy (weekly timeline + DOs and DON'Ts) |
| 13 | Recommended Resources (books, apps, quick references) |
| 14 | Motivational Closing Slide + Final Exam Checklist |