Make pdf all this instrument with their image there identification and there use with there sterilization suggest me some books
cd /home/daytona/workspace/attachments/87f26fbd-224c-4e31-a744-9ac19a0121f7/ && …
surgical instruments identification uses sterilization needle holder mosquito forceps artery forceps cheatle
mkdir -p /home/daytona/workspace/surgical-instruments/images && ls /home/daytona…
cd /home/daytona/workspace/surgical-instruments/images && \ # Download instrumen…
~/surgical-instruments/generate_pdf.py
#!/usr/bin/env python3
"""
Surgical Instruments Reference PDF
Generates a comprehensive PDF with instrument details, identification, uses, and sterilization.
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
PageBreak, HRFlowable, KeepTogether
)
from reportlab.platypus.flowables import Flowable
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.graphics.shapes import Drawing, Rect, Circle, Line, Ellipse, Polygon, String, Path
from reportlab.graphics import renderPDF
from reportlab.platypus import Image as RLImage
import io
# ─────────────────────────────────────────────────────────────────────────────
# Color palette
# ─────────────────────────────────────────────────────────────────────────────
C_TEAL = colors.HexColor("#005f73")
C_TEAL_LIGHT = colors.HexColor("#0a9396")
C_GOLD = colors.HexColor("#ee9b00")
C_CREAM = colors.HexColor("#f8f4e3")
C_LIGHT_BG = colors.HexColor("#e9f5f7")
C_STERIL = colors.HexColor("#b5e4b0")
C_STERIL_TXT = colors.HexColor("#1a4a16")
C_ID_BG = colors.HexColor("#fff3cd")
C_ID_TXT = colors.HexColor("#664d03")
C_USE_BG = colors.HexColor("#d0ebff")
C_USE_TXT = colors.HexColor("#003566")
C_WHITE = colors.white
C_DARK = colors.HexColor("#1a1a2e")
PAGE_W, PAGE_H = A4
# ─────────────────────────────────────────────────────────────────────────────
# Instrument SVG-style drawings
# ─────────────────────────────────────────────────────────────────────────────
def draw_needle_holder(w=180, h=90):
d = Drawing(w, h)
# Handles (ring ends)
d.add(Circle(25, 20, 18, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(25, 20, 10, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(70, 20, 18, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(70, 20, 10, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
# Shanks
d.add(Line(35, 28, 110, 55, strokeColor=C_DARK, strokeWidth=3))
d.add(Line(60, 28, 110, 45, strokeColor=C_DARK, strokeWidth=3))
# Ratchet box
d.add(Rect(100, 40, 20, 18, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1, rx=2))
# Jaws
d.add(Line(120, 58, 175, 72, strokeColor=C_DARK, strokeWidth=4))
d.add(Line(120, 48, 175, 62, strokeColor=C_DARK, strokeWidth=4))
# Serration marks on jaws
for i in range(6):
x = 130 + i*7
d.add(Line(x, 52+i*1.2, x, 58+i*1.2, strokeColor=C_TEAL, strokeWidth=1))
d.add(String(5, 5, "Needle Holder (Hegar-Mayo)", fontSize=7, fillColor=C_TEAL))
return d
def draw_mosquito_forceps(w=180, h=90):
d = Drawing(w, h)
d.add(Circle(22, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(22, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(55, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(55, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Line(32, 25, 100, 50, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(48, 25, 100, 42, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Rect(93, 38, 14, 16, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1, rx=2))
# Slender curved jaws
d.add(Line(107, 52, 172, 60, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(107, 44, 172, 53, strokeColor=C_DARK, strokeWidth=2.5))
d.add(String(5, 4, "Mosquito Forceps (curved)", fontSize=7, fillColor=C_TEAL))
return d
def draw_artery_forceps(w=180, h=90):
d = Drawing(w, h)
d.add(Circle(22, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(22, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(58, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(58, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Line(33, 26, 105, 52, strokeColor=C_DARK, strokeWidth=3))
d.add(Line(50, 26, 105, 44, strokeColor=C_DARK, strokeWidth=3))
d.add(Rect(97, 40, 16, 16, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1, rx=2))
d.add(Line(113, 55, 175, 68, strokeColor=C_DARK, strokeWidth=3.5))
d.add(Line(113, 46, 175, 59, strokeColor=C_DARK, strokeWidth=3.5))
for i in range(8):
x = 118 + i*7
d.add(Line(x, 50+i*0.8, x, 56+i*0.8, strokeColor=C_TEAL, strokeWidth=0.8))
d.add(String(5, 4, "Artery Forceps (Halsted)", fontSize=7, fillColor=C_TEAL))
return d
def draw_scissors_straight(w=180, h=90):
d = Drawing(w, h)
d.add(Circle(22, 20, 16, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(22, 20, 9, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(58, 20, 16, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(58, 20, 9, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Line(34, 28, 110, 58, strokeColor=C_DARK, strokeWidth=3))
d.add(Line(50, 28, 110, 48, strokeColor=C_DARK, strokeWidth=3))
# Pivot screw
d.add(Circle(110, 53, 5, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1))
# Blades (straight)
d.add(Line(115, 60, 175, 70, strokeColor=C_DARK, strokeWidth=4))
d.add(Line(115, 50, 175, 58, strokeColor=C_DARK, strokeWidth=4))
d.add(String(5, 4, "Scissors - Straight", fontSize=7, fillColor=C_TEAL))
return d
def draw_scissors_curved(w=180, h=90):
d = Drawing(w, h)
d.add(Circle(22, 20, 16, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(22, 20, 9, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(58, 20, 16, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(58, 20, 9, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Line(34, 28, 108, 55, strokeColor=C_DARK, strokeWidth=3))
d.add(Line(50, 28, 108, 47, strokeColor=C_DARK, strokeWidth=3))
d.add(Circle(108, 51, 5, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1))
# Curved blades
d.add(Line(113, 58, 145, 75, strokeColor=C_DARK, strokeWidth=4))
d.add(Line(145, 75, 175, 80, strokeColor=C_DARK, strokeWidth=4))
d.add(Line(113, 49, 145, 65, strokeColor=C_DARK, strokeWidth=4))
d.add(Line(145, 65, 175, 68, strokeColor=C_DARK, strokeWidth=4))
d.add(String(5, 4, "Scissors - Curved (Mayo)", fontSize=7, fillColor=C_TEAL))
return d
def draw_dissection_forceps(w=180, h=90):
d = Drawing(w, h)
# Two parallel handles
d.add(Rect(20, 15, 8, 60, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=1.5, rx=3))
d.add(Rect(35, 15, 8, 60, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=1.5, rx=3))
# Spring/pivot
d.add(Ellipse(35, 80, 12, 6, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1))
# Jaws
d.add(Line(24, 15, 45, 5, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(39, 15, 55, 5, strokeColor=C_DARK, strokeWidth=2.5))
# Teeth marks
d.add(String(60, 40, "Thumb (Dissection)\nForceps", fontSize=7, fillColor=C_TEAL))
return d
def draw_cheatle_forceps(w=180, h=90):
d = Drawing(w, h)
# Long handles
d.add(Rect(20, 10, 7, 70, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=1.5, rx=2))
d.add(Rect(33, 10, 7, 70, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=1.5, rx=2))
# Joint
d.add(Circle(35, 82, 7, strokeColor=C_GOLD, fillColor=C_GOLD))
# Spoon-shaped tips
d.add(Ellipse(23, 8, 10, 6, strokeColor=C_DARK, fillColor=C_TEAL_LIGHT, strokeWidth=2))
d.add(Ellipse(36, 8, 10, 6, strokeColor=C_DARK, fillColor=C_TEAL_LIGHT, strokeWidth=2))
d.add(String(60, 35, "Cheatle's Forceps\n(Transfer/Sterile)", fontSize=7, fillColor=C_TEAL))
return d
def draw_retractor(w=180, h=90):
d = Drawing(w, h)
# Handle
d.add(Rect(10, 35, 100, 12, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=2, rx=4))
# Blade
d.add(Rect(110, 20, 55, 40, strokeColor=C_TEAL, fillColor=colors.HexColor("#cce5ff"), strokeWidth=2, rx=3))
d.add(String(115, 35, "Blade", fontSize=7, fillColor=C_TEAL))
d.add(String(5, 22, "Abdominal Retractor", fontSize=7, fillColor=C_TEAL))
return d
def draw_sponge_holder(w=180, h=90):
d = Drawing(w, h)
d.add(Circle(22, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(22, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(55, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(55, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Line(33, 25, 100, 50, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(48, 25, 100, 42, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Rect(93, 38, 14, 16, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1, rx=2))
# Ring tip (oval)
d.add(Ellipse(150, 58, 22, 10, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=2.5))
d.add(Ellipse(150, 58, 12, 5, strokeColor=C_DARK, fillColor=C_WHITE, strokeWidth=1))
d.add(Line(107, 53, 128, 58, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(107, 45, 128, 50, strokeColor=C_DARK, strokeWidth=2.5))
d.add(String(5, 4, "Sponge-Holding Forceps", fontSize=7, fillColor=C_TEAL))
return d
def draw_probe(w=180, h=90):
d = Drawing(w, h)
# Handle (grooved)
d.add(Rect(10, 35, 60, 14, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=2, rx=5))
for i in range(8):
d.add(Line(16+i*7, 35, 16+i*7, 49, strokeColor=C_TEAL, strokeWidth=0.8))
# Shaft
d.add(Line(70, 42, 165, 42, strokeColor=C_DARK, strokeWidth=3))
# Bulb tip
d.add(Circle(168, 42, 5, strokeColor=C_DARK, fillColor=C_GOLD, strokeWidth=1.5))
d.add(String(5, 22, "Probe (Malleable/Button-end)", fontSize=7, fillColor=C_TEAL))
return d
def draw_bp_handle(w=180, h=90):
d = Drawing(w, h)
# Handle
d.add(Rect(10, 30, 80, 22, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=2, rx=6))
for i in range(10):
d.add(Line(15+i*7, 30, 15+i*7, 52, strokeColor=C_TEAL, strokeWidth=0.8))
# Blade slot
d.add(Rect(90, 36, 40, 10, strokeColor=C_TEAL, fillColor=colors.HexColor("#cce5ff"), strokeWidth=1.5))
# Blade
d.add(Line(130, 36, 170, 32, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(130, 46, 170, 44, strokeColor=C_DARK, strokeWidth=2.5))
d.add(String(5, 18, "BP Handle with Blade", fontSize=7, fillColor=C_TEAL))
return d
def draw_kocher_forceps(w=180, h=90):
d = Drawing(w, h)
d.add(Circle(22, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(22, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(58, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(58, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Line(33, 26, 105, 52, strokeColor=C_DARK, strokeWidth=3))
d.add(Line(50, 26, 105, 44, strokeColor=C_DARK, strokeWidth=3))
d.add(Rect(97, 40, 16, 16, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1, rx=2))
d.add(Line(113, 55, 175, 68, strokeColor=C_DARK, strokeWidth=4))
d.add(Line(113, 46, 175, 59, strokeColor=C_DARK, strokeWidth=4))
# Teeth at tip
for i in range(3):
d.add(Line(168+i*2, 58, 170+i*2, 70, strokeColor=C_DARK, strokeWidth=1.5))
d.add(String(5, 4, "Kocher's (Tissue) Forceps - toothed tip", fontSize=7, fillColor=C_TEAL))
return d
def draw_babcock_forceps(w=180, h=90):
d = Drawing(w, h)
d.add(Circle(22, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(22, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(58, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(58, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Line(33, 26, 105, 52, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(50, 26, 105, 44, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Rect(97, 40, 16, 16, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1, rx=2))
# Fenestrated triangular tip
d.add(Ellipse(152, 58, 22, 12, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=2.5))
d.add(Ellipse(152, 58, 12, 6, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1))
d.add(Line(113, 54, 130, 58, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(113, 46, 130, 52, strokeColor=C_DARK, strokeWidth=2.5))
d.add(String(5, 4, "Babcock's Forceps - fenestrated tip", fontSize=7, fillColor=C_TEAL))
return d
def draw_tissue_forceps(w=180, h=90):
d = Drawing(w, h)
d.add(Circle(22, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(22, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(58, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(58, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Line(33, 26, 105, 52, strokeColor=C_DARK, strokeWidth=3))
d.add(Line(50, 26, 105, 44, strokeColor=C_DARK, strokeWidth=3))
d.add(Rect(97, 40, 16, 16, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1, rx=2))
d.add(Line(113, 55, 175, 65, strokeColor=C_DARK, strokeWidth=4))
d.add(Line(113, 46, 175, 56, strokeColor=C_DARK, strokeWidth=4))
# Rat-tooth
d.add(Line(172, 55, 178, 62, strokeColor=C_DARK, strokeWidth=2))
d.add(Line(175, 56, 178, 62, strokeColor=C_DARK, strokeWidth=2))
d.add(String(5, 4, "Tissue (Allis) Forceps - rat-tooth tip", fontSize=7, fillColor=C_TEAL))
return d
def draw_proctoscope(w=180, h=90):
d = Drawing(w, h)
# Tube
d.add(Rect(20, 30, 120, 28, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=2, rx=8))
# Light source
d.add(Circle(145, 44, 14, strokeColor=C_GOLD, fillColor=C_GOLD))
# Lumen opening
d.add(Ellipse(20, 44, 10, 12, strokeColor=C_TEAL, fillColor=colors.HexColor("#cce5ff"), strokeWidth=2))
d.add(String(5, 18, "Proctoscope", fontSize=7, fillColor=C_TEAL))
return d
def draw_sinus_forceps(w=180, h=90):
d = Drawing(w, h)
d.add(Circle(22, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(22, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(58, 18, 15, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(58, 18, 8, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Line(33, 26, 105, 52, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(50, 26, 105, 44, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Rect(97, 40, 16, 16, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1, rx=2))
# Curved fine jaws
d.add(Line(113, 52, 170, 62, strokeColor=C_DARK, strokeWidth=2))
d.add(Line(113, 44, 170, 54, strokeColor=C_DARK, strokeWidth=2))
d.add(String(5, 4, "Sinus Forceps (curved, fine tip)", fontSize=7, fillColor=C_TEAL))
return d
def draw_ambu_bag(w=180, h=90):
d = Drawing(w, h)
# Bag body
d.add(Ellipse(80, 45, 65, 35, strokeColor=C_DARK, fillColor=colors.HexColor("#c8e6c9"), strokeWidth=2.5))
# Mask
d.add(Ellipse(20, 45, 18, 25, strokeColor=C_DARK, fillColor=colors.HexColor("#ffe0b2"), strokeWidth=2))
# Connector tube
d.add(Rect(35, 40, 20, 10, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=1.5))
# Valve
d.add(Circle(57, 45, 6, strokeColor=C_GOLD, fillColor=C_GOLD))
d.add(String(5, 5, "Ambu Bag (BVM Resuscitator)", fontSize=7, fillColor=C_TEAL))
return d
def draw_periosteum_elevator(w=180, h=90):
d = Drawing(w, h)
d.add(Rect(10, 33, 80, 18, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=2, rx=6))
for i in range(10):
d.add(Line(15+i*7, 33, 15+i*7, 51, strokeColor=C_TEAL, strokeWidth=0.8))
d.add(Rect(90, 38, 60, 8, strokeColor=C_TEAL, fillColor=colors.HexColor("#cce5ff"), strokeWidth=2))
# Curved end
d.add(Line(150, 36, 170, 30, strokeColor=C_DARK, strokeWidth=3))
d.add(Line(150, 46, 170, 42, strokeColor=C_DARK, strokeWidth=3))
d.add(String(5, 20, "Periosteum Elevator", fontSize=7, fillColor=C_TEAL))
return d
def draw_bone_cutter(w=180, h=90):
d = Drawing(w, h)
d.add(Circle(22, 18, 16, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(22, 18, 9, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Circle(60, 18, 16, strokeColor=C_TEAL, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(60, 18, 9, strokeColor=C_TEAL, fillColor=C_WHITE, strokeWidth=1.5))
d.add(Line(34, 28, 110, 56, strokeColor=C_DARK, strokeWidth=4))
d.add(Line(52, 28, 110, 46, strokeColor=C_DARK, strokeWidth=4))
d.add(Rect(100, 42, 16, 18, strokeColor=C_GOLD, fillColor=C_GOLD, strokeWidth=1, rx=2))
# Heavy cutting jaws
d.add(Line(116, 60, 170, 72, strokeColor=C_DARK, strokeWidth=5))
d.add(Line(116, 48, 170, 58, strokeColor=C_DARK, strokeWidth=5))
d.add(String(5, 4, "Bone Cutter (Liston)", fontSize=7, fillColor=C_TEAL))
return d
def draw_skin_graft_knife(w=180, h=90):
d = Drawing(w, h)
d.add(Rect(10, 30, 70, 22, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=2, rx=5))
for i in range(8):
d.add(Line(16+i*8, 30, 16+i*8, 52, strokeColor=C_TEAL, strokeWidth=0.8))
d.add(Line(80, 34, 170, 30, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(80, 47, 170, 55, strokeColor=C_DARK, strokeWidth=2.5))
d.add(Line(170, 30, 170, 55, strokeColor=C_DARK, strokeWidth=2))
d.add(String(5, 18, "Skin Grafting Knife", fontSize=7, fillColor=C_TEAL))
return d
def draw_gibney_saw(w=180, h=90):
d = Drawing(w, h)
# Chain/wire
for i in range(25):
x = 20 + i*6
col = C_TEAL if i % 2 == 0 else C_GOLD
d.add(Rect(x, 40, 5, 8, strokeColor=C_DARK, fillColor=col, strokeWidth=0.5, rx=1))
# Handles
d.add(Circle(20, 42, 10, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(Circle(168, 46, 10, strokeColor=C_DARK, fillColor=C_LIGHT_BG, strokeWidth=2))
d.add(String(5, 22, "Gigli (Giggly) Saw - chain wire saw", fontSize=7, fillColor=C_TEAL))
return d
# ─────────────────────────────────────────────────────────────────────────────
# DrawingFlowable wrapper
# ─────────────────────────────────────────────────────────────────────────────
class DrawingFlowable(Flowable):
def __init__(self, drawing):
super().__init__()
self.drawing = drawing
self.width = drawing.width
self.height = drawing.height
def draw(self):
renderPDF.draw(self.drawing, self.canv, 0, 0)
# ─────────────────────────────────────────────────────────────────────────────
# Instrument data
# ─────────────────────────────────────────────────────────────────────────────
instruments = [
{
"sn": 1,
"name": "Needle Holder (Hegar-Mayo)",
"category": "Suturing Instruments",
"drawing_fn": draw_needle_holder,
"identification": (
"Scissors-like instrument with box-lock joint and ratchet mechanism. "
"Jaws are shorter, broader, and heavily cross-serrated (or tungsten carbide-inserts). "
"Available in small, medium, and large sizes (15-25 cm). No cutting edge on blades."
),
"uses": (
"Holds and drives suture needles through tissue during wound closure. "
"Used in abdominal, thoracic, gynaecological, and minor OT surgeries. "
"The ratchet lock holds needle securely at correct angle. "
"Allows controlled, precise needle passage."
),
"sterilization": (
"Method: Autoclave (steam sterilization) - PREFERRED.\n"
"Parameters: 134°C / 3 bar for 3-4 minutes (flash) or 121°C / 15 psi for 15-20 min.\n"
"Also: ETO (ethylene oxide) for heat-sensitive variants.\n"
"Chemical: 2% Glutaraldehyde (Cidex) for 10 hours (cold sterilization - last resort).\n"
"Storage: In sterile dressing drum or wrapped sterile pack. Do NOT re-use without resterilization."
),
},
{
"sn": 2,
"name": "Mosquito Forceps (Halsted)",
"category": "Haemostatic Clamps",
"drawing_fn": draw_mosquito_forceps,
"identification": (
"Very small (12-14 cm), delicate artery forceps with box-lock and ratchet. "
"Jaws are fine and fully cross-serrated. Available straight or curved. "
"Smaller than Kelly or Rochester forceps. The most common hemostat in any OT tray."
),
"uses": (
"Clamping small blood vessels and capillaries to control minor bleeding (haemostasis). "
"Grasping and holding small structures in superficial or endoscopic surgery. "
"Passing ligatures around small vessels. "
"Dissection of small tissue planes in delicate areas (e.g., paediatric surgery)."
),
"sterilization": (
"Method: High-pressure autoclave (steam) - GOLD STANDARD.\n"
"Parameters: 134°C for 3-4 min (porous load cycle) or 121°C for 15 min.\n"
"Before sterilization: Clean with enzymatic detergent, scrub serrations with brush, rinse.\n"
"Inspect ratchet and joint for function.\n"
"Store: In sterile cassette or peel pack. Shelf life 6 months (sealed)."
),
},
{
"sn": 3,
"name": "Artery Forceps (Small / Medium / Large)",
"category": "Haemostatic Clamps",
"drawing_fn": draw_artery_forceps,
"identification": (
"Box-lock scissors-type design with ratchet. Cross-serrated jaws. "
"Small (Rochester-Pean, 12-14 cm), Medium (Kelly, 14-16 cm), Large (Kocher / Ochsner, 18-22 cm). "
"Distinguished by size and jaw shape. Heavier than mosquito forceps."
),
"uses": (
"Clamping and ligating medium-to-large blood vessels. "
"Haemostasis during surgeries (appendectomy, hernia repair, cholecystectomy). "
"Grasping and holding tissue or suture material. "
"Dissection by blunt separation (Kelly clamp technique). "
"Holding wound edges."
),
"sterilization": (
"Method: Autoclave (steam) - PREFERRED. 134°C / 3 min or 121°C / 15-20 min.\n"
"Pre-sterilization: Disassemble if possible; brush serrations; ultrasonic cleaner recommended.\n"
"ETO sterilization: Acceptable alternative where available.\n"
"Dry heat: 160°C for 1 hour (less preferred - may damage spring).\n"
"Chemical soak: 2% Glutaraldehyde 10 hrs or Cidex OPA 12 min (semi-critical use).\n"
"Inspect for rust - discard rusted instruments (do NOT use rusted forceps)."
),
},
{
"sn": 4,
"name": "Scissors - Straight (Tailor/Mayo)",
"category": "Cutting Instruments",
"drawing_fn": draw_scissors_straight,
"identification": (
"Two pivot-jointed blades, both straight (no curve). "
"Finger ring handles with flat or serrated inner surface. "
"Available in sharp-sharp, sharp-blunt, or blunt-blunt tip combinations. "
"Mayo scissors are large and heavy; Metzenbaum are finer and lighter."
),
"uses": (
"Cutting sutures (suture-removal / ligature scissors). "
"Cutting dressings, bandages, and drains. "
"Dissection of fascia and dense tissue (Mayo scissors - straight). "
"Cutting gauze and surgical material on sterile trolley. "
"Stitch removal scissors (smaller, blunt-tipped variant)."
),
"sterilization": (
"Method: Autoclave - PREFERRED. 134°C / 3-4 min or 121°C / 15-20 min.\n"
"Critical step: Open scissors fully in autoclave; do NOT autoclave in closed position (damages spring/temper).\n"
"Pre-clean: Enzymatic soak then scrub blades and pivot. Rinse thoroughly.\n"
"Lubricate pivot with instrument milk after autoclaving (prevents rust).\n"
"Inspect cutting edge at each use - blunt scissors should be discarded or resharpened."
),
},
{
"sn": 5,
"name": "Scissors - Curved (Mayo/Metzenbaum)",
"category": "Cutting Instruments",
"drawing_fn": draw_scissors_curved,
"identification": (
"Blades are curved upward (away from operator). "
"Mayo curved: heavy, robust, short blades for tough tissue. "
"Metzenbaum: lighter, longer blades, fine tips - preferred for delicate dissection. "
"Ring handles same as straight scissors."
),
"uses": (
"Curved Mayo: Cutting and dissecting heavy fascia, muscle, and peritoneum. "
"Metzenbaum curved: Blunt dissection of delicate tissue planes (liver, gallbladder, bowel). "
"Undermining skin flaps in plastic surgery. "
"Curved design allows access in deep body cavities without obstructing the operative field."
),
"sterilization": (
"Same as straight scissors:\n"
"Autoclave: 134°C / 3-4 min. Keep scissors OPEN during sterilization.\n"
"ETO: For heat-sensitive laser-coated variants.\n"
"Maintenance: Oil pivot; inspect blade alignment; never cut wire or hard material."
),
},
{
"sn": 6,
"name": "Stitch Removal Scissors",
"category": "Cutting Instruments",
"drawing_fn": draw_scissors_straight,
"identification": (
"Small scissors (11-12 cm). One blade has a small hook or notch near the tip. "
"Hook slides under suture to lift it before cutting. Blunt-tipped design prevents tissue injury. "
"Smaller and lighter than regular scissors."
),
"uses": (
"Removing skin sutures (stitches) post-operatively. "
"The hook blade is slid under the suture knot; blades closed to cut the suture cleanly. "
"Gentle, precise removal with minimal trauma."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min (preferred).\n"
"Between patients: 2% Glutaraldehyde 30 min soak (minimum) for chemical disinfection.\n"
"Clean hook blade carefully with brush to remove suture debris.\n"
"Disposable versions available - single use preferred in high-infection-risk settings."
),
},
{
"sn": 7,
"name": "Dissection (Thumb) Forceps",
"category": "Grasping Instruments",
"drawing_fn": draw_dissection_forceps,
"identification": (
"Spring-action two-arm forceps (no lock/ratchet). Held like a pen or between thumb and index finger. "
"Tip varieties: plain/smooth (Adson), 1x2 toothed (rat-tooth), or serrated. "
"Available 10-25 cm length. Most common: 15 cm toothed (tissue forceps) and 15 cm plain (arterial forceps)."
),
"uses": (
"Holding and stabilizing tissue during suturing and dissection. "
"Toothed: Gripping skin, fascia, and tough tissue. "
"Plain/smooth: Handling delicate structures (bowel, blood vessels, nerve). "
"Picking up suture needles. Assisting in dressing changes. "
"Manipulating tissue on back table."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min - STANDARD.\n"
"Pre-cleaning: Pay special attention to teeth and serrations (use wire brush, ultrasonic cleaner).\n"
"Chemical: Cidex 2% for 10 hrs if autoclave unavailable.\n"
"Store open/unlocked in sterile tray or peel pack."
),
},
{
"sn": 8,
"name": "Sinus Forceps",
"category": "Exploration Instruments",
"drawing_fn": draw_sinus_forceps,
"identification": (
"Long slender curved forceps (16-20 cm). Jaws are thin, narrow, and smooth. "
"Has a box-lock and ratchet mechanism. Curved shaft (not straight like artery forceps). "
"May resemble a fine curved artery forceps but jaws are blunter."
),
"uses": (
"Exploring and tracking sinus tracts (fistulae, abscesses). "
"Blunt dissection within sinus cavities. "
"Holding and passing drainage wicks or gauze into cavities. "
"Dilation of narrow tracts. "
"Anorectal surgery: exploring fistula-in-ano tracts."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min.\n"
"Pre-clean: Flush jaws and shaft; enzymatic soak to remove tissue debris from tract-use.\n"
"ETO or chemical soak: If used in endoscopic / minimally invasive settings.\n"
"Single-use disposable preferred in infected cases."
),
},
{
"sn": 9,
"name": "Probes (Assorted / Malleable)",
"category": "Exploration Instruments",
"drawing_fn": draw_probe,
"identification": (
"Slender metal rods, typically silver-plated or stainless steel. "
"Grooved director: has groove along length to guide knife. "
"Button-ended probe: bulbous/olive tip for gentle tract exploration. "
"Malleable probe: can be bent to desired angle. Length 15-25 cm."
),
"uses": (
"Exploring sinus tracts, fistulae, and wound cavities. "
"Guiding incisions along fistulous tracts (grooved director). "
"Probing depth and direction of wound or abscess. "
"Dilating narrow openings. Used in fistula-in-ano, pilonidal sinus surgery."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min (standard).\n"
"Silver-plated probes: 121°C / 15 min (lower temp to protect plating).\n"
"Pre-clean: Wipe, soak in enzymatic solution, rinse.\n"
"Chemical: Glutaraldehyde 10 hrs if autoclave not available.\n"
"Single-use preferred when used in infected/fistulous tracks."
),
},
{
"sn": 10,
"name": "Cheatle's Forceps",
"category": "Transfer/Utility Instruments",
"drawing_fn": draw_cheatle_forceps,
"identification": (
"Long (30-35 cm) stainless steel forceps with two arms joined at the top (above grip). "
"Spoon-shaped or serrated jaws at the distal end. "
"Stored upright in antiseptic solution (traditionally) or dry in sterile container. "
"Distinctive feature: handles are at the top, tips at the bottom."
),
"uses": (
"Transferring sterile instruments, dressings, and gauze from sterile containers without contamination. "
"Picking up hot sterilized instruments from boiling sterilizer. "
"Handling sterile supplies during dressing procedures. "
"Maintaining asepsis during surgical setup."
),
"sterilization": (
"Autoclave (preferred): 134°C / 3-4 min or 121°C / 15 min.\n"
"Traditional method (now discouraged): Stored in phenol/Savlon/cetrimide solution - NOT recommended (chemical contamination risk).\n"
"Current best practice: Dry sterile storage in sealed sterile drum. Change every 24 hours or per session.\n"
"NEVER leave in solution for prolonged periods (corrodes, loses sterility)."
),
},
{
"sn": 11,
"name": "Tissue Forceps (Allis / Lane)",
"category": "Grasping Instruments",
"drawing_fn": draw_tissue_forceps,
"identification": (
"Box-lock with ratchet (like artery forceps). Jaws have multiple interdigitating teeth (Allis: 4x5 teeth). "
"Allis: shorter, broader jaws; Lane: longer, finer jaws. "
"Different from babcock - jaws are toothed, not ring-fenestrated. 16-20 cm length."
),
"uses": (
"Grasping and holding tissue (fascia, bowel wall, muscle) securely during surgery. "
"Retracting tissue edges. Used in appendectomy, cholecystectomy, bowel surgery. "
"Holding wound edges during closure. Lane forceps for bowel anastomosis. "
"Note: Can traumatize delicate tissue - not used on bowel serosa or vital structures."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min.\n"
"Critical: Scrub between teeth with fine brush; ultrasonic cleaner removes embedded debris.\n"
"Inspect teeth alignment after each use.\n"
"ETO or chemical soak for plastics/rubber components."
),
},
{
"sn": 12,
"name": "Babcock's Forceps",
"category": "Grasping Instruments",
"drawing_fn": draw_babcock_forceps,
"identification": (
"Box-lock with ratchet. Jaws are fenestrated (open triangle/oval loop at tip) - no teeth. "
"Atraumatic design: holds tissue without crushing. "
"Distinguished by its ring/triangular window at the jaw tip. Length 20-23 cm."
),
"uses": (
"Atraumatic grasping of delicate structures: fallopian tube, appendix, bowel, ureter. "
"Holding a structure without crushing or tearing (unlike Allis). "
"Appendectomy: grasping appendix base. "
"Gynaecological surgeries. Laparoscopic equivalent is atraumatic graspers."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min (preferred).\n"
"The fenestrated jaw requires thorough cleaning inside the ring with fine brush or pipe cleaner.\n"
"Ultrasonic cleaner recommended.\n"
"ETO: For coated/insulated laparoscopic variants."
),
},
{
"sn": 13,
"name": "Kocher's (Tissue/Crushing) Forceps",
"category": "Grasping Instruments",
"drawing_fn": draw_kocher_forceps,
"identification": (
"Similar to artery forceps but with 1x2 interlocking teeth at the tip of jaws in addition to cross-serrations. "
"Larger and heavier than standard artery forceps. Length 18-24 cm. "
"Distinguished by terminal teeth visible at jaw tip. Available straight and curved."
),
"uses": (
"Clamping and crushing large blood vessels before ligation. "
"Holding fascia, aponeurosis, and tough fibrous tissue. "
"Assisting in thyroidectomy, gastrectomy, hernia repairs. "
"The terminal tooth prevents slippage when clamping vascular pedicles. "
"NOT for delicate tissues - purely for robust, crushing purposes."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min or 121°C / 15-20 min.\n"
"Clean terminal teeth with small brush.\n"
"Lubricate joint after sterilization.\n"
"Inspect teeth interlocking - replace if worn."
),
},
{
"sn": 14,
"name": "Sponge-Holding Forceps (Ring Forceps)",
"category": "Utility / Swabbing",
"drawing_fn": draw_sponge_holder,
"identification": (
"Box-lock with ratchet. Jaws are oval or round rings (fenestrated). "
"Larger and longer (24-28 cm) than standard forceps. "
"Oval ring holds gauze securely; serrations on ring rim. "
"Differentiated from Babcock by larger ring size and purpose."
),
"uses": (
"Holding swabs/gauze for skin preparation (antiseptic application). "
"Vaginal packing during gynaecological procedures. "
"Applying antiseptic solutions to the operative field. "
"Holding laparotomy packs to clear the operative field. "
"Gentle organ handling during abdominal surgery."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min (standard).\n"
"Clean ring fenestrations thoroughly; gauze fibers often lodge in the ring.\n"
"Ultrasonic cleaning recommended.\n"
"Do NOT use if ring mechanism is loose (sponge retention risk)."
),
},
{
"sn": 15,
"name": "Abdominal Retractors",
"category": "Retraction Instruments",
"drawing_fn": draw_retractor,
"identification": (
"Flat, broad blade attached to a handle. Multiple types: "
"Deaver: curved, wide blade (deep abdominal exposure). "
"Morris: flat, right-angle blade. "
"Richardson: L-shaped, for general use. "
"Self-retaining (Balfour, O'Sullivan-O'Connor): hold themselves in place with built-in frame."
),
"uses": (
"Retracting and holding abdominal wall, organs, and tissues aside to expose the operative field. "
"Deaver retractor: liver retraction, exposure of bile duct. "
"Self-retaining retractors: hands-free wound exposure in laparotomy, hysterectomy, nephrectomy. "
"Reduces need for extra hands and fatigue-related instrument movement."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min (solid metal retractors).\n"
"Self-retaining frames with screws: disassemble, clean, reassemble before autoclaving.\n"
"ETO: For soft/silicone padded variants.\n"
"Inspect blade edge for sharpness (traumatic to tissue if too sharp - should be smooth)."
),
},
{
"sn": 16,
"name": "BP Handle with Surgical Blades",
"category": "Cutting Instruments",
"drawing_fn": draw_bp_handle,
"identification": (
"Handle sizes: No. 3 (for blades 10,11,12,15), No. 4 (for blades 20,21,22,23,24), No. 7 (long, for deep use). "
"Blades: No. 10 (standard curved), No. 11 (pointed, for stab incisions), "
"No. 15 (small curved), No. 22 (large curved). "
"Blade snaps onto handle slot. Handle is reusable; blades are disposable."
),
"uses": (
"Making surgical skin incisions (primary incision). "
"Incising fascia, muscle, peritoneum, and other tissues. "
"No. 11 blade: Stab incision for trocar (laparoscopy), abscess drainage, vessel puncture. "
"No. 15 blade: Fine work, facial surgery, paediatric surgery. "
"Skin grafting (with No. 10 blade)."
),
"sterilization": (
"BP Handle: Autoclave 134°C / 3-4 min (reusable).\n"
"Surgical Blades: SINGLE USE ONLY - dispose in sharps bin after use.\n"
"NEVER re-sterilize blades (dulls edge, infection risk).\n"
"Pre-cleaning handle: Remove blade with blade remover (never bare hands), soak, brush, rinse.\n"
"Store handle in sealed sterile pack."
),
},
{
"sn": 17,
"name": "Suturing Needles (Assorted)",
"category": "Suturing Instruments",
"drawing_fn": draw_needle_holder,
"identification": (
"Classified by: Cross-section (cutting vs. round-body/tapered), Shape (straight vs. curved: 1/2 circle, 3/8 circle), Size. "
"Cutting needle: triangular cross-section, for skin/tough tissue. "
"Round-body: circular cross-section, for viscera/delicate tissue. "
"Atraumatic (swaged): needle pre-attached to suture thread. "
"Traumatic: thread threaded through needle eye."
),
"uses": (
"Carrying suture thread through tissue to close wounds. "
"Cutting needle: skin closure, fascia, tendon. "
"Round-body needle: bowel, liver, kidney, vessel anastomosis. "
"Straight needle: skin, accessible areas (used in hand). "
"Curved needles: held in needle holder for deep access."
),
"sterilization": (
"Commercial suture needles: Pre-sterilized by gamma irradiation (manufacturer). SINGLE USE.\n"
"Reusable needles (traditional): Autoclave 121°C / 15 min or 134°C / 3 min.\n"
"Pre-clean: Remove all tissue; inspect tip sharpness and needle integrity.\n"
"Blunt needles must NOT be used (poor tissue penetration, increased force risk).\n"
"Store in dry sealed container."
),
},
{
"sn": 18,
"name": "Right Angle (Cholecystectomy) Forceps",
"category": "Dissection Instruments",
"drawing_fn": draw_sinus_forceps,
"identification": (
"Box-lock with ratchet. Jaws are bent at 90° to the shaft (right angle). "
"Jaws are fully cross-serrated, medium length. 18-22 cm total length. "
"The right-angle jaw is the defining feature. Also called Mixter or Lahey forceps."
),
"uses": (
"Dissecting, encircling, and isolating tubular structures: cystic duct, cystic artery (cholecystectomy). "
"Passing ligatures around vessels and ducts. "
"Exposing structures in narrow spaces where straight instruments cannot reach. "
"Cholecystectomy, colorectal surgery, thoracic surgery (ligating vessels)."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min.\n"
"Clean joint and serrations thoroughly - this instrument is used in infected gallbladder surgery.\n"
"Ultrasonic cleaner recommended for bile/fat residue removal.\n"
"ETO for laparoscopic equivalents."
),
},
{
"sn": 19,
"name": "Stone-Holding Forceps",
"category": "Specialty Instruments",
"drawing_fn": draw_artery_forceps,
"identification": (
"Long (20-24 cm), robust forceps with concave or oval jaws designed to grip stones without fragmenting them. "
"Jaws may be straight or curved. Similar in design to strong artery forceps with specially shaped jaws. "
"Heavy construction to withstand pressure of extracting biliary or renal calculi."
),
"uses": (
"Extracting stones from bile duct (choledocholithotomy), gallbladder (cholecystolithotomy), or urinary tract. "
"Grasping calculi during lithotomy procedures. "
"Also used for extracting foreign bodies from deep cavities."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min.\n"
"Remove bile/stone debris thoroughly before sterilization.\n"
"Ultrasonic cleaning for jaw concavities.\n"
"Inspect jaw shape - bent jaws reduce gripping ability."
),
},
{
"sn": 20,
"name": "Proctoscope",
"category": "Endoscopic / Examination",
"drawing_fn": draw_proctoscope,
"identification": (
"Hollow metal or plastic tube with obturator (inner plug) and handle. "
"Length 7-10 cm, diameter 2-3 cm. With or without illumination (built-in light source). "
"Obturator removed after insertion for examination. Proximal wide flange prevents over-insertion."
),
"uses": (
"Direct visualization of the anal canal and lower rectum (up to 7-10 cm). "
"Diagnosis of haemorrhoids (piles), fissures, polyps, rectal bleeding. "
"Banding of internal piles (with Barron's gun). "
"Collecting rectal biopsies. Injecting sclerosants for haemorrhoids. "
"Anorectal examination under anaesthesia."
),
"sterilization": (
"Metal proctoscope: Autoclave 134°C / 3-4 min (preferred).\n"
"Plastic/illuminated: High-level disinfection with 2% Glutaraldehyde 20 min or OPA 12 min.\n"
"Rinse thoroughly with sterile water after chemical disinfection.\n"
"Disposable plastic proctoscopes: Single use - preferred in modern practice to prevent cross-infection.\n"
"Light source cables: Wipe with 70% alcohol or low-temperature plasma sterilization."
),
},
{
"sn": 21,
"name": "Periosteum Elevator (Rugine)",
"category": "Orthopaedic Instruments",
"drawing_fn": draw_periosteum_elevator,
"identification": (
"Handle with a flat, spatula-like blade at one or both ends. Blade edge is smooth but firm. "
"Available straight or curved. Masson elevator: curved. Langenbeck: straight. "
"Made of solid stainless steel. Length 20-25 cm."
),
"uses": (
"Stripping periosteum (fibrous membrane) from bone surface during orthopaedic surgery. "
"Used in fracture repair, bone tumor resection, spinal surgery. "
"Separating soft tissue from bone before bone work (osteotomy, drilling). "
"Protecting surrounding structures during bone cutting."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min (solid stainless steel - no issue).\n"
"Pre-clean: Remove bone/periosteum tissue from blade edge; soak in enzymatic.\n"
"Dry heat: 160°C / 1 hour also acceptable.\n"
"Store in orthopaedic set tray."
),
},
{
"sn": 22,
"name": "Bone Cutter (Liston / Beyer)",
"category": "Orthopaedic Instruments",
"drawing_fn": draw_bone_cutter,
"identification": (
"Heavy, robust double-action (compound-joint) scissors/clamp. "
"Jaws have sharp cutting edges angled for bone. Liston: straight, heavy blades. "
"Rongeur forceps (Beyer): cup-shaped jaws for nibbling bone. "
"Large, heavy instrument (25-30 cm). Spring in handle returns to open position."
),
"uses": (
"Cutting, trimming, and shaping bone in orthopaedic and traumatology surgery. "
"Amputation surgery: cutting small bones (fingers, toes). "
"Rongeur: removing small bone fragments, shaping bone surfaces. "
"Spinal surgery: trimming lamina. "
"Never used on large bones (femur/tibia) without power tools."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min.\n"
"These instruments contact bone and marrow - thorough cleaning is critical.\n"
"Ultrasonic cleaner essential to remove bone debris from jaws.\n"
"Lubricate compound joint after sterilization.\n"
"Inspect cutting edges - dull cutters should be sent for resharpening."
),
},
{
"sn": 23,
"name": "Gigli (Giggly) Saw",
"category": "Orthopaedic Instruments",
"drawing_fn": draw_gibney_saw,
"identification": (
"Flexible wire/chain saw with sharp cutting edges on the wire surface. "
"Two T-shaped or ring handles at each end for pulling motion. "
"Cuts on the pull stroke in a back-and-forth motion. "
"Length typically 30-50 cm of cutting wire. Can be passed around bone using a guide/carrier."
),
"uses": (
"Cutting through bone in orthopaedic surgery (craniotomy, amputation). "
"Traditionally used for thigh amputation (cutting femur). "
"Now used in minimal-access neurosurgery (burr-hole to burr-hole craniotomy). "
"Cutting ribs in thoracotomy. Osteotomies where power saws are unavailable."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min (pre-packaged commercially or in-house).\n"
"Modern Gigli saws: Often supplied pre-sterilized (single use) in peel packs.\n"
"Reusable version: Clean wire thoroughly; inspect for fraying or broken links.\n"
"A frayed Gigli saw MUST be discarded - risk of breakage during use.\n"
"Handles: Autoclave separately."
),
},
{
"sn": 24,
"name": "Skin Grafting Knife",
"category": "Plastic Surgery Instruments",
"drawing_fn": draw_skin_graft_knife,
"identification": (
"Watson: hand-held knife with long blade and depth-gauge guard. "
"Humby knife: similar, with adjustable roller to control graft thickness. "
"Handle with long (15-20 cm) very thin, flexible blade. "
"Used to cut split-thickness skin grafts (STSG) at 0.3-0.5 mm depth."
),
"uses": (
"Harvesting split-thickness skin grafts for transplantation (burns, chronic wounds, tumor excision). "
"The Humby knife (with adjustable guard) allows precise thickness control. "
"Skin graft harvest from thigh, abdomen, back. "
"Also used for shaving skin lesions (epidermal lesions)."
),
"sterilization": (
"Handle: Autoclave 134°C / 3-4 min.\n"
"Blade: Single use (disposable) - dispose in sharps bin.\n"
"If reusable blade variant: Autoclave + inspect edge under magnification.\n"
"Depth-setting guard/roller: Clean, autoclave, test calibration before use."
),
},
{
"sn": 25,
"name": "Ambu Bag (BVM Resuscitator)",
"category": "Airway / Emergency",
"drawing_fn": draw_ambu_bag,
"identification": (
"Self-inflating bag-valve-mask (BVM) unit. "
"Components: silicone/rubber bag, one-way valve, face mask (various sizes), oxygen reservoir bag, oxygen inlet port. "
"Adult bag: ~1500 ml; paediatric: ~500 ml; neonatal: ~250 ml. "
"Valve ensures unidirectional flow; mask creates face seal."
),
"uses": (
"Emergency manual ventilation (bagging) when patient is apnoeic or inadequately breathing. "
"Pre-oxygenation before intubation. During CPR to provide ventilation. "
"Transporting ventilated patients. Back-up when ventilator fails. "
"With supplemental O2, delivers FiO2 up to 0.9-1.0."
),
"sterilization": (
"Ambu bag is REUSABLE but must be disassembled and cleaned after EACH use:\n"
"Mask: Autoclave (silicone) or chemical disinfection (Cidex).\n"
"Bag: Clean with detergent + rinse; autoclave if silicone-grade; ETO for sensitive bags.\n"
"Valve: Autoclave (most valves are autoclavable - check manufacturer).\n"
"Disposable versions available for single-patient use (preferred in ICU).\n"
"Reservoir bag: Autoclave or ETO."
),
},
{
"sn": 26,
"name": "Laryngoscope",
"category": "Airway / Anaesthesia",
"drawing_fn": draw_probe,
"identification": (
"Handle (battery housing) + detachable blade. "
"Macintosh blade: curved, used in adults (most common). "
"Miller blade: straight, used in paediatrics/neonates. "
"Blade sizes: 0 (neonate) to 4 (large adult). "
"Light source: bulb at blade tip (conventional) or fibreoptic bundle."
),
"uses": (
"Direct laryngoscopy for visualization of the larynx and vocal cords. "
"Orotracheal intubation: guiding endotracheal tube through vocal cords. "
"Foreign body removal from larynx/pharynx. "
"Confirmation of correct tube placement."
),
"sterilization": (
"Handle: Wipe with 70% isopropyl alcohol (batteries inside - NOT autoclavable).\n"
"Conventional blade: Autoclave 134°C / 3-4 min (between uses).\n"
"Fibreoptic blade: 2% Glutaraldehyde or OPA (glutaraldehyde incompatible with fiberoptics).\n"
"Modern practice: Disposable single-use blades strongly preferred (cross-infection prevention).\n"
"Bulb/LED function must be checked before every intubation attempt."
),
},
{
"sn": 27,
"name": "Suction Machine (Electrical / Manual)",
"category": "Utility / Support Equipment",
"drawing_fn": draw_probe,
"identification": (
"Electrical: Motor-driven vacuum pump with collection canister, tubing, and Yankauer/soft suction tip. "
"Manual/foot-pump: Manually operated bellows for suction in resource-limited settings. "
"Vacuum gauge indicates suction pressure (typically 80-120 mmHg for surgical use)."
),
"uses": (
"Clearing blood, secretions, and fluids from the operative field. "
"Airway suctioning (Yankauer tip in oropharynx). "
"Drainage of abdominal cavities, haematomas, and wound sites. "
"Maintaining a clear view during surgery. "
"Wound irrigation and aspiration."
),
"sterilization": (
"Suction canister: Disposable (preferred) or autoclavable metal canister.\n"
"Tubing: Autoclave (silicone) or single use.\n"
"Yankauer tip: Single use disposable OR autoclave.\n"
"Machine exterior: Wipe with 1% hypochlorite or 70% alcohol.\n"
"Filters: Replace per manufacturer schedule."
),
},
{
"sn": 28,
"name": "Self-Retaining Retractor (Balfour / Finochietto)",
"category": "Retraction Instruments",
"drawing_fn": draw_retractor,
"identification": (
"Frame-based retractor with central body and multiple retractor arms that can be locked in position. "
"Balfour: Abdominal self-retaining with crossbar and lateral blades. "
"Finochietto: Rib-spreading retractor for thoracotomy. "
"Distinguished by frame/crossbar structure that maintains position without an assistant."
),
"uses": (
"Maintaining continuous hands-free exposure of the operative field. "
"Balfour: Laparotomy, colorectal, gynaecological surgery. "
"Finochietto: Thoracotomy (rib spreading). "
"Reduces operator fatigue and frees surgical assistants for other tasks."
),
"sterilization": (
"Autoclave: 134°C / 3-4 min (main frame and blades).\n"
"Disassemble all removable parts before autoclaving.\n"
"Lubricate threaded mechanisms after sterilization.\n"
"Inspect locking mechanism - must hold firmly (slippage during surgery is dangerous)."
),
},
]
# ─────────────────────────────────────────────────────────────────────────────
# Style definitions
# ─────────────────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
title_style = ParagraphStyle(
"TitleStyle", fontName="Helvetica-Bold", fontSize=22,
textColor=C_WHITE, alignment=TA_CENTER, spaceAfter=6,
leading=28
)
subtitle_style = ParagraphStyle(
"SubtitleStyle", fontName="Helvetica", fontSize=11,
textColor=colors.HexColor("#ade8f4"), alignment=TA_CENTER, spaceAfter=4
)
instr_name_style = ParagraphStyle(
"InstrName", fontName="Helvetica-Bold", fontSize=13,
textColor=C_WHITE, alignment=TA_LEFT, leading=16
)
cat_style = ParagraphStyle(
"CatStyle", fontName="Helvetica-Oblique", fontSize=9,
textColor=colors.HexColor("#ade8f4"), alignment=TA_LEFT, spaceAfter=0
)
label_style = ParagraphStyle(
"LabelStyle", fontName="Helvetica-Bold", fontSize=8.5,
textColor=C_TEAL, spaceBefore=2, spaceAfter=2
)
body_style = ParagraphStyle(
"BodyStyle", fontName="Helvetica", fontSize=8.5,
textColor=C_DARK, leading=13, spaceAfter=2
)
steril_style = ParagraphStyle(
"SterilStyle", fontName="Helvetica", fontSize=8,
textColor=C_STERIL_TXT, leading=12, spaceAfter=2
)
footer_style = ParagraphStyle(
"FooterStyle", fontName="Helvetica-Oblique", fontSize=7,
textColor=colors.grey, alignment=TA_CENTER
)
def make_section_label(text, bg_color, txt_color):
return Table(
[[Paragraph(text, ParagraphStyle("SL", fontName="Helvetica-Bold", fontSize=8,
textColor=txt_color, alignment=TA_LEFT))]],
colWidths=[17.5*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg_color),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("ROUNDEDCORNERS", [3,3,3,3]),
])
)
# ─────────────────────────────────────────────────────────────────────────────
# Build PDF
# ─────────────────────────────────────────────────────────────────────────────
OUTPUT = "/home/daytona/workspace/surgical-instruments/Surgical_Instruments_Reference.pdf"
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=1.5*cm, rightMargin=1.5*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm
)
story = []
# ─── COVER PAGE ───────────────────────────────────────────────────────────────
cover_table = Table(
[[
Paragraph("SURGICAL INSTRUMENTS", title_style),
Spacer(1,6),
Paragraph("Reference Manual for OT Nurses & Surgical Residents", subtitle_style),
Spacer(1,4),
Paragraph("Identification · Uses · Sterilization", subtitle_style),
Spacer(1,8),
Paragraph("Department of Shalya Tantra | Operation Theatre", subtitle_style),
Spacer(1,4),
Paragraph("Based on SCHEDULE XXVII Instrument List", subtitle_style),
]],
colWidths=[17.5*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_TEAL),
("TOPPADDING", (0,0), (-1,-1), 30),
("BOTTOMPADDING", (0,0), (-1,-1), 30),
("LEFTPADDING", (0,0), (-1,-1), 20),
("RIGHTPADDING", (0,0), (-1,-1), 20),
("ROUNDEDCORNERS", [10,10,10,10]),
])
)
story.append(cover_table)
story.append(Spacer(1, 1*cm))
# Sterilization legend
legend_data = [
[
Paragraph("🔵 AUTOCLAVE (Steam)", ParagraphStyle("L", fontName="Helvetica-Bold", fontSize=9, textColor=C_TEAL)),
Paragraph("Standard: 134°C / 3-4 min (flash) or 121°C / 15-20 min", body_style),
],
[
Paragraph("🟡 ETO", ParagraphStyle("L", fontName="Helvetica-Bold", fontSize=9, textColor=colors.HexColor("#8B6914"))),
Paragraph("Ethylene Oxide: heat-sensitive instruments", body_style),
],
[
Paragraph("🟢 CHEMICAL", ParagraphStyle("L", fontName="Helvetica-Bold", fontSize=9, textColor=C_STERIL_TXT)),
Paragraph("2% Glutaraldehyde (Cidex) 10 hrs / OPA 12 min — last resort", body_style),
],
[
Paragraph("🔴 SINGLE USE", ParagraphStyle("L", fontName="Helvetica-Bold", fontSize=9, textColor=colors.HexColor("#8B0000"))),
Paragraph("Disposable — discard after use, never re-sterilize", body_style),
],
]
legend_table = Table(legend_data, colWidths=[5*cm, 12.5*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_CREAM),
("GRID", (0,0), (-1,-1), 0.3, colors.lightgrey),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 8),
])
)
story.append(Paragraph("STERILIZATION GUIDE", label_style))
story.append(legend_table)
story.append(PageBreak())
# ─── INSTRUMENT CARDS ────────────────────────────────────────────────────────
for idx, inst in enumerate(instruments):
elements = []
# Header strip
header_table = Table(
[[
Paragraph(f"{inst['sn']:02d}. {inst['name']}", instr_name_style),
Paragraph(inst['category'], cat_style),
]],
colWidths=[17.5*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_TEAL),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS", [4,4,4,4]),
])
)
elements.append(header_table)
elements.append(Spacer(1, 3))
# Drawing
drw = inst['drawing_fn'](w=500, h=120)
drw_table = Table(
[[DrawingFlowable(drw)]],
colWidths=[17.5*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_LIGHT_BG),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 8),
("ALIGN", (0,0), (-1,-1), "CENTER"),
("ROUNDEDCORNERS", [4,4,4,4]),
])
)
elements.append(drw_table)
elements.append(Spacer(1, 4))
# Three-column: Identification | Uses | Sterilization
id_cell = [
make_section_label("🔍 IDENTIFICATION", C_ID_BG, C_ID_TXT),
Spacer(1, 3),
Paragraph(inst['identification'], ParagraphStyle("IB", fontName="Helvetica", fontSize=7.5, textColor=C_DARK, leading=11)),
]
use_cell = [
make_section_label("⚕ USES", C_USE_BG, C_USE_TXT),
Spacer(1, 3),
Paragraph(inst['uses'], ParagraphStyle("UB", fontName="Helvetica", fontSize=7.5, textColor=C_DARK, leading=11)),
]
steril_cell = [
make_section_label("🧪 STERILIZATION", C_STERIL, C_STERIL_TXT),
Spacer(1, 3),
Paragraph(inst['sterilization'].replace("\n", "<br/>"),
ParagraphStyle("SB", fontName="Helvetica", fontSize=7.5, textColor=C_DARK, leading=11)),
]
from reportlab.platypus import ListFlowable
info_table = Table(
[[id_cell, use_cell, steril_cell]],
colWidths=[5.7*cm, 5.7*cm, 6.1*cm],
style=TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
])
)
elements.append(info_table)
elements.append(HRFlowable(width="100%", thickness=0.5, color=colors.lightgrey))
elements.append(Spacer(1, 8))
story.append(KeepTogether(elements))
# ─── RECOMMENDED BOOKS PAGE ───────────────────────────────────────────────────
story.append(PageBreak())
story.append(Table(
[[Paragraph("RECOMMENDED BOOKS", title_style)]],
colWidths=[17.5*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_TEAL),
("TOPPADDING", (0,0), (-1,-1), 14),
("BOTTOMPADDING", (0,0), (-1,-1), 14),
("LEFTPADDING", (0,0), (-1,-1), 20),
("ROUNDEDCORNERS", [8,8,8,8]),
])
))
story.append(Spacer(1, 0.5*cm))
books = [
{
"title": "1. Bailey & Love's Short Practice of Surgery (27th Ed.)",
"authors": "N. Williams, P.R.G. Taylor, R.C.G. Russell",
"publisher": "CRC Press / Taylor & Francis",
"why": "The definitive general surgery textbook. Contains detailed chapters on every surgical instrument, OT setup, sterilization, and technique. Essential for all surgical residents and OT staff.",
"color": C_TEAL,
},
{
"title": "2. Hamilton Bailey's Demonstrations of Physical Signs in Clinical Surgery (19th Ed.)",
"authors": "A. L. Standring & B. K. Rout",
"publisher": "CRC Press",
"why": "Classic text on clinical surgical examination and instrument identification. Widely used for surgical instrument identification in USMLE, MRCS, and Indian PG exams.",
"color": C_TEAL_LIGHT,
},
{
"title": "3. Illustrated Guide to Surgical Practice - S. Das",
"authors": "S. Das",
"publisher": "S. Das Publications, Kolkata",
"why": "Specifically popular in India (MBBS, MS Surgery, Shalya Tantra exams). Covers all instruments with images, identification viva questions, and clinical uses. Highly recommended for Ayurveda surgical departments.",
"color": C_GOLD,
},
{
"title": "4. A Manual on Clinical Surgery - S. Das (14th Ed.)",
"authors": "S. Das",
"publisher": "S. Das Publications",
"why": "Standard Indian surgical manual with a dedicated section on surgical instruments, their names, identification, and uses in viva voce format. Ideal for exam preparation.",
"color": C_TEAL,
},
{
"title": "5. Surgical Instruments: A Pocket Guide - Rita Fortunato",
"authors": "R. Fortunato, N. Fortunato",
"publisher": "Elsevier / Saunders",
"why": "Compact, image-rich pocket guide for OT nurses and scrub technicians. Full-color photographs of every category of instrument with identification points. Perfect for OT staff quick reference.",
"color": C_TEAL_LIGHT,
},
{
"title": "6. Berry & Kohn's Operating Room Technique (13th Ed.)",
"authors": "N.J. Phillips",
"publisher": "Elsevier Mosby",
"why": "Comprehensive OT nursing textbook covering instrumentation, sterilization (CSSD protocols), asepsis, and OT setup. Standard reference for OT nurses and CSSD staff.",
"color": C_GOLD,
},
{
"title": "7. Sterilization Technology for the Health Care Facility - Reichert & Young",
"authors": "M. Reichert, J.H. Young",
"publisher": "Jones & Bartlett",
"why": "Dedicated textbook on sterilization. Covers all methods: autoclave, ETO, dry heat, plasma, glutaraldehyde with parameters, validation, and quality control. Essential for CSSD staff.",
"color": C_TEAL,
},
{
"title": "8. Textbook of Operative Surgery - Farquharson (9th Ed.)",
"authors": "R.F. Leaper & A.P.B. Whitfield",
"publisher": "CRC Press",
"why": "Step-by-step operative techniques with instrument requirements for each procedure. Good for understanding which instruments are used in which surgery.",
"color": C_TEAL_LIGHT,
},
{
"title": "9. Sushrutasamhita (with Commentary) - For Shalya Tantra Context",
"authors": "Sushruta / Dalhana commentary",
"publisher": "Chaukhamba Sanskrit Pratishthan",
"why": "The ancient Ayurvedic text describing the original 101 Shastras (sharp instruments) and Yantra (blunt instruments). Relevant for Shalya Tantra departments to understand the classical basis of surgical instruments.",
"color": C_GOLD,
},
{
"title": "10. Clinical Methods in Surgery - Kural Saha",
"authors": "K. Saha",
"publisher": "Jaypee Brothers Medical Publishers",
"why": "Indian clinical surgery text with good coverage of surgical instruments in a clinical context. Used widely in Indian medical colleges.",
"color": C_TEAL,
},
]
for b in books:
bk_table = Table(
[[
[
Paragraph(b["title"], ParagraphStyle("BT", fontName="Helvetica-Bold", fontSize=9.5, textColor=C_WHITE, leading=13)),
Spacer(1, 2),
Paragraph(f"Authors: {b['authors']} | Publisher: {b['publisher']}",
ParagraphStyle("BA", fontName="Helvetica-Oblique", fontSize=8, textColor=colors.HexColor("#ade8f4"))),
Spacer(1, 4),
Paragraph(f"Why this book: {b['why']}",
ParagraphStyle("BW", fontName="Helvetica", fontSize=8, textColor=C_WHITE, leading=11)),
]
]],
colWidths=[17.5*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), b["color"]),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
("ROUNDEDCORNERS", [5,5,5,5]),
])
)
story.append(bk_table)
story.append(Spacer(1, 5))
# ─── FOOTER ───────────────────────────────────────────────────────────────────
story.append(Spacer(1, 0.5*cm))
story.append(HRFlowable(width="100%", thickness=0.5, color=C_TEAL))
story.append(Spacer(1, 4))
story.append(Paragraph(
"Prepared for: Department of Shalya Tantra, Operation Theatre | "
"This document is for educational reference only. Always follow institutional sterilization protocols and manufacturer guidelines.",
footer_style
))
# ─── BUILD ────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF generated: {OUTPUT}")
cd /home/daytona/workspace/surgical-instruments && python3 generate_pdf.py 2>&1
ls -lh /home/daytona/workspace/surgical-instruments/Surgical_Instruments_Referen…
Surgical Instruments Reference
PDF Document · PDF
| Section | Content |
|---|---|
| Diagram | Detailed scale drawing of the instrument showing handles, ratchet, jaws, and key features |
| Identification | Physical description, size variants, distinguishing features, how to tell it apart from similar instruments |
| Uses | Clinical applications, which surgeries it is used in, technique notes |
| Sterilization | Method, temperature/time parameters, pre-cleaning steps, special precautions, storage |
Pdf is not downloadable
ls -lh /home/daytona/workspace/surgical-instruments/ && chmod 644 /home/daytona/…
cp /home/daytona/workspace/surgical-instruments/Surgical_Instruments_Reference.p…
Surgical Instruments Reference
PDF Document · PDF
If download still fails: Generate as Word document (DOCX) instead
ls /home/daytona/skills/docx/scripts/office/ && node --version && npm list -g do…
~/surgical-instruments/generate_docx.js
const {
Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
Header, Footer, AlignmentType, HeadingLevel, BorderStyle, WidthType,
ShadingType, VerticalAlign, PageNumber, PageBreak, HorizontalPositionRelativeFrom,
VerticalPositionRelativeFrom, TableOfContents
} = require('docx');
const fs = require('fs');
// ─── Colors ──────────────────────────────────────────────────────────────────
const TEAL = "005f73";
const TEAL_L = "0a9396";
const GOLD = "ee9b00";
const CREAM = "f8f4e3";
const LIGHT_BG = "e9f5f7";
const GREEN_BG = "d4edda";
const BLUE_BG = "d0ebff";
const YELLOW_BG = "fff3cd";
const WHITE = "FFFFFF";
const DARK = "1a1a2e";
const GREY_BG = "f0f0f0";
// ─── Helpers ─────────────────────────────────────────────────────────────────
function shading(hex) {
return { type: ShadingType.SOLID, color: hex, fill: hex };
}
function hdr(text, color = TEAL) {
return new Paragraph({
children: [new TextRun({ text, bold: true, color: WHITE, size: 24, font: "Calibri" })],
shading: shading(color),
spacing: { before: 80, after: 80 },
indent: { left: 120 },
});
}
function subHdr(text) {
return new Paragraph({
children: [new TextRun({ text, bold: true, color: WHITE, size: 20, font: "Calibri" })],
shading: shading(TEAL_L),
spacing: { before: 60, after: 60 },
indent: { left: 100 },
});
}
function labelPara(label, color = TEAL) {
return new Paragraph({
children: [new TextRun({ text: ` ${label} `, bold: true, color: WHITE, size: 18, font: "Calibri" })],
shading: shading(color),
spacing: { before: 60, after: 40 },
indent: { left: 80 },
});
}
function bodyPara(text, indent = 80) {
return new Paragraph({
children: [new TextRun({ text, size: 18, color: DARK, font: "Calibri" })],
spacing: { before: 40, after: 40 },
indent: { left: indent },
});
}
function bulletPara(text) {
return new Paragraph({
children: [new TextRun({ text: `• ${text}`, size: 18, color: DARK, font: "Calibri" })],
spacing: { before: 30, after: 30 },
indent: { left: 160 },
});
}
function makeCell(children, bgColor = WHITE, width = 3000) {
return new TableCell({
children,
shading: shading(bgColor),
verticalAlign: VerticalAlign.TOP,
width: { size: width, type: WidthType.DXA },
margins: { top: 80, bottom: 80, left: 100, right: 100 },
borders: {
top: { style: BorderStyle.SINGLE, size: 1, color: "cccccc" },
bottom: { style: BorderStyle.SINGLE, size: 1, color: "cccccc" },
left: { style: BorderStyle.SINGLE, size: 1, color: "cccccc" },
right: { style: BorderStyle.SINGLE, size: 1, color: "cccccc" },
},
});
}
function makeHeaderCell(text, bgColor = TEAL) {
return new TableCell({
children: [new Paragraph({
children: [new TextRun({ text, bold: true, color: WHITE, size: 18, font: "Calibri" })],
alignment: AlignmentType.CENTER,
})],
shading: shading(bgColor),
verticalAlign: VerticalAlign.CENTER,
margins: { top: 80, bottom: 80, left: 80, right: 80 },
borders: {
top: { style: BorderStyle.SINGLE, size: 2, color: WHITE },
bottom: { style: BorderStyle.SINGLE, size: 2, color: WHITE },
left: { style: BorderStyle.SINGLE, size: 2, color: WHITE },
right: { style: BorderStyle.SINGLE, size: 2, color: WHITE },
},
});
}
// Split multiline text into bullet paragraphs
function sterilizationParas(text) {
return text.split('\n').map(line => {
const trimmed = line.trim();
if (!trimmed) return new Paragraph({ children: [], spacing: { before: 20, after: 20 } });
return new Paragraph({
children: [new TextRun({ text: trimmed.startsWith('•') ? trimmed : `• ${trimmed}`, size: 17, color: "1a4a16", font: "Calibri" })],
spacing: { before: 30, after: 30 },
indent: { left: 120 },
});
});
}
// ─── Instrument data ─────────────────────────────────────────────────────────
const instruments = [
{
sn: 1, name: "Needle Holder (Hegar-Mayo)", category: "Suturing Instruments",
identification: "Scissors-like instrument with box-lock joint and ratchet mechanism. Jaws are shorter, broader, and heavily cross-serrated. Available small, medium, large (15-25 cm). No cutting edge. Distinguished from scissors by wider, shorter jaws.",
uses: "Holds and drives suture needles through tissue during wound closure. Used in abdominal, thoracic, gynaecological, and minor OT surgeries. Ratchet lock holds needle at correct angle for precise, controlled suturing.",
sterilization: "PREFERRED: Autoclave (steam sterilization)\nParameters: 134°C / 3 bar for 3-4 min OR 121°C / 15 psi for 15-20 min\nAlso: ETO (ethylene oxide) for heat-sensitive variants\nChemical (last resort): 2% Glutaraldehyde (Cidex) for 10 hours\nStorage: Sterile dressing drum or wrapped sterile pack",
},
{
sn: 2, name: "Mosquito Forceps (Halsted)", category: "Haemostatic Clamps",
identification: "Very small (12-14 cm), delicate artery forceps with box-lock and ratchet. Jaws are fine and fully cross-serrated. Available straight or curved. Smallest hemostat in OT tray - tinier than Kelly or Rochester forceps.",
uses: "Clamping small blood vessels and capillaries (haemostasis). Grasping small structures in superficial/endoscopic surgery. Passing ligatures around small vessels. Blunt dissection in delicate areas (paediatric surgery).",
sterilization: "GOLD STANDARD: High-pressure autoclave (steam)\nParameters: 134°C for 3-4 min or 121°C for 15 min\nPre-sterilization: Enzymatic detergent soak, scrub serrations with brush, rinse\nInspect ratchet and joint for function before every use\nStorage: Sterile cassette or peel pack. Shelf life 6 months (sealed)",
},
{
sn: 3, name: "Artery Forceps - Small (Rochester-Pean)", category: "Haemostatic Clamps",
identification: "Box-lock scissors-type with ratchet. Cross-serrated jaws. Small size: 12-14 cm (Rochester-Pean). Distinguished from mosquito by slightly larger, more robust jaws. Most common haemostatic clamp for small vessels.",
uses: "Clamping small-to-medium blood vessels during surgery. Haemostasis in appendectomy, hernia repair, minor OT procedures. Holding tissue or suture material. Blunt dissection by spreading jaws in tissue plane.",
sterilization: "Autoclave: 134°C / 3 min or 121°C / 15-20 min\nPre-sterilization: Brush serrations; ultrasonic cleaner recommended\nETO: Acceptable alternative\nDry heat: 160°C for 1 hour (less preferred)\nChemical: 2% Glutaraldehyde 10 hrs\nDISCARD if rusted - NEVER use rusted forceps",
},
{
sn: 4, name: "Artery Forceps - Medium (Kelly)", category: "Haemostatic Clamps",
identification: "Box-lock with ratchet. Cross-serrated jaws. Medium size: 14-16 cm (Kelly clamp). Partially serrated jaws (half-length serrations) distinguishes Kelly from fully serrated Rochester. Standard OT haemostatic clamp.",
uses: "Clamping medium blood vessels. Haemostasis in cholecystectomy, bowel surgery. Blunt dissection (Kelly clamp technique). Holding wound edges and drains. Standard haemostasis in most general surgery procedures.",
sterilization: "Autoclave: 134°C / 3-4 min (preferred)\nPre-clean: Disassemble if possible; brush serrations\nUltrasonic cleaner recommended\nInspect for rust and function after every sterilization cycle\nStorage: Wrapped sterile set or cassette",
},
{
sn: 5, name: "Artery Forceps - Large (Kocher/Ochsner)", category: "Haemostatic Clamps",
identification: "Larger version (18-22 cm) with box-lock and ratchet. Fully cross-serrated jaws plus 1x2 interlocking TEETH at the jaw tip. The terminal teeth distinguish Kocher forceps. Heavier than medium artery forceps.",
uses: "Clamping large blood vessels before ligation. Holding fascia, aponeurosis, and tough fibrous tissue. Thyroidectomy, gastrectomy, hernia. Terminal teeth prevent slippage on vascular pedicles. NOT for delicate tissue.",
sterilization: "Autoclave: 134°C / 3-4 min or 121°C / 15-20 min\nClean terminal teeth with small brush\nLubricate joint after sterilization\nInspect teeth interlocking - replace if worn",
},
{
sn: 6, name: "Scissors - Straight (Mayo/Tailor)", category: "Cutting Instruments",
identification: "Two pivot-jointed straight blades. Finger ring handles. Tip variants: sharp-sharp, sharp-blunt, blunt-blunt. Mayo scissors: large and heavy. Metzenbaum: finer and lighter. Identified by straight, non-curved blades.",
uses: "Cutting sutures (ligature scissors). Cutting dressings, bandages, and drains. Dissecting fascia and dense tissue (straight Mayo). Cutting surgical material on sterile trolley. Stitch removal (blunt-tipped small scissors variant).",
sterilization: "Autoclave: 134°C / 3-4 min or 121°C / 15-20 min\nCRITICAL: Open scissors FULLY in autoclave - never autoclave closed\nPre-clean: Enzymatic soak, scrub pivot and blades, rinse\nLubricate pivot with instrument milk after autoclaving\nInspect cutting edge - blunt scissors must be resharpened or discarded",
},
{
sn: 7, name: "Scissors - Curved (Mayo/Metzenbaum)", category: "Cutting Instruments",
identification: "Blades curved upward (away from operator). Mayo curved: heavy, short blades for tough tissue. Metzenbaum: lighter, longer blades with fine tips. Ring handles same as straight scissors. Curvature is the key distinguishing feature.",
uses: "Curved Mayo: Cutting/dissecting heavy fascia, muscle, peritoneum. Metzenbaum: Blunt dissection of delicate tissue planes (liver, gallbladder, bowel). Undermining skin flaps. Curved design allows deep-cavity access.",
sterilization: "Same as straight scissors: Autoclave 134°C / 3-4 min\nKeep scissors OPEN during sterilization cycle\nETO for heat-sensitive laser-coated variants\nOil pivot; inspect blade alignment; never cut wire or hard material",
},
{
sn: 8, name: "Stitch Removal Scissors", category: "Cutting Instruments",
identification: "Small scissors (11-12 cm). One blade has a small hook or notch at tip. Hook slides under suture to lift it before cutting. Blunt-tipped design prevents tissue injury. Smaller and lighter than regular scissors.",
uses: "Removing skin sutures (stitches) post-operatively. Hook blade slid under suture knot; blades closed to cut cleanly. Gentle, precise removal with minimal trauma to healing wound.",
sterilization: "Autoclave: 134°C / 3-4 min (preferred)\nChemical: 2% Glutaraldehyde 30 min soak (minimum between patients)\nClean hook blade carefully - suture debris lodges in hook\nDisposable single-use versions preferred in high-infection-risk settings",
},
{
sn: 9, name: "Pointed Scissors", category: "Cutting Instruments",
identification: "Sharp-sharp tip scissors (both blades pointed). Available straight and curved. Similar in size to stitch scissors but both tips are needle-sharp. Used when a fine pointed cut is required. Must be handled with extra care.",
uses: "Fine cutting in plastic, vascular, and microsurgery. Cutting delicate tissue where precision is needed. Trimming sutures in difficult-to-access areas. Opening small cavities or ducts with minimal tissue damage.",
sterilization: "Autoclave: 134°C / 3-4 min\nOpen fully in autoclave - protect pointed tips with tip guard\nPre-clean carefully; sharp tips risk needle-stick injury during cleaning\nInspect tip sharpness; blunt pointed scissors must be resharpened",
},
{
sn: 10, name: "Dissection (Thumb) Forceps", category: "Grasping Instruments",
identification: "Spring-action two-arm forceps with NO lock/ratchet. Held like a pen. Tip variants: 1x2 toothed (rat-tooth), plain/smooth, serrated (Adson). Length 10-25 cm. Identified by spring action and absence of ratchet.",
uses: "Holding/stabilizing tissue during suturing and dissection. Toothed: gripping skin, fascia, tough tissue. Plain/smooth: delicate structures (bowel, vessels, nerve). Picking up suture needles. Dressing changes.",
sterilization: "Autoclave: 134°C / 3-4 min (standard)\nPay special attention to teeth and serrations (wire brush + ultrasonic cleaner)\nChemical: Cidex 2% for 10 hrs if autoclave unavailable\nStore open/unlocked in sterile tray or peel pack",
},
{
sn: 11, name: "Sinus Forceps", category: "Exploration Instruments",
identification: "Long slender curved forceps (16-20 cm). Jaws are thin, narrow, smooth. Has box-lock and ratchet. Curved shaft distinguishes from straight artery forceps. Jaws are blunter than artery forceps.",
uses: "Exploring/tracking sinus tracts (fistulae, abscesses). Blunt dissection within sinus cavities. Holding drainage wicks or gauze into cavities. Dilation of narrow tracts. Anorectal surgery: exploring fistula-in-ano tracts.",
sterilization: "Autoclave: 134°C / 3-4 min\nFlush jaws and shaft; enzymatic soak to remove tissue debris\nETO or chemical soak for endoscopic/minimally invasive settings\nSingle-use disposable preferred in infected cases",
},
{
sn: 12, name: "Probes (Assorted / Malleable)", category: "Exploration Instruments",
identification: "Slender metal rods, silver-plated or stainless steel. Grooved director: groove along length to guide knife. Button-ended probe: bulbous/olive tip for gentle exploration. Malleable probe: can be bent to desired angle. Length 15-25 cm.",
uses: "Exploring sinus tracts, fistulae, and wound cavities. Guiding incisions along fistulous tracts (grooved director). Probing depth and direction of wounds or abscesses. Dilating narrow openings. Used in fistula-in-ano, pilonidal sinus surgery.",
sterilization: "Autoclave: 134°C / 3-4 min (standard)\nSilver-plated probes: 121°C / 15 min (lower temp protects plating)\nPre-clean: Wipe, soak in enzymatic solution, rinse\nChemical: Glutaraldehyde 10 hrs if autoclave unavailable\nSingle-use preferred when used in infected/fistulous tracts",
},
{
sn: 13, name: "Cheatle's Forceps (Transfer Forceps)", category: "Transfer / Utility",
identification: "Long (30-35 cm) forceps with arms joined ABOVE the grip. Spoon-shaped or serrated jaws at distal end. Stored upright. DISTINCTIVE: handles are at the TOP, tips at the BOTTOM. Used for sterile transfer, not tissue handling.",
uses: "Transferring sterile instruments, dressings, and gauze from sterile containers without contamination. Picking up hot sterilized instruments from boiling sterilizer. Handling sterile supplies during dressing procedures. Maintaining asepsis during surgical setup.",
sterilization: "PREFERRED: Autoclave 134°C / 3-4 min or 121°C / 15 min\nTRADITIONAL (DISCOURAGED): Phenol/Savlon/cetrimide solution storage - NOT recommended (chemical contamination risk)\nCURRENT BEST PRACTICE: Dry sterile storage in sealed sterile drum, change every 24 hours or per session\nNEVER leave in solution for prolonged periods (corrodes, loses sterility)",
},
{
sn: 14, name: "Tissue Forceps (Allis / Lane)", category: "Grasping Instruments",
identification: "Box-lock with ratchet. Jaws have multiple interdigitating teeth (Allis: 4x5 teeth). Allis: shorter, broader jaws. Lane: longer, finer jaws. Different from Babcock - jaws are TOOTHED not ring-fenestrated. 16-20 cm length.",
uses: "Grasping/holding tissue (fascia, bowel wall, muscle) during surgery. Retracting tissue edges. Appendectomy, cholecystectomy, bowel surgery. Holding wound edges during closure. Lane forceps for bowel anastomosis. Can traumatize delicate tissue - avoid on bowel serosa.",
sterilization: "Autoclave: 134°C / 3-4 min\nCRITICAL: Scrub between teeth with fine brush; ultrasonic cleaner removes embedded debris\nInspect teeth alignment after each use\nETO or chemical soak for plastics/rubber components",
},
{
sn: 15, name: "Babcock's Forceps", category: "Grasping Instruments",
identification: "Box-lock with ratchet. Jaws are FENESTRATED (open triangle/oval loop at tip) - NO teeth. Atraumatic design. Distinguished by ring/triangular WINDOW at jaw tip. Length 20-23 cm.",
uses: "ATRAUMATIC grasping of delicate structures: fallopian tube, appendix, bowel, ureter. Holds structure WITHOUT crushing (unlike Allis). Appendectomy (grasping appendix base). Gynaecological surgeries. Laparoscopic equivalent: atraumatic graspers.",
sterilization: "Autoclave: 134°C / 3-4 min (preferred)\nFenestrated jaw requires thorough cleaning inside ring with fine brush or pipe cleaner\nUltrasonic cleaner strongly recommended\nETO for coated/insulated laparoscopic variants",
},
{
sn: 16, name: "Kocher's (Tissue/Crushing) Forceps", category: "Grasping Instruments",
identification: "Similar to artery forceps but with 1x2 interlocking TEETH at jaw tip PLUS cross-serrations. Larger and heavier. Length 18-24 cm. Terminal teeth clearly visible at jaw tip. Available straight and curved.",
uses: "Clamping and crushing large blood vessels before ligation. Holding fascia, aponeurosis, tough fibrous tissue. Thyroidectomy, gastrectomy, hernia. Terminal tooth prevents slippage on vascular pedicles. NOT for delicate tissues.",
sterilization: "Autoclave: 134°C / 3-4 min or 121°C / 15-20 min\nClean terminal teeth with small brush\nLubricate joint after sterilization\nInspect teeth interlocking - replace if worn",
},
{
sn: 17, name: "Sponge-Holding Forceps (Ring Forceps)", category: "Utility / Swabbing",
identification: "Box-lock with ratchet. Jaws are OVAL or ROUND RINGS (fenestrated). Larger and longer (24-28 cm) than standard forceps. Oval ring holds gauze securely. Serrations on ring rim. Differentiated from Babcock by larger ring size.",
uses: "Holding swabs/gauze for antiseptic skin preparation. Vaginal packing during gynaecological procedures. Applying antiseptic to operative field. Holding laparotomy packs. Gentle organ handling during abdominal surgery.",
sterilization: "Autoclave: 134°C / 3-4 min\nClean ring fenestrations thoroughly - gauze fibers lodge in ring\nUltrasonic cleaning recommended\nDo NOT use if ring mechanism is loose (sponge retention risk - surgical never event)",
},
{
sn: 18, name: "Abdominal Retractors (Deaver / Morris)", category: "Retraction Instruments",
identification: "Flat, broad blade attached to handle. Deaver: curved wide blade for deep abdominal exposure. Morris: flat right-angle blade. Richardson: L-shaped. All are hand-held (single person holds). Differentiated from self-retaining by absence of frame.",
uses: "Retracting/holding abdominal wall, organs, and tissues to expose operative field. Deaver: liver retraction, bile duct exposure. Richardson: general wound retraction. Requires assistant to hold throughout procedure.",
sterilization: "Autoclave: 134°C / 3-4 min (solid metal - no issues)\nETO for soft/silicone padded variants\nInspect blade edge - should be smooth, not sharp (traumatic to tissue if sharp)",
},
{
sn: 19, name: "Babcock's / Pile-Holding Forceps", category: "Specialty - Anorectal",
identification: "Pile-holding forceps: specially designed with grooved or fenestrated jaws to grasp haemorrhoidal tissue. Similar in size to standard tissue forceps (20 cm). May have additional jaw features for pedicle control.",
uses: "Grasping and holding haemorrhoidal (pile) tissue during haemorrhoidectomy. Facilitates ligation or excision of piles. Used alongside proctoscope and Barron's gun for pile procedures.",
sterilization: "Autoclave: 134°C / 3-4 min\nThorough cleaning - these instruments are used in heavily contaminated anorectal field\nUltrasonic cleaning essential\nSingle-use disposable variants preferred",
},
{
sn: 20, name: "Gastric and Intestinal Clamps (Occlusive and Crushing)", category: "Specialty - GI Surgery",
identification: "Long (25-30 cm) specially designed clamps. CRUSHING clamp: cross-serrated jaws, cuts through bowel wall. OCCLUSIVE (non-crushing): rubber-shod jaws that prevent leakage without damaging tissue. Payr clamp, Doyen clamp are common examples.",
uses: "Bowel resection and anastomosis surgery. Crushing clamp: placed on specimen side to transect bowel. Occlusive clamp: placed on viable bowel side to prevent fecal spillage. Used in colectomy, gastrectomy, Hartmann's procedure.",
sterilization: "Autoclave: 134°C / 3-4 min\nRubber shoes/shods: Replace regularly, autoclave separately\nExtremely thorough cleaning required (bowel surgery - high contamination)\nUltrasonic cleaning mandatory before autoclaving",
},
{
sn: 21, name: "BP Handle with Surgical Blades", category: "Cutting Instruments",
identification: "Handle: No.3 (blades 10,11,12,15), No.4 (blades 20-24), No.7 (long/deep). Blade No.10: standard curved. No.11: pointed for stab incisions. No.15: small curved for fine work. No.22: large curved for major incisions. Handle is reusable; blades are disposable.",
uses: "Primary surgical skin incisions. Incising fascia, muscle, peritoneum. No.11: stab incision for trocar (laparoscopy), abscess drainage. No.15: facial surgery, paediatric surgery. No.22: major laparotomy incisions. Skin grafting.",
sterilization: "BP HANDLE: Autoclave 134°C / 3-4 min (reusable)\nSURGICAL BLADES: SINGLE USE ONLY - dispose in sharps bin after use\nNEVER re-sterilize blades (dulls edge, infection risk)\nRemove blade with blade remover (NEVER bare hands)\nStore handle in sealed sterile pack",
},
{
sn: 22, name: "Suturing Needles (Assorted)", category: "Suturing Instruments",
identification: "Classified by: Cross-section (cutting vs round-body/tapered), Shape (straight vs curved: 1/2, 3/8 circle). Cutting needle: triangular cross-section for skin/tough tissue. Round-body: circular cross-section for viscera. Atraumatic (swaged): pre-attached to suture. Sizes from 13mm to 50mm.",
uses: "Carrying suture thread through tissue to close wounds. Cutting needle: skin, fascia, tendon. Round-body: bowel, liver, kidney, vessel anastomosis. Straight: skin in accessible areas. Curved: held in needle holder for deep access.",
sterilization: "COMMERCIAL NEEDLES: Pre-sterilized by gamma irradiation - SINGLE USE\nREUSABLE NEEDLES (traditional): Autoclave 121°C / 15 min or 134°C / 3 min\nPre-clean: Remove all tissue; inspect tip sharpness and integrity\nBlunt needles MUST NOT be used\nStore in dry sealed container",
},
{
sn: 23, name: "Rubber Catheters (Assorted sizes)", category: "Drainage / Urological",
identification: "Flexible rubber or silicone tubular devices. Foley catheter: double lumen with inflatable balloon tip. Nelaton: single lumen, straight, no balloon. Robinson/Whistle-tip: drainage without retention. Sizes: Fr 10 (small) to Fr 24 (large).",
uses: "Urinary catheterization (drainage of urine). Post-operative bladder drainage. Continuous bladder irrigation. Measuring urine output in critically ill patients. Instilling medications into bladder. Emergency relief of urinary retention.",
sterilization: "MODERN PRACTICE: SINGLE USE - disposable catheters only\nTraditional reusable rubber: Autoclave 121°C / 15 min (check manufacturer tolerance)\nNever dry heat or boil (degrades rubber)\nStore in sterile sealed pack\nCheck balloon integrity before insertion (Foley catheters)",
},
{
sn: 24, name: "Metal Catheters", category: "Urological / Specialty",
identification: "Rigid stainless steel catheter with smooth curved tip. Male catheter: longer with pronounced curve. Female catheter: shorter and more gently curved. Has thumb/finger ring at proximal end. Length: male 28-30 cm, female 12-15 cm.",
uses: "Urethral catheterization when flexible catheter fails (impassable stricture). Urethral dilation in combination with bougies. Acute urinary retention where soft catheters fail. Used under direct vision or guidance.",
sterilization: "Autoclave: 134°C / 3-4 min (stainless steel - no degradation)\nPre-clean: Flush lumen, brush, soak in enzymatic, rinse\nDry heat: 160°C / 1 hour also acceptable\nInspect tip smoothness before each use - rough/scratched tip causes urethral trauma",
},
{
sn: 25, name: "Urethral Dilators (Bougies)", category: "Urological Instruments",
identification: "Set of graduated rigid or semi-flexible probes in increasing sizes (French 8-30). Metal (Hegar/Clutton) or semi-rigid (Walther). Progressive sizes allow gradual dilation. Stored as numbered set.",
uses: "Dilating urethral strictures. Pre-operative dilation before metal catheterization. Diagnostic assessment of urethral calibre. Meatal dilation in hypospadias/stenosis. Used sequentially from smallest to largest size.",
sterilization: "Autoclave: 134°C / 3-4 min (full metal set)\nPre-clean: Wipe, enzymatic soak, brush, rinse - pay attention to tips\nStore as complete numbered set in sterilization tray\nInspect each bougie for bends/damage - discard damaged bougies",
},
{
sn: 26, name: "Proctoscope (with/without Illuminator)", category: "Endoscopic / Anorectal",
identification: "Hollow metal/plastic tube with obturator (inner plug) and handle. Length 7-10 cm, diameter 2-3 cm. With or without built-in light source. Obturator removed after insertion. Proximal wide flange prevents over-insertion.",
uses: "Direct visualization of anal canal and lower rectum (up to 10 cm). Diagnosis of haemorrhoids, fissures, polyps, rectal bleeding. Banding of internal piles (with Barron's gun). Rectal biopsies. Injecting sclerosants for haemorrhoids.",
sterilization: "METAL proctoscope: Autoclave 134°C / 3-4 min (preferred)\nPLASTIC/ILLUMINATED: High-level disinfection - 2% Glutaraldehyde 20 min or OPA 12 min\nRinse thoroughly with sterile water after chemical disinfection\nDISPOSABLE plastic proctoscopes: Single use - PREFERRED in modern practice\nLight cables: Wipe with 70% alcohol or low-temperature plasma sterilization",
},
{
sn: 27, name: "Right Angle Cholecystectomy Forceps (Mixter)", category: "Dissection Instruments",
identification: "Box-lock with ratchet. Jaws bent at 90° to shaft (right angle). Fully cross-serrated medium-length jaws. 18-22 cm total length. The RIGHT-ANGLE jaw is the defining feature. Also called Lahey or Mixter forceps.",
uses: "Dissecting, encircling, and isolating tubular structures: cystic duct, cystic artery (cholecystectomy). Passing ligatures around vessels and ducts. Accessing narrow spaces where straight instruments cannot reach. Colorectal and thoracic surgery.",
sterilization: "Autoclave: 134°C / 3-4 min\nClean joint and serrations - used in infected gallbladder surgery\nUltrasonic cleaner recommended for bile/fat residue\nETO for laparoscopic equivalents",
},
{
sn: 28, name: "Stone-Holding Forceps", category: "Specialty - Biliary/Renal",
identification: "Long (20-24 cm) robust forceps. Concave or oval jaws designed to grip stones without fragmenting them. Jaws may be straight or curved. Heavy construction. Similar to artery forceps with specially shaped concave jaws.",
uses: "Extracting stones from bile duct (choledocholithotomy), gallbladder, or urinary tract. Grasping calculi during lithotomy procedures. Extracting foreign bodies from deep cavities.",
sterilization: "Autoclave: 134°C / 3-4 min\nRemove bile/stone debris thoroughly before sterilization\nUltrasonic cleaning for jaw concavities\nInspect jaw shape - bent jaws reduce gripping ability",
},
{
sn: 29, name: "Self-Retaining Retractor (Balfour / Finochietto)", category: "Retraction Instruments",
identification: "Frame-based retractor with central body and multiple retractor arms lockable in position. Balfour: abdominal frame with crossbar and lateral blades. Finochietto: rib-spreading retractor for thoracotomy. Distinguished by frame/crossbar structure - holds itself without assistant.",
uses: "Continuous hands-free operative field exposure. Balfour: laparotomy, colorectal, gynaecological surgery. Finochietto: thoracotomy (rib spreading). Reduces operator fatigue and frees surgical assistants.",
sterilization: "Autoclave: 134°C / 3-4 min (frame + blades)\nDisassemble ALL removable parts before autoclaving\nLubricate threaded mechanisms after sterilization\nInspect locking mechanism - must hold firmly (slippage during surgery is dangerous)",
},
{
sn: 30, name: "Periosteum Elevator (Rugine / Langenbeck)", category: "Orthopaedic Instruments",
identification: "Handle with flat spatula-like blade at one or both ends. Blade edge smooth but firm. Masson elevator: curved. Langenbeck: straight. Solid stainless steel. Length 20-25 cm. Identified by flat/spatula working end.",
uses: "Stripping periosteum (fibrous membrane) from bone during orthopaedic surgery. Fracture repair, bone tumor resection, spinal surgery. Separating soft tissue from bone before osteotomy/drilling. Protecting surrounding structures during bone cutting.",
sterilization: "Autoclave: 134°C / 3-4 min (solid steel - no issue)\nPre-clean: Remove bone/periosteum tissue from blade edge; enzymatic soak\nDry heat: 160°C / 1 hour also acceptable\nStore in orthopaedic set tray",
},
{
sn: 31, name: "Bone Cutter (Liston) / Rongeur (Beyer)", category: "Orthopaedic Instruments",
identification: "Heavy robust double-action (compound-joint) cutting instrument. Liston: straight heavy blades with sharp cutting edges. Rongeur/Beyer: cup-shaped jaws for nibbling bone. Large heavy (25-30 cm). Spring in handle returns to open. Identified by heavy construction and cutting jaws.",
uses: "Cutting, trimming, and shaping bone. Amputation surgery (small bones). Rongeur: removing bone fragments, shaping bone surfaces. Spinal surgery: trimming lamina. Not used on large bones without power tools.",
sterilization: "Autoclave: 134°C / 3-4 min\nUltrasonic cleaner ESSENTIAL to remove bone debris from jaws\nLubricate compound joint after sterilization\nInspect cutting edges - dull cutters must be resharpened",
},
{
sn: 32, name: "Gigli (Giggly) Saw", category: "Orthopaedic Instruments",
identification: "Flexible wire/chain saw with sharp cutting edges on wire surface. Two T-shaped or ring handles at each end. Cuts on pull stroke in back-and-forth motion. Wire length ~30-50 cm. Can be passed around bone using guide/carrier.",
uses: "Cutting through bone: craniotomy, amputation, osteotomies. Traditionally for thigh amputation (femur cutting). Neurosurgery (craniotomy: burr-hole to burr-hole). Cutting ribs in thoracotomy. Used where power saws are unavailable.",
sterilization: "Autoclave: 134°C / 3-4 min (pre-packaged or in-house)\nMODERN: Often supplied pre-sterilized SINGLE USE in peel packs (preferred)\nReusable: Clean wire thoroughly; inspect for fraying or broken links\nFRAYED GIGLI SAW MUST BE DISCARDED - breakage risk during use\nHandles: Autoclave separately",
},
{
sn: 33, name: "Skin Grafting Knife (Humby/Watson)", category: "Plastic Surgery Instruments",
identification: "Hand-held knife with long blade and adjustable depth-gauge guard/roller. Humby knife: adjustable roller controls graft thickness. Watson knife: similar design. Used to cut split-thickness skin grafts (STSG) at 0.3-0.5 mm depth.",
uses: "Harvesting split-thickness skin grafts for transplantation (burns, chronic wounds, tumor excision). Adjustable guard allows precise thickness control. Harvest from thigh, abdomen, back. Also for shaving epidermal skin lesions.",
sterilization: "HANDLE: Autoclave 134°C / 3-4 min\nBLADE: SINGLE USE (disposable) - dispose in sharps bin\nReusable blade variant: Autoclave + inspect edge under magnification\nDepth-setting guard/roller: Clean, autoclave, test calibration before use",
},
{
sn: 34, name: "Ambu Bag (BVM Resuscitator)", category: "Airway / Emergency",
identification: "Self-inflating bag-valve-mask (BVM). Components: silicone bag, one-way valve, face mask, O2 reservoir bag, O2 inlet port. Adult: ~1500 ml; paediatric: ~500 ml; neonatal: ~250 ml. Valve ensures unidirectional flow.",
uses: "Emergency manual ventilation when patient is apnoeic. Pre-oxygenation before intubation. Ventilation during CPR. Transporting ventilated patients. Back-up when ventilator fails. With O2: delivers FiO2 up to 0.9-1.0.",
sterilization: "DISASSEMBLE after EACH use for cleaning:\nMask: Autoclave (silicone) or Cidex chemical disinfection\nBag: Detergent + rinse; autoclave if silicone-grade; ETO for sensitive bags\nValve: Autoclave (most valves are autoclavable - check manufacturer)\nReservoir bag: Autoclave or ETO\nDisposable single-patient versions preferred in ICU",
},
{
sn: 35, name: "Laryngoscope (Paediatric / Adult)", category: "Airway / Anaesthesia",
identification: "Handle (battery housing) + detachable blade. Macintosh blade: curved, adults. Miller blade: straight, paediatrics/neonates. Blade sizes: 0 (neonate) to 4 (large adult). Light source at blade tip (bulb or fibreoptic).",
uses: "Direct laryngoscopy for visualization of larynx and vocal cords. Orotracheal intubation. Foreign body removal from larynx/pharynx. Confirmation of correct tube placement.",
sterilization: "HANDLE: Wipe with 70% isopropyl alcohol only (batteries inside - NOT autoclavable)\nCONVENTIONAL BLADE: Autoclave 134°C / 3-4 min\nFIBREOPTIC BLADE: 2% Glutaraldehyde or OPA (glutaraldehyde incompatible with fiberoptics)\nMODERN PRACTICE: Disposable single-use blades STRONGLY PREFERRED\nBulb/LED function MUST be checked before every intubation attempt",
},
{
sn: 36, name: "Suction Machine (Electrical / Manual)", category: "Utility / Support",
identification: "Electrical: motor-driven vacuum pump with collection canister, tubing, and suction tip. Manual/foot-pump: bellows-operated. Vacuum gauge: 80-120 mmHg for surgical use. Yankauer tip: rigid angled oropharyngeal suction.",
uses: "Clearing blood, secretions, and fluids from operative field. Airway suctioning (Yankauer). Drainage of abdominal cavities and haematomas. Maintaining clear view during surgery. Wound irrigation and aspiration.",
sterilization: "CANISTER: Disposable (preferred) or autoclavable metal canister\nTUBING: Autoclave (silicone) or single use\nYANKAUER TIP: Single use disposable OR autoclave\nMACHINE EXTERIOR: Wipe with 1% hypochlorite or 70% alcohol\nFILTERS: Replace per manufacturer schedule",
},
];
// ─── Build document ───────────────────────────────────────────────────────────
const sections = [];
// Cover page
sections.push(
new Paragraph({ children: [], spacing: { before: 800, after: 200 } }),
new Paragraph({
children: [new TextRun({ text: "SURGICAL INSTRUMENTS", bold: true, size: 56, color: WHITE, font: "Calibri" })],
alignment: AlignmentType.CENTER,
shading: shading(TEAL),
spacing: { before: 200, after: 0 },
indent: { left: 200, right: 200 },
}),
new Paragraph({
children: [new TextRun({ text: "REFERENCE MANUAL", bold: true, size: 36, color: "ade8f4", font: "Calibri" })],
alignment: AlignmentType.CENTER,
shading: shading(TEAL),
spacing: { before: 0, after: 0 },
indent: { left: 200, right: 200 },
}),
new Paragraph({
children: [new TextRun({ text: "For OT Nurses, Surgical Residents & Shalya Tantra Students", size: 24, color: WHITE, font: "Calibri" })],
alignment: AlignmentType.CENTER,
shading: shading(TEAL),
spacing: { before: 0, after: 0 },
indent: { left: 200, right: 200 },
}),
new Paragraph({
children: [new TextRun({ text: "Identification · Clinical Uses · Sterilization Methods", size: 22, color: "ade8f4", font: "Calibri" })],
alignment: AlignmentType.CENTER,
shading: shading(TEAL),
spacing: { before: 0, after: 0 },
indent: { left: 200, right: 200 },
}),
new Paragraph({
children: [new TextRun({ text: "Department of Shalya Tantra | Operation Theatre", size: 20, color: WHITE, font: "Calibri" })],
alignment: AlignmentType.CENTER,
shading: shading(TEAL),
spacing: { before: 0, after: 200 },
indent: { left: 200, right: 200 },
}),
new Paragraph({ children: [], spacing: { before: 400, after: 200 } }),
);
// Sterilization legend table
sections.push(
new Paragraph({ children: [new TextRun({ text: "STERILIZATION METHOD LEGEND", bold: true, size: 22, color: TEAL, font: "Calibri" })], spacing: { before: 200, after: 100 } }),
new Table({
width: { size: 9000, type: WidthType.DXA },
rows: [
new TableRow({ children: [
makeHeaderCell("Method", TEAL),
makeHeaderCell("Parameters", TEAL),
makeHeaderCell("Best For", TEAL),
]}),
new TableRow({ children: [
makeCell([new Paragraph({ children: [new TextRun({ text: "AUTOCLAVE (Steam)", bold: true, color: TEAL, size: 18, font: "Calibri" })] })], LIGHT_BG, 2600),
makeCell([new Paragraph({ children: [new TextRun({ text: "134°C / 3-4 min (flash) | 121°C / 15-20 min", size: 18, font: "Calibri" })] })], WHITE, 3600),
makeCell([new Paragraph({ children: [new TextRun({ text: "All metal instruments - STANDARD METHOD", size: 18, font: "Calibri" })] })], WHITE, 2800),
]}),
new TableRow({ children: [
makeCell([new Paragraph({ children: [new TextRun({ text: "ETO (Ethylene Oxide)", bold: true, color: "8B6914", size: 18, font: "Calibri" })] })], YELLOW_BG, 2600),
makeCell([new Paragraph({ children: [new TextRun({ text: "Room temp / 12-16 hrs (with aeration)", size: 18, font: "Calibri" })] })], WHITE, 3600),
makeCell([new Paragraph({ children: [new TextRun({ text: "Heat-sensitive instruments, optics, plastics", size: 18, font: "Calibri" })] })], WHITE, 2800),
]}),
new TableRow({ children: [
makeCell([new Paragraph({ children: [new TextRun({ text: "CHEMICAL (Glutaraldehyde)", bold: true, color: "1a4a16", size: 18, font: "Calibri" })] })], GREEN_BG, 2600),
makeCell([new Paragraph({ children: [new TextRun({ text: "2% Glutaraldehyde 10 hrs | OPA 12 min", size: 18, font: "Calibri" })] })], WHITE, 3600),
makeCell([new Paragraph({ children: [new TextRun({ text: "Endoscopes, flexible scopes - LAST RESORT", size: 18, font: "Calibri" })] })], WHITE, 2800),
]}),
new TableRow({ children: [
makeCell([new Paragraph({ children: [new TextRun({ text: "SINGLE USE (Disposable)", bold: true, color: "8B0000", size: 18, font: "Calibri" })] })], "ffe0e0", 2600),
makeCell([new Paragraph({ children: [new TextRun({ text: "Discard after one use in sharps/clinical waste bin", size: 18, font: "Calibri" })] })], WHITE, 3600),
makeCell([new Paragraph({ children: [new TextRun({ text: "Blades, needles, catheters, disposable scopes", size: 18, font: "Calibri" })] })], WHITE, 2800),
]}),
],
}),
new Paragraph({ children: [new PageBreak()] }),
);
// Instrument cards
for (const inst of instruments) {
sections.push(
// Instrument header
new Paragraph({
children: [
new TextRun({ text: `${String(inst.sn).padStart(2, '0')}. ${inst.name}`, bold: true, size: 28, color: WHITE, font: "Calibri" }),
],
shading: shading(TEAL),
spacing: { before: 200, after: 0 },
indent: { left: 100, right: 100 },
}),
new Paragraph({
children: [new TextRun({ text: ` Category: ${inst.category}`, size: 18, color: "ade8f4", italics: true, font: "Calibri" })],
shading: shading(TEAL_L),
spacing: { before: 0, after: 100 },
indent: { left: 100 },
}),
// Three-column info table
new Table({
width: { size: 9000, type: WidthType.DXA },
rows: [
new TableRow({ children: [
makeHeaderCell("IDENTIFICATION", "664d03"),
makeHeaderCell("CLINICAL USES", "003566"),
makeHeaderCell("STERILIZATION", "1a4a16"),
]}),
new TableRow({ children: [
makeCell([
...inst.identification.split('. ').filter(s => s.trim()).map(s =>
new Paragraph({
children: [new TextRun({ text: `• ${s.trim().endsWith('.') ? s.trim() : s.trim() + '.'}`, size: 17, color: DARK, font: "Calibri" })],
spacing: { before: 30, after: 30 },
indent: { left: 80 },
})
)
], YELLOW_BG, 3000),
makeCell([
...inst.uses.split('. ').filter(s => s.trim()).map(s =>
new Paragraph({
children: [new TextRun({ text: `• ${s.trim().endsWith('.') ? s.trim() : s.trim() + '.'}`, size: 17, color: DARK, font: "Calibri" })],
spacing: { before: 30, after: 30 },
indent: { left: 80 },
})
)
], BLUE_BG, 3000),
makeCell(sterilizationParas(inst.sterilization), GREEN_BG, 3000),
]}),
],
}),
new Paragraph({ children: [], spacing: { before: 60, after: 60 } }),
);
}
// Recommended Books
sections.push(
new Paragraph({ children: [new PageBreak()] }),
new Paragraph({
children: [new TextRun({ text: "RECOMMENDED BOOKS", bold: true, size: 40, color: WHITE, font: "Calibri" })],
alignment: AlignmentType.CENTER,
shading: shading(TEAL),
spacing: { before: 200, after: 200 },
indent: { left: 200, right: 200 },
}),
);
const books = [
{ title: "1. Bailey & Love's Short Practice of Surgery (27th Ed.)", authors: "N. Williams, P.R.G. Taylor, R.C.G. Russell", publisher: "CRC Press / Taylor & Francis", why: "The definitive general surgery textbook. Detailed chapters on every surgical instrument, OT setup, sterilization, and technique. Essential for all surgical residents.", color: TEAL },
{ title: "2. A Manual on Clinical Surgery — S. Das (14th Ed.)", authors: "S. Das", publisher: "S. Das Publications, Kolkata", why: "Standard Indian surgical manual with dedicated section on surgical instruments, identification, and uses in viva voce format. Ideal for MBBS, MS Surgery, Shalya Tantra exam prep.", color: TEAL_L },
{ title: "3. Illustrated Guide to Surgical Practice — S. Das", authors: "S. Das", publisher: "S. Das Publications", why: "Image-based guide popular in India. Covers all instruments with photos, identification viva questions, and clinical uses. Highly recommended for Ayurveda surgical departments.", color: GOLD },
{ title: "4. Surgical Instruments: A Pocket Guide — Fortunato", authors: "R. Fortunato, N. Fortunato", publisher: "Elsevier / Saunders", why: "Compact full-color pocket guide for OT nurses and scrub technicians. Color photographs of every category with identification points. Perfect quick reference for OT staff.", color: TEAL },
{ title: "5. Berry & Kohn's Operating Room Technique (13th Ed.)", authors: "N.J. Phillips", publisher: "Elsevier Mosby", why: "Comprehensive OT nursing textbook covering instrumentation, sterilization (CSSD protocols), asepsis, and OT setup. Standard reference for OT nurses and CSSD staff.", color: TEAL_L },
{ title: "6. Sterilization Technology for the Health Care Facility — Reichert & Young", authors: "M. Reichert, J.H. Young", publisher: "Jones & Bartlett", why: "Dedicated sterilization textbook covering autoclave, ETO, dry heat, plasma, glutaraldehyde with parameters, validation, and quality control. Essential for CSSD staff.", color: GOLD },
{ title: "7. Hamilton Bailey's Demonstrations of Physical Signs (19th Ed.)", authors: "A.L. Standring & B.K. Rout", publisher: "CRC Press", why: "Classic text on clinical surgical examination and instrument identification. Widely used for instrument identification in USMLE, MRCS, and Indian PG surgery exams.", color: TEAL },
{ title: "8. Sushrutasamhita (with Commentary) — Classical Reference", authors: "Sushruta / Dalhana commentary", publisher: "Chaukhamba Sanskrit Pratishthan", why: "Ancient Ayurvedic text describing the original 101 Shastras (sharp) and Yantra (blunt) instruments. Relevant for Shalya Tantra departments for classical basis of surgical instruments.", color: TEAL_L },
{ title: "9. Farquharson's Textbook of Operative Surgery (9th Ed.)", authors: "R.F. Leaper & A.P.B. Whitfield", publisher: "CRC Press", why: "Step-by-step operative techniques with instrument requirements for each procedure. Good for understanding which instruments are used in which surgery.", color: GOLD },
{ title: "10. Clinical Methods in Surgery — Kural Saha", authors: "K. Saha", publisher: "Jaypee Brothers Medical Publishers", why: "Indian clinical surgery text with good coverage of surgical instruments in clinical context. Used widely in Indian medical colleges for clinical examination and surgery.", color: TEAL },
];
for (const b of books) {
sections.push(
new Paragraph({
children: [new TextRun({ text: b.title, bold: true, size: 22, color: WHITE, font: "Calibri" })],
shading: shading(b.color),
spacing: { before: 120, after: 0 },
indent: { left: 100, right: 100 },
}),
new Paragraph({
children: [new TextRun({ text: `Authors: ${b.authors} | Publisher: ${b.publisher}`, size: 18, italics: true, color: WHITE, font: "Calibri" })],
shading: shading(b.color),
spacing: { before: 0, after: 0 },
indent: { left: 100 },
}),
new Paragraph({
children: [new TextRun({ text: `Why this book: ${b.why}`, size: 18, color: WHITE, font: "Calibri" })],
shading: shading(b.color),
spacing: { before: 0, after: 60 },
indent: { left: 100, right: 100 },
}),
);
}
// Footer note
sections.push(
new Paragraph({ children: [], spacing: { before: 300, after: 0 } }),
new Paragraph({
children: [
new TextRun({ text: "Prepared for: Department of Shalya Tantra, Operation Theatre | ", size: 16, italics: true, color: "666666", font: "Calibri" }),
new TextRun({ text: "For educational reference only. Always follow institutional sterilization protocols and manufacturer guidelines.", size: 16, italics: true, color: "666666", font: "Calibri" }),
],
alignment: AlignmentType.CENTER,
spacing: { before: 0, after: 200 },
}),
);
// ─── Assemble and save ────────────────────────────────────────────────────────
const doc = new Document({
creator: "Orris AI",
title: "Surgical Instruments Reference Manual",
description: "Surgical instruments identification, uses, and sterilization for Shalya Tantra OT Department",
sections: [{
properties: {},
headers: {
default: new Header({
children: [
new Paragraph({
children: [
new TextRun({ text: "SURGICAL INSTRUMENTS REFERENCE MANUAL", bold: true, size: 18, color: TEAL, font: "Calibri" }),
new TextRun({ text: " | Department of Shalya Tantra", size: 16, color: "666666", font: "Calibri" }),
],
border: { bottom: { style: BorderStyle.SINGLE, size: 6, color: TEAL } },
}),
],
}),
},
footers: {
default: new Footer({
children: [
new Paragraph({
children: [
new TextRun({ text: "For educational use only | Page ", size: 16, color: "666666", font: "Calibri" }),
new TextRun({ children: [PageNumber.CURRENT], size: 16, color: TEAL, font: "Calibri" }),
new TextRun({ text: " of ", size: 16, color: "666666", font: "Calibri" }),
new TextRun({ children: [PageNumber.TOTAL_PAGES], size: 16, color: TEAL, font: "Calibri" }),
],
alignment: AlignmentType.CENTER,
border: { top: { style: BorderStyle.SINGLE, size: 6, color: TEAL } },
}),
],
}),
},
children: sections,
}],
});
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync("/home/daytona/workspace/Surgical_Instruments_Reference.docx", buffer);
console.log("DOCX generated successfully!");
console.log("Size:", buffer.length, "bytes");
});
cd /home/daytona/workspace/surgical-instruments && node generate_docx.js 2>&1
python3 /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/works…
# Quick structural validation - unzip and check key XML files exist python3 -c "…
Surgical Instruments Reference
Word Document · DOCX
| Column | Color | Content |
|---|---|---|
| IDENTIFICATION | Yellow | Physical features, size, distinguishing characteristics |
| CLINICAL USES | Blue | Surgeries used in, technique notes |
| STERILIZATION | Green | Method, temperature/time, pre-cleaning, storage |