const { useState, useEffect, useCallback, useMemo, useRef } = React; // ============================================================ // SURGTRACK — Surgical Patient Management System // Module 1: Role-Based Access + Categorized Scheduling // ============================================================ // ─── Logo ──────────────────────────────────────────────────── const LOGO_SM = "data:image/png;base64,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"; const LOGO_MD = "data:image/png;base64,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"; // ─── Storage ───────────────────────────────────────────────── const SK = { USERS: "st:users", PATIENTS: "st:patients", SESSION: "st:session", CONFIG: "st:config" }; async function load(k, fb) { try { const r = await window.storage.get(k); return r ? JSON.parse(r.value) : fb; } catch { return fb; } } async function save(k, d) { try { await window.storage.set(k, JSON.stringify(d)); } catch (e) { console.error(e); } } // ── Push Notification Helper ────────────────────────────── async function notify(title, body, tag = 'surgtrack', url = '/', userIds = []) { try { await fetch('/api/index.php?route=push&action=send', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ title, body, tag, url, userIds }), }); } catch (e) { console.warn('Push notify failed:', e); } } // ── Resolve surgeon names from opDetails → user ids ────── function getSurgeonUserIds(pt, users, config) { const od = pt.opDetails || {}; const surgeons = config.surgeons || []; const getName = (val, other) => val === "__other" ? other : val; const teamNames = [ getName(od.operatingSurgeon, od.surgeonOther), getName(od.firstAssistant, od.assistantOther), getName(od.secondAssistant, od.secondAssistantOther), getName(od.thirdAssistant, od.thirdAssistantOther), getName(od.fourthAssistant, od.fourthAssistantOther), getName(od.fifthAssistant, od.fifthAssistantOther), od.anaesthetist, ].filter(Boolean).map(n => n.trim().toLowerCase()); const matched = new Set(); users.forEach(u => { if (u.linkStatus !== "approved" || !u.linkedSurgeon) return; const surg = surgeons.find(s => s.id === u.linkedSurgeon); if (surg && teamNames.includes(surg.name.trim().toLowerCase())) matched.add(u.id); }); users.forEach(u => { if (teamNames.includes(u.name.trim().toLowerCase())) matched.add(u.id); }); if (pt.createdBy) matched.add(pt.createdBy); if (od.operatedById) matched.add(od.operatedById); return [...matched]; } // ── Notification Toggle Component ──────────────────────── function NotificationToggle({ show }) { const [status, setStatus] = useState(typeof Notification !== 'undefined' ? Notification.permission : 'unsupported'); const [loading, setLoading] = useState(false); const urlB64 = (b) => { const p = '='.repeat((4 - b.length % 4) % 4); const d = atob((b + p).replace(/-/g, '+').replace(/_/g, '/')); return Uint8Array.from([...d].map(c => c.charCodeAt(0))); }; const enable = async () => { if (!('PushManager' in window)) { show('Push not supported on this browser.', 'error'); return; } setLoading(true); try { const permission = await Notification.requestPermission(); setStatus(permission); if (permission !== 'granted') { show('Permission denied. Enable from device settings.', 'error'); setLoading(false); return; } const reg = await navigator.serviceWorker.ready; const key = window._vapidPublicKey || ''; if (!key) { show('VAPID key missing in index.html', 'error'); setLoading(false); return; } let sub = await reg.pushManager.getSubscription(); if (!sub) sub = await reg.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlB64(key) }); let userId = 'anonymous'; try { const s = sessionStorage.getItem('st:session'); if (s) { const u = JSON.parse(s); userId = u.id || 'anonymous'; } } catch(e) {} const res = await fetch('/api/index.php?route=push&action=subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...sub.toJSON(), userId }) }); const data = await res.json(); if (data.ok) { show('🔔 Notifications enabled!'); setStatus('granted'); } else show('Failed: ' + JSON.stringify(data), 'error'); } catch(e) { show('Error: ' + e.message, 'error'); } setLoading(false); }; const disable = async () => { setLoading(true); try { const reg = await navigator.serviceWorker.ready; const sub = await reg.pushManager.getSubscription(); if (sub) { await fetch('/api/index.php?route=push&action=unsubscribe', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ endpoint: sub.endpoint }) }); await sub.unsubscribe(); } setStatus('default'); show('Notifications disabled on this device.'); } catch(e) { show('Error: ' + e.message, 'error'); } setLoading(false); }; if (status === 'unsupported') return
⚠️ Not supported. On iPhone, open SurgTrack from the Home Screen icon (installed PWA), not Safari directly.
; if (status === 'denied') return
🚫 Blocked — go to iPhone Settings → Safari → Notifications → surgtrack.in → Allow, then tap Enable again.
; if (status === 'granted') return
✅ Enabled on this device
; return ; } // ─── Default Config ────────────────────────────────────────── const DEFAULT_PRIORITY_SLOTS = { "1": { label: "Urgent", color: "#c62828", slots: { gallbladder: 15, hernia: 7, obesity: 3, others: 20 } }, "2": { label: "High", color: "#e65100", slots: { gallbladder: 10, hernia: 5, obesity: 2, others: 15 } }, "3": { label: "Normal", color: "#2e7d32", slots: { gallbladder: 6, hernia: 3, obesity: 1, others: 10 } }, "4": { label: "Routine", color: "#1565c0", slots: { gallbladder: 3, hernia: 2, obesity: 1, others: 8 } }, }; const DEFAULT_CONFIG = { admissionDay: 1, slots: { gallbladder: 6, hernia: 3, obesity: 1, others: 10 }, theaters: ["GOT1", "GOT2"], prioritySlots: DEFAULT_PRIORITY_SLOTS, surgeons: [ { id: "s1", name: "Prof. (Dr.) Iqbal Saleem Mir", designation: "Professor & HOD", canOperate: true }, { id: "s2", name: "Dr. Abdul Hamid Samoon", designation: "Associate Professor", canOperate: true }, { id: "s3", name: "Dr. Arshad Rashid", designation: "Assistant Professor", canOperate: true }, { id: "s4", name: "Dr. Refut Arah", designation: "Lecturer", canOperate: true }, { id: "s5", name: "Dr. Khurshid Ahmad Ganaie", designation: "Senior Resident", canOperate: true }, { id: "s6", name: "Dr. Irshad Ahmad Kumar", designation: "Senior Resident", canOperate: false }, { id: "s7", name: "Dr. Ashutosh Bawa", designation: "Senior Resident", canOperate: false }, { id: "s8", name: "Dr. Awhad Mueed Yousuf", designation: "PG Resident", canOperate: false }, { id: "s9", name: "Dr. Hashmat Rather", designation: "PG Resident", canOperate: false }, ], notifPrefs: { operated: [], discharged: [], emergency: [] }, }; const DAY_NAMES = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; const DEFAULT_USERS = [ { id: "u0", name: "Administrator", username: "admin", pin: "0000", role: "admin" }, { id: "u1", name: "Dr. Resident 1", username: "resident1", pin: "1111", role: "resident" }, { id: "u2", name: "Prof. Faculty 1", username: "faculty1", pin: "2222", role: "faculty" }, { id: "u3", name: "Guest", username: "guest", pin: "3333", role: "guest" }, ]; const PERMS = { admin: { schedule: true, admit: true, edit: true, editAfterAdmit: true, operate: true, deletePatient: true, addFollowUp: true, addHpe: true, view: true, manageUsers: true, addEmergency: true }, resident: { schedule: false, admit: false, edit: false, editAfterAdmit: true, operate: true, deletePatient: false, addFollowUp: true, addHpe: true, view: true, manageUsers: false, addEmergency: true }, faculty: { schedule: false, admit: false, edit: false, editAfterAdmit: false, operate: false, deletePatient: false, addFollowUp: true, addHpe: true, view: true, manageUsers: false, addEmergency: false }, guest: { schedule: false, admit: false, edit: false, editAfterAdmit: false, operate: false, deletePatient: false, addFollowUp: false, addHpe: false, view: true, manageUsers: false, addEmergency: false }, }; const ROLE_LABELS = { admin: "Admin", resident: "Resident", faculty: "Faculty", guest: "Guest" }; const ROLE_COLORS = { admin: { bg: "#fce4ec", color: "#c62828", b: "#ef9a9a" }, resident: { bg: "#e3f2fd", color: "#1565c0", b: "#90caf9" }, faculty: { bg: "#f3e5f5", color: "#7b1fa2", b: "#ce93d8" }, guest: { bg: "#f5f5f5", color: "#616161", b: "#bdbdbd" } }; // ═════════════════════════════════════════════════════════════ // CLINICAL DATA // ═════════════════════════════════════════════════════════════ const BENIGN_CATEGORIES = { gallbladder: { label: "Gall Bladder", icon: "🟢", color: "#2e7d32", diagnoses: { "Cholelithiasis": ["Cholecystectomy"], "Acute Calculous Cholecystitis": ["Emergency Cholecystectomy", "Cholecystectomy", "Percutaneous Cholecystostomy"], "Chronic Calculous Cholecystitis": ["Cholecystectomy"], "Acalculous Cholecystitis": ["Cholecystectomy", "Percutaneous Cholecystostomy"], "Gall Bladder Polyp (<10mm)": ["Cholecystectomy"], "Gall Bladder Polyp (≥10mm)": ["Cholecystectomy (with Frozen Section)", "Cholecystectomy"], "Empyema Gall Bladder": ["Emergency Cholecystectomy", "Cholecystectomy", "Percutaneous Cholecystostomy"], "Mucocele Gall Bladder": ["Cholecystectomy"], "Porcelain Gall Bladder": ["Cholecystectomy"], "Biliary Dyskinesia": ["Cholecystectomy"], "Mirizzi Syndrome (Type I)": ["Cholecystectomy (Subtotal if needed)"], "Mirizzi Syndrome (Type II-IV)": ["Cholecystectomy + CBD Repair", "Cholecystectomy + Hepaticojejunostomy", "Cholecystectomy + T-Tube"], }, }, hernia: { label: "Hernia", icon: "🔵", color: "#1565c0", diagnoses: { "Inguinal Hernia": ["Lichtenstein Mesh Repair", "TEP Repair", "TAPP Repair", "Shouldice Repair", "Bilateral TEP Repair", "Bilateral TAPP Repair"], "Recurrent Inguinal Hernia": ["TEP/TAPP (if previous open)", "Mesh Repair (if previous lap)"], "Femoral Hernia": ["McEvedy's Approach", "TAPP Repair", "Lockwood's Low Approach"], "Umbilical Hernia": ["Mesh Repair (Mayo's)", "Mesh Repair"], "Paraumbilical Hernia": ["Mesh Repair"], "Epigastric Hernia": ["Mesh Repair", "Repair"], "Incisional Hernia": ["Sublay Mesh Repair", "Onlay Mesh Repair", "IPOM Repair", "eTEP Repair", "Anterior Component Separation", "Posterior Component Separation (TAR)"], "Spigelian Hernia": ["Mesh Repair", "Repair"], "Lumbar Hernia": ["Mesh Repair", "Repair"], "Obturator Hernia": ["Preperitoneal Repair", "Repair"], "Parastomal Hernia": ["Local Mesh Repair", "Stoma Resiting + Repair", "Sugarbaker Repair (Lap)"], "Richter's Hernia": ["Emergency Hernia Repair ± Bowel Resection"], "Strangulated Hernia": ["Emergency Hernioplasty ± Bowel Resection"], "Obstructed Hernia": ["Emergency Hernioplasty ± Bowel Resection"], }, }, obesity: { label: "Obesity", icon: "🟠", color: "#e65100", diagnoses: { "Morbid Obesity (BMI 35-40 with comorbidities)": ["Sleeve Gastrectomy", "Roux-en-Y Gastric Bypass", "One Anastomosis Gastric Bypass (OAGB)"], "Morbid Obesity (BMI 40-50)": ["Sleeve Gastrectomy", "Roux-en-Y Gastric Bypass", "OAGB"], "Super Obesity (BMI >50)": ["Sleeve Gastrectomy (Stage 1)", "SADI-S", "Roux-en-Y Gastric Bypass"], "Obesity with Type 2 DM (Metabolic Surgery)": ["Sleeve Gastrectomy", "Roux-en-Y Gastric Bypass", "OAGB"], "Failed Bariatric Surgery — Revision": ["Revision Sleeve to Bypass", "Band Removal + Sleeve/Bypass", "Sleeve to SADI-S"], "Obesity with GERD": ["Roux-en-Y Gastric Bypass", "OAGB"], }, }, others: { label: "Others", icon: "🟣", color: "#6a1b9a", diagnoses: { // ─── BILE DUCT / BILIARY ─── "Cholelithiasis with Choledocholithiasis": ["Cholecystectomy + CBD Exploration", "ERCP followed by Cholecystectomy", "Cholecystectomy + CBD Exploration + T-Tube", "Cholecystectomy + Choledochoduodenostomy"], "Choledocholithiasis (CBD Stones)": ["ERCP + Sphincterotomy + Stone Extraction", "CBD Exploration + T-Tube", "CBD Exploration + Choledochoduodenostomy", "Laparoscopic CBD Exploration", "ERCP + Mechanical Lithotripsy"], "Recurrent CBD Stone (Post Cholecystectomy)": ["CBD Exploration", "ERCP + Sphincterotomy", "Choledochoduodenostomy", "Hepaticojejunostomy"], "Gallstone Ileus": ["Enterolithotomy", "Enterolithotomy + Cholecystectomy + Fistula Repair"], "Bouveret's Syndrome": ["Duodenotomy + Stone Extraction", "Endoscopic Extraction"], "Choledochal Cyst (Type I)": ["Cyst Excision + Roux-en-Y Hepaticojejunostomy"], "Choledochal Cyst (Type II)": ["Diverticulectomy + CBD Repair"], "Choledochal Cyst (Type III — Choledochocele)": ["Endoscopic Sphincterotomy", "Transduodenal Excision"], "Choledochal Cyst (Type IV-A)": ["Cyst Excision + Roux-en-Y HJ", "Hepatectomy + HJ (if intrahepatic)"], "Choledochal Cyst (Type V — Caroli's)": ["Hepatic Resection", "Liver Transplant"], "CBD Stricture (Benign — Post Cholecystectomy)": ["Roux-en-Y Hepaticojejunostomy", "Endoscopic Stenting + Dilatation", "Repair over T-Tube"], "CBD Stricture (Benign — Post Inflammatory)": ["Hepaticojejunostomy", "Endoscopic Dilatation + Stenting"], "Bile Duct Injury (Iatrogenic — Strasberg A)": ["ERCP + Stenting", "Conservative"], "Bile Duct Injury (Iatrogenic — Strasberg B-E)": ["Roux-en-Y Hepaticojejunostomy", "End-to-End Repair over T-Tube", "Biliary Stenting"], "Biliary-Enteric Anastomotic Stricture": ["Revision Hepaticojejunostomy", "Endoscopic Dilatation"], "Biliary Peritonitis": ["Exploratory Laparotomy + Repair", "ERCP + Stenting + Drainage"], "Bile Leak (Post Cholecystectomy)": ["ERCP + Stenting", "Percutaneous Drainage", "Surgical Repair"], "CBD Cyst (Adult)": ["Cyst Excision + HJ"], "Oriental Cholangiohepatitis (OCH) / Recurrent Pyogenic Cholangitis": ["Hepaticojejunostomy + Stone Clearance", "CBD Exploration + T-Tube", "Hepatic Resection (localized)", "ERCP + Sphincterotomy + Stone Extraction", "Choledochoduodenostomy", "Access Loop HJ"], "Intrahepatic Stones (Hepatolithiasis)": ["Hepatic Resection", "Hepaticojejunostomy + Stone Clearance", "Percutaneous Cholangioscopy + Lithotripsy"], "Sphincter of Oddi Dysfunction": ["Endoscopic Sphincterotomy", "Biliary Manometry + Sphincterotomy"], // ─── LIVER ─── "Hydatid Cyst": ["Cystectomy + Capitonnage", "Pericystectomy", "Hepatic Resection", "PAIR (Percutaneous Aspiration)", "Hydatid Cystectomy"], "Liver Abscess (Amoebic)": ["Percutaneous Drainage", "Open Drainage"], "Liver Abscess (Pyogenic)": ["Percutaneous Drainage", "Open Drainage", "Laparoscopic Drainage"], "Simple Liver Cyst": ["Deroofing", "Fenestration", "Laparoscopic Fenestration"], "Polycystic Liver Disease": ["Fenestration", "Hepatic Resection", "Liver Transplant"], "Hepatic Hemangioma": ["Enucleation", "Hepatic Resection", "Observation"], "Hepatic Adenoma": ["Hepatic Resection", "Observation"], "Focal Nodular Hyperplasia": ["Observation", "Hepatic Resection (if symptomatic)"], "Liver Cyst (Cystadenoma)": ["Hepatic Resection", "Complete Excision"], // ─── SPLEEN ─── "Splenic Abscess": ["Splenectomy", "Percutaneous Drainage"], "Wandering Spleen": ["Splenopexy", "Splenectomy"], "Splenic Artery Aneurysm": ["Splenectomy", "Endovascular Coiling"], "ITP (for Splenectomy)": ["Splenectomy", "Laparoscopic Splenectomy"], "Hereditary Spherocytosis": ["Splenectomy", "Laparoscopic Splenectomy"], "Splenic Cyst (Benign)": ["Splenectomy", "Cyst Deroofing", "Partial Splenectomy"], "Hypersplenism (Secondary)": ["Splenectomy"], // ─── PANCREAS ─── "Acute Pancreatitis (Necrotizing — Surgical)": ["Necrosectomy", "VARD", "Transgastric Necrosectomy", "Percutaneous Drainage"], "Walled-Off Necrosis (WON)": ["Endoscopic Necrosectomy", "VARD", "Laparoscopic Cystogastrostomy + Necrosectomy"], "Pancreatic Pseudocyst": ["Cystogastrostomy", "Cystojejunostomy", "Endoscopic Drainage"], "Chronic Pancreatitis": ["Freys Procedure", "Partington Rochelle (LPJ)", "Distal Pancreatectomy", "Total Pancreatectomy + Auto-Islet Transplant"], "Chronic Pancreatitis with Pseudocyst": ["Freys + Cystojejunostomy", "LPJ + Cystogastrostomy"], "Pancreatic Duct Stricture": ["Endoscopic Stenting", "LPJ (Partington Rochelle)"], "Pancreatic Duct Calculi": ["ESWL + ERCP", "Freys Procedure", "LPJ"], "Pancreatic Fistula (External)": ["Conservative + ERCP Stenting", "Distal Pancreatectomy", "Fistulojejunostomy"], "Disconnected Pancreatic Duct": ["Distal Pancreatectomy", "Roux-en-Y Pancreatojejunostomy"], "Pancreatic Abscess": ["Percutaneous Drainage", "Surgical Drainage"], "Solid Pseudopapillary Neoplasm (SPN)": ["Distal Pancreatectomy", "Pancreaticoduodenectomy", "Enucleation"], "Pancreatic Neuroendocrine Tumor (Benign/Low-grade)": ["Enucleation", "Distal Pancreatectomy", "Whipple's Procedure"], "Insulinoma": ["Enucleation", "Distal Pancreatectomy"], "Gastrinoma (Zollinger-Ellison)": ["Excision", "Distal Pancreatectomy", "Whipple's Procedure"], "Serous Cystadenoma (Pancreas)": ["Observation", "Distal Pancreatectomy (if symptomatic)"], "Mucinous Cystadenoma (Pancreas)": ["Distal Pancreatectomy", "Whipple's Procedure"], "IPMN (Branch Duct — Low Risk)": ["Surveillance", "Distal Pancreatectomy"], "IPMN (Main Duct / High Risk)": ["Whipple's Procedure", "Total Pancreatectomy", "Distal Pancreatectomy"], // ─── UPPER GI ─── "Hiatal Hernia": ["Nissen Fundoplication", "Toupet Fundoplication", "Repair + Fundoplication", "Laparoscopic Hiatal Hernia Repair"], "Diaphragmatic Hernia (Traumatic)": ["Laparoscopic Repair", "Open Repair", "Mesh Repair"], "Diaphragmatic Hernia (Congenital — Adult)": ["Laparoscopic Repair", "Open Repair"], "Achalasia Cardia": ["Heller's Myotomy + Dor Fundoplication", "POEM (Peroral Endoscopic Myotomy)"], "Zenker's Diverticulum": ["Diverticulectomy", "Endoscopic Stapling", "Cricopharyngeal Myotomy"], "Epiphrenic Diverticulum": ["Diverticulectomy + Myotomy", "Thoracoscopic Excision"], "GERD (Refractory)": ["Nissen Fundoplication", "Toupet Fundoplication", "LINX Device"], "Barrett's Esophagus (with HGD)": ["Endoscopic Mucosal Resection", "RFA", "Esophagectomy"], "Esophageal Stricture (Benign — Peptic)": ["Endoscopic Dilatation", "Esophageal Stenting"], "Esophageal Stricture (Corrosive)": ["Endoscopic Dilatation", "Esophageal Bypass (Colonic/Gastric)", "Esophagectomy + Reconstruction"], "Esophageal Perforation (Boerhaave)": ["Primary Repair + Drainage", "Esophageal Stenting", "Esophageal Diversion"], "Peptic Ulcer Disease (Surgical)": ["Truncal Vagotomy + Pyloroplasty", "Gastrojejunostomy"], "Peptic Ulcer — Perforation (Emergency)": ["Omental Patch (Graham Repair)", "Omental Patch + Definitive Surgery"], "Gastric Outlet Obstruction (Benign)": ["Gastrojejunostomy", "Pyloroplasty", "Endoscopic Balloon Dilatation"], "Gastric Volvulus": ["Gastropexy", "Fundoplication"], "Gastric Diverticulum": ["Diverticulectomy", "Observation"], "Gastric Polyp (Benign)": ["Endoscopic Polypectomy", "Wedge Resection"], "Gastrointestinal Stromal Tumor — Benign/Low Risk": ["Wedge Resection", "Segmental Resection", "Enucleation"], "Duodenal Diverticulum": ["Diverticulectomy", "Observation"], "Duodenal Stricture (Benign)": ["Gastrojejunostomy", "Stricturoplasty", "Endoscopic Dilatation"], "Superior Mesenteric Artery Syndrome": ["Duodenojejunostomy", "Strong's Procedure"], "Dieulafoy Lesion (Surgical)": ["Wedge Resection", "Oversewing"], // ─── SMALL & LARGE BOWEL ─── "Meckel's Diverticulum": ["Resection + Ileal Anastomosis", "Diverticulectomy"], "Small Bowel Diverticulum": ["Diverticulectomy", "Segmental Resection"], "Tubercular Intestinal Stricture": ["Stricturoplasty", "Resection Anastomosis"], "Ileal Stricture (Tubercular — Healed)": ["Stricturoplasty", "Resection Anastomosis"], "Crohn's Disease (Surgical)": ["Stricturoplasty", "Segmental Resection", "Ileocecal Resection"], "Ulcerative Colitis (Surgical)": ["Total Proctocolectomy + IPAA (J-Pouch)", "Total Colectomy + Ileorectal Anastomosis", "Subtotal Colectomy + Ileostomy"], "Sigmoid Volvulus (Recurrent)": ["Elective Sigmoid Colectomy"], "Cecal Volvulus": ["Right Hemicolectomy", "Cecopexy"], "Colonic Diverticulitis (Complicated)": ["Sigmoid Colectomy", "Hartmann's Procedure"], "Intussusception (Adult)": ["Resection", "Reduction + Fixation"], "Colonic Polyp (Large — Endoscopically Unresectable)": ["Segmental Colectomy", "Transanal Excision"], "Familial Adenomatous Polyposis (FAP)": ["Total Proctocolectomy + IPAA", "Total Colectomy + IRA"], "Recurrent Appendicitis": ["Appendectomy"], "Appendicular Lump": ["Interval Appendectomy (6 weeks)", "Ochsner-Sherren Regimen"], "Acute Appendicitis": ["Appendectomy"], "Appendicular Perforation + Abscess": ["Emergency Appendectomy", "Appendectomy + Drainage"], "Adhesive Intestinal Obstruction (Recurrent)": ["Adhesiolysis"], "Mesenteric Ischemia (Chronic)": ["Mesenteric Bypass", "Endovascular Intervention"], "Short Bowel Syndrome": ["Bowel Lengthening (STEP/Bianchi)", "Intestinal Transplant"], "Enterocutaneous Fistula": ["Definitive Resection + Anastomosis"], "Entero-Enteric Fistula": ["Resection + Anastomosis"], "Colovesical Fistula": ["Colonic Resection + Bladder Repair"], "Intestinal Obstruction (Acute)": ["Exploratory Laparotomy", "Adhesiolysis"], "Perforation Peritonitis": ["Exploratory Laparotomy + Primary Repair", "Exploratory Laparotomy + Resection"], "Blunt Trauma Abdomen (for Surgery)": ["Exploratory Laparotomy"], "Penetrating Abdominal Injury": ["Exploratory Laparotomy"], // ─── STOMA REVERSAL ─── "Ileostomy (Planned Reversal)": ["Ileostomy Reversal (Closure)"], "Colostomy (Planned Reversal)": ["Colostomy Reversal (Closure)", "Colostomy Reversal + Anastomosis"], "Hartmann's Reversal": ["Reversal of Hartmann's + Colorectal Anastomosis"], "Loop Ileostomy (Defunctioning — for Closure)": ["Loop Ileostomy Closure"], "Loop Colostomy (Defunctioning — for Closure)": ["Loop Colostomy Closure"], "Mucous Fistula Closure": ["Stoma Closure + Anastomosis"], // ─── ANORECTAL ─── "Hemorrhoids (Grade I-II)": ["Rubber Band Ligation", "Sclerotherapy"], "Hemorrhoids (Grade III)": ["Hemorrhoidectomy (Milligan-Morgan)", "Closed Hemorrhoidectomy (Ferguson)", "Stapled Hemorrhoidopexy (PPH)", "Laser Hemorrhoidoplasty", "HAL-RAR"], "Hemorrhoids (Grade IV)": ["Hemorrhoidectomy (Milligan-Morgan)", "Stapled Hemorrhoidopexy", "Closed Hemorrhoidectomy"], "Thrombosed External Hemorrhoid": ["Thrombectomy / Excision"], "Fissure-in-Ano (Chronic)": ["Lateral Internal Sphincterotomy", "Fissurectomy + Sphincterotomy", "Advancement Flap"], "Fistula-in-Ano (Low/Intersphincteric)": ["Fistulotomy", "Fistulectomy"], "Fistula-in-Ano (High/Transsphincteric)": ["Seton Placement", "LIFT Procedure", "Endorectal Advancement Flap", "VAAFT", "FiLaC (Laser)"], "Fistula-in-Ano (Horseshoe)": ["Staged Seton + Fistulotomy", "Modified Hanley's Procedure"], "Fistula-in-Ano (Recurrent)": ["Re-do Fistulotomy", "LIFT Procedure", "Advancement Flap"], "Perianal Abscess": ["Incision & Drainage"], "Ischiorectal Abscess": ["Incision & Drainage"], "Pilonidal Sinus": ["Wide Excision + Primary Closure", "Wide Excision + Secondary Healing", "Karydakis Flap", "Limberg Flap", "Bascom's Cleft Lift"], "Pilonidal Abscess": ["Incision & Drainage"], "Rectal Prolapse (Complete)": ["Ventral Mesh Rectopexy", "Delorme's Procedure", "Altemeier's Procedure", "Suture Rectopexy"], "Rectal Prolapse (Mucosal)": ["Delorme's Procedure", "Rubber Band Ligation"], "Solitary Rectal Ulcer Syndrome": ["Rectopexy", "Conservative + Biofeedback"], "Anal Stenosis": ["Anoplasty / Advancement Flap", "Dilatation"], "Anal Warts / Condylomata": ["Excision / Fulguration", "Laser Ablation"], "Rectal Polyp (Benign)": ["Transanal Excision", "TEM / TAMIS"], "Anal Incontinence (Surgical)": ["Sphincteroplasty", "Graciloplasty", "Sacral Nerve Stimulation"], "Rectovaginal Fistula": ["Advancement Flap", "Gracilis Interposition", "Transanal Repair"], "Pelvic Floor Dysfunction / Obstructed Defecation": ["STARR Procedure", "Ventral Rectopexy"], // ─── VARICOSE VEINS ─── "Varicose Veins (GSV)": ["Stripping + Ligation", "EVLA", "RFA", "Foam Sclerotherapy", "Glue Ablation (VenaSeal)"], "Varicose Veins (SSV)": ["SSV Stripping + Ligation", "EVLA", "RFA"], "Varicose Veins with Venous Ulcer": ["EVLA/RFA + Ulcer Care", "Stripping + Split Skin Graft"], "Perforator Incompetence": ["SEPS", "Foam Sclerotherapy"], // ─── THYROID / PARATHYROID / ENDOCRINE ─── "Multinodular Goitre": ["Total Thyroidectomy", "Subtotal Thyroidectomy"], "Solitary Thyroid Nodule (Bethesda II)": ["Hemithyroidectomy", "Total Thyroidectomy"], "Solitary Thyroid Nodule (Bethesda III/IV)": ["Hemithyroidectomy (diagnostic)", "Total Thyroidectomy"], "Toxic Multinodular Goitre": ["Total Thyroidectomy"], "Graves' Disease (Surgical)": ["Total Thyroidectomy"], "Thyroglossal Cyst": ["Sistrunk's Operation"], "Retrosternal Goitre": ["Total Thyroidectomy (cervical ± sternotomy)"], "Primary Hyperparathyroidism": ["Focused Parathyroidectomy", "Bilateral Neck Exploration"], "Secondary Hyperparathyroidism (Renal)": ["Subtotal Parathyroidectomy", "Total Parathyroidectomy + Auto-Transplant"], "Parathyroid Adenoma": ["Focused Parathyroidectomy"], "Adrenal Adenoma (Functioning)": ["Adrenalectomy", "Laparoscopic Adrenalectomy"], "Pheochromocytoma (Benign)": ["Adrenalectomy", "Laparoscopic Adrenalectomy"], "Conn's Syndrome": ["Adrenalectomy", "Laparoscopic Adrenalectomy"], "Cushing's Syndrome (Adrenal)": ["Adrenalectomy"], "Adrenal Incidentaloma (≥4cm)": ["Adrenalectomy"], // ─── BREAST (BENIGN) ─── "Fibroadenoma": ["Excision Biopsy", "Vacuum Assisted Excision"], "Giant Fibroadenoma": ["Excision Biopsy"], "Phyllodes Tumor — Benign": ["Wide Local Excision", "Simple Mastectomy"], "Breast Abscess": ["Incision & Drainage", "USG Guided Aspiration"], "Galactocele": ["Aspiration", "Excision"], "Gynecomastia": ["Subcutaneous Mastectomy", "Liposuction + Gland Excision"], "Duct Ectasia": ["Microdochectomy", "Hadfield's Operation"], "Breast Duct Papilloma": ["Microdochectomy"], // ─── HERNIA EMERGENCIES (cross-ref) ─── "Parastomal Hernia": ["Local Mesh Repair", "Stoma Resiting + Repair", "Sugarbaker Repair (Lap)"], // ─── HEAD / NECK / SALIVARY ─── "Submandibular Gland Calculus": ["Excision of Submandibular Gland"], "Chronic Submandibular Sialadenitis": ["Excision of Submandibular Gland"], "Parotid Pleomorphic Adenoma": ["Superficial Parotidectomy"], "Parotid Warthin's Tumor": ["Superficial Parotidectomy"], "Ranula": ["Excision / Marsupialization"], "Branchial Cyst": ["Excision"], "Branchial Fistula": ["Excision (Stepladder)"], "Carotid Body Tumor": ["Excision"], "Cervical Rib (Symptomatic)": ["Excision"], "Thoracic Outlet Syndrome": ["First Rib Resection", "Scalenectomy"], "Cervical Lymphadenopathy (Biopsy)": ["Excision Biopsy"], "Axillary Lymphadenopathy (Biopsy)": ["Excision Biopsy"], "Inguinal Lymphadenopathy (Biopsy)": ["Excision Biopsy"], // ─── THORACIC ─── "Empyema Thoracis": ["Decortication", "Intercostal Drainage", "VATS Decortication"], "Pneumothorax (Recurrent)": ["VATS Pleurodesis", "Bullectomy + Pleurodesis"], "Bronchiectasis (Surgical)": ["Lobectomy", "Segmentectomy"], "Lung Abscess (Chronic)": ["Lobectomy", "Percutaneous Drainage"], "Mediastinal Cyst / Mass (Benign)": ["VATS Excision", "Thoracotomy + Excision"], // ─── RETROPERITONEAL / MESENTERIC ─── "Psoas Abscess": ["Percutaneous Drainage", "Open Drainage"], "Subphrenic Abscess": ["Percutaneous Drainage", "Open Drainage"], "Pelvic Abscess": ["Transrectal Drainage", "Percutaneous Drainage"], "Retroperitoneal Fibrosis": ["Ureterolysis", "Biopsy"], "Retroperitoneal Cyst": ["Excision"], "Mesenteric Cyst": ["Excision"], "Omental Cyst": ["Excision"], "Mesenteric Lymphadenitis (Surgical)": ["Diagnostic Laparoscopy", "Excision Biopsy"], "Retroperitoneal Lymphangioma": ["Excision"], // ─── SOFT TISSUE / SKIN ─── "Sebaceous Cyst": ["Excision"], "Lipoma": ["Excision"], "Lipoma (Large/Deep)": ["Excision under GA"], "Dermoid Cyst": ["Excision"], "Ganglion": ["Excision"], "Neurofibroma": ["Excision"], "Soft Tissue Abscess": ["Incision & Drainage"], "Keratoacanthoma": ["Excision Biopsy"], "Infected Sebaceous Cyst": ["I&D → Delayed Excision"], "Granuloma": ["Excision Biopsy"], "Foreign Body (Subcutaneous)": ["Removal"], "Lymphangioma": ["Excision"], "Lymphocele": ["Drainage", "Excision"], "Cystic Hygroma": ["Excision", "Sclerotherapy"], "Sacrococcygeal Teratoma": ["Excision"], "Sinus Tract / Chronic Discharging Sinus": ["Excision", "Curettage"], "Cavernous Hemangioma": ["Excision", "Sclerotherapy"], "Abdominal Wall Desmoid Tumor": ["Wide Excision"], // ─── UROLOGY ─── "Hydrocele (Primary)": ["Jaboulay's Eversion", "Lord's Plication"], "Epididymal Cyst": ["Excision"], "Spermatocele": ["Excision"], "Varicocele": ["Varicocelectomy", "Microsurgical Varicocelectomy", "Palomo's"], "Undescended Testis": ["Orchidopexy"], "Testicular Torsion (Surgical)": ["Orchidopexy (bilateral)", "Orchidectomy (if non-viable)"], "Fournier's Gangrene": ["Emergency Debridement", "Staged Reconstruction"], "Phimosis": ["Circumcision"], "Paraphimosis": ["Dorsal Slit", "Circumcision"], "Urethral Stricture": ["Urethroplasty", "Endoscopic Internal Urethrotomy (OIU)"], "Renal Calculus (Staghorn / Complex)": ["PCNL", "Pyelolithotomy", "Nephrectomy (non-functioning kidney)"], "Ureteric Calculus (Impacted)": ["Ureterolithotomy", "Ureteroscopy + Lithotripsy"], "Bladder Stone": ["Cystolithotomy", "Endoscopic Cystolitholapaxy"], "BPH (Benign Prostatic Hyperplasia)": ["TURP", "Open Prostatectomy (Freyer's/Millin's)", "Laser Prostatectomy (HoLEP)"], "Urinary Retention (Acute — Surgical)": ["Suprapubic Cystostomy", "TURP"], "Hydronephrosis (PUJ Obstruction)": ["Pyeloplasty", "Laparoscopic Pyeloplasty"], "Vesicoureteric Reflux (Surgical)": ["Ureteric Reimplantation", "Endoscopic Injection (Deflux)"], "Renal Cyst (Symptomatic)": ["Laparoscopic Decortication", "Percutaneous Aspiration + Sclerotherapy"], "Nephroptosis (Symptomatic)": ["Nephropexy"], "Ureteric Injury (Iatrogenic)": ["End-to-End Anastomosis", "Reimplantation + Psoas Hitch", "Boari Flap"], "Posterior Urethral Valve": ["Endoscopic Valve Ablation", "Vesicostomy"], "Hypospadias": ["Urethroplasty (Snodgrass / Mathieu)", "Staged Repair"], "Epispadias": ["Epispadias Repair"], // ─── GYNAECOLOGY (managed by general surgery) ─── "Ovarian Cyst (Benign / Dermoid)": ["Laparoscopic Cystectomy", "Oophorectomy", "Laparotomy + Cystectomy"], "Ovarian Torsion": ["Laparoscopic Detorsion + Cystectomy", "Oophorectomy"], "Ectopic Pregnancy": ["Laparoscopic Salpingectomy", "Laparoscopic Salpingostomy", "Open Salpingectomy"], "Tubo-Ovarian Abscess": ["Laparoscopic Drainage", "Laparotomy + Drainage + Salpingectomy"], "Endometriosis (Surgical)": ["Laparoscopic Excision / Ablation", "Laparoscopic Cystectomy (Endometrioma)"], "Fibroid Uterus (Surgical)": ["Myomectomy (Laparoscopic)", "Myomectomy (Open)", "Total Abdominal Hysterectomy", "Total Laparoscopic Hysterectomy"], "Uterine Prolapse": ["Vaginal Hysterectomy + Pelvic Floor Repair", "Sacrocolpopexy"], "Bartholin's Cyst / Abscess": ["Marsupialization", "Excision"], "Cervical Polyp": ["Polypectomy"], "Broad Ligament Cyst": ["Laparoscopic Excision", "Open Excision"], "Hydatid of Morgagni (Torsion)": ["Laparoscopic Excision"], // ─── DIABETIC FOOT / VASCULAR ─── "Diabetic Foot — Wagner 1-2": ["Debridement + Wound Care", "Ray Amputation"], "Diabetic Foot — Wagner 3-4": ["Debridement", "Transmetatarsal Amputation", "Below Knee Amputation"], "Diabetic Foot — Wagner 5": ["Below Knee Amputation", "Above Knee Amputation"], "Chronic Non-Healing Ulcer": ["Debridement + SSG", "Debridement + VAC"], "Gangrene — Toe": ["Toe / Ray Amputation"], "Gangrene — Foot (Wet)": ["Guillotine / BKA"], "Peripheral Arterial Disease (Critical Limb Ischaemia)": ["Embolectomy", "Bypass Grafting", "Amputation"], "Arteriovenous Malformation": ["Excision", "Embolization"], // ─── BURNS / PLASTICS ─── "Post-Burns Contracture": ["Contracture Release + SSG / Flap"], "Keloid / Hypertrophic Scar": ["Excision + Adjuvant"], // ─── DIAGNOSTIC / STAGING ─── "Diagnostic Laparoscopy": ["Diagnostic Laparoscopy + Biopsy"], "Staging Laparoscopy": ["Staging Laparoscopy + Peritoneal Washings"], "EUA (Examination Under Anesthesia)": ["EUA + Biopsy"], "Feeding Jejunostomy (Planned)": ["Feeding Jejunostomy"], }, }, }; const MALIGNANCY_SITES = { "Breast": { procedures: ["Modified Radical Mastectomy (MRM)", "Breast Conservation Surgery (BCS) + ALND", "BCS + SLNB", "Simple Mastectomy + SLNB", "Toilet Mastectomy", "Breast Reconstruction", "Oncoplastic Surgery", "SLNB alone", "ALND alone", "Skin-Sparing Mastectomy", "Nipple-Sparing Mastectomy"] }, "Thyroid": { procedures: ["Total Thyroidectomy", "Total Thyroidectomy + Central Neck Dissection", "Total Thyroidectomy + MRND", "Total Thyroidectomy + Bilateral Neck Dissection", "Hemithyroidectomy (low-risk micro)", "Completion Thyroidectomy", "Isthmusectomy"] }, "Esophagus — Upper Third": { procedures: ["Definitive Chemoradiation", "McKeown Esophagectomy (3-field)", "Pharyngo-Laryngo-Esophagectomy"] }, "Esophagus — Middle Third": { procedures: ["McKeown Esophagectomy", "Ivor Lewis Esophagectomy", "MIE (Minimally Invasive)", "Transhiatal Esophagectomy"] }, "Esophagus — Lower / GEJ": { procedures: ["Ivor Lewis Esophagectomy", "Transhiatal Esophagectomy", "MIE", "Sweet's Esophagectomy", "Total Gastrectomy + Distal Esophagectomy"] }, "Stomach — Proximal": { procedures: ["Total Gastrectomy + D2 Lymphadenectomy", "Proximal Gastrectomy", "Palliative Feeding Jejunostomy"] }, "Stomach — Distal / Antrum": { procedures: ["Subtotal Gastrectomy + D2", "Total Gastrectomy + D2", "Palliative Gastrojejunostomy", "Palliative Feeding Jejunostomy"] }, "Stomach — Linitis Plastica": { procedures: ["Total Gastrectomy + D2", "Palliative Chemotherapy", "Palliative Feeding Jejunostomy"] }, "Stomach — GOO (Malignant)": { procedures: ["Palliative Gastrojejunostomy", "Endoscopic Stenting", "Subtotal Gastrectomy (if resectable)"] }, "Liver (HCC)": { procedures: ["Anatomical Hepatectomy", "Non-Anatomical Resection", "Liver Resection", "Liver Transplant", "RFA", "TACE"] }, "Liver — Metastases (Colorectal)": { procedures: ["Hepatic Metastasectomy", "RFA", "TACE", "Staged Hepatectomy / ALPPS"] }, "Gall Bladder": { procedures: ["Radical Cholecystectomy (Liver Bed + LN)", "Extended Cholecystectomy", "Palliative Biliary Stenting / PTBD", "Hepaticojejunostomy"] }, "Bile Duct — Hilar (Klatskin)": { procedures: ["Hepatectomy + Caudate Lobe + HJ", "Palliative PTBD / Stenting", "Liver Transplant (selected)"] }, "Bile Duct — Distal": { procedures: ["Pancreaticoduodenectomy (Whipple's)", "Palliative Biliary Stenting"] }, "Periampullary Region": { procedures: ["Whipple's Procedure", "PPPD", "Palliative Triple Bypass", "Endoscopic Stenting"] }, "Pancreas — Head": { procedures: ["Whipple's Procedure", "PPPD", "Palliative Triple Bypass", "Palliative Biliary Stenting"] }, "Pancreas — Body / Tail": { procedures: ["Distal Pancreatectomy + Splenectomy", "Distal Pancreatectomy", "Palliative Celiac Plexus Block"] }, "Colon — Cecum / Ascending": { procedures: ["Right Hemicolectomy + D3", "Right Hemicolectomy", "Extended Right Hemicolectomy", "Palliative Ileostomy"] }, "Colon — Transverse": { procedures: ["Extended Right Hemicolectomy", "Transverse Colectomy"] }, "Colon — Descending": { procedures: ["Left Hemicolectomy", "Palliative Colostomy"] }, "Colon — Sigmoid": { procedures: ["Sigmoid Colectomy / High AR", "Sigmoid Colectomy", "Hartmann's Procedure", "Palliative Colostomy"] }, "Colon — Obstruction / Perforation": { procedures: ["Hartmann's Procedure", "Subtotal Colectomy", "Defunctioning Stoma → Staged Resection"] }, "Rectum — Upper (12-15cm)": { procedures: ["Anterior Resection + TME", "Anterior Resection", "Palliative Loop Colostomy"] }, "Rectum — Mid (7-12cm)": { procedures: ["Low Anterior Resection + TME", "Low Anterior Resection", "Intersphincteric Resection", "Palliative Colostomy"] }, "Rectum — Low (<7cm)": { procedures: ["Ultra Low AR + Coloanal Anastomosis", "APR (Miles' Operation)", "Intersphincteric Resection", "Palliative Colostomy"] }, "Anal Canal": { procedures: ["Wide Local Excision (early)", "APR", "Definitive Chemoradiation (Nigro)"] }, "Small Intestine": { procedures: ["Segmental Resection + Anastomosis", "Wide Excision + Lymphadenectomy", "Palliative Bypass"] }, "Appendix": { procedures: ["Appendectomy (<2cm carcinoid)", "Right Hemicolectomy (>2cm / adenoCA)"] }, "Retroperitoneum": { procedures: ["Wide / Compartmental Resection", "Multivisceral Resection", "Palliative Debulking"] }, "Soft Tissue — Extremity": { procedures: ["Wide Local Excision + RT", "Compartmental Resection", "Amputation"] }, "Soft Tissue — Trunk": { procedures: ["Wide Local Excision", "Excision + Flap Reconstruction"] }, "Skin (Melanoma)": { procedures: ["Wide Excision (1-2cm margin)", "Wide Excision + SLNB", "Wide Excision + LN Dissection"] }, "Adrenal": { procedures: ["Adrenalectomy", "Bilateral Adrenalectomy"] }, "Parotid": { procedures: ["Total Parotidectomy ± Nerve Sacrifice", "Total Parotidectomy + Neck Dissection"] }, "Kidney": { procedures: ["Radical Nephrectomy", "Partial Nephrectomy"] }, "Urinary Bladder": { procedures: ["Radical Cystectomy + Ileal Conduit", "Partial Cystectomy", "TURBT"] }, "Testis": { procedures: ["High Inguinal Orchidectomy", "Retroperitoneal Lymph Node Dissection"] }, "Unknown Primary (CUP)": { procedures: ["Excision Biopsy", "Core Biopsy + Staging", "Palliative Resection"] }, }; // ─── Clinical Details Constants ───────────────────────────── const COMORBIDITIES = ["Hypertension", "Diabetes Mellitus", "CKD", "CAD", "Hypothyroid", "COPD"]; const BLOOD_GROUPS = ["A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-"]; const HISTOLOGY_TYPES = ["Adenocarcinoma", "Squamous Cell Carcinoma", "GIST", "NET / Carcinoid", "Sarcoma", "Lymphoma", "Papillary Carcinoma", "Follicular Carcinoma", "Medullary Carcinoma", "Anaplastic Carcinoma", "Melanoma", "Transitional Cell Carcinoma", "Hepatocellular Carcinoma", "Cholangiocarcinoma", "Mucinous Adenocarcinoma", "Signet Ring Cell", "Undifferentiated", "Others"]; const PALLOR_ICTERUS = ["Absent", "Present"]; const ACCESS_MODES = ["Laparoscopic", "Open", "Lap/Open", "VATS", "Endoscopic", "Robotic", "Others"]; const OP_ACCESS_MODES = ["Laparoscopic", "Laparoscopy Assisted", "Laparoscopy Converted to Open", "Open", "Laparoscopy + Endoscopy", "Laparoscopy + Open", "VATS", "Endoscopic", "Other"]; const ANAESTHESIA = ["GA", "SA", "RA", "LA", "Other"]; const SURGEONS = []; // Legacy - now uses config.surgeons const ASSISTANTS = []; // Legacy - now uses config.surgeons const OP_PROCEDURES = [ // Gallbladder & Biliary "Cholecystectomy", "Completion Cholecystectomy", "Subtotal Cholecystectomy", "Extended Cholecystectomy", "Radical Cholecystectomy", "Cholecystectomy With Liver Resection", "Cholecystostomy", "CBD Exploration", "CBD Exploration With T Tube", "Choledocoduodenostomy", "Choledocojejunostomy", "Hepaticojejunostomy", "Roux-en-Y Hepaticojejunostomy", "Primary Closure Of CBD", "Biliary Stenting (Intraoperative)", "Choledochal Cyst Excision", "Cholecystectomy + IOC", "Triple Tube Drainage", "Bilioenteric Bypass", "Hepaticoduodenostomy", // Liver "Hepatectomy", "Right Hepatectomy", "Left Hepatectomy", "Extended Right Hepatectomy", "Extended Left Hepatectomy", "Segmentectomy", "Non-Anatomical Liver Resection", "Liver Wedge Resection", "Hydatid Liver Cystectomy", "Pericystectomy", "Liver Abscess Drainage", "ALPPS Procedure", "Liver Biopsy", "Caudate Lobectomy", "Mesohepatectomy", "RFA Of Liver Lesion", "TACE (Transarterial Chemoembolization)", "Liver Cyst Deroofing", // Pancreas "Whipple Procedure", "PPPD", "Distal Pancreatectomy", "Distal Pancreatectomy + Splenectomy", "Freys Procedure", "Partington Rochelle", "Pancreatic Necrosectomy", "Pancreatic Cystogastrostomy", "Enucleation (Pancreatic)", "Central Pancreatectomy", "Total Pancreatectomy", "VARD (Video-Assisted Retroperitoneal Debridement)", "Transgastric Necrosectomy", "Pancreatic Abscess Drainage", "Pancreaticojejunostomy (Puestow)", "Beger's Procedure", // Stomach & Duodenum "Total Gastrectomy", "Subtotal Gastrectomy", "Partial Gastrectomy", "Proximal Gastrectomy", "Sleeve Gastrectomy", "Gastrojejunostomy", "Palliative Gastrojejunostomy", "Truncal Vagotomy", "Pyloroplasty", "Gastric Perforation Closure (Graham Patch)", "Gastrectomy + D2 Lymphadenectomy", "Excision Of GIST", "Gastrostomy", "Percutaneous Endoscopic Gastrostomy (PEG)", "Ramstedt's Pyloromyotomy", "Billroth I", "Billroth II", "Roux-en-Y Reconstruction", "Duodenal Ulcer Perforation Repair", "Duodenojejunostomy", "Duodenal Diverticulectomy", "Gastric Wedge Resection", "Dieulafoy Lesion Excision", // Esophagus "Ivor Lewis Esophagectomy", "McKeown Esophagectomy", "Transhiatal Esophagectomy", "MIE (Minimally Invasive Esophagectomy)", "Heller's Myotomy", "Esophageal Stenting", "Esophageal Diverticulectomy", "Zenker's Diverticulectomy", "Esophageal Perforation Repair", "Colon Interposition (Esophageal Replacement)", "Peroral Endoscopic Myotomy (POEM)", "Epiphrenic Diverticulectomy", // Bariatric "OAGB", "Roux-en-Y Gastric Bypass", "SADI-S", "Revision Bariatric Procedure", "Intragastric Balloon", "Adjustable Gastric Banding", "BPD-DS (Biliopancreatic Diversion With Duodenal Switch)", "Endoscopic Sleeve Gastroplasty", // Small Bowel "Resection Anastomosis Of Small Bowel", "Stricturoplasty", "Meckel's Diverticulectomy", "Adhesiolysis", "Jejunostomy", "Feeding Jejunostomy", "Ileostomy", "Loop Ileostomy", "End Ileostomy", "Ileostomy Reversal", "Duodenostomy", "Small Bowel Bypass", "Ileal Conduit", "Side-to-Side Anastomosis", "End-to-End Anastomosis", "End-to-Side Anastomosis", "Enterotomy + Foreign Body Removal", "Bypass Of Stricture", "Small Bowel Diverticulectomy", "Mesenteric Vascular Embolectomy", // Colon & Rectum "Right Hemicolectomy", "Right Extended Hemicolectomy", "Transverse Colectomy", "Left Hemicolectomy", "Extended Left Hemicolectomy", "Sigmoidectomy", "Sigmoid Colectomy", "Subtotal Colectomy", "Total Colectomy", "Total Proctocolectomy", "Hartmann's Procedure", "Hartmann's Reversal", "Anterior Resection", "LAR", "Ultra LAR", "APR (Abdominoperineal Resection)", "Intersphincteric Resection", "TAMIS", "TEM (Transanal Endoscopic Microsurgery)", "Colostomy", "Loop Colostomy", "End Colostomy", "Colostomy Reversal", "Frykman Goldberg's Procedure", "Ventral Mesh Rectopexy", "Delorme's Procedure", "Altemeier's Procedure", "Ileoanal Pouch (J-Pouch)", "Ileorectal Anastomosis", "Cecostomy", "Appendicostomy (Malone)", "Colocolonic Anastomosis", "Sigmoid Volvulus Derotation + Fixation", "Cecal Volvulus Reduction + Cecopexy", "Polypectomy (Colonoscopic)", "EMR (Endoscopic Mucosal Resection)", // Proctology "MIPH", "Hemorrhoidectomy (Milligan-Morgan)", "Hemorrhoidectomy (Ferguson)", "Stapled Hemorrhoidopexy", "Laser Hemorrhoidoplasty", "HAL-RAR", "Rubber Band Ligation", "Fistulotomy", "Fistulectomy", "Seton Placement", "LIFT Procedure", "VAAFT", "FiLaC (Laser Fistula)", "Advancement Flap (Fistula)", "Lateral Internal Sphincterotomy", "Fissurectomy + Sphincterotomy", "Anoplasty", "Pilonidal Sinus Excision", "Karydakis Flap", "Limberg Flap", "Bascom's Cleft Lift", "Transanal Excision", "Sclerotherapy (Hemorrhoids)", "Infrared Coagulation (Hemorrhoids)", "Perianal Abscess Drainage", "Ischiorectal Abscess Drainage", "Sphincteroplasty", "Gracilis Muscle Transposition", "Rectal Prolapse Mesh Repair", "STARR Procedure", "Thiersch Procedure", "EUA + Biopsy (Rectum)", // Hernia "Lichtenstein Mesh Repair", "TEP Repair", "TAPP Repair", "Shouldice Repair", "Bilateral TEP Repair", "Bilateral TAPP Repair", "McEvedy's Approach", "Umbilical Hernia Mesh Repair", "Sublay Mesh Repair", "Onlay Mesh Repair", "IPOM Repair", "IPOM Plus", "eTEP Repair", "eTEP-TAR", "rTAPP Repair", "Anterior Component Separation", "Posterior Component Separation (TAR)", "Sugarbaker Repair", "Nissen Fundoplication", "Toupet Fundoplication", "Dor Fundoplication", "Diaphragmatic Hernia Repair", "Bassini Repair", "Desarda Repair", "Darning Repair", "Plug Mesh Repair", "Rives-Stoppa Repair", "Herniorrhaphy (Pediatric)", "Mayo's Repair (Umbilical)", "Keyhole Repair (Parastomal)", "Laparoscopic Hernia Repair (IPOM)", "Robotics-Assisted Hernia Repair", "Emergency Hernioplasty", "Emergency Hernioplasty + Bowel Resection", // Thyroid & Parathyroid "Total Thyroidectomy", "Hemithyroidectomy", "Subtotal Thyroidectomy", "Completion Thyroidectomy", "Total Thyroidectomy + Central Neck Dissection", "Total Thyroidectomy + MRND", "Total Thyroidectomy + Bilateral Neck Dissection", "Isthmusectomy", "Sistrunk's Operation", "Parathyroidectomy", "Subtotal Parathyroidectomy", "Total Parathyroidectomy + Autotransplant", "Thyroidectomy + Sternotomy (Retrosternal Goitre)", "Minimally Invasive Thyroidectomy", // Breast "Modified Radical Mastectomy (MRM)", "Simple Mastectomy", "Breast Conservation Surgery (BCS)", "BCS + ALND", "BCS + SLNB", "Simple Mastectomy + SLNB", "SLNB", "ALND", "Subcutaneous Mastectomy", "Skin-Sparing Mastectomy", "Nipple-Sparing Mastectomy", "Microdochectomy", "Hadfield's Operation", "Excision Biopsy (Breast)", "Wide Local Excision (Breast)", "Oncoplastic Surgery", "Breast Reconstruction", "TRAM Flap", "DIEP Flap", "Latissimus Dorsi Flap", "Implant-Based Reconstruction", "Wire-Localized Excision Biopsy", "Vacuum-Assisted Biopsy", "Lumpectomy", "Central Duct Excision", "Breast Abscess Drainage", // Spleen "Splenectomy", "Partial Splenectomy", "Splenic Salvage / Splenorrhaphy", // Adrenal "Adrenalectomy", "Bilateral Adrenalectomy", "Retroperitoneoscopic Adrenalectomy", // Appendix "Appendectomy", "Appendectomy + Drainage", "Interval Appendectomy", "Appendicular Abscess Drainage", "Right Hemicolectomy (Appendicular Malignancy)", // Salivary Glands "Superficial Parotidectomy", "Total Parotidectomy", "Excision Of Submandibular Gland", "Sublingual Gland Excision", "Sialendoscopy", "Salivary Calculus Removal", "Parotid Abscess Drainage", // Vascular "Varicose Vein Stripping + Ligation", "EVLA", "RFA (Varicose Veins)", "Foam Sclerotherapy", "VenaSeal Ablation", "SEPS", "Embolectomy", "Thrombectomy", "Femoral-Popliteal Bypass", "Aortobifemoral Bypass", "AV Fistula Creation", "AV Fistula Repair", "Carotid Endarterectomy", "Fasciotomy (Compartment Syndrome)", "Venous Cutdown", // Amputations "Toe Amputation", "Ray Amputation", "Transmetatarsal Amputation", "Below Knee Amputation", "Above Knee Amputation", "Guillotine Amputation", "Hip Disarticulation", "Knee Disarticulation", "Finger Amputation", "Forearm Amputation", "Forequarter Amputation", "Hindquarter Amputation", "Stump Revision", // Wound & Soft Tissue "Incision & Drainage", "Debridement", "Debridement + SSG", "Debridement + VAC", "Split Skin Grafting", "Full Thickness Skin Graft", "Excision Biopsy", "Wide Local Excision", "Excision", "Marsupialization", "Contracture Release + SSG / Flap", "Lipoma Excision", "Dermoid Cyst Excision", "Sebaceous Cyst Excision", "Ganglion Excision", "Soft Tissue Sarcoma Excision", "Flap Cover (Local / Pedicled)", "Negative Pressure Wound Therapy (NPWT)", "Secondary Suturing", "Wound Exploration + Repair", "Tissue Expander Insertion", "Scar Revision", // Neck "Excision Biopsy (Lymph Node)", "MRND (Modified Radical Neck Dissection)", "Radical Neck Dissection", "Selective Neck Dissection", "Branchial Cyst Excision", "Branchial Fistula Excision", "Thyroglossal Cyst Excision", "Cervical Rib Excision", "Cystic Hygroma Excision", "Carotid Body Tumour Excision", "Lymph Node Biopsy", "Scalene Node Biopsy", "Neck Abscess Drainage", // Emergency / Trauma "Exploratory Laparotomy", "Exploratory Laparotomy + Primary Repair", "Exploratory Laparotomy + Resection", "Damage Control Laparotomy", "Laparotomy + Peritoneal Lavage", "Gastric Perforation Repair", "Duodenal Perforation Repair (Graham Patch)", "Ileal Perforation Repair", "Colonic Perforation Repair", "Repair Of Mesenteric Tear", "Splenorrhaphy / Splenectomy (Trauma)", "Liver Repair (Trauma)", "Pancreatic Injury Repair", "Diaphragmatic Injury Repair", "Bladder Repair (Trauma)", "Retroperitoneal Hematoma Evacuation", "Relook Laparotomy", "Temporary Abdominal Closure (Bogota Bag)", "Abdominal Wall Reconstruction", "DPL (Diagnostic Peritoneal Lavage)", // Laparoscopic General "Diagnostic Laparoscopy", "Diagnostic Laparoscopy and Proceed", "Laparoscopic Adhesiolysis", "Laparoscopic Peritoneal Lavage", "Laparoscopic CBD Exploration", "Laparoscopic Splenectomy", "Laparoscopic Appendectomy", "Laparoscopic Right Hemicolectomy", "Laparoscopic Left Hemicolectomy", "Laparoscopic Sigmoid Colectomy", "Laparoscopic APR", "Laparoscopic LAR", "Laparoscopic Total Colectomy", "Laparoscopic Rectopexy", "Laparoscopic Liver Resection", "Laparoscopic Adrenalectomy", "Single Incision Laparoscopic Surgery (SILS)", "Laparoscopic Common Bile Duct Exploration", "Laparoscopic Gastrojejunostomy", "Laparoscopic Feeding Jejunostomy", // Urology-Related (General Surgery overlap) "Orchidopexy", "Jaboulay's Eversion (Hydrocele)", "Lord's Plication (Hydrocele)", "Varicocelectomy", "Microsurgical Varicocelectomy", "Circumcision", "Epididymal Cyst Excision", "Testicular Biopsy", "Vasectomy", "High Inguinal Orchidectomy", // Urology Extended "PCNL (Percutaneous Nephrolithotomy)", "Pyelolithotomy", "Ureterolithotomy", "Ureteroscopy + Lithotripsy", "Cystolithotomy", "Endoscopic Cystolitholapaxy", "TURP", "Open Prostatectomy", "Laser Prostatectomy (HoLEP)", "Suprapubic Cystostomy", "Pyeloplasty", "Laparoscopic Pyeloplasty", "Ureteric Reimplantation", "Endoscopic Injection (Deflux)", "Laparoscopic Decortication (Renal Cyst)", "Nephropexy", "Urethroplasty", "Endoscopic Internal Urethrotomy (OIU)", "Dorsal Slit", "Ureteric End-to-End Anastomosis", "Psoas Hitch + Reimplantation", "Boari Flap", "Endoscopic Valve Ablation", "Vesicostomy", "Snodgrass Urethroplasty", "Epispadias Repair", "Nephrectomy", // Gynaecology (managed by general surgery) "Laparoscopic Ovarian Cystectomy", "Oophorectomy", "Laparoscopic Salpingectomy", "Laparoscopic Salpingostomy", "Open Salpingectomy", "Laparoscopic Detorsion + Cystectomy", "Laparoscopic Drainage (Tubo-Ovarian Abscess)", "Laparoscopic Endometriosis Excision", "Myomectomy (Laparoscopic)", "Myomectomy (Open)", "Total Abdominal Hysterectomy (TAH)", "Total Laparoscopic Hysterectomy (TLH)", "Vaginal Hysterectomy + Pelvic Floor Repair", "Sacrocolpopexy", "Marsupialization (Bartholin)", "Bartholin Cyst Excision", "Cervical Polypectomy", "Broad Ligament Cyst Excision", // Miscellaneous "Mesenteric Cyst Excision", "Omental Cyst Excision", "Retroperitoneal Cyst Excision", "Abdominal Wall Desmoid Excision", "Ranula Excision", "Keloid Excision", "Tracheostomy", "Intercostal Drain Insertion", "Central Line Insertion", "Peritoneal Dialysis Catheter Insertion", "PICC Line Insertion", "Chemoport Insertion", "Peritoneal Biopsy", "Omental Biopsy", "Mesenteric Lymph Node Biopsy", "Trucut Biopsy", "Skin Biopsy", "EUA (Examination Under Anaesthesia)", "Second Look Surgery", "Staging Laparoscopy", "Palliative Bypass Procedure", "Tube Thoracostomy", "Mini Thoracotomy", "VATS Decortication", "VATS Pleurodesis", "Chest Wall Resection", "Mediastenotomy", "Pericardial Window", "Pericardiostomy", ]; const INTRA_COMPLICATIONS = ["None", "Hemorrhage", "Bile Duct Injury", "Bowel Injury", "Injury to Other Organs", "Anesthetic Complication", "Other"]; const SHIFTED_TO = ["ICU", "PACU", "Ward", "Other"]; const PAC_STATUS = ["", "OK", "Review"]; const emptyOpDetails = () => ({ surgeryDateActual: "", startTime: "", endTime: "", anaesthesia: "", anaesthesiaOther: "", anaesthetist: "", operatingSurgeon: "", surgeonOther: "", firstAssistant: "", assistantOther: "", secondAssistant: "", secondAssistantOther: "", thirdAssistant: "", thirdAssistantOther: "", fourthAssistant: "", fourthAssistantOther: "", fifthAssistant: "", fifthAssistantOther: "", otherSurgeons: "", theatreAssistant: "", patientPosition: "", patientPositionOther: "", opAccessMode: "", opAccessOther: "", primaryProcedure: "", primaryProcManual: "", adjunctProcedure: "", secondaryProcedure: "", intraFindings: [""], specimenSent: "No", specimenDetails: "", operativeNote: "", bloodLoss: "", prbcTransfusion: "0", ffpUnits: "0", plateletUnits: "0", complication1: "", complication1Other: "", complication2: "", complication2Other: "", stoma: "", stomaType: "", stomaSite: "", drains: "No", drainList: [], // [{type:"", site:""}] rylesTube: "No", foleysCatheter: "No", thoracostomy: "None", epidural: "No", extubation: "Yes", abdominalClosure: "", shiftedTo: "", otherInfo: "", }); const emptyPostOp = () => ({ complications: [""], drainRemoval: [], // [{drainIdx: 0, pod: "", status: "Removed"}] — built from op drainList rylesRemoval: "", // POD or "In Situ" catheterRemoval: "", // POD or "In Situ" flatusDay: "", bowelsDay: "", oralsDay: "", ambulationDay: "", sutureRemovalDay: "", woundCondition: "", postOpImaging: "", postOpInvestigations: "", hpeReport: "", hpeStage: "", finalDx: {}, // { type, primaryDx, primaryLaterality, secondaryDx, malSite, histology, histologyOther, pathStage, notes, changed } dischargeMedications: "", dietInstructions: "", adviceOnDischarge: "", hospitalStayNotes: "", followUpDate: "", followUpInstructions: "", }); const POST_OP_COMPLICATIONS = ["None", "Surgical Site Infection", "Wound Dehiscence", "Anastomotic Leak", "Intra-abdominal Abscess", "Post-op Hemorrhage", "DVT / PE", "Pneumonia", "UTI", "Paralytic Ileus", "Bile Leak", "Pancreatic Fistula", "Enterocutaneous Fistula", "Incisional Hernia", "Other"]; const ASH_GRADES = ["Nyhus I", "Nyhus II", "Nyhus IIIA", "Nyhus IIIB", "Nyhus IIIC (Femoral)", "Nyhus IV (Recurrent)", "EHS L1", "EHS L2", "EHS L3", "EHS M1", "EHS M2", "EHS M3"]; // Diagnoses needing laterality const LATERALITY_DX = [ "Inguinal Hernia", "Femoral Hernia", "Recurrent Inguinal Hernia", "Fibroadenoma", "Phyllodes Tumor", "Breast Abscess", "Gynecomastia", "Varicose Veins", "Undescended Testis", "Hydrocele", "Varicocele", "Carcinoma Breast", "Epididymal Cyst", "Spermatocele", "Testicular Torsion", "Lumbar Hernia", "Ovarian Cyst", "Ovarian Torsion", "Ectopic Pregnancy", "Tubo-Ovarian Abscess", "Renal Calculus", "Ureteric Calculus", "Hydronephrosis", "Renal Cyst", "Vesicoureteric Reflux", "Bartholin", ]; const needsLaterality = (dx) => LATERALITY_DX.some(l => dx && dx.includes(l)); // Diagnoses needing site specification const SITE_DX = { "Hydatid Cyst": ["Liver", "Lung — Right", "Lung — Left", "Spleen", "Kidney", "Pelvis", "Peritoneum", "Bone", "Brain", "Other"], "Abscess": ["Liver", "Splenic", "Psoas", "Intra-abdominal", "Pelvic", "Subphrenic", "Lung", "Other"], "GIST": ["Gastric", "Duodenal", "Jejunal", "Ileal", "Colonic", "Rectal", "Esophageal", "Other"], "Lymphadenopathy": ["Cervical", "Axillary", "Inguinal", "Mesenteric", "Retroperitoneal", "Supraclavicular", "Other"], "Soft Tissue Sarcoma": ["Upper Extremity", "Lower Extremity", "Trunk", "Retroperitoneal", "Head/Neck"], "Melanoma": ["Head/Neck", "Trunk", "Upper Extremity", "Lower Extremity", "Subungual"], "Intrahepatic Stones": ["Left Lobe", "Right Lobe", "Bilateral"], "Polycystic Liver": ["Bilateral", "Left Lobe Predominant", "Right Lobe Predominant"], }; const getSiteOptions = (dx) => { for (const [k, v] of Object.entries(SITE_DX)) { if (dx && dx.includes(k)) return v; } return null; }; // Expand diagnoses: add laterality/site variants as separate entries function expandDiagnoses(cats) { const expanded = {}; for (const [catKey, cat] of Object.entries(cats)) { expanded[catKey] = { ...cat, diagnoses: {} }; for (const [dx, procs] of Object.entries(cat.diagnoses)) { // Check if this diagnosis needs laterality if (LATERALITY_DX.some(l => dx.includes(l))) { expanded[catKey].diagnoses[dx + " (Right)"] = [...procs]; expanded[catKey].diagnoses[dx + " (Left)"] = [...procs]; expanded[catKey].diagnoses[dx + " (Bilateral)"] = [...procs]; } // Check if this diagnosis needs site let hasSite = false; for (const [siteDx, sites] of Object.entries(SITE_DX)) { if (dx.includes(siteDx)) { hasSite = true; for (const site of sites) { expanded[catKey].diagnoses[dx + " — " + site] = [...procs]; } break; } } // If no laterality or site, keep as-is if (!LATERALITY_DX.some(l => dx.includes(l)) && !hasSite) { expanded[catKey].diagnoses[dx] = [...procs]; } } } return expanded; } const EXPANDED_BENIGN = expandDiagnoses(BENIGN_CATEGORIES); // Diagnoses that are hernias (need ASH classification) const isHernia = (dx) => dx && (dx.toLowerCase().includes("hernia") || dx.toLowerCase().includes("hernioplasty")); // Subtypes const SUBTYPE_DX = { "Inguinal Hernia": ["Direct", "Indirect", "Pantaloon"], "Recurrent Inguinal Hernia": ["Direct", "Indirect"], "Hiatal Hernia": ["Sliding (Type I)", "Paraesophageal (Type II)", "Mixed (Type III)", "Giant (Type IV)"], "Rectal Prolapse": ["Complete (Full-thickness)", "Mucosal", "Internal (Intussusception)"], "Hemorrhoids": ["Grade I", "Grade II", "Grade III", "Grade IV"], "Fistula-in-Ano": ["Intersphincteric", "Transsphincteric", "Suprasphincteric", "Extrasphincteric", "Horseshoe"], "Thyroid Nodule": ["Bethesda I", "Bethesda II", "Bethesda III", "Bethesda IV", "Bethesda V", "Bethesda VI"], "Diabetic Foot": ["Wagner 0", "Wagner 1", "Wagner 2", "Wagner 3", "Wagner 4", "Wagner 5"], "Gynecomastia": ["Unilateral", "Bilateral"], "Incisional Hernia": ["Midline", "Lateral", "Parastomal"], "Mirizzi Syndrome": ["Type I", "Type II", "Type III", "Type IV"], "Bile Duct Injury": ["Strasberg A", "Strasberg B", "Strasberg C", "Strasberg D", "Strasberg E1", "Strasberg E2", "Strasberg E3", "Strasberg E4", "Strasberg E5"], "CBD Stricture": ["Bismuth I", "Bismuth II", "Bismuth III", "Bismuth IV", "Bismuth V"], "IPMN": ["Branch Duct", "Main Duct", "Mixed"], "Chronic Pancreatitis": ["Calcific", "Non-calcific", "With Pseudocyst", "With Duct Dilatation"], "Esophageal Stricture": ["Upper Third", "Middle Third", "Lower Third"], "Achalasia Cardia": ["Type I", "Type II", "Type III (Spastic)"], "Pancreatic Fistula": ["Low Output (<200ml/day)", "High Output (>200ml/day)"], }; const getSubtypes = (dx) => { for (const [k, v] of Object.entries(SUBTYPE_DX)) { if (dx && dx.includes(k)) return v; } return null; }; // Build flat benign dx list for the PreOp section const ALL_BENIGN_DX = []; Object.entries(BENIGN_CATEGORIES).forEach(([catKey, cat]) => { Object.keys(cat.diagnoses).forEach(dx => { ALL_BENIGN_DX.push({ dx, category: catKey, catLabel: cat.label, procedures: cat.diagnoses[dx] }); }); }); const emptyPreOp = () => ({ lesionType: "", // "benign" | "malignancy" // Benign primaryDx: "", primaryLaterality: "", primarySite: "", primarySubtype: "", ashClass: "", benignCategory: "", secondaryDx: "", secondaryLaterality: "", secondarySite: "", procedure: "", accessMode: "", accessOther: "", plan: "", // Curative / Palliative for malignancy // Malignancy malSite: "", preOpHistology: "", histologyOther: "", ihc: "", clinicalT: "", clinicalN: "", clinicalM: "", }); const INDIA_STATES_DISTRICTS = { "Jammu and Kashmir": ["Srinagar","Anantnag","Baramulla","Budgam","Bandipora","Ganderbal","Kupwara","Pulwama","Shopian","Kulgam","Jammu","Kathua","Udhampur","Rajouri","Poonch","Doda","Kishtwar","Ramban","Reasi","Samba"], "Ladakh": ["Leh","Kargil"], "Himachal Pradesh": ["Shimla","Kangra","Mandi","Kullu","Solan","Una","Sirmaur","Bilaspur","Hamirpur","Chamba","Kinnaur","Lahaul and Spiti"], "Punjab": ["Ludhiana","Amritsar","Jalandhar","Patiala","Bathinda","Mohali","Pathankot","Hoshiarpur","Gurdaspur","Sangrur","Firozpur","Moga"], "Uttarakhand": ["Dehradun","Haridwar","Nainital","Udham Singh Nagar","Almora","Pauri Garhwal","Tehri Garhwal","Chamoli","Pithoragarh","Champawat","Bageshwar","Rudraprayag","Uttarkashi"], "Haryana": ["Gurugram","Faridabad","Panipat","Ambala","Karnal","Hisar","Rohtak","Sonipat","Panchkula"], "Delhi": ["Central","East","New Delhi","North","North East","North West","South","South East","South West","Shahdara","West"], "Rajasthan": ["Jaipur","Jodhpur","Udaipur","Kota","Bikaner","Ajmer","Alwar","Bhilwara","Sikar","Bharatpur"], "Uttar Pradesh": ["Lucknow","Kanpur","Agra","Varanasi","Meerut","Allahabad","Ghaziabad","Noida","Bareilly","Aligarh","Gorakhpur","Jhansi"], "Bihar": ["Patna","Gaya","Muzaffarpur","Bhagalpur","Darbhanga","Purnia","Begusarai"], "Madhya Pradesh": ["Bhopal","Indore","Jabalpur","Gwalior","Ujjain","Sagar","Dewas","Satna","Rewa"], "Chhattisgarh": ["Raipur","Bhilai","Bilaspur","Korba","Durg"], "Gujarat": ["Ahmedabad","Surat","Vadodara","Rajkot","Bhavnagar","Jamnagar","Gandhinagar"], "Maharashtra": ["Mumbai","Pune","Nagpur","Thane","Nashik","Aurangabad","Solapur","Kolhapur"], "Jharkhand": ["Ranchi","Jamshedpur","Dhanbad","Bokaro","Deoghar","Hazaribagh"], "Odisha": ["Bhubaneswar","Cuttack","Berhampur","Rourkela","Sambalpur","Puri"], "West Bengal": ["Kolkata","Howrah","Asansol","Siliguri","Durgapur","Bardhaman"], "Sikkim": ["Gangtok","Namchi","Gyalshing","Mangan"], "Assam": ["Guwahati","Silchar","Dibrugarh","Jorhat","Nagaon","Tinsukia","Tezpur"], "Meghalaya": ["Shillong","Tura","Jowai"], "Tripura": ["Agartala","Dharmanagar","Udaipur"], "Arunachal Pradesh": ["Itanagar","Naharlagun","Pasighat","Tawang"], "Manipur": ["Imphal","Bishnupur","Thoubal","Churachandpur"], "Mizoram": ["Aizawl","Lunglei","Champhai"], "Nagaland": ["Kohima","Dimapur","Mokokchung"], "Goa": ["North Goa","South Goa"], "Karnataka": ["Bengaluru","Mysuru","Mangaluru","Hubli-Dharwad","Belagavi"], "Kerala": ["Thiruvananthapuram","Kochi","Kozhikode","Thrissur","Kollam"], "Tamil Nadu": ["Chennai","Coimbatore","Madurai","Tiruchirappalli","Salem"], "Andhra Pradesh": ["Visakhapatnam","Vijayawada","Guntur","Tirupati","Kurnool"], "Telangana": ["Hyderabad","Warangal","Nizamabad","Karimnagar","Khammam"], }; const INDIA_STATES = Object.keys(INDIA_STATES_DISTRICTS).sort(); const OCCUPATIONS = [ "Government Employee", "Private Employee", "Self Employed / Business", "Farmer / Agriculture", "Labourer / Daily Wage", "Housewife / Homemaker", "Student", "Teacher / Professor", "Doctor / Healthcare Worker", "Engineer / IT Professional", "Lawyer / Legal", "Shopkeeper / Trader", "Driver / Transport", "Carpenter / Mason / Construction", "Tailor", "Army / Police / Paramilitary", "Retired / Pensioner", "Unemployed", "Other", ]; // Imaging: date + region + findings const IMAGING_KEYS = ["usg", "ncct", "cect", "mri", "cemri", "mrcp", "ctAngio", "doppler", "petScan", "hidaScan", "bariumStudy", "defecography", "fistuloGram", "contrastStudy"]; const IMAGING_LABELS = { usg: "USG", ncct: "NCCT", cect: "CECT", mri: "MRI", cemri: "CEMRI", mrcp: "MRCP", ctAngio: "CT Angiography", doppler: "Doppler USG", petScan: "PET Scan", hidaScan: "HIDA Scan", bariumStudy: "Barium Study", defecography: "Defecography", fistuloGram: "Fistulogram", contrastStudy: "Contrast Study" }; // Endoscopy: date + findings (no region) const ENDO_KEYS = ["ercp", "ugiEndoscopy", "colonoscopy", "proctosigmoidoscopy", "cystoscopy", "eus", "capsuleEndoscopy", "anorectalManometry"]; const ENDO_LABELS = { ercp: "ERCP", ugiEndoscopy: "UGI Endoscopy", colonoscopy: "Colonoscopy", proctosigmoidoscopy: "Proctosigmoidoscopy", cystoscopy: "Cystoscopy", eus: "EUS (Endoscopic Ultrasound)", capsuleEndoscopy: "Capsule Endoscopy", anorectalManometry: "Anorectal Manometry" }; // Pathology: date + site + findings const PATHO_KEYS = ["fnac", "hpe", "trucut"]; const PATHO_LABELS = { fnac: "FNAC", hpe: "HPE", trucut: "Trucut Biopsy" }; const emptyClinical = () => ({ // Section 1: Particulars name: "", age: "", sex: "", phone: "", mrd: "", state: "", district: "", occupation: "", height: "", weight: "", bloodGroup: "", comorbidities: [], comorbidOther: "", // Section 2: History chiefComplaints: [""], pastHistory: [""], prevSurgeries: [""], otherDetails: [""], // Section 2: Examination pulse: "", bp: "", spo2: "", pallor: "Absent", icterus: "Absent", chest: "", cvs: "", abdominalFindings: "", dre: "", otherExam: [""], // Section 3: Investigations — Haematology cbc: { done: false, date: "", hb: "", tlc: "", plt: "", esr: "", dlc: "", pcv: "", mcv: "", mch: "", mchc: "", rdw: "" }, coagulation: { done: false, date: "", pt: "", inr: "", aptt: "", bt: "", ct: "", fibrinogen: "" }, peripheralSmear: { done: false, date: "", findings: "" }, reticulocyte: { done: false, date: "", count: "" }, dimer: { done: false, date: "", value: "" }, crossmatch: { done: false, date: "", bloodGroup: "", units: "" }, // Section 3: Biochemistry lft: { done: false, date: "", tbil: "", dbil: "", ast: "", alt: "", alp: "", ggt: "", alb: "", tp: "", ag: "" }, kft: { done: false, date: "", bun: "", creatinine: "", na: "", k: "", cl: "", ca: "", phosphate: "", uricAcid: "" }, glucose: { done: false, date: "", fbs: "", ppbs: "", rbs: "", hba1c: "" }, lipid: { done: false, date: "", tg: "", tchol: "", ldl: "", vldl: "", hdl: "" }, pancreatic: { done: false, date: "", amylase: "", lipase: "", crp: "" }, protein: { done: false, date: "", tp: "", alb: "", glob: "", ag: "" }, // Section 3: Endocrine thyroid: { done: false, date: "", t3: "", t4: "", ft3: "", ft4: "", tsh: "" }, cortisol: { done: false, date: "", morning: "", evening: "", acth: "" }, parathyroid: { done: false, date: "", pth: "", vitD: "", ionizedCa: "" }, insulin: { done: false, date: "", fasting: "", cpeptide: "" }, // Section 3: Tumour Markers tumorMarkers: { done: false, date: "", cea: "", ca199: "", ca125: "", afp: "", ca153: "", psa: "", bhcg: "", calcitonin: "", chromograninA: "", ldh: "", s100: "" }, // Section 3: Iron + Special iron: { done: false, date: "", siron: "", ferritin: "", transferrin: "", tibc: "" }, vitB12Folate: { done: false, date: "", b12: "", folate: "" }, // Section 3: Urine + Serology + ABG urineExam: { done: false, date: "", colour: "", albumin: "", sugar: "", micro: "", culture: "", bence: "" }, serology: { done: false, date: "", hiv: "", hbsag: "", hcv: "", vdrl: "", widal: "", dengue: "", malarial: "" }, abg: { done: false, date: "", ph: "", pco2: "", po2: "", hco3: "", lactate: "", be: "" }, stoolExam: { done: false, date: "", occultBlood: "", microscopy: "", culture: "" }, ascitic: { done: false, date: "", albumin: "", protein: "", cellCount: "", cytology: "", culture: "", saag: "" }, pleural: { done: false, date: "", albumin: "", protein: "", ldh: "", cellCount: "", cytology: "", culture: "" }, // Section 3: Imaging + Endoscopy (expandable cards) usg: { done: false, date: "", region: "", findings: "" }, ncct: { done: false, date: "", region: "", findings: "" }, cect: { done: false, date: "", region: "", findings: "" }, mri: { done: false, date: "", region: "", findings: "" }, cemri: { done: false, date: "", region: "", findings: "" }, mrcp: { done: false, date: "", region: "", findings: "" }, ctAngio: { done: false, date: "", region: "", findings: "" }, doppler: { done: false, date: "", region: "", findings: "" }, petScan: { done: false, date: "", region: "", findings: "" }, hidaScan: { done: false, date: "", region: "", findings: "" }, bariumStudy: { done: false, date: "", region: "", findings: "" }, defecography: { done: false, date: "", findings: "" }, fistuloGram: { done: false, date: "", region: "", findings: "" }, contrastStudy: { done: false, date: "", region: "", findings: "" }, ercp: { done: false, date: "", findings: "" }, ugiEndoscopy: { done: false, date: "", findings: "" }, colonoscopy: { done: false, date: "", findings: "" }, proctosigmoidoscopy: { done: false, date: "", findings: "" }, cystoscopy: { done: false, date: "", findings: "" }, eus: { done: false, date: "", findings: "" }, capsuleEndoscopy: { done: false, date: "", findings: "" }, anorectalManometry: { done: false, date: "", findings: "" }, fnac: { done: false, date: "", site: "", findings: "" }, hpe: { done: false, date: "", site: "", findings: "" }, trucut: { done: false, date: "", site: "", findings: "" }, additionalInvestigations: [], // Section 4: PreOp Diagnosis preOp: emptyPreOp(), // Clinical form completed flag clinicalDone: false, // Surgery listing surgeryListDate: "", theater: "", listStatus: "", // Tracking clinicalBy: "", clinicalById: "", }); // ─── Scheduling Helpers ────────────────────────────────────── function getNextAdmDates(day, n = 12) { const dates = []; const d = new Date(); d.setHours(0, 0, 0, 0); while (d.getDay() !== day) d.setDate(d.getDate() + 1); const today = new Date(); today.setHours(0, 0, 0, 0); if (d < today) d.setDate(d.getDate() + 7); for (let i = 0; i < n; i++) { dates.push(new Date(d)); d.setDate(d.getDate() + 7); } return dates; } function fmt(d) { const y = d.getFullYear(), m = String(d.getMonth()+1).padStart(2,"0"), dd = String(d.getDate()).padStart(2,"0"); return `${y}-${m}-${dd}`; } function fmtD(s) { return new Date(s + "T00:00:00").toLocaleDateString("en-IN", { weekday: "short", day: "numeric", month: "short", year: "numeric" }); } function fmtDT(iso) { if (!iso) return "—"; const d = new Date(iso); return d.toLocaleDateString("en-IN", { weekday: "short", day: "numeric", month: "short", year: "numeric" }); } function slotsUsed(pts, ds, cat) { return pts.filter(p => p.surgeryDate === ds && p.benignCategory === cat && p.type === "benign").length; } function findDate(pts, day, cat, slots) { for (const d of getNextAdmDates(day, 24)) { const ds = fmt(d); if (slotsUsed(pts, ds, cat) < slots[cat]) return ds; } return fmt(getNextAdmDates(day, 1)[0]); } // ─── UI Helpers ────────────────────────────────────────────── function SearchSelect({ options, value, onChange, placeholder, label, req, clearable }) { const [open, setOpen] = useState(false); const [q, setQ] = useState(""); const ref = useRef(null); const [pos, setPos] = useState({ top: 0, left: 0, width: 0, openUp: false }); const fil = options.filter(o => o.toLowerCase().includes(q.toLowerCase())); const isMob = typeof window !== "undefined" && window.innerWidth < 768; const doOpen = () => { if (ref.current) { const r = ref.current.getBoundingClientRect(); const spaceBelow = window.innerHeight - r.bottom; const openUp = spaceBelow < 260 && r.top > 260; setPos({ top: openUp ? r.top - 4 : r.bottom + 4, left: r.left, width: r.width, openUp }); } setOpen(!open); setQ(""); }; const doSelect = (o) => { onChange(o); setOpen(false); setQ(""); }; const list = ( <> {fil.map(o => (
doSelect(o)} style={{ padding: isMob ? "12px 16px" : "9px 14px", cursor: "pointer", fontSize: isMob ? "0.92rem" : "0.84rem", fontFamily: "'Outfit',sans-serif", color: o === "Other (Enter Manually)" ? "#1565c0" : "#1e293b", background: o === value ? "#e8f5e9" : "transparent", borderBottom: "1px solid #f1f5f9", fontWeight: o === value ? 600 : (o === "Other (Enter Manually)" ? 600 : 400), fontStyle: o === "Other (Enter Manually)" ? "italic" : "normal" }}>{o}
))} {fil.length === 0 &&
No matches
} ); return (
{label && }
{value || placeholder}
{clearable && value && }
{open && isMob && ( <>
{ setOpen(false); setQ(""); }} />
setQ(e.target.value)} onClick={e => e.stopPropagation()} style={{ width: "100%", padding: "10px 14px", border: "1.5px solid #e2e8f0", borderRadius: 10, fontSize: "0.92rem", fontFamily: "'Outfit',sans-serif", boxSizing: "border-box" }} />
{list}
)} {open && !isMob && ( <>
{ setOpen(false); setQ(""); }} />
setQ(e.target.value)} onClick={e => e.stopPropagation()} style={{ ...S.input, marginBottom: 0, fontSize: "0.84rem", padding: "8px 12px" }} />
{list}
)}
); } function Bdg({ children, bg, color, border }) { return {children}; } function CollapseSection({ title, icon, open, onToggle, color = "#1565c0", children }) { return (
{open &&
{children}
}
); } function LabCard({ label, fields, data, onChange, color = "#6a1b9a" }) { const d = data || { done: false, date: "" }; const hasData = d.done || fields.some(f => d[f.key]); const toggle = () => onChange({ ...d, done: !d.done }); const inp = { width: "100%", padding: "5px 7px", border: "1px solid #e2e8f0", borderRadius: 6, fontSize: "0.78rem", fontFamily: "'Outfit',sans-serif", boxSizing: "border-box" }; return (
{(d.done || hasData) &&
onChange({ ...d, date: e.target.value })} style={{ ...inp, maxWidth: 160, fontSize: "0.74rem" }} />
{fields.map(f => (
onChange({ ...d, [f.key]: e.target.value })} placeholder="—" style={inp} />
))}
}
); } function MultiInput({ label, values, onChange, max = 3 }) { const add = () => { if (values.length < max) onChange([...values, ""]); }; return (
{values.map((v, i) => (
{ const n = [...values]; n[i] = e.target.value; onChange(n); }} style={{ flex: 1, padding: "6px 10px", border: "1px solid #e2e8f0", borderRadius: 7, fontSize: "0.82rem", fontFamily: "'Outfit',sans-serif" }} placeholder={`${label} ${i + 1}`} /> {values.length > 1 && }
))} {values.length < max && }
); } // ─── Photo/File Upload Component ───────────────────────────── function PhotoUpload({ photos, onChange, label, maxPhotos = 10, accept = "image/jpeg,image/png,image/webp" }) { const handleAdd = (e) => { const files = Array.from(e.target.files || []); if (files.length === 0) return; const current = photos || []; const remaining = maxPhotos - current.length; files.slice(0, remaining).forEach(file => { if (file.size > 2000000) return; // 2MB max per file const reader = new FileReader(); reader.onload = () => { onChange([...current, { data: reader.result, name: file.name, date: new Date().toISOString().slice(0,10), caption: "" }]); }; reader.readAsDataURL(file); }); e.target.value = ""; }; const remove = (i) => onChange((photos || []).filter((_, j) => j !== i)); const updateCaption = (i, cap) => { const n = [...(photos || [])]; n[i] = { ...n[i], caption: cap }; onChange(n); }; const arr = photos || []; return (
{arr.length < maxPhotos && }
{arr.length > 0 &&
{arr.map((p, i) => (
{p.data.startsWith("data:image") ? ( {p.caption ) : (
{"📄"} PDF
)} updateCaption(i, e.target.value)} placeholder="Caption..." style={{ width: "100%", border: "none", borderTop: "1px solid #e2e8f0", padding: "4px 6px", fontSize: "0.64rem", fontFamily: "'Outfit',sans-serif", boxSizing: "border-box", outline: "none" }} />
))}
}
); } function ClinicalForm({ patient, onSave, onCancel, repo }) { const cl = patient.clinical || emptyClinical(); const [c, setC] = useState({ ...emptyClinical(), ...cl, name: cl.name || patient.name, age: cl.age || patient.age, sex: cl.sex || patient.sex, phone: cl.phone || patient.phone, preOp: { ...emptyPreOp(), ...(cl.preOp || {}), lesionType: cl.preOp?.lesionType || patient.type || "", malSite: cl.preOp?.malSite || patient.malignancySite || "", primaryDx: cl.preOp?.primaryDx || patient.diagnosis || "", procedure: cl.preOp?.procedure || patient.plannedProcedure || "", plan: cl.preOp?.plan || patient.malignancyPlan || "", benignCategory: cl.preOp?.benignCategory || patient.benignCategory || "" } }); const [sec, setSec] = useState({ s1: true, s2: false, s3: false, s4: false }); const p = c.preOp; const setP = (u) => setC({ ...c, preOp: { ...p, ...u } }); const bmi = c.height && c.weight ? (parseFloat(c.weight) / ((parseFloat(c.height) / 100) ** 2)).toFixed(1) : ""; const inp = { width: "100%", padding: "7px 10px", border: "1.5px solid #e2e8f0", borderRadius: 8, fontSize: "0.84rem", fontFamily: "'Outfit',sans-serif", boxSizing: "border-box" }; const lbl = { display: "block", fontSize: "0.68rem", fontWeight: 600, color: "#475569", marginBottom: 3, textTransform: "uppercase", letterSpacing: "0.04em" }; const g2 = { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))", gap: 10 }; const g3 = { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(150px, 1fr))", gap: 10 }; const chip = (sel, clr) => ({ padding: "4px 10px", borderRadius: 16, border: `1.5px solid ${sel ? clr : "#e2e8f0"}`, background: sel ? clr + "12" : "#fff", cursor: "pointer", fontSize: "0.72rem", fontFamily: "'Outfit',sans-serif", fontWeight: sel ? 600 : 400, color: sel ? clr : "#94a3b8" }); const [formWarnings, setFormWarnings] = useState(null); const doSave = () => { const emptySections = []; const missingFields = []; // Key fields — always warn individually if (!c.mrd) missingFields.push("MRD Number"); const primaryDx = p.lesionType === "malignancy" ? p.malSite : p.primaryDx; if (!primaryDx) missingFields.push("Primary Diagnosis"); if (!p.procedure) missingFields.push("Primary Procedure"); // Section 1: Particulars — check if ANY field filled const hasParticulars = c.mrd || c.bloodGroup || c.state || c.district || c.occupation || c.height || c.weight || (c.comorbidities || []).length > 0; if (!hasParticulars) emptySections.push("Particulars (MRD, Blood Group, Address, etc.)"); // Section 2: Clinical Details — check if ANY field filled const hasClinical = (c.chiefComplaints || []).filter(Boolean).length > 0 || c.pulse || c.bp || c.spo2 || c.abdominalFindings || c.dre || c.chest || c.cvs || (c.pastHistory || []).filter(Boolean).length > 0 || (c.prevSurgeries || []).filter(Boolean).length > 0; if (!hasClinical) emptySections.push("Clinical Details (Complaints, Vitals, Examination)"); // Section 3: Investigations — check if ANY investigation is done const invKeys = ["cbc","coagulation","peripheralSmear","reticulocyte","dimer","crossmatch","lft","kft","glucose","lipid","pancreatic","protein","thyroid","cortisol","parathyroid","insulin","tumorMarkers","iron","vitB12Folate","urineExam","serology","abg","stoolExam","ascitic","pleural","usg","ncct","cect","mri","cemri","mrcp","ctAngio","doppler","petScan","hidaScan","bariumStudy","defecography","fistuloGram","contrastStudy","ercp","ugiEndoscopy","colonoscopy","proctosigmoidoscopy","cystoscopy","eus","capsuleEndoscopy","anorectalManometry","fnac","hpe","trucut"]; const hasInvestigations = invKeys.some(k => c[k]?.done) || (c.additionalInvestigations || []).length > 0; if (!hasInvestigations) emptySections.push("Investigations (Lab work, Imaging, Endoscopy)"); // Section 4: Pre-Op Diagnosis const hasPreOp = p.lesionType || p.primaryDx || p.malSite || p.procedure; if (!hasPreOp) emptySections.push("Pre-Operative Diagnosis"); if (missingFields.length > 0 || emptySections.length > 0) { setFormWarnings({ missingFields, emptySections, onProceed: () => { setFormWarnings(null); doSaveConfirmed(); } }); return; } doSaveConfirmed(); }; const doSaveConfirmed = () => { onSave({ ...c, clinicalDone: true }, { name: c.name, age: c.age, sex: c.sex, phone: c.phone, diagnosis: p.lesionType === "malignancy" ? ((p.preOpHistology === "Others" ? p.histologyOther : p.preOpHistology) || "") + " " + (p.malSite || "") : p.primaryDx, plannedProcedure: p.procedure, malignancyPlan: p.plan, type: p.lesionType || patient.type, benignCategory: p.benignCategory || patient.benignCategory }); }; // Procedure options for current diagnosis const getProcedures = () => { let procs = []; if (p.lesionType === "benign" && p.primaryDx) { const found = repo.allBenignDx.find(d => d.dx === p.primaryDx); const cat = found?.category || p.benignCategory || ""; // Get ALL procedures from the entire category (not just this diagnosis) if (cat && repo.benignCats && repo.benignCats[cat]) { const allCatProcs = []; Object.values(repo.benignCats[cat].diagnoses || {}).forEach(dxProcs => { dxProcs.forEach(pr => { if (!allCatProcs.includes(pr)) allCatProcs.push(pr); }); }); procs = allCatProcs; } else if (found) { procs = [...found.procedures]; } // Also add standalone procedures mapped to same category if (cat && repo.customRepo) { const catProcs = (repo.customRepo.opProcs || []).filter(proc => (repo.customRepo.procCategories || {})[proc] === cat); procs = [...new Set([...procs, ...catProcs])]; } } if (p.lesionType === "malignancy" && p.malSite && repo.maligSites[p.malSite]) { procs = [...repo.maligSites[p.malSite].procedures]; } return procs; }; return (
{/* Section 1: Patient Particulars */} setSec({ ...sec, s1: !sec.s1 })} color="#2e7d32">
setC({ ...c, name: e.target.value })} />
setC({ ...c, age: e.target.value })} />
setC({ ...c, phone: e.target.value })} />
setC({ ...c, mrd: e.target.value })} />
{c.occupation === "Other" && setC({ ...c, occupationOther: e.target.value })} placeholder="Specify occupation..." />}
setC({ ...c, height: e.target.value })} />
setC({ ...c, weight: e.target.value })} />
= 30 ? "#c62828" : "#2e7d32") : "#94a3b8", fontWeight: 600 }}>{bmi || "—"}
{COMORBIDITIES.map(cm => )}
setC({ ...c, comorbidOther: e.target.value })} />
setC({ ...c, pacClearedDate: e.target.value })} />
{/* Section 2: Clinical Details */} setSec({ ...sec, s2: !sec.s2 })} color="#c62828"> setC({ ...c, chiefComplaints: v })} /> setC({ ...c, pastHistory: v })} /> setC({ ...c, prevSurgeries: v })} /> setC({ ...c, otherDetails: v })} />
Examination
setC({ ...c, pulse: e.target.value })} placeholder="/min" />
setC({ ...c, bp: e.target.value })} placeholder="mmHg" />
setC({ ...c, spo2: e.target.value })} placeholder="%" />
setC({ ...c, chest: e.target.value })} />
setC({ ...c, cvs: e.target.value })} />