How to establish a organ donation facility at hospital. Give me every detail from NOTP operational guidelines .I have to present in presentation

Asking for Preferences
Searching the Web

NOTP NOTTO India operational guidelines hospital organ donation facility establishment

Searching the Web

NOTTO India hospital transplant coordination guidelines THOA brain death declaration

Reading Web Page

https://notto.mohfw.gov.in/WriteReadData/Portal/News/848_1_N…

Reading File
Reading File
Running Command

mkdir -p /home/daytona/workspace/organ-donation-ppt && ls /home/daytona/workspace/organ-donation-ppt/

Writing File

~/organ-donation-ppt/build.js

const pptxgen = require("pptxgenjs");

let pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
pres.title = 'Establishing an Organ Donation Facility at Hospital - NOTP Operational Guidelines';
pres.author = 'NOTP/NOTTO Guidelines';

// ─── COLOR PALETTE ───────────────────────────────────────────────────────────
const C = {
  navy:    "0D2B55",   // dominant dark navy
  teal:    "0B7A75",   // supporting teal
  orange:  "E8601C",   // sharp accent
  white:   "FFFFFF",
  offwhite:"F4F6F9",
  ltgray:  "DDE3EC",
  text:    "1A1A2E",
  subtext: "4A5568",
  gold:    "F0A500",
  green:   "1A7A4A",
};

// ─── HELPERS ─────────────────────────────────────────────────────────────────
function darkSlide(slide) {
  slide.background = { color: C.navy };
}
function lightSlide(slide) {
  slide.background = { color: C.offwhite };
}
function accentBar(slide, color) {
  slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.12, h: 5.625, fill: { color: color || C.teal } });
}
function sectionHeader(slide, title, subtitle) {
  darkSlide(slide);
  slide.addShape(pres.ShapeType.rect, { x: 0, y: 1.8, w: 10, h: 1.5, fill: { color: C.teal }, line: { color: C.teal } });
  slide.addText(title, { x: 0.5, y: 1.9, w: 9, h: 0.7, fontSize: 32, bold: true, color: C.white, align: "center", fontFace: "Calibri" });
  if (subtitle) slide.addText(subtitle, { x: 0.5, y: 2.65, w: 9, h: 0.5, fontSize: 16, color: C.ltgray, align: "center", fontFace: "Calibri", italic: true });
  slide.addShape(pres.ShapeType.rect, { x: 3.5, y: 4.9, w: 3, h: 0.06, fill: { color: C.orange }, line: { color: C.orange } });
}
function slideTitle(slide, title) {
  slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.9, fill: { color: C.navy }, line: { color: C.navy } });
  slide.addShape(pres.ShapeType.rect, { x: 0, y: 0.9, w: 10, h: 0.06, fill: { color: C.teal }, line: { color: C.teal } });
  slide.addText(title, { x: 0.3, y: 0.05, w: 9.4, h: 0.8, fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle" });
}
function bullets(slide, items, opts) {
  const o = Object.assign({ x: 0.4, y: 1.1, w: 9.2, h: 4.1, fontSize: 14, color: C.text, fontFace: "Calibri" }, opts);
  const arr = items.map((item, i) => ({
    text: item,
    options: { bullet: { type: "bullet", indent: 15 }, breakLine: i < items.length - 1, color: o.color, fontSize: o.fontSize }
  }));
  slide.addText(arr, { x: o.x, y: o.y, w: o.w, h: o.h, fontFace: o.fontFace, valign: "top" });
}
function twoCol(slide, leftItems, rightItems, opts) {
  const o = Object.assign({ y: 1.1, h: 4.1, fontSize: 13 }, opts);
  const mkArr = (items) => items.map((it, i) => ({
    text: it, options: { bullet: { type: "bullet", indent: 12 }, breakLine: i < items.length - 1, color: C.text, fontSize: o.fontSize }
  }));
  slide.addText(mkArr(leftItems),  { x: 0.25, y: o.y, w: 4.7, h: o.h, fontFace: "Calibri", valign: "top" });
  slide.addShape(pres.ShapeType.line, { x: 5.1, y: o.y, w: 0, h: o.h - 0.2, line: { color: C.ltgray, width: 1.5 } });
  slide.addText(mkArr(rightItems), { x: 5.2, y: o.y, w: 4.6, h: o.h, fontFace: "Calibri", valign: "top" });
}
function numberedSteps(slide, steps, opts) {
  const o = Object.assign({ x: 0.4, y: 1.1, w: 9.2, h: 4.1, fontSize: 13 }, opts);
  const arr = steps.map((s, i) => ({
    text: `${i+1}.  ${s}`,
    options: { breakLine: i < steps.length - 1, color: C.text, fontSize: o.fontSize, bold: false }
  }));
  slide.addText(arr, { x: o.x, y: o.y, w: o.w, h: o.h, fontFace: "Calibri", valign: "top" });
}
function infoBox(slide, label, value, x, y, w, h, bg) {
  slide.addShape(pres.ShapeType.rect, { x, y, w, h, fill: { color: bg || C.teal }, line: { color: bg || C.teal }, rectRadius: 0.08 });
  slide.addText(label, { x, y: y+0.08, w, h: 0.35, fontSize: 10, color: "CCEFEB", bold: false, align: "center", fontFace: "Calibri" });
  slide.addText(value, { x, y: y+0.38, w, h: h-0.4, fontSize: 13, color: C.white, bold: true, align: "center", fontFace: "Calibri", valign: "middle" });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE SLIDE
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  darkSlide(s);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 2.2, fill: { color: C.teal }, line: { color: C.teal } });
  s.addText("ESTABLISHING AN ORGAN DONATION FACILITY", {
    x: 0.4, y: 0.25, w: 9.2, h: 0.8, fontSize: 26, bold: true, color: C.white,
    align: "center", fontFace: "Calibri", charSpacing: 1
  });
  s.addText("AT YOUR HOSPITAL", {
    x: 0.4, y: 1.0, w: 9.2, h: 0.6, fontSize: 22, bold: false, color: C.gold,
    align: "center", fontFace: "Calibri"
  });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 2.2, w: 10, h: 0.06, fill: { color: C.orange }, line: { color: C.orange } });
  s.addText("Based on NOTP Operational Guidelines | NOTTO Transplant Manual", {
    x: 0.4, y: 2.5, w: 9.2, h: 0.5, fontSize: 15, color: C.ltgray,
    align: "center", fontFace: "Calibri", italic: true
  });
  s.addText("Transplantation of Human Organs & Tissues Act (THOA) 1994, Amended 2011", {
    x: 0.4, y: 3.1, w: 9.2, h: 0.4, fontSize: 12, color: C.ltgray,
    align: "center", fontFace: "Calibri"
  });
  s.addText("Ministry of Health & Family Welfare | Government of India", {
    x: 0.4, y: 3.55, w: 9.2, h: 0.35, fontSize: 11, color: "AAC4E0",
    align: "center", fontFace: "Calibri"
  });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 5.1, w: 10, h: 0.525, fill: { color: "0A2040" }, line: { color: "0A2040" } });
  s.addText("NOTTO  |  ROTTO  |  SOTTO  |  Hospital Level Organ Donation Program", {
    x: 0.4, y: 5.13, w: 9.2, h: 0.45, fontSize: 11, color: "7EB8D4",
    align: "center", fontFace: "Calibri"
  });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — AGENDA
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  slideTitle(s, "Presentation Agenda");
  const agenda = [
    "1.  Overview — NOTTO / NOTP Framework",
    "2.  Legal Basis — THOA 1994 & Amendment 2011",
    "3.  Types of Hospital Registration (Transplant Centre / NTORC / Tissue Bank)",
    "4.  Step-by-Step Registration Process",
    "5.  Infrastructure & Manpower Requirements",
    "6.  Brain Death Committee (BDC) — Setup & Certification Protocol",
    "7.  Transplant Coordinator — Role, Qualifications & Duties",
    "8.  Donor Identification, Maintenance & Consent Process",
    "9.  Organ Retrieval, Preservation & Transportation",
    "10. Networking — SOTTO / ROTTO / NOTTO Chain",
    "11. Data Reporting & National Registry",
    "12. Key Forms & Documentation",
  ];
  slide.addText;
  s.addText(agenda.map((a, i) => ({ text: a, options: { breakLine: i < agenda.length - 1, fontSize: 13.5, color: C.text } })),
    { x: 0.35, y: 1.05, w: 9.3, h: 4.35, fontFace: "Calibri", valign: "top" });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — SECTION: FRAMEWORK OVERVIEW
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  sectionHeader(s, "SECTION 1", "National Organ Transplant Programme (NOTP) — Framework & Structure");
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — NOTTO / NOTP OVERVIEW
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s);
  slideTitle(s, "What is NOTP / NOTTO?");
  twoCol(s, [
    "National Organ Transplant Programme (NOTP) is the flagship scheme of MoHFW, Govt of India",
    "NOTTO = National Organ & Tissue Transplant Organisation — apex body",
    "Established under Directorate General of Health Services (DGHS), Safdarjung Hospital, New Delhi",
    "Hierarchical structure: NOTTO → ROTTO (Regional) → SOTTO (State) → Hospital",
    "Functions as national networking, registry & biomaterial centre",
    "Provides cadaver organ/tissue retrieval operation theatre at national level",
  ], [
    "ROTTO: Regional networking for 4 geographic zones of India",
    "SOTTO: State-level transplant coordination in each state/UT",
    "Hospital-level: Transplant Centre OR Non-Transplant Organ Retrieval Centre (NTORC)",
    "Scheme period: 2021-22 to 2025-26 (current phase)",
    "Goal: Bridge demand-supply gap in organ transplantation across India",
    "Mandate: Promote deceased donation, strengthen networks, run national registry",
  ]);
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — LEGAL BASIS
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.orange);
  slideTitle(s, "Legal Basis — THOA 1994 & Amendment 2011");
  bullets(s, [
    "Transplantation of Human Organs Act (THOA) 1994: First legislation legalizing brain stem death (BSD) in India",
    "THOA Amendment 2011 (effective as THOTA): Significantly expanded the organ donation framework",
    "Key changes introduced by the 2011 amendment:",
    "    - Brain death declaration now permitted by Intensivist/Anaesthetist (if neurologist unavailable)",
    "    - Provision for Non-Transplant Organ Retrieval Centers (NTORC) — retrieval in any ICU-equipped hospital",
    "    - Transplant Coordinators made MANDATORY in all transplant/retrieval hospitals (qualifications specified)",
    "    - Mandatory request for organ donation from potential donors admitted to ICU",
    "    - Simplified medico-legal donation procedures",
    "    - Donor maintenance & organ retrieval costs to be borne by recipient/institution/government, NOT donor family",
    "    - Central Government mandated to establish national networking (NOTTO) & national registry",
    "THO Rules 1995 (amended 2014): Prescribe Form 10 (Brain Stem Death Certificate), registration forms, procedures",
  ], { fontSize: 12.5 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — SECTION: REGISTRATION
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  sectionHeader(s, "SECTION 2", "Types of Registration & Step-by-Step Registration Process");
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — TYPES OF REGISTRATION
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  slideTitle(s, "Types of Hospital Registration under THOA");
  // Three boxes
  const boxes = [
    { label: "TYPE 1", title: "Transplant Centre", desc: "Hospitals that perform organ transplantation surgery. Must have full surgical, ICU & lab infrastructure. Apply in Form 11/12 to state AA.", bg: C.navy },
    { label: "TYPE 2", title: "NTORC / NTROC", desc: "Non-Transplant Organ Retrieval Centre. Any hospital with ICU can register. Retrieves organs for transplant at other centres. Cannot perform transplant surgery.", bg: C.teal },
    { label: "TYPE 3", title: "Tissue Bank", desc: "Centres functioning as skin bank, bone bank, etc. Apply using Form 14. Cornea retrieval permitted from trained technicians.", bg: C.orange },
  ];
  boxes.forEach((b, i) => {
    const x = 0.25 + i * 3.25;
    s.addShape(pres.ShapeType.rect, { x, y: 1.1, w: 3.1, h: 3.8, fill: { color: b.bg }, line: { color: b.bg }, rectRadius: 0.1 });
    s.addText(b.label, { x, y: 1.2, w: 3.1, h: 0.4, fontSize: 11, color: "AACCE0", align: "center", bold: false, fontFace: "Calibri" });
    s.addText(b.title, { x, y: 1.55, w: 3.1, h: 0.6, fontSize: 16, color: C.white, align: "center", bold: true, fontFace: "Calibri" });
    s.addShape(pres.ShapeType.line, { x: x+0.4, y: 2.2, w: 2.3, h: 0, line: { color: C.gold, width: 1.5 } });
    s.addText(b.desc, { x: x+0.1, y: 2.35, w: 2.9, h: 2.4, fontSize: 11.5, color: C.white, fontFace: "Calibri", valign: "top", wrap: true });
  });
  s.addText("All registrations require approval from the Appropriate Authority (AA) = DHS of the state/UT", {
    x: 0.3, y: 5.0, w: 9.4, h: 0.45, fontSize: 12, color: C.subtext, align: "center", fontFace: "Calibri", italic: true
  });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — REGISTRATION PROCESS STEP BY STEP
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s);
  slideTitle(s, "Step-by-Step: Registering as NTORC (Retrieval Centre)");
  const steps = [
    "STEP 1 — Ensure ICU facility exists with adequate manpower, equipment & infrastructure for BSD diagnosis & donor maintenance",
    "STEP 2 — Ensure availability of Operation Theatre for organ retrieval and temporary storage facility",
    "STEP 3 — Tie up with nearby government hospital for post-mortem in medico-legal death cases",
    "STEP 4 — Appoint a dedicated Transplant Coordinator (TC) trained/approved by NOTTO",
    "STEP 5 — Fill Form 14 (for tissue bank) or relevant form for NTORC — submit to appropriate DHS (Director of Health Services)",
    "STEP 6 — Inspection team visits & assesses preparedness (use hospital readiness score checklist)",
    "STEP 7 — Certificate of Registration (Form 16) is granted — valid for 5 years",
    "STEP 8 — Apply to state Appropriate Authority (AA) for approval of Brain Death Committee (BDC)",
    "STEP 9 — Once BDC approved, hospital is authorized to declare brain stem death and undertake organ retrieval",
    "STEP 10 — Register with NOTTO online portal; enter all donation/retrieval data into National Registry",
  ];
  numberedSteps(s, steps, { fontSize: 12, y: 1.05, h: 4.35 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — SECTION: INFRASTRUCTURE
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  sectionHeader(s, "SECTION 3", "Infrastructure, Manpower & Equipment Requirements");
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 10 — INFRASTRUCTURE REQUIREMENTS
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.teal);
  slideTitle(s, "Minimum Infrastructure Requirements");
  twoCol(s, [
    "INTENSIVE CARE UNIT (ICU)",
    "  - Adequate beds with multi-parameter monitoring",
    "  - Ventilators for apnea testing",
    "  - Hemodynamic monitoring equipment",
    "  - Ability to maintain brain-dead donor",
    "",
    "OPERATION THEATRE (OT)",
    "  - Sterile OT for organ retrieval",
    "  - Anaesthesia support",
    "  - Cold ischaemia preservation solutions",
    "  - Temporary organ storage facility",
  ], [
    "LABORATORY SERVICES",
    "  - Blood grouping & cross-matching",
    "  - HLA tissue typing (or tie-up)",
    "  - Serological screening (HIV, HBsAg, HCV, CMV)",
    "  - Biochemistry, coagulation, culture",
    "",
    "IMAGING & DIAGNOSTICS",
    "  - CT scan / MRI (for BSD workup)",
    "  - EEG facility (or tie-up)",
    "  - Radiology support 24x7",
    "  - Medico-legal tie-up for post-mortem",
  ], { fontSize: 12 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 11 — MANPOWER REQUIREMENTS
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.navy);
  slideTitle(s, "Manpower Requirements");
  // Role cards
  const roles = [
    { title: "Medical Administrator\n(Nodal Officer)", desc: "In-charge of hospital. Member of Brain Death Committee. Signs Form 10." },
    { title: "Intensivist /\nAnaesthetist", desc: "Member of BDC. Performs apnea test. Manages donor haemodynamics. Can declare BSD if neurologist unavailable." },
    { title: "Neurologist /\nNeurosurgeon", desc: "Preferred member of BDC. Confirms absence of all brainstem reflexes. Part of BSD panel." },
    { title: "Treating Physician /\nSurgeon", desc: "Member of BDC. Certifies irreversibility of brain injury. Cannot be part of transplant team." },
    { title: "Transplant\nCoordinator (TC)", desc: "MANDATORY. NOTTO trained. Counsels family, obtains consent, coordinates retrieval logistics & data entry." },
    { title: "Retrieval Surgeon /\nTeam", desc: "Performs multi-organ retrieval in OT. Must be skilled in retrieval & preservation of specific organs." },
  ];
  roles.forEach((r, i) => {
    const col = i % 3;
    const row = Math.floor(i / 3);
    const x = 0.2 + col * 3.2;
    const y = 1.1 + row * 2.1;
    const bg = [C.navy, C.teal, C.orange, C.teal, C.navy, C.orange][i];
    s.addShape(pres.ShapeType.rect, { x, y, w: 3.1, h: 1.85, fill: { color: bg }, line: { color: bg }, rectRadius: 0.08 });
    s.addText(r.title, { x, y: y+0.08, w: 3.1, h: 0.55, fontSize: 12, color: C.white, bold: true, align: "center", fontFace: "Calibri" });
    s.addText(r.desc, { x: x+0.1, y: y+0.62, w: 2.9, h: 1.1, fontSize: 10, color: C.white, fontFace: "Calibri", valign: "top", wrap: true });
  });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 12 — SECTION: BRAIN DEATH COMMITTEE
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  sectionHeader(s, "SECTION 4", "Brain Death Committee (BDC) — Setup & Certification Protocol");
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 13 — BDC COMPOSITION & SETUP
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.orange);
  slideTitle(s, "Brain Death Committee (BDC) — Composition & Registration");
  twoCol(s, [
    "COMPOSITION (as per THOA 1994 + 2011 Amendment)",
    "1. Medical Administrator in charge of the hospital",
    "2. Intensivist / Anaesthesiologist",
    "3. Neurologist / Neurosurgeon (or Physician/Surgeon if unavailable)",
    "4. Medical Officer treating the patient",
    "",
    "KEY RULES",
    "• Doctors on transplant team CANNOT be on BDC",
    "• Doctor managing patient CANNOT be in transplant team",
    "• All 4 members must sign Form 10 (BSD Certificate)",
    "• Transplant Coordinator must be present during BSD declaration",
  ], [
    "HOW TO GET BDC APPROVED",
    "• Hospital must apply to DHS (Director of Health Services) or State Appropriate Authority",
    "• All specialists in hospital (other than transplant team) can form BDC",
    "• Once registered with NOTTO, team approved for BSD testing",
    "",
    "REGULAR TRAINING REQUIREMENTS",
    "• Workshops for critical care team on early identification & declaration of BSD",
    "• Donor optimization protocol training",
    "• Regular refresher courses",
    "• Brain death is suspected in all GCS-3 patients with non-reactive pupils & absent brainstem reflexes",
  ], { fontSize: 12 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 14 — BSD CERTIFICATION PROTOCOL
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.teal);
  slideTitle(s, "Brain Stem Death (BSD) Certification Protocol — Step by Step");
  const steps = [
    "Identify Potential Donor: GCS = 3/15, non-reactive pupils, absent brainstem reflexes — suspect BSD in ICU",
    "Preconditions Check: Rule out reversible causes — hypothermia (<35°C), drug intoxication, metabolic disorders, shock",
    "Observation Period: Appropriate observation period to confirm irreversibility of the pathological process",
    "TEST 1 — Clinical BSD Assessment by 4-member BDC panel:",
    "    a. Absence of all brainstem reflexes (pupillary, corneal, oculocephalic, vestibulo-ocular, gag, cough)",
    "    b. Apnea Test: PaCO2 rises >20 mmHg above baseline with no spontaneous breaths",
    "    c. All 4 BDC members must be present and sign",
    "TEST 2 — Repeat BSD Assessment: Minimum 6 hours after Test 1 (ensures no observer error, confirms persistence)",
    "Form 10 (BSD Certificate): Completed and signed by all 4 BDC members after both tests",
    "Declare Brain Stem Death: Patient is legally dead as per THOA — donor family counseling begins immediately",
  ];
  numberedSteps(s, steps, { fontSize: 12.5, y: 1.05, h: 4.35 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 15 — SECTION: TRANSPLANT COORDINATOR
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  sectionHeader(s, "SECTION 5", "Transplant Coordinator — Role, Qualifications & Duties");
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 16 — TRANSPLANT COORDINATOR
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.green);
  slideTitle(s, "Transplant Coordinator (TC) — The Linchpin of Organ Donation");
  twoCol(s, [
    "LEGAL STATUS",
    "• Mandatory in ALL transplant & retrieval hospitals (THOTA 2011)",
    "• At least 2 TCs must be trained & approved by NOTTO",
    "• Qualifications specified under THOTA Rules",
    "",
    "KEY DUTIES",
    "• Present during BSD declaration — mandatory per THOA 2014(2)",
    "• Counsel Next of Kin (NOK) for organ donation",
    "• Obtain written consent — closest living relative qualifies",
    "• Must NOT be part of the managing medical team",
    "• Coordinate logistics of retrieval & recipient notification",
    "• Ensure all forms and documentation are completed",
    "• Enter data into NOTTO / National Registry online",
  ], [
    "COUNSELING PRINCIPLES",
    "• Required request — every ICU patient's family must be approached",
    "• TC and NOK counseling team must be separate from managing team & transplant team",
    "• Approach must be sensitive, timely and non-coercive",
    "• Explain concept of brain death clearly to family",
    "• Respect cultural and religious beliefs",
    "",
    "TRAINING",
    "• Initial induction training by NOTTO",
    "• Regular retraining at periodic intervals",
    "• Soft skills, communication, documentation workshops",
    "• Skills centre training at NOTTO/ROTTO/SOTTO level",
  ], { fontSize: 12 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 17 — SECTION: DONOR IDENTIFICATION & CONSENT
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  sectionHeader(s, "SECTION 6", "Donor Identification, Maintenance & Consent Process");
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 18 — DONOR IDENTIFICATION & CONSENT
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.teal);
  slideTitle(s, "Donor Identification, Consent & Authorization");
  twoCol(s, [
    "DONOR IDENTIFICATION",
    "• Screen all ICU admissions with GCS 3, non-reactive pupils, absent brainstem reflexes",
    "• Notify Intensivist (Nodal Officer) immediately",
    "• Inform Transplant Coordinator",
    "• Rule out exclusion criteria (active malignancy, uncontrolled sepsis, prion disease, HIV disease)",
    "• Initiate BSD protocol",
    "",
    "DONOR AUTHORIZATION",
    "• May be given BEFORE DEATH by the donor himself/herself (pledge card / written)",
    "• After death: by person in legal possession of body",
    "• Doctor MUST ASK every ICU patient/relative whether prior authorization exists",
    "• If not, patient/relative must be made aware of the option to donate",
  ], [
    "CONSENT PROCESS",
    "• TC counsels Next of Kin (NOK)",
    "• Closest relative qualifies to give consent",
    "• Written informed consent documented",
    "• Team managing patient and transplant team CANNOT counsel family",
    "",
    "MEDICO-LEGAL CASES",
    "• Simplified under THOTA 2011",
    "• Procedure defined to avoid jeopardizing cause-of-death determination",
    "• Avoid delay in organ retrieval in ML cases",
    "• Police / Magistrate clearance coordinated by TC",
    "",
    "COSTS",
    "• Donor management, retrieval, transport & preservation costs borne by recipient / institution / government / NGO",
    "• NOT to be charged to the donor family",
  ], { fontSize: 11.5 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 19 — SECTION: ORGAN RETRIEVAL & TRANSPORT
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  sectionHeader(s, "SECTION 7", "Organ Retrieval, Preservation & Transportation");
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 20 — ORGAN RETRIEVAL PROCESS
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.orange);
  slideTitle(s, "Organ Retrieval, Preservation & Cold Chain");
  twoCol(s, [
    "ORGAN RETRIEVAL PROCEDURE",
    "• Performed in sterile OT by trained retrieval surgeons",
    "• Multi-organ retrieval: Heart, Lungs, Liver, Kidneys, Pancreas, Intestine",
    "• Tissue retrieval: Cornea, Skin, Bone, Heart valves",
    "• Anaesthetist manages hemodynamics during retrieval",
    "• Vascular flush with cold preservation solution (HTK/UW/Celsior)",
    "",
    "COLD ISCHAEMIA TIMES (guideline limits)",
    "• Heart: 4-6 hours",
    "• Lungs: 6-8 hours",
    "• Liver: 12-24 hours",
    "• Pancreas: 12-24 hours",
    "• Kidney: 24-36 hours",
  ], [
    "PRESERVATION & PACKAGING",
    "• Organs placed in sterile preservation solution + ice",
    "• Triple-bag method with outer container",
    "• Temperature maintained 0-4°C throughout transport",
    "• Labelled with organ type, blood group, time of cross-clamp, retrieval centre",
    "",
    "TRANSPORTATION",
    "• Coordinated by SOTTO / ROTTO networking",
    "• Green corridor activation (police escort, traffic clearance) for urgent cases",
    "• Air transport (DGCA facilitation) for inter-state transfers",
    "• Chain of custody documentation at each handover",
    "• TC coordinates with receiving transplant centre throughout",
  ], { fontSize: 12 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 21 — SECTION: NETWORKING
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  sectionHeader(s, "SECTION 8", "Networking — NOTTO / ROTTO / SOTTO / Hospital Chain");
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 22 — NETWORKING HIERARCHY
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  slideTitle(s, "Organ Allocation & Networking Hierarchy");
  // Pyramid/hierarchy boxes
  const levels = [
    { label: "NOTTO", sub: "National Organ & Tissue Transplant Organisation\nSafdarjung Hospital, New Delhi\nApex body — national allocation & registry", bg: C.navy, x: 3.5, y: 1.05, w: 3.0, h: 1.1 },
    { label: "ROTTO", sub: "Regional Organ & Tissue Transplant Organisation\n4 Zones (North/South/East/West)\nRegional networking & allocation", bg: C.teal, x: 2.5, y: 2.35, w: 5.0, h: 1.1 },
    { label: "SOTTO", sub: "State Organ & Tissue Transplant Organisation\nOne per State/UT\nState-level coordination, waiting lists, allocation", bg: C.orange, x: 1.2, y: 3.65, w: 7.6, h: 1.1 },
    { label: "HOSPITAL", sub: "Transplant Centre / NTORC\nDonation + Retrieval + Transplantation\nData entry into national registry", bg: "2D6A4F", x: 0.2, y: 4.95, w: 9.6, h: 0.55 },
  ];
  levels.forEach(l => {
    s.addShape(pres.ShapeType.rect, { x: l.x, y: l.y, w: l.w, h: l.h, fill: { color: l.bg }, line: { color: l.bg }, rectRadius: 0.07 });
    s.addText(l.label, { x: l.x, y: l.y+0.04, w: l.w, h: 0.35, fontSize: 13, bold: true, color: C.white, align: "center", fontFace: "Calibri" });
    if (l.sub) s.addText(l.sub, { x: l.x+0.1, y: l.y+0.38, w: l.w-0.2, h: 0.65, fontSize: 9.5, color: C.white, align: "center", fontFace: "Calibri" });
  });
  // Arrow connectors
  [1.05+1.1, 2.35+1.1, 3.65+1.1].forEach(y => {
    s.addShape(pres.ShapeType.line, { x: 4.9, y, w: 0, h: 0.2, line: { color: C.gold, width: 2 } });
  });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 23 — ORGAN ALLOCATION PROTOCOL
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.teal);
  slideTitle(s, "Organ Allocation Protocol — SOTTO / ROTTO / NOTTO");
  bullets(s, [
    "Step 1 — Donor identified at hospital → TC notifies SOTTO (state organization)",
    "Step 2 — SOTTO checks state waiting list for compatible recipients (blood group, weight, urgency)",
    "Step 3 — If no suitable recipient in state → escalates to ROTTO (regional level)",
    "Step 4 — If no match at regional level → escalates to NOTTO (national level)",
    "Step 5 — NOTTO identifies recipient nationally and coordinates inter-state transport",
    "Allocation criteria: ABO compatibility, HLA match, recipient urgency (super-urgent vs elective)",
    "Heart & Liver: Local allocation first (cold ischaemia time critical), then state → national",
    "Kidneys: Wider radius allowed — more time for matching",
    "All allocation decisions must be documented and entered into the national registry in real time",
    "Hospital MUST NOT independently allocate organs — must route through SOTTO/ROTTO/NOTTO",
    "Non-compliance: Punitive action under law/regulations for failure to report to national registry",
  ], { fontSize: 13 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 24 — SECTION: DATA REPORTING
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  sectionHeader(s, "SECTION 9", "Data Reporting, National Registry & Hospital Preparedness");
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 25 — DATA REPORTING & REGISTRY
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.navy);
  slideTitle(s, "Data Reporting & National Organ Donation Registry");
  twoCol(s, [
    "MANDATORY REPORTING",
    "• All retrieval and transplant hospitals MUST enter data in the NOTTO online software",
    "• Real-time reporting — waiting list, donors, organs retrieved, transplanted",
    "• State/UT Governments responsible for ensuring compliance by hospitals",
    "• Punitive action under law if required data not provided for national networking/registry",
    "",
    "WHAT TO REPORT",
    "• Every BSD declared in ICU",
    "• Every consent obtained / refused",
    "• Every organ retrieved — organ type, preservation time, destination",
    "• Every transplant performed — recipient details, outcomes",
    "• All near-miss and adverse events",
  ], [
    "HOSPITAL PREPAREDNESS SCORE",
    "• A formal checklist/score assesses hospital readiness for deceased donation",
    "• Components: Infrastructure, trained staff, active BDC, TC in place, data reporting",
    "• Used by inspection team during registration visit",
    "",
    "AWARENESS & IEC ACTIVITIES",
    "• Hospital must participate in IEC (Information, Education, Communication) activities",
    "• Regular sensitization of administration, doctors, nurses",
    "• Community awareness campaigns coordinated with SOTTO/ROTTO",
    "• Organ Donation Day events (August 13)",
    "• Pledge registration drives",
  ], { fontSize: 12 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 26 — KEY FORMS & DOCUMENTATION
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.orange);
  slideTitle(s, "Key Forms & Documentation (THOA/NOTTO)");
  const forms = [
    { form: "Form 10", desc: "Brain Stem Death Certificate — signed by all 4 BDC members after both tests" },
    { form: "Form 11", desc: "Application for registration as Transplant Centre (to state AA/DHS)" },
    { form: "Form 12", desc: "Certificate of Registration as Transplant Centre" },
    { form: "Form 14", desc: "Application for registration as Tissue Bank / NTORC" },
    { form: "Form 16", desc: "Certificate of Registration for NTORC — valid 5 years" },
    { form: "Consent Form", desc: "Written organ donation consent from next of kin / legal representative" },
    { form: "TC Register", desc: "Transplant Coordinator's case log — all donor cases, consent outcomes, retrieval details" },
    { form: "Donor Pledge Card", desc: "Individual pledge for deceased organ donation (voluntary, can be registered on NOTTO portal)" },
    { form: "Donor Maintenance Protocol", desc: "Standardized ICU protocol for haemodynamic management of brain-dead donor" },
    { form: "National Registry Entry", desc: "Online real-time data entry on NOTTO portal for each donor/retrieval/transplant" },
  ];
  const arr = forms.map((f, i) => ({
    text: `${f.form}:  ${f.desc}`,
    options: { breakLine: i < forms.length - 1, fontSize: 12.5, color: C.text }
  }));
  s.addText(arr, { x: 0.35, y: 1.05, w: 9.3, h: 4.35, fontFace: "Calibri", valign: "top" });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 27 — HOSPITAL READINESS CHECKLIST
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  slideTitle(s, "Hospital Readiness Checklist — Before You Apply");
  twoCol(s, [
    "INFRASTRUCTURE",
    "[ ] ICU with ventilators and monitoring",
    "[ ] Sterile OT available for retrieval",
    "[ ] Cold preservation solutions & storage",
    "[ ] Laboratory (blood group, serology, crossmatch)",
    "[ ] Imaging (CT/MRI) — in-house or tie-up",
    "[ ] Mortuary and post-mortem facility (tie-up)",
    "",
    "LEGAL & ADMINISTRATIVE",
    "[ ] Hospital registered with state DHS",
    "[ ] BDC application submitted to state AA",
    "[ ] MoU with SOTTO/ROTTO established",
    "[ ] NOTTO online portal registration done",
    "[ ] Forms 10, 11/14, 16 obtained and ready",
  ], [
    "HUMAN RESOURCES",
    "[ ] Medical Administrator designated as nodal officer",
    "[ ] At least 1 Intensivist/Anaesthetist on BDC",
    "[ ] Neurologist/Neurosurgeon on panel (or alternate designated)",
    "[ ] Minimum 2 trained Transplant Coordinators (NOTTO-approved)",
    "[ ] Retrieval surgeon identified/trained",
    "",
    "PROTOCOLS & AWARENESS",
    "[ ] BSD identification & donor maintenance protocol in place",
    "[ ] Staff sensitization workshops completed",
    "[ ] Mandatory request policy in ICU implemented",
    "[ ] Data reporting workflow to NOTTO established",
    "[ ] IEC materials displayed in hospital",
  ], { fontSize: 12 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 28 — CHALLENGES & SOLUTIONS
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  accentBar(s, C.teal);
  slideTitle(s, "Common Challenges & NOTTO Solutions");
  twoCol(s, [
    "CHALLENGES (as identified by NOTTO)",
    "Lack of awareness of Brain Stem Death concept",
    "Low BSD certification rates in hospitals",
    "Inadequate infrastructure in government hospitals",
    "Low public awareness and negative attitudes",
    "Risk of organ trading",
    "Inter-state organ transport difficulties",
    "Gaps in real-time data reporting",
    "Lack of networking between NOTTO/ROTTO/SOTTO",
    "High cost of transplantation for poor patients",
  ], [
    "NOTTO SOLUTIONS",
    "Mandatory BSD declaration policy; intensivist as nodal officer",
    "Workshops for critical care teams on BSD identification",
    "Priority development of high-caseload hospitals as retrieval centres",
    "IEC campaigns, pledge drives, Organ Donation Day (Aug 13)",
    "Strict THOA enforcement; penalties for illegal trading",
    "Green corridor policy; DGCA facilitation for air transport",
    "Online real-time NOTTO registry; punitive action for non-compliance",
    "Spain-India MoU for best practices; structured ROTTO/SOTTO network",
    "Insurance schemes, government funding for needy recipients",
  ], { fontSize: 12 });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 29 — SUMMARY FLOWCHART
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  lightSlide(s);
  slideTitle(s, "Complete Workflow — From ICU to Organ Transplantation");
  const flow = [
    { label: "1. ICU Admission\n(GCS=3, Absent brainstem reflexes)", x: 0.2, y: 1.1, bg: C.navy },
    { label: "2. BSD Identification\n& Protocol Initiated", x: 2.4, y: 1.1, bg: C.teal },
    { label: "3. BDC Convened\nTest 1 (6 hrs) → Test 2", x: 4.6, y: 1.1, bg: C.orange },
    { label: "4. Form 10 Signed\nBSD Declared (Legally Dead)", x: 6.8, y: 1.1, bg: C.navy },
    { label: "5. TC Counsels Family\nConsent Obtained", x: 0.2, y: 2.7, bg: C.teal },
    { label: "6. SOTTO Notified\nWaiting List Matched", x: 2.4, y: 2.7, bg: C.orange },
    { label: "7. Donor Maintained\nOT Prepared for Retrieval", x: 4.6, y: 2.7, bg: "2D6A4F" },
    { label: "8. Multi-Organ Retrieval\nin OT", x: 6.8, y: 2.7, bg: C.navy },
    { label: "9. Organs Preserved\n& Packed (Cold Chain)", x: 0.2, y: 4.3, bg: C.teal },
    { label: "10. Transport Coordinated\n(Green Corridor / Air)", x: 2.4, y: 4.3, bg: C.orange },
    { label: "11. Organ Transplanted\nat Recipient Centre", x: 4.6, y: 4.3, bg: "2D6A4F" },
    { label: "12. Data Entry\nNOTTO Registry", x: 6.8, y: 4.3, bg: C.navy },
  ];
  flow.forEach(f => {
    s.addShape(pres.ShapeType.rect, { x: f.x, y: f.y, w: 2.1, h: 1.25, fill: { color: f.bg }, line: { color: f.bg }, rectRadius: 0.07 });
    s.addText(f.label, { x: f.x+0.05, y: f.y+0.1, w: 2.0, h: 1.0, fontSize: 10, color: C.white, align: "center", fontFace: "Calibri", valign: "middle" });
  });
  // Arrows row 1
  [0, 1, 2].forEach(i => {
    s.addShape(pres.ShapeType.line, { x: 0.2 + (i*2.2) + 2.1, y: 1.72, w: 0.3, h: 0, line: { color: C.gold, width: 2 } });
  });
  // Arrows row 2
  [0, 1, 2].forEach(i => {
    s.addShape(pres.ShapeType.line, { x: 0.2 + (i*2.2) + 2.1, y: 3.32, w: 0.3, h: 0, line: { color: C.gold, width: 2 } });
  });
  // Arrows row 3
  [0, 1, 2].forEach(i => {
    s.addShape(pres.ShapeType.line, { x: 0.2 + (i*2.2) + 2.1, y: 4.92, w: 0.3, h: 0, line: { color: C.gold, width: 2 } });
  });
}

// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 30 — CONCLUSION / CALL TO ACTION
// ══════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  darkSlide(s);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.2, fill: { color: C.teal }, line: { color: C.teal } });
  s.addText("Key Takeaways & Call to Action", {
    x: 0.3, y: 0.2, w: 9.4, h: 0.8, fontSize: 24, bold: true, color: C.white, align: "center", fontFace: "Calibri"
  });
  const pts = [
    "Register your hospital as NTORC / Transplant Centre with state DHS — Form 11 or Form 14",
    "Constitute and get your Brain Death Committee (BDC) approved by the state Appropriate Authority",
    "Appoint and train at least 2 NOTTO-approved Transplant Coordinators",
    "Implement a mandatory ICU screening protocol — identify every potential donor",
    "Build a robust ICU, OT, laboratory and cold chain infrastructure",
    "Connect with your state SOTTO for networking, waiting list access and organ allocation",
    "Enter ALL data into NOTTO National Registry in real time — non-compliance is punishable",
    "Sensitize ALL hospital staff — doctors, nurses, administrators on BSD, organ donation & THOA",
    "Participate in NOTTO IEC campaigns and annual Organ Donation Day (August 13)",
  ];
  const arr = pts.map((p, i) => ({
    text: `\u2713  ${p}`,
    options: { breakLine: i < pts.length - 1, fontSize: 13, color: C.white }
  }));
  s.addText(arr, { x: 0.4, y: 1.35, w: 9.2, h: 3.8, fontFace: "Calibri", valign: "top" });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 5.1, w: 10, h: 0.525, fill: { color: C.orange }, line: { color: C.orange } });
  s.addText("Source: NOTTO Transplant Manual | NOTP Operational Guidelines | THOA 1994 & Amendment 2011 | MoHFW, Govt of India", {
    x: 0.3, y: 5.15, w: 9.4, h: 0.4, fontSize: 10, color: C.white, align: "center", fontFace: "Calibri"
  });
}

// ══════════════════════════════════════════════════════════════════════════════
// WRITE FILE
// ══════════════════════════════════════════════════════════════════════════════
pres.writeFile({ fileName: "/home/daytona/workspace/organ-donation-ppt/Organ_Donation_Facility_NOTP_Guidelines.pptx" })
  .then(() => console.log("DONE: Presentation saved."))
  .catch(err => console.error("ERROR:", err));
Running Command

cd /home/daytona/workspace/organ-donation-ppt && node build.js 2>&1

Editing File

~/organ-donation-ppt/build.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/organ-donation-ppt/build.js'
Running Command

cd /home/daytona/workspace/organ-donation-ppt && node build.js 2>&1

Running Command

ls -lh /home/daytona/workspace/organ-donation-ppt/

Your presentation is ready for download:

Organ Donation Facility NOTP Guidelines

Presentation · PPTX


What's Inside — 30 Slides Across 9 Sections

SectionSlidesContent
Title + Agenda1-2Branding, full agenda
1. NOTP/NOTTO Framework3-4Hierarchy: NOTTO → ROTTO → SOTTO → Hospital, goals
2. Legal Basis5THOA 1994, Amendment 2011 — all key changes
3. Types of Registration6-8Transplant Centre vs NTORC vs Tissue Bank; 10-step registration process
4. Infrastructure & Manpower9-11ICU, OT, lab, imaging requirements; 6 key roles with role cards
5. Brain Death Committee12-14BDC composition, how to get approved, BSD certification protocol (Tests 1 & 2, Form 10)
6. Transplant Coordinator15-16Legal mandate, duties, counseling protocol, training requirements
7. Donor Identification & Consent17-18ICU screening, authorization rules, medico-legal cases, cost policy
8. Organ Retrieval & Transport19-20Multi-organ retrieval, cold ischaemia times, preservation, green corridor
9. Networking, Registry, Checklist21-30SOTTO/ROTTO/NOTTO allocation hierarchy, data reporting, forms list, hospital readiness checklist, challenges vs solutions, complete workflow flowchart, key takeaways
Sources used: NOTTO Transplant Manual | NOTP Operational Guidelines | THOA 1994 & Amendment 2011 | THO Rules 1995/2014

Give me all content in pdf format

Reading File
Writing File

~/organ-donation-ppt/build_pdf.py

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.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, PageBreak, KeepTogether
)
from reportlab.platypus.flowables import HRFlowable
from reportlab.pdfgen import canvas
from reportlab.lib.colors import HexColor

OUTPUT = "/home/daytona/workspace/organ-donation-ppt/Organ_Donation_Facility_NOTP_Guidelines.pdf"

# ── Colors ────────────────────────────────────────────────────────────────────
NAVY   = HexColor("#0D2B55")
TEAL   = HexColor("#0B7A75")
ORANGE = HexColor("#E8601C")
GOLD   = HexColor("#F0A500")
WHITE  = colors.white
LTGRAY = HexColor("#DDE3EC")
OFFWHITE = HexColor("#F4F6F9")
TEXT   = HexColor("#1A1A2E")
SUB    = HexColor("#4A5568")
GREEN  = HexColor("#1A7A4A")

W, H = A4  # 595 x 842 pt

# ── Page template with header/footer ─────────────────────────────────────────
class HeaderFooterCanvas(canvas.Canvas):
    def __init__(self, *args, **kwargs):
        self._doc_title = kwargs.pop("doc_title", "")
        super().__init__(*args, **kwargs)
        self._saved_page_states = []

    def showPage(self):
        self._saved_page_states.append(dict(self.__dict__))
        self._startPage()

    def save(self):
        num_pages = len(self._saved_page_states)
        for i, state in enumerate(self._saved_page_states):
            self.__dict__.update(state)
            self._draw_header_footer(i + 1, num_pages)
            super().showPage()
        super().save()

    def _draw_header_footer(self, page_num, total):
        self.saveState()
        # Header bar (skip page 1 — title page)
        if page_num > 1:
            self.setFillColor(NAVY)
            self.rect(0, H - 30, W, 30, fill=1, stroke=0)
            self.setFillColor(TEAL)
            self.rect(0, H - 34, W, 4, fill=1, stroke=0)
            self.setFillColor(WHITE)
            self.setFont("Helvetica-Bold", 9)
            self.drawString(18, H - 20, "NOTP Operational Guidelines — Establishing an Organ Donation Facility at Hospital")
            self.setFont("Helvetica", 8)
            self.drawRightString(W - 18, H - 20, "MoHFW | NOTTO | THOA 1994 & 2011")

        # Footer bar
        self.setFillColor(NAVY)
        self.rect(0, 0, W, 22, fill=1, stroke=0)
        self.setFillColor(ORANGE)
        self.rect(0, 22, W, 3, fill=1, stroke=0)
        self.setFillColor(WHITE)
        self.setFont("Helvetica", 7.5)
        self.drawString(18, 8, "Source: NOTTO Transplant Manual | NOTP Guidelines | THOA 1994 & Amendment 2011 | Ministry of Health & Family Welfare, Govt of India")
        self.setFont("Helvetica-Bold", 8)
        self.drawRightString(W - 18, 8, f"Page {page_num} of {total}")
        self.restoreState()


def build_pdf():
    doc = SimpleDocTemplate(
        OUTPUT,
        pagesize=A4,
        rightMargin=1.8*cm,
        leftMargin=1.8*cm,
        topMargin=1.6*cm,
        bottomMargin=1.6*cm,
        title="Establishing an Organ Donation Facility — NOTP Guidelines",
        author="NOTTO / MoHFW",
    )

    styles = getSampleStyleSheet()

    def S(name, **kw):
        return ParagraphStyle(name, **kw)

    # Style definitions
    sTitle = S("sTitle", fontSize=22, textColor=WHITE, fontName="Helvetica-Bold",
               alignment=TA_CENTER, spaceAfter=4)
    sSub   = S("sSub",   fontSize=13, textColor=GOLD,  fontName="Helvetica",
               alignment=TA_CENTER, spaceAfter=6)
    sH1    = S("sH1",    fontSize=15, textColor=WHITE, fontName="Helvetica-Bold",
               alignment=TA_CENTER, spaceAfter=2, spaceBefore=2)
    sH2    = S("sH2",    fontSize=13, textColor=WHITE, fontName="Helvetica-Bold",
               alignment=TA_LEFT,   spaceAfter=2, spaceBefore=2)
    sH3    = S("sH3",    fontSize=11, textColor=NAVY, fontName="Helvetica-Bold",
               alignment=TA_LEFT,   spaceAfter=3, spaceBefore=6)
    sBody  = S("sBody",  fontSize=9.5, textColor=TEXT, fontName="Helvetica",
               alignment=TA_JUSTIFY, spaceAfter=3, leading=14)
    sBullet= S("sBullet",fontSize=9.5, textColor=TEXT, fontName="Helvetica",
               leftIndent=14, spaceAfter=2, leading=13,
               bulletIndent=4, bulletFontName="Helvetica", bulletFontSize=9.5)
    sNote  = S("sNote",  fontSize=8.5, textColor=SUB, fontName="Helvetica-Oblique",
               alignment=TA_CENTER, spaceAfter=4)
    sStep  = S("sStep",  fontSize=9.5, textColor=TEXT, fontName="Helvetica",
               leftIndent=22, spaceAfter=3, leading=13)

    story = []

    # ── helper flowables ──────────────────────────────────────────────────────
    def add_spacer(h=6):
        story.append(Spacer(1, h))

    def add_hr(color=TEAL, thickness=1.5):
        story.append(HRFlowable(width="100%", thickness=thickness, color=color, spaceAfter=4, spaceBefore=4))

    def section_banner(title, subtitle=None, bg=NAVY, accent=TEAL):
        """Full-width colored banner for section headers."""
        inner = [Paragraph(title, sH1)]
        if subtitle:
            inner.append(Paragraph(subtitle, S("bsub", fontSize=9, textColor=LTGRAY,
                                               fontName="Helvetica-Oblique", alignment=TA_CENTER)))
        t = Table([[inner]], colWidths=[W - 3.6*cm])
        t.setStyle(TableStyle([
            ("BACKGROUND", (0,0), (-1,-1), bg),
            ("TOPPADDING",    (0,0), (-1,-1), 10),
            ("BOTTOMPADDING", (0,0), (-1,-1), 10),
            ("LEFTPADDING",   (0,0), (-1,-1), 12),
            ("RIGHTPADDING",  (0,0), (-1,-1), 12),
            ("LINEBELOW", (0,0), (-1,-1), 3, accent),
        ]))
        story.append(t)
        add_spacer(8)

    def subsection(text, bg=TEAL):
        t = Table([[Paragraph(text, sH2)]], colWidths=[W - 3.6*cm])
        t.setStyle(TableStyle([
            ("BACKGROUND",    (0,0), (-1,-1), bg),
            ("TOPPADDING",    (0,0), (-1,-1), 6),
            ("BOTTOMPADDING", (0,0), (-1,-1), 6),
            ("LEFTPADDING",   (0,0), (-1,-1), 10),
            ("RIGHTPADDING",  (0,0), (-1,-1), 10),
            ("LINEBELOW",     (0,0), (-1,-1), 2, ORANGE),
        ]))
        story.append(t)
        add_spacer(5)

    def bullet(text, indent=0):
        story.append(Paragraph(f"&#x2022;&nbsp;&nbsp;{text}",
                                S("b", fontSize=9.5, textColor=TEXT, fontName="Helvetica",
                                  leftIndent=14 + indent*12, spaceAfter=2, leading=13)))

    def subbullet(text):
        bullet(text, indent=1)

    def numbered(n, text):
        story.append(Paragraph(f"<b>{n}.</b>&nbsp;&nbsp;{text}",
                                S("n", fontSize=9.5, textColor=TEXT, fontName="Helvetica",
                                  leftIndent=18, spaceAfter=3, leading=13)))

    def para(text):
        story.append(Paragraph(text, sBody))

    def note(text):
        story.append(Paragraph(f"<i>{text}</i>", sNote))

    def h3(text):
        story.append(Paragraph(text, sH3))

    def two_col_table(rows, col1_header=None, col2_header=None, col1_w=None, col2_w=None):
        """Two-column comparison table."""
        cw1 = col1_w or (W - 3.6*cm) * 0.50
        cw2 = col2_w or (W - 3.6*cm) * 0.50
        data = []
        if col1_header and col2_header:
            data.append([
                Paragraph(f"<b>{col1_header}</b>", S("th", fontSize=9.5, textColor=WHITE,
                           fontName="Helvetica-Bold", alignment=TA_CENTER)),
                Paragraph(f"<b>{col2_header}</b>", S("th2", fontSize=9.5, textColor=WHITE,
                           fontName="Helvetica-Bold", alignment=TA_CENTER)),
            ])
        for r in rows:
            data.append([
                Paragraph(r[0], S("td", fontSize=9, textColor=TEXT, fontName="Helvetica",
                                  leading=13, spaceAfter=1)),
                Paragraph(r[1], S("td2", fontSize=9, textColor=TEXT, fontName="Helvetica",
                                  leading=13, spaceAfter=1)),
            ])
        t = Table(data, colWidths=[cw1, cw2])
        style = [
            ("VALIGN",        (0,0), (-1,-1), "TOP"),
            ("TOPPADDING",    (0,0), (-1,-1), 5),
            ("BOTTOMPADDING", (0,0), (-1,-1), 5),
            ("LEFTPADDING",   (0,0), (-1,-1), 7),
            ("RIGHTPADDING",  (0,0), (-1,-1), 7),
            ("GRID",          (0,0), (-1,-1), 0.5, LTGRAY),
            ("ROWBACKGROUNDS",(0,0), (-1,-1), [OFFWHITE, WHITE]),
        ]
        if col1_header:
            style += [
                ("BACKGROUND",    (0,0), (-1,0), NAVY),
                ("TEXTCOLOR",     (0,0), (-1,0), WHITE),
            ]
        t.setStyle(TableStyle(style))
        story.append(t)
        add_spacer(6)

    def info_boxes(items):
        """Colored info boxes in a single row."""
        bgs = [NAVY, TEAL, ORANGE, GREEN]
        cells = []
        for i, (label, val) in enumerate(items):
            bg = bgs[i % len(bgs)]
            cells.append([
                Paragraph(f"<font color='white'><b>{label}</b></font><br/>"
                          f"<font color='#DDDDDD' size='8'>{val}</font>",
                          S("ib", fontSize=9, fontName="Helvetica", alignment=TA_CENTER, leading=13))
            ])
        n = len(cells)
        cw = (W - 3.6*cm) / n
        t = Table([cells], colWidths=[cw]*n)
        style_list = [
            ("TOPPADDING",    (0,0), (-1,-1), 8),
            ("BOTTOMPADDING", (0,0), (-1,-1), 8),
            ("LEFTPADDING",   (0,0), (-1,-1), 4),
            ("RIGHTPADDING",  (0,0), (-1,-1), 4),
            ("ALIGN",         (0,0), (-1,-1), "CENTER"),
            ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
        ]
        for i in range(n):
            style_list.append(("BACKGROUND", (i,0), (i,0), bgs[i % len(bgs)]))
        t.setStyle(TableStyle(style_list))
        story.append(t)
        add_spacer(6)

    # ══════════════════════════════════════════════════════════════════════════
    # COVER PAGE
    # ══════════════════════════════════════════════════════════════════════════
    cover_inner = [
        Spacer(1, 60),
        Paragraph("ESTABLISHING AN ORGAN DONATION FACILITY", sTitle),
        Paragraph("AT YOUR HOSPITAL", sSub),
        Spacer(1, 8),
        Paragraph("&#9472;" * 55,
                  S("hr", fontSize=9, textColor=ORANGE, alignment=TA_CENTER)),
        Spacer(1, 10),
        Paragraph("Based on NOTP Operational Guidelines &amp; NOTTO Transplant Manual",
                  S("cv1", fontSize=11, textColor=LTGRAY, fontName="Helvetica-Oblique", alignment=TA_CENTER)),
        Spacer(1, 6),
        Paragraph("Transplantation of Human Organs &amp; Tissues Act (THOA) 1994 | Amended 2011",
                  S("cv2", fontSize=10, textColor=LTGRAY, fontName="Helvetica", alignment=TA_CENTER)),
        Spacer(1, 6),
        Paragraph("Ministry of Health &amp; Family Welfare | Government of India",
                  S("cv3", fontSize=10, textColor=HexColor("#AAC4E0"), fontName="Helvetica", alignment=TA_CENTER)),
        Spacer(1, 40),
        Paragraph("NOTTO  |  ROTTO  |  SOTTO  |  Hospital-Level Organ Donation Program",
                  S("cv4", fontSize=9, textColor=HexColor("#7EB8D4"), fontName="Helvetica", alignment=TA_CENTER)),
    ]
    cover_t = Table([[cover_inner]], colWidths=[W - 3.6*cm])
    cover_t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), NAVY),
        ("TOPPADDING",    (0,0), (-1,-1), 0),
        ("BOTTOMPADDING", (0,0), (-1,-1), 80),
        ("LEFTPADDING",   (0,0), (-1,-1), 20),
        ("RIGHTPADDING",  (0,0), (-1,-1), 20),
        ("LINEBELOW",     (0,0), (-1,-1), 5, ORANGE),
    ]))
    story.append(cover_t)
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # TABLE OF CONTENTS
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("TABLE OF CONTENTS")
    toc = [
        ("1", "NOTP / NOTTO Framework & Structure"),
        ("2", "Legal Basis — THOA 1994 & Amendment 2011"),
        ("3", "Types of Hospital Registration"),
        ("4", "Step-by-Step Registration Process (NTORC / Transplant Centre)"),
        ("5", "Infrastructure Requirements"),
        ("6", "Manpower Requirements"),
        ("7", "Brain Death Committee (BDC) — Composition & Registration"),
        ("8", "Brain Stem Death (BSD) Certification Protocol"),
        ("9", "Transplant Coordinator — Role, Qualifications & Duties"),
        ("10", "Donor Identification, Consent & Authorization"),
        ("11", "Organ Retrieval, Preservation & Transportation"),
        ("12", "Networking — SOTTO / ROTTO / NOTTO Hierarchy & Allocation"),
        ("13", "Data Reporting & National Organ Donation Registry"),
        ("14", "Key Forms & Documentation"),
        ("15", "Hospital Readiness Checklist"),
        ("16", "Common Challenges & NOTTO Solutions"),
        ("17", "Complete Workflow — ICU to Transplantation"),
        ("18", "Key Takeaways & Call to Action"),
    ]
    for num, title in toc:
        story.append(Paragraph(
            f"<b>{num}.</b>&nbsp;&nbsp;&nbsp;{title}",
            S("toc", fontSize=10, textColor=TEXT, fontName="Helvetica",
              leftIndent=10, spaceAfter=4, leading=14)
        ))
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 1 — NOTP / NOTTO FRAMEWORK
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 1: NOTP / NOTTO FRAMEWORK & STRUCTURE",
                   "National Organ Transplant Programme — Overview")
    subsection("What is NOTP?")
    para("The <b>National Organ Transplant Programme (NOTP)</b> is the flagship scheme of the Ministry of Health &amp; Family Welfare (MoHFW), Government of India. It provides the policy, financial, and operational framework for deceased donor organ transplantation across the country. The current scheme runs for the period 2021-22 to 2025-26.")
    add_spacer()

    subsection("What is NOTTO?")
    para("The <b>National Organ &amp; Tissue Transplant Organisation (NOTTO)</b> is the apex national-level organization established under the Directorate General of Health Services (DGHS) at Safdarjung Hospital, New Delhi. It serves as the national networking hub, national registry, and national biomaterial centre, and operates a cadaver organ and tissue retrieval operation theatre.")
    add_spacer()

    subsection("Hierarchical Structure")
    two_col_table([
        ("<b>NOTTO</b> — National Level<br/>Apex body; national networking, allocation &amp; registry; Safdarjung Hospital, New Delhi",
         "<b>ROTTO</b> — Regional Level<br/>4 Regional Organ &amp; Tissue Transplant Organisations covering North, South, East, West zones"),
        ("<b>SOTTO</b> — State Level<br/>One per State/UT; state-level coordination, waiting lists, organ allocation within state",
         "<b>Hospital Level</b><br/>Transplant Centre OR Non-Transplant Organ Retrieval Centre (NTORC); actual donation and retrieval"),
    ], col1_header="Level / Organization", col2_header="Role &amp; Location")

    subsection("Key Objectives of NOTP")
    for obj in [
        "Bridge the demand-supply gap in organ transplantation across India",
        "Promote deceased donor organ and tissue donation",
        "Enforce mandatory declaration of Brain Stem Death (BSD) in all ICUs",
        "Establish and operationalize the Digital National Organ &amp; Tissue Donation and Transplant Registry",
        "Identify and establish skill centres for training of transplant &amp; retrieval surgeons, coordinators, nurses",
        "Monitor organ and tissue transplant services and implement policy corrections",
        "Carry out IEC (Information, Education, Communication) activities to increase public awareness",
        "Encourage individuals to register as donors (pledge cards, NOTTO portal)",
    ]:
        bullet(obj)
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 2 — LEGAL BASIS
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 2: LEGAL BASIS",
                   "THOA 1994 & Amendment 2011 — Key Provisions")
    subsection("Transplantation of Human Organs Act (THOA) 1994")
    para("THOA 1994 was India's first legislation to <b>legalize Brain Stem Death (BSD)</b> as a form of legal death, making deceased donor organ transplantation legally permissible. It laid the groundwork for regulated transplantation and prohibited commercial dealings in human organs.")
    add_spacer()

    subsection("THOA Amendment 2011 (THOTA) — Major Changes")
    para("The 2011 amendment fundamentally transformed the organ donation landscape in India. Key changes include:")
    add_spacer(3)

    changes = [
        ("Brain Death Declaration",
         "Permitted by Intensivist/Anaesthetist if neurologist/neurosurgeon is unavailable — removes a critical bottleneck"),
        ("NTORC Provision",
         "Any hospital with ICU facilities can register as a Non-Transplant Organ Retrieval Centre (NTORC) — previously restricted to transplant centres only"),
        ("Mandatory Transplant Coordinators",
         "All transplant and retrieval hospitals MUST appoint Transplant Coordinators; qualifications formally specified"),
        ("Mandatory Request",
         "Doctors must ask every ICU patient/relative whether prior authorization for donation exists; if not, must inform them of the option"),
        ("Medico-Legal Cases",
         "Simplified procedures defined to avoid jeopardizing cause-of-death determination and to minimize retrieval delays"),
        ("Cost Policy",
         "Donor management, retrieval, transport and preservation costs to be borne by recipient/institution/government/NGO — NOT the donor family"),
        ("National Networking",
         "Central Government mandated to establish NOTP for national networking between retrieval centres, transplant centres, tissue banks and NOTTO/ROTTO/SOTTO"),
        ("National Registry",
         "Central Government mandated to maintain a national registry of donors and recipients of human organs and tissues"),
        ("Cornea Retrieval",
         "Permitted by trained technicians (not just doctors), increasing eye donation rates"),
        ("Organ Trading Protection",
         "Strengthened provisions to protect vulnerable and poor persons from organ trading"),
    ]
    two_col_table(changes, col1_header="Provision", col2_header="Detail")

    subsection("THO Rules 1995 / 2014")
    para("These rules prescribe the procedural formats including <b>Form 10</b> (Brain Stem Death Certificate), registration forms for hospitals, composition of the Brain Death Committee, and documentation standards for organ donation and transplantation.")
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 3 — TYPES OF REGISTRATION
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 3: TYPES OF HOSPITAL REGISTRATION",
                   "Transplant Centre | NTORC | Tissue Bank")
    para("To participate in the organ donation, retrieval or transplantation program in India, a hospital must first register with the state <b>Appropriate Authority (AA)</b>, which is the Director of Health Services (DHS) of the respective state/UT. Three types of registration are available:")
    add_spacer(8)

    reg_data = [
        ["<b>Type</b>", "<b>Name</b>", "<b>Who It's For</b>", "<b>Key Permission</b>", "<b>Form</b>"],
        ["Type 1", "Transplant Centre",
         "Hospitals wishing to perform organ transplant surgery",
         "Full transplantation + retrieval + BSD declaration",
         "Form 11/12"],
        ["Type 2", "NTORC\n(Non-Transplant Organ Retrieval Centre)",
         "Any hospital with ICU wishing to participate in deceased donation only",
         "BSD declaration + organ retrieval ONLY; cannot do transplant surgery",
         "Form 14/16"],
        ["Type 3", "Tissue Bank",
         "Centres aiming to function as skin bank, bone bank, heart valve bank, etc.",
         "Tissue procurement, processing &amp; distribution",
         "Form 14"],
    ]
    t = Table(reg_data, colWidths=[(W-3.6*cm)*p for p in [0.10, 0.22, 0.28, 0.27, 0.13]])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,0), NAVY),
        ("TEXTCOLOR",     (0,0), (-1,0), WHITE),
        ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
        ("FONTSIZE",      (0,0), (-1,-1), 9),
        ("ROWBACKGROUNDS",(0,1), (-1,-1), [OFFWHITE, WHITE]),
        ("GRID",          (0,0), (-1,-1), 0.5, LTGRAY),
        ("VALIGN",        (0,0), (-1,-1), "TOP"),
        ("TOPPADDING",    (0,0), (-1,-1), 6),
        ("BOTTOMPADDING", (0,0), (-1,-1), 6),
        ("LEFTPADDING",   (0,0), (-1,-1), 6),
        ("RIGHTPADDING",  (0,0), (-1,-1), 6),
        ("BACKGROUND",    (0,1), (0,1), NAVY),
        ("TEXTCOLOR",     (0,1), (0,1), WHITE),
        ("BACKGROUND",    (0,2), (0,2), TEAL),
        ("TEXTCOLOR",     (0,2), (0,2), WHITE),
        ("BACKGROUND",    (0,3), (0,3), ORANGE),
        ("TEXTCOLOR",     (0,3), (0,3), WHITE),
    ]))
    story.append(t)
    add_spacer(8)
    note("All registrations require approval from the Appropriate Authority (AA) = DHS of the respective state/UT")
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 4 — REGISTRATION PROCESS
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 4: STEP-BY-STEP REGISTRATION PROCESS",
                   "Registering as NTORC or Transplant Centre")
    para("The following steps are based on the NOTTO Transplant Manual and NOTP Operational Guidelines for hospitals seeking to establish a deceased donor organ donation facility.")
    add_spacer(6)

    steps = [
        ("STEP 1 — Ensure ICU Facility",
         "The hospital must have a functional Intensive Care Unit (ICU) with adequate manpower, equipment, and infrastructure capable of diagnosing Brain Stem Death (BSD) and maintaining a brain-dead donor until organ retrieval."),
        ("STEP 2 — Ensure Operation Theatre for Retrieval",
         "A sterile OT must be available for organ retrieval. Facilities for temporary organ storage (preservation solutions, cold storage) must also be in place."),
        ("STEP 3 — Laboratory &amp; Imaging Setup",
         "Arrange for blood grouping, cross-matching, serology (HIV, HBsAg, HCV, CMV), biochemistry, and coagulation testing. CT/MRI facility should be in-house or via a tie-up."),
        ("STEP 4 — Tie Up with Government Hospital for Post-Mortem",
         "For medico-legal cases, the hospital must have a formal arrangement with a nearby government hospital for conducting post-mortems."),
        ("STEP 5 — Appoint Transplant Coordinator(s)",
         "At least 2 Transplant Coordinators must be trained and approved by NOTTO. This is a legal requirement under THOTA 2011."),
        ("STEP 6 — Fill and Submit Registration Form",
         "For NTORC: Fill Form 14 and submit to the appropriate DHS. For Transplant Centre: Fill Form 11. Submit along with required supporting documents and infrastructure details."),
        ("STEP 7 — Inspection by Appropriate Authority",
         "An inspection team visits the hospital to assess preparedness using the hospital readiness score/checklist. Infrastructure, manpower, protocols, and documentation are verified."),
        ("STEP 8 — Certificate of Registration (Form 16)",
         "Once facilities are deemed appropriate by the inspection team, the DHS/AA grants a Certificate of Registration (Form 16), valid for 5 years. Renewal required thereafter."),
        ("STEP 9 — Apply for Brain Death Committee (BDC) Approval",
         "After receiving Form 16, the hospital applies to the state AA/DHS for approval of the Brain Death Committee. All specialists in the hospital (other than transplant team) can form the BDC."),
        ("STEP 10 — Begin Operations",
         "Once BDC is approved, the hospital is legally authorized to declare Brain Stem Death and undertake organ retrieval. Register on the NOTTO online portal and set up real-time data entry."),
    ]
    for title, desc in steps:
        h3(title)
        para(desc)
        add_spacer(3)
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 5 — INFRASTRUCTURE
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 5: INFRASTRUCTURE REQUIREMENTS")
    two_col_table([
        ("<b>INTENSIVE CARE UNIT (ICU)</b><br/>&#x2022; Adequate beds with multi-parameter monitoring<br/>&#x2022; Ventilators for apnea testing<br/>&#x2022; Hemodynamic monitoring (arterial line, CVP)<br/>&#x2022; Capability to maintain brain-dead donor<br/>&#x2022; Trained intensivist on call 24x7",
         "<b>OPERATION THEATRE (OT)</b><br/>&#x2022; Sterile OT for multi-organ retrieval<br/>&#x2022; Anaesthesia equipment and support<br/>&#x2022; Cold ischaemia preservation solutions (HTK/UW/Celsior)<br/>&#x2022; Temporary organ storage facility<br/>&#x2022; Sterile packaging materials for organ transport"),
        ("<b>LABORATORY SERVICES</b><br/>&#x2022; ABO blood grouping and cross-matching<br/>&#x2022; HLA tissue typing (in-house or tie-up)<br/>&#x2022; Serological screening: HIV, HBsAg, HCV, CMV, VDRL<br/>&#x2022; Biochemistry, coagulation, full blood count<br/>&#x2022; Microbiology and culture",
         "<b>IMAGING &amp; DIAGNOSTICS</b><br/>&#x2022; CT scan / MRI for BSD workup<br/>&#x2022; EEG facility (in-house or tie-up)<br/>&#x2022; Radiology support 24x7<br/>&#x2022; Ancillary: Echo, bronchoscopy for lung donors<br/>&#x2022; Medico-legal tie-up for post-mortem"),
    ], col1_header="Facility", col2_header="Details")
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 6 — MANPOWER
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 6: MANPOWER REQUIREMENTS")
    roles = [
        ("Medical Administrator / Nodal Officer",
         NAVY,
         ["Member of Brain Death Committee (mandatory)", "Signs Form 10 (BSD Certificate)", "Designated as nodal officer for all organ donation matters in the hospital", "Responsible for hospital's compliance with THOA & NOTTO reporting"]),
        ("Intensivist / Anaesthesiologist",
         TEAL,
         ["Core member of Brain Death Committee", "Performs apnea test (critical for BSD diagnosis)", "Manages donor hemodynamics in ICU after BSD declaration", "Can declare BSD even if neurologist is unavailable (post-2011 amendment)", "Preferred as nodal officer per NOTTO guidelines"]),
        ("Neurologist / Neurosurgeon",
         ORANGE,
         ["Preferred member of BDC for BSD certification", "Confirms absence of all cortical and brainstem activity", "Can be replaced by a Physician or Surgeon if unavailable (THOTA 2011)", "Cannot be part of the transplant team"]),
        ("Treating Physician / Surgeon",
         NAVY,
         ["Member of BDC — confirms irreversibility of brain injury", "Signs Form 10", "Cannot be part of the transplant surgical team", "The treating doctor and transplant team must be distinct"]),
        ("Transplant Coordinator (TC)",
         TEAL,
         ["MANDATORY under THOTA 2011 in all transplant/retrieval hospitals", "Minimum 2 TCs must be trained &amp; approved by NOTTO", "Present during BSD declaration — legally required", "Counsels Next of Kin (NOK), obtains written consent", "Coordinates logistics of retrieval, allocation and transport", "Enters all data into NOTTO National Registry"]),
        ("Retrieval Surgeon / Surgical Team",
         GREEN,
         ["Performs multi-organ retrieval in OT", "Must be trained in retrieval and preservation of specific organs (liver, kidneys, heart, lungs, pancreas)", "Separate from the transplant team at the receiving centre", "Skill centre training available at NOTTO/ROTTO/SOTTO"]),
    ]
    for role, bg, duties in roles:
        h3(role)
        for d in duties:
            bullet(d)
        add_spacer(4)
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 7 — BRAIN DEATH COMMITTEE
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 7: BRAIN DEATH COMMITTEE (BDC)",
                   "Composition, Registration & Key Rules")

    subsection("BDC Composition (THOA 1994 + 2011 Amendment)")
    para("The Board of Medical Experts (BME) / Brain Death Committee comprises <b>4 physicians</b>:")
    for i, mem in enumerate([
        "Medical Administrator in charge of the hospital",
        "Intensivist / Anaesthesiologist",
        "Neurologist or Neurosurgeon (or Physician/Surgeon if neurologist unavailable — post-2011 amendment)",
        "Medical Officer treating the patient",
    ], 1):
        numbered(i, mem)
    add_spacer(6)

    subsection("Key Rules for BDC")
    for rule in [
        "Doctors on the <b>transplant team CANNOT be members of the BDC</b> — complete separation is mandatory",
        "The doctor managing the patient <b>cannot simultaneously be part of the transplant team</b>",
        "<b>All 4 BDC members must be present and sign Form 10</b> (BSD Certificate) after both tests",
        "The <b>Transplant Coordinator must be present</b> during BSD declaration (THOA Rules 2014, Section 29(2))",
        "Only hospital specialists who have no involvement in transplantation can form the BDC",
    ]:
        bullet(rule)
    add_spacer(6)

    subsection("How to Get BDC Approved")
    for step in [
        "Hospital applies to DHS (Director of Health Services) or State Appropriate Authority after obtaining Form 16 (registration certificate)",
        "Propose a panel of specialists from the hospital (other than transplant team) to form the BDC",
        "All proposed BDC specialists must be registered and approved with NOTTO for the purpose of BSD testing",
        "Once approved, the hospital is authorized to declare BSD and undertake organ retrieval",
    ]:
        bullet(step)
    add_spacer(6)

    subsection("Training Requirements for BDC")
    for t_item in [
        "Organize workshops for critical care team on early identification and declaration of brain death",
        "Donor optimization protocol training for ICU staff",
        "Regular refresher courses and retraining at periodic intervals",
        "Initial induction training followed by periodic retraining for all Transplant Coordinators",
    ]:
        bullet(t_item)
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 8 — BSD PROTOCOL
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 8: BRAIN STEM DEATH (BSD) CERTIFICATION PROTOCOL",
                   "Step-by-Step — From Suspicion to Declaration")
    para("Brain Stem Death is determined in hospital by the 4-member Board of Medical Experts (BDC). All prescribed tests must be repeated after a minimum interval of 6 hours to ensure no observer error and to confirm persistence of the clinical state.")
    add_spacer(6)

    bsd_steps = [
        ("Identify Potential Donor",
         "Suspect BSD in all ICU patients with GCS = 3/15 (out of 15), non-reactive pupils and absent brainstem reflexes. Notify Intensivist (Nodal Officer) and Transplant Coordinator immediately."),
        ("Preconditions — Rule Out Reversible Causes",
         "Must exclude: hypothermia (core temp &lt;35°C), drug intoxication (sedatives, neuromuscular blocking agents, alcohol), severe metabolic or electrolyte disturbances, cardiovascular instability/shock. All these must be corrected or excluded before proceeding."),
        ("Appropriate Observation Period",
         "An adequate observation period is maintained to ensure irreversibility of the pathological process causing the brain injury."),
        ("TEST 1 — Clinical BSD Assessment by BDC",
         "All 4 BDC members convene at the bedside.<br/><b>a. Absence of Brainstem Reflexes:</b><br/>"
         "&nbsp;&nbsp;• Absent pupillary light reflex (pupils fixed, dilated)<br/>"
         "&nbsp;&nbsp;• Absent corneal reflex<br/>"
         "&nbsp;&nbsp;• Absent oculocephalic reflex (doll's eye)<br/>"
         "&nbsp;&nbsp;• Absent vestibulo-ocular reflex (caloric test)<br/>"
         "&nbsp;&nbsp;• Absent gag reflex<br/>"
         "&nbsp;&nbsp;• Absent cough reflex<br/>"
         "<b>b. Apnea Test:</b> PaCO2 must rise ≥20 mmHg above baseline with NO spontaneous respiratory effort. Patient is pre-oxygenated with 100% O2, ventilator disconnected, O2 supplied via tracheal catheter.<br/>"
         "All 4 members sign Form 10 after Test 1."),
        ("Minimum 6-Hour Interval",
         "A mandatory minimum interval of 6 hours must elapse between Test 1 and Test 2. This ensures no observer error and confirms the persistence of the clinical state. (Some states require 12-hour interval — follow local AA guidelines.)"),
        ("TEST 2 — Repeat BSD Assessment",
         "The entire clinical assessment is repeated by the same 4-member BDC panel. All criteria from Test 1 must be re-confirmed. All 4 members sign Form 10 again."),
        ("Form 10 — BSD Certificate",
         "Form 10 (Brain Stem Death Certificate as per THO Rules) is completed and signed by all 4 BDC members after both tests are documented. This is the legal death certificate under THOA."),
        ("Declaration of Brain Stem Death",
         "The patient is now <b>legally dead</b> under THOA 1994. The Transplant Coordinator immediately begins counseling the Next of Kin and initiates the consent and organ allocation process."),
    ]
    for i, (title, desc) in enumerate(bsd_steps, 1):
        h3(f"Step {i}: {title}")
        para(desc)
        add_spacer(3)
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 9 — TRANSPLANT COORDINATOR
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 9: TRANSPLANT COORDINATOR",
                   "Role, Qualifications, Duties & Training")

    subsection("Legal Status")
    para("The Transplant Coordinator (TC) is <b>mandatory in all transplant and retrieval hospitals</b> under THOTA 2011. At least 2 TCs per hospital must be trained and approved by NOTTO. Qualifications are formally specified under the THO Rules.")
    add_spacer(6)

    subsection("Key Duties of the Transplant Coordinator")
    for duty in [
        "<b>Presence during BSD declaration</b> — mandatory per THOA Rules 2014, Section 29(2)",
        "Counsel the Next of Kin (NOK) regarding organ donation — must be done sensitively and without coercion",
        "Obtain written informed consent from the closest living relative",
        "The TC must NOT be part of the medical team managing the patient, nor part of the transplant team",
        "Coordinate logistics of organ retrieval — OT booking, retrieval team availability, preservation solutions",
        "Notify SOTTO of the potential donor — initiate the allocation process",
        "Coordinate organ transport (Green Corridor activation, airline booking if required)",
        "Ensure all legal documentation (Form 10, consent forms, TC register) is completed",
        "Enter all donor, retrieval and transplant data into the NOTTO National Registry in real time",
        "Conduct regular sensitization sessions with ICU staff, nurses and hospital administration",
    ]:
        bullet(duty)
    add_spacer(6)

    subsection("Counseling Principles")
    two_col_table([
        ("<b>WHO Counsels</b><br/>Transplant Coordinator + dedicated NOK counseling team (separate from treating team and transplant team)",
         "<b>WHEN to Counsel</b><br/>Immediately after BSD declaration; before any retrieval activity. Required request policy — every ICU admission family must be approached."),
        ("<b>HOW to Counsel</b><br/>Explain concept of brain death clearly in layman's terms. Respect cultural and religious beliefs. Non-coercive approach. Allow family time to decide.",
         "<b>LEGAL OBLIGATION</b><br/>Under THOTA 2011, doctors must ask every ICU patient/relative about prior authorization for organ donation. If none exists, they must inform them of the option."),
    ], col1_header="Counseling Aspect", col2_header="Detail")

    subsection("Training Requirements")
    for t_item in [
        "Initial induction training conducted by NOTTO — mandatory before TC begins practice",
        "Regular retraining at periodic intervals (refresher courses on soft skills, counseling, documentation)",
        "Skills centre training available at NOTTO/ROTTO/SOTTO/Medical Colleges",
        "Workshop topics: communication skills, cultural sensitivity, BSD explanation to families, legal documentation",
    ]:
        bullet(t_item)
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 10 — DONOR IDENTIFICATION & CONSENT
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 10: DONOR IDENTIFICATION, CONSENT & AUTHORIZATION")

    subsection("Donor Identification in ICU")
    para("Every hospital with an ICU must implement a protocol to systematically screen for potential donors:")
    for item in [
        "Screen all ICU admissions: GCS = 3/15, non-reactive pupils, absent brainstem reflexes → suspect BSD",
        "Immediately notify Intensivist (designated Nodal Officer) upon suspicion of BSD",
        "Inform the Transplant Coordinator simultaneously",
        "Initiate donor exclusion criteria assessment: active malignancy, uncontrolled sepsis, prion disease, HIV disease, certain viral encephalitides",
        "If no exclusion criteria → initiate BSD certification protocol with BDC",
        "Begin donor maintenance (hemodynamic stabilization) in ICU while consent is obtained",
    ]:
        bullet(item)
    add_spacer(6)

    subsection("Authorization for Organ Donation")
    two_col_table([
        ("<b>Before Death — by Donor Himself/Herself</b><br/>Written pledge card or NOTTO portal registration. This is the most legally straightforward form of consent.",
         "<b>After Death — by Next of Kin (NOK)</b><br/>Person in legal possession of the body. Closest living relative qualifies: spouse &gt; adult children &gt; parents &gt; siblings."),
        ("<b>Mandatory Request (THOTA 2011)</b><br/>Every doctor must ask every ICU patient/relative whether prior authorization exists. If not, must inform them of the option to donate.",
         "<b>Written Consent Documentation</b><br/>TC obtains signed written consent. This must be documented and retained as part of the legal medical record."),
    ], col1_header="Type", col2_header="Details")

    subsection("Medico-Legal Cases")
    para("THOTA 2011 has significantly simplified organ donation in medico-legal cases:")
    for item in [
        "Defined procedure to prevent jeopardizing the determination of cause of death",
        "Avoids unnecessary delays in organ retrieval",
        "TC coordinates with Police/Magistrate for required clearance",
        "Post-mortem tie-up with government hospital ensures legal compliance",
    ]:
        bullet(item)
    add_spacer(6)

    subsection("Cost Policy")
    para("<b>IMPORTANT:</b> The costs of donor management, organ retrieval, transportation and preservation are to be borne by the <b>recipient, institution, government, NGO or society</b> — and <b>NOT by the donor family</b>. This is a legal provision under THOTA 2011 to protect donor families from financial burden.")
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 11 — ORGAN RETRIEVAL & TRANSPORT
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 11: ORGAN RETRIEVAL, PRESERVATION & TRANSPORTATION")

    subsection("Organ Retrieval Procedure")
    for item in [
        "Performed in sterile OT by trained multi-organ retrieval surgeons",
        "Anaesthetist manages hemodynamics and maintains perfusion during retrieval",
        "Multi-organ retrieval: Heart, Lungs, Liver, Kidneys, Pancreas, Intestine (depending on viability &amp; consent)",
        "Tissue retrieval (if consented): Cornea, Skin, Bone, Heart valves, Tendons",
        "Vascular flush with cold preservation solution (HTK/UW solution/Celsior) at time of cross-clamp",
        "Time of cross-clamp (cold ischaemia start) documented precisely — critical for recipient planning",
    ]:
        bullet(item)
    add_spacer(6)

    subsection("Cold Ischaemia Time Limits")
    ischaemia_data = [
        ["<b>Organ</b>", "<b>Maximum Cold Ischaemia Time</b>", "<b>Remarks</b>"],
        ["Heart", "4–6 hours", "Most time-critical — local allocation preferred"],
        ["Lungs", "6–8 hours", "High sensitivity to ischaemia"],
        ["Liver", "12–24 hours", "Local/regional allocation first"],
        ["Pancreas", "12–24 hours", "En-bloc or split retrieval"],
        ["Kidney", "24–36 hours", "Most tolerant — allows national allocation"],
        ["Cornea", "Up to 14 days", "Eye bank storage in MEM medium"],
    ]
    t = Table(ischaemia_data, colWidths=[(W-3.6*cm)*p for p in [0.25, 0.35, 0.40]])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,0), NAVY),
        ("TEXTCOLOR",     (0,0), (-1,0), WHITE),
        ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
        ("FONTSIZE",      (0,0), (-1,-1), 9),
        ("ROWBACKGROUNDS",(0,1), (-1,-1), [OFFWHITE, WHITE]),
        ("GRID",          (0,0), (-1,-1), 0.5, LTGRAY),
        ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
        ("TOPPADDING",    (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LEFTPADDING",   (0,0), (-1,-1), 6),
        ("RIGHTPADDING",  (0,0), (-1,-1), 6),
    ]))
    story.append(t)
    add_spacer(8)

    subsection("Preservation, Packaging &amp; Transport")
    two_col_table([
        ("<b>Preservation &amp; Packaging</b><br/>&#x2022; Organs placed in sterile cold preservation solution<br/>&#x2022; Triple-bag method with outer rigid container<br/>&#x2022; Temperature maintained 0–4°C throughout<br/>&#x2022; Label: organ type, blood group, time of cross-clamp, retrieval centre name, date",
         "<b>Transportation</b><br/>&#x2022; Coordinated by SOTTO/ROTTO networking<br/>&#x2022; Green Corridor activation (police escort, traffic clearance) for road transport<br/>&#x2022; DGCA facilitation for air transport in inter-state cases<br/>&#x2022; Chain of custody documented at each handover<br/>&#x2022; TC coordinates with receiving transplant centre throughout"),
    ])
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 12 — NETWORKING & ALLOCATION
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 12: NETWORKING — SOTTO / ROTTO / NOTTO HIERARCHY & ALLOCATION")

    subsection("Organ Allocation — Escalation Protocol")
    para("Organ allocation must follow the mandated network hierarchy. Hospitals <b>cannot independently allocate organs</b> — all allocations must be routed through the network:")
    for i, step in enumerate([
        "Donor identified at hospital → TC immediately notifies SOTTO (state organization)",
        "SOTTO checks state waiting list for ABO-compatible, weight-matched, urgency-appropriate recipients",
        "If no suitable recipient in the state → SOTTO escalates to ROTTO (regional level)",
        "ROTTO checks waiting lists of all states in the zone",
        "If no match at regional level → escalates to NOTTO (national apex body)",
        "NOTTO identifies recipient nationally and coordinates inter-state transport logistics",
        "All allocation decisions must be documented and entered into NOTTO registry in real time",
        "Non-compliance: Punitive action under law/regulations for failure to report to national registry",
    ], 1):
        numbered(i, step)
    add_spacer(6)

    subsection("Allocation Principles")
    two_col_table([
        ("<b>Heart &amp; Lungs</b><br/>Local state allocation first (cold ischaemia critical). If no match, rapid escalation to ROTTO then NOTTO.",
         "<b>Liver &amp; Pancreas</b><br/>Local/state allocation first, then ROTTO/NOTTO. Recipient urgency (super-urgent vs elective) is a key criterion."),
        ("<b>Kidneys</b><br/>Wider geographic allocation possible due to longer cold ischaemia tolerance. HLA matching plays a greater role.",
         "<b>Tissues (Cornea, Skin, Bone)</b><br/>Allocated through tissue banks registered with NOTTO. Cornea: up to 14 days. Bone/skin: longer storage with processing."),
    ], col1_header="Organ Type", col2_header="Allocation Approach")

    subsection("NOTTO National Waiting List")
    for item in [
        "ABO blood group compatibility is the primary criterion for all organ allocations",
        "Recipient urgency status (super-urgent/status 1, urgent, elective) determines priority",
        "Time on waiting list is a secondary factor",
        "HLA matching is specifically important for kidney transplantation",
        "Paediatric recipients receive preferential allocation for paediatric donors",
        "Foreign nationals: Heart allocation to foreigners was specifically addressed to ensure Indian patients are prioritized",
    ]:
        bullet(item)
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 13 — DATA REPORTING
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 13: DATA REPORTING & NATIONAL ORGAN DONATION REGISTRY")

    subsection("Mandatory Reporting Requirements")
    para("All retrieval and transplant hospitals in India <b>MUST enter data into the NOTTO online software</b>. The State/UT Government is responsible for ensuring compliance by all hospitals within its jurisdiction. Punitive action under law/regulations is mandated for non-compliance.")
    add_spacer(6)

    subsection("What Must Be Reported")
    two_col_table([
        ("<b>Donor-Side Reporting</b><br/>&#x2022; Every BSD declared in ICU<br/>&#x2022; Every consent obtained or refused (with reason)<br/>&#x2022; Donor demographics, blood group, cause of death<br/>&#x2022; Exclusion criteria assessment outcome",
         "<b>Retrieval &amp; Transplant Reporting</b><br/>&#x2022; Each organ retrieved — type, cross-clamp time, preservation solution<br/>&#x2022; Destination centre for each organ<br/>&#x2022; Every transplant performed — recipient details<br/>&#x2022; Transplant outcomes at 1-year and beyond"),
    ])

    subsection("National Registry Goals (NOTTO)")
    for item in [
        "Real-time, comprehensive database of all organ donation and transplant activity in India",
        "Supports allocation decisions by SOTTO/ROTTO/NOTTO",
        "Enables policy analysis, outcome monitoring and program correction",
        "Tracks waiting list demand vs organ supply gap",
        "Required software: Robust online platform where complete data is available in real time",
        "All retrieval and transplant hospitals to be mandatorily connected to the registry",
    ]:
        bullet(item)
    add_spacer(6)

    subsection("Hospital Preparedness Score")
    para("A formal checklist/score is used by the inspection team during hospital registration to assess readiness for deceased organ donation. Components include: ICU infrastructure, OT availability, trained BDC, active TC, data reporting capability, and staff sensitization level.")
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 14 — KEY FORMS
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 14: KEY FORMS & DOCUMENTATION")
    forms_data = [
        ["<b>Form / Document</b>", "<b>Purpose</b>", "<b>Who Completes It</b>"],
        ["Form 10", "Brain Stem Death Certificate — legal declaration of BSD", "All 4 BDC members (sign twice — after Test 1 and Test 2)"],
        ["Form 11", "Application for registration as Transplant Centre", "Hospital submits to state DHS/AA"],
        ["Form 12", "Certificate of Registration as Transplant Centre", "Issued by state AA upon approval"],
        ["Form 14", "Application for registration as NTORC / Tissue Bank", "Hospital submits to state DHS"],
        ["Form 16", "Certificate of Registration for NTORC — valid 5 years", "Issued by state DHS/AA upon inspection approval"],
        ["Organ Donation Consent Form", "Written consent from Next of Kin for organ donation after BSD", "Transplant Coordinator obtains; NOK signs"],
        ["TC Case Register", "Transplant Coordinator's log — all donor cases, consent outcomes, retrieval details", "TC maintains on a case-by-case basis"],
        ["Donor Pledge Card", "Individual voluntary pledge for deceased organ donation", "Donor registers on NOTTO portal or physical card"],
        ["Donor Maintenance Protocol", "Standardized ICU protocol for haemodynamic management of brain-dead donor", "ICU team follows; documented in medical records"],
        ["NOTTO Online Registry Entry", "Real-time data entry on NOTTO portal for each donor/retrieval/transplant", "TC / designated data entry officer"],
        ["Medico-Legal Clearance", "Police/Magistrate clearance for donation in ML cases", "TC coordinates with appropriate legal authority"],
    ]
    t = Table(forms_data, colWidths=[(W-3.6*cm)*p for p in [0.20, 0.45, 0.35]])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,0), NAVY),
        ("TEXTCOLOR",     (0,0), (-1,0), WHITE),
        ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
        ("FONTSIZE",      (0,0), (-1,-1), 9),
        ("ROWBACKGROUNDS",(0,1), (-1,-1), [OFFWHITE, WHITE]),
        ("GRID",          (0,0), (-1,-1), 0.5, LTGRAY),
        ("VALIGN",        (0,0), (-1,-1), "TOP"),
        ("TOPPADDING",    (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LEFTPADDING",   (0,0), (-1,-1), 6),
        ("RIGHTPADDING",  (0,0), (-1,-1), 6),
    ]))
    story.append(t)
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 15 — READINESS CHECKLIST
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 15: HOSPITAL READINESS CHECKLIST",
                   "Before You Apply for NTORC / Transplant Centre Registration")
    two_col_table([
        ("<b>INFRASTRUCTURE</b><br/>"
         "&#x25A1; ICU with ventilators and multi-parameter monitoring<br/>"
         "&#x25A1; Sterile OT available for organ retrieval<br/>"
         "&#x25A1; Cold preservation solutions &amp; temporary organ storage<br/>"
         "&#x25A1; Laboratory: blood group, serology (HIV/HBsAg/HCV/CMV), crossmatch<br/>"
         "&#x25A1; Imaging (CT/MRI) — in-house or formal tie-up<br/>"
         "&#x25A1; Mortuary / post-mortem facility — in-house or government hospital tie-up<br/><br/>"
         "<b>LEGAL &amp; ADMINISTRATIVE</b><br/>"
         "&#x25A1; Hospital registered with state DHS<br/>"
         "&#x25A1; BDC application submitted to state AA<br/>"
         "&#x25A1; MoU with SOTTO established<br/>"
         "&#x25A1; NOTTO online portal registration completed<br/>"
         "&#x25A1; Forms 10, 11/14, 16 obtained and ready",
         "<b>HUMAN RESOURCES</b><br/>"
         "&#x25A1; Medical Administrator designated as nodal officer<br/>"
         "&#x25A1; At least 1 Intensivist/Anaesthetist enrolled in BDC<br/>"
         "&#x25A1; Neurologist/Neurosurgeon on panel (or alternate designated)<br/>"
         "&#x25A1; Minimum 2 NOTTO-trained Transplant Coordinators appointed<br/>"
         "&#x25A1; Retrieval surgeon identified &amp; trained<br/><br/>"
         "<b>PROTOCOLS &amp; AWARENESS</b><br/>"
         "&#x25A1; BSD identification &amp; donor maintenance protocol in ICU<br/>"
         "&#x25A1; Staff sensitization workshops completed (admin, doctors, nurses)<br/>"
         "&#x25A1; Mandatory request policy implemented in all ICUs<br/>"
         "&#x25A1; Data reporting workflow to NOTTO registry established<br/>"
         "&#x25A1; IEC materials and donor pledge resources available"),
    ], col1_header="Infrastructure &amp; Legal", col2_header="Human Resources &amp; Protocols")
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 16 — CHALLENGES & SOLUTIONS
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 16: COMMON CHALLENGES & NOTTO SOLUTIONS")
    challenges = [
        ("Low BSD Certification Rate",
         "Workshops for critical care teams; intensivist as nodal officer; mandatory BSD identification protocol"),
        ("Lack of BSD Awareness (Staff &amp; Public)",
         "Mandatory staff sensitization; IEC campaigns; Organ Donation Day (August 13) events; school/college programs"),
        ("Inadequate Infrastructure",
         "Priority development of high-caseload hospitals as retrieval/transplant centres; NOTP financial support"),
        ("Low Public Willingness to Donate",
         "Pledge card registration drives; celebrity ambassadors; community awareness through SOTTO/ROTTO/NGOs"),
        ("Risk of Organ Trading",
         "Strict THOA enforcement; transparency in allocation through NOTTO registry; penalties for illegal trading"),
        ("Inter-State Organ Transport",
         "Green Corridor policy; DGCA facilitation for air transport; ROTTO/NOTTO coordination for logistics"),
        ("Gaps in Real-Time Data Reporting",
         "Mandatory online entry in NOTTO registry; State Govt responsible; punitive action for non-compliance"),
        ("Lack of NOTTO-ROTTO-SOTTO Integration",
         "Structured network hierarchy; Spain-India MoU for best practices; digital networking platform"),
        ("High Cost of Transplantation",
         "Government insurance schemes; government funding for needy recipients; donor costs borne by recipient/institution/govt"),
        ("Reluctance of States to Adopt THOTA Amendment 2011",
         "Central advocacy and capacity building; NOTTO technical assistance to State DOHs"),
    ]
    two_col_table(challenges, col1_header="Challenge", col2_header="NOTTO Solution")
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 17 — WORKFLOW
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 17: COMPLETE WORKFLOW",
                   "From ICU Admission to Organ Transplantation")
    workflow = [
        ("1. ICU Admission", "Patient admitted to ICU — GCS = 3, non-reactive pupils, absent brainstem reflexes identified"),
        ("2. BSD Identification", "Intensivist (Nodal Officer) and Transplant Coordinator notified. BSD protocol initiated. Reversible causes excluded."),
        ("3. BDC Convened — Test 1", "All 4 BDC members convene. Clinical BSD assessment + Apnea Test performed. Form 10 signed (Test 1)."),
        ("4. Minimum 6-Hour Wait", "Mandatory interval between Test 1 and Test 2. Donor maintenance continues in ICU."),
        ("5. BDC — Test 2", "Repeat clinical BSD assessment by the same BDC panel. Form 10 signed (Test 2)."),
        ("6. BSD Declared — Form 10 Completed", "Brain Stem Death legally declared under THOA. Patient is legally dead."),
        ("7. TC Counsels Family", "Transplant Coordinator counsels NOK. Written consent for organ donation obtained."),
        ("8. SOTTO Notified", "TC notifies SOTTO. Waiting list checked. ABO-compatible recipient identified (local → regional → national escalation)."),
        ("9. Donor Maintained in ICU", "Haemodynamic stabilization protocol continues in ICU. OT prepared. Retrieval team assembled."),
        ("10. Multi-Organ Retrieval in OT", "Retrieval surgeons perform multi-organ and/or tissue retrieval. Time of cross-clamp documented."),
        ("11. Organs Preserved &amp; Packaged", "Organs placed in cold preservation solution, triple-bagged, labeled, maintained at 0–4°C."),
        ("12. Transport Coordinated", "Green Corridor / air transport arranged. TC coordinates with receiving transplant centre."),
        ("13. Organ Transplanted", "Recipient transplant centre performs surgery on compatible recipient within cold ischaemia time limits."),
        ("14. Data Entry — NOTTO Registry", "TC and transplant centre enter all data into NOTTO National Registry in real time."),
    ]
    for step, desc in workflow:
        h3(step)
        para(desc)
        add_spacer(2)
    story.append(PageBreak())

    # ══════════════════════════════════════════════════════════════════════════
    # SECTION 18 — KEY TAKEAWAYS
    # ══════════════════════════════════════════════════════════════════════════
    section_banner("SECTION 18: KEY TAKEAWAYS & CALL TO ACTION",
                   "What Your Hospital Must Do — Summary")
    add_spacer(6)
    takeaways = [
        "Register your hospital as NTORC or Transplant Centre with state DHS — submit Form 14 or Form 11",
        "Constitute a 4-member Brain Death Committee and get it approved by the state Appropriate Authority",
        "Appoint at least 2 NOTTO-trained and approved Transplant Coordinators — mandatory under law",
        "Implement a systematic mandatory ICU screening protocol to identify every potential donor",
        "Ensure ICU, OT, laboratory and cold chain infrastructure are fully functional and inspection-ready",
        "Connect with your state SOTTO for waiting list access, organ allocation, and networking",
        "Enter ALL data (BSD, consent, retrieval, transplant) into NOTTO National Registry in real time",
        "Sensitize ALL hospital staff — doctors, nurses, administrators on BSD, organ donation and THOA",
        "Ensure financial protection for donor families — costs must be borne by recipient/institution/government",
        "Participate in NOTTO IEC campaigns, skills centre training and annual Organ Donation Day (August 13)",
    ]
    for i, t_item in enumerate(takeaways, 1):
        story.append(Paragraph(
            f"<b>&#x2713;&nbsp;&nbsp;{i}.</b>&nbsp;&nbsp;{t_item}",
            S("ta", fontSize=10.5, textColor=TEXT, fontName="Helvetica",
              leftIndent=10, spaceAfter=5, leading=15)
        ))
    add_spacer(12)
    add_hr(color=ORANGE, thickness=2)
    add_spacer(6)

    # References box
    ref_inner = [
        Paragraph("<b>References &amp; Sources</b>",
                  S("refh", fontSize=10, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER)),
        Paragraph(
            "1. NOTTO Transplant Manual — National Organ &amp; Tissue Transplant Organisation, MoHFW<br/>"
            "2. National Organ Transplant Programme (NOTP) Operational Guidelines — DGHS, MoHFW, Govt of India (2021-22 to 2025-26)<br/>"
            "3. Transplantation of Human Organs Act (THOA) 1994 &amp; Amendment 2011 (THOTA)<br/>"
            "4. THO Rules 1995 / 2014 — Ministry of Health &amp; Family Welfare<br/>"
            "5. NOTTO website: notto.mohfw.gov.in",
            S("ref", fontSize=8.5, textColor=LTGRAY, fontName="Helvetica", leading=13, spaceBefore=4)
        ),
    ]
    ref_t = Table([[ref_inner]], colWidths=[W - 3.6*cm])
    ref_t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), NAVY),
        ("TOPPADDING",    (0,0), (-1,-1), 10),
        ("BOTTOMPADDING", (0,0), (-1,-1), 10),
        ("LEFTPADDING",   (0,0), (-1,-1), 14),
        ("RIGHTPADDING",  (0,0), (-1,-1), 14),
        ("LINEABOVE",     (0,0), (-1,0), 3, TEAL),
    ]))
    story.append(ref_t)

    # ── Build ──────────────────────────────────────────────────────────────────
    doc.multiBuild(story, canvasmaker=HeaderFooterCanvas)
    print(f"PDF saved: {OUTPUT}")

build_pdf()
Running Command

cd /home/daytona/workspace/organ-donation-ppt && python build_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/organ-donation-ppt/

Your PDF is ready:

Organ Donation Facility NOTP Guidelines

PDF Document · PDF


What's in the PDF — 18 Sections, Fully Detailed

SectionContent
Cover + TOCBranded cover page, full 18-section table of contents
1. NOTP / NOTTO FrameworkHierarchy (NOTTO → ROTTO → SOTTO → Hospital), key objectives
2. Legal BasisTHOA 1994 + all 10 major changes from Amendment 2011 in a comparison table
3. Types of RegistrationTransplant Centre vs NTORC vs Tissue Bank — side-by-side table
4. Registration Process10 detailed steps from ICU setup to BDC approval
5. InfrastructureICU, OT, lab, imaging requirements in a 2-column table
6. ManpowerAll 6 roles (Medical Admin, Intensivist, Neurologist, TC, Retrieval Surgeon) with full duties
7. Brain Death Committee4-member composition, rules, how to get approved, training
8. BSD Certification Protocol8-step protocol — preconditions → Test 1 → 6-hr wait → Test 2 → Form 10
9. Transplant CoordinatorLegal mandate, full duty list, counseling principles, training
10. Donor Identification & ConsentICU screening, NOK consent types, mandatory request rule, medico-legal, cost policy
11. Organ Retrieval & TransportProcedure, cold ischaemia times table, preservation & green corridor
12. Networking & AllocationSOTTO → ROTTO → NOTTO escalation protocol, allocation principles
13. Data Reporting & RegistryWhat to report, registry goals, preparedness score
14. Key FormsAll 12 forms/documents with purpose and responsible party
15. Hospital Readiness Checklist20-point checklist across 4 categories
16. Challenges & Solutions10 challenges paired with NOTTO solutions
17. Complete Workflow14-step end-to-end workflow from ICU to NOTTO registry
18. Key Takeaways10-point action summary + full references
The PDF includes a running header/footer on every page with the document title and page numbers, formatted in the NOTP navy/teal color scheme.

Provide me little short

Writing File

~/organ-donation-ppt/build_pdf_short.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, PageBreak
)
from reportlab.pdfgen import canvas
from reportlab.lib.colors import HexColor

OUTPUT = "/home/daytona/workspace/organ-donation-ppt/Organ_Donation_Facility_NOTP_Short.pdf"

NAVY   = HexColor("#0D2B55")
TEAL   = HexColor("#0B7A75")
ORANGE = HexColor("#E8601C")
GOLD   = HexColor("#F0A500")
WHITE  = colors.white
LTGRAY = HexColor("#DDE3EC")
OFFWHITE = HexColor("#F4F6F9")
TEXT   = HexColor("#1A1A2E")
SUB    = HexColor("#4A5568")

W, H = A4

# ── Header / Footer ───────────────────────────────────────────────────────────
class HFC(canvas.Canvas):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._saved = []

    def showPage(self):
        self._saved.append(dict(self.__dict__))
        self._startPage()

    def save(self):
        total = len(self._saved)
        for i, s in enumerate(self._saved):
            self.__dict__.update(s)
            pg = i + 1
            self.saveState()
            if pg > 1:
                self.setFillColor(NAVY)
                self.rect(0, H-28, W, 28, fill=1, stroke=0)
                self.setFillColor(TEAL)
                self.rect(0, H-31, W, 3, fill=1, stroke=0)
                self.setFillColor(WHITE)
                self.setFont("Helvetica-Bold", 8)
                self.drawString(15, H-18, "Establishing an Organ Donation Facility — NOTP/NOTTO Guidelines")
                self.setFont("Helvetica", 7.5)
                self.drawRightString(W-15, H-18, "MoHFW | Govt of India")
            self.setFillColor(NAVY)
            self.rect(0, 0, W, 20, fill=1, stroke=0)
            self.setFillColor(ORANGE)
            self.rect(0, 20, W, 2.5, fill=1, stroke=0)
            self.setFillColor(WHITE)
            self.setFont("Helvetica", 7)
            self.drawString(15, 7, "NOTTO Transplant Manual | NOTP Guidelines | THOA 1994 & 2011 | MoHFW, Govt of India")
            self.setFont("Helvetica-Bold", 7.5)
            self.drawRightString(W-15, 7, f"Page {pg} / {total}")
            self.restoreState()
            super().showPage()
        super().save()


def S(name, **kw):
    return ParagraphStyle(name, **kw)

def build():
    doc = SimpleDocTemplate(OUTPUT, pagesize=A4,
                            rightMargin=1.8*cm, leftMargin=1.8*cm,
                            topMargin=1.5*cm, bottomMargin=1.4*cm,
                            title="Organ Donation Facility — NOTP Short Guide")
    story = []

    def sp(h=5): story.append(Spacer(1, h))
    def hr(c=TEAL, t=1.2): story.append(HRFlowable(width="100%", thickness=t, color=c, spaceAfter=3, spaceBefore=3))
    def pb(): story.append(PageBreak())

    def banner(title, sub=None):
        inner = [Paragraph(title, S("bh", fontSize=14, textColor=WHITE,
                                    fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=2))]
        if sub:
            inner.append(Paragraph(sub, S("bs", fontSize=8.5, textColor=LTGRAY,
                                          fontName="Helvetica-Oblique", alignment=TA_CENTER)))
        t = Table([[inner]], colWidths=[W-3.6*cm])
        t.setStyle(TableStyle([
            ("BACKGROUND",    (0,0), (-1,-1), NAVY),
            ("TOPPADDING",    (0,0), (-1,-1), 8), ("BOTTOMPADDING", (0,0), (-1,-1), 8),
            ("LEFTPADDING",   (0,0), (-1,-1), 10), ("RIGHTPADDING",  (0,0), (-1,-1), 10),
            ("LINEBELOW",     (0,0), (-1,-1), 2.5, TEAL),
        ]))
        story.append(t); sp(6)

    def sub(text, bg=TEAL):
        t = Table([[Paragraph(text, S("sh", fontSize=10, textColor=WHITE,
                                      fontName="Helvetica-Bold"))]], colWidths=[W-3.6*cm])
        t.setStyle(TableStyle([
            ("BACKGROUND",    (0,0), (-1,-1), bg),
            ("TOPPADDING",    (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4),
            ("LEFTPADDING",   (0,0), (-1,-1), 8), ("RIGHTPADDING",  (0,0), (-1,-1), 8),
            ("LINEBELOW",     (0,0), (-1,-1), 1.5, ORANGE),
        ]))
        story.append(t); sp(4)

    def para(text):
        story.append(Paragraph(text, S("p", fontSize=9, textColor=TEXT, fontName="Helvetica",
                                       alignment=TA_JUSTIFY, spaceAfter=3, leading=13)))

    def bul(text, indent=0):
        story.append(Paragraph(f"&#x2022;&nbsp;{text}",
                                S("b", fontSize=9, textColor=TEXT, fontName="Helvetica",
                                  leftIndent=12+indent*10, spaceAfter=2, leading=12)))

    def num(n, text):
        story.append(Paragraph(f"<b>{n}.</b>&nbsp;{text}",
                                S("n", fontSize=9, textColor=TEXT, fontName="Helvetica",
                                  leftIndent=14, spaceAfter=2, leading=12)))

    def two_col(rows, h1=None, h2=None):
        cw = (W-3.6*cm) / 2
        data = []
        if h1:
            data.append([Paragraph(f"<b>{h1}</b>", S("th", fontSize=9, textColor=WHITE,
                                                       fontName="Helvetica-Bold", alignment=TA_CENTER)),
                          Paragraph(f"<b>{h2}</b>", S("th2", fontSize=9, textColor=WHITE,
                                                        fontName="Helvetica-Bold", alignment=TA_CENTER))])
        for r in rows:
            data.append([Paragraph(r[0], S("td", fontSize=8.5, textColor=TEXT, fontName="Helvetica", leading=12)),
                          Paragraph(r[1], S("td2", fontSize=8.5, textColor=TEXT, fontName="Helvetica", leading=12))])
        t = Table(data, colWidths=[cw, cw])
        ts = [("VALIGN",(0,0),(-1,-1),"TOP"), ("GRID",(0,0),(-1,-1),0.4,LTGRAY),
              ("ROWBACKGROUNDS",(0,0 if not h1 else 1),(-1,-1),[OFFWHITE,WHITE]),
              ("TOPPADDING",(0,0),(-1,-1),4), ("BOTTOMPADDING",(0,0),(-1,-1),4),
              ("LEFTPADDING",(0,0),(-1,-1),6), ("RIGHTPADDING",(0,0),(-1,-1),6)]
        if h1:
            ts += [("BACKGROUND",(0,0),(-1,0),NAVY), ("TEXTCOLOR",(0,0),(-1,0),WHITE)]
        t.setStyle(TableStyle(ts))
        story.append(t); sp(5)

    # ══════════ COVER ══════════
    cov = [[
        Paragraph("ESTABLISHING AN ORGAN DONATION FACILITY AT YOUR HOSPITAL",
                  S("ct", fontSize=20, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=6)),
        Paragraph("Quick Reference Guide — NOTP Operational Guidelines",
                  S("cs", fontSize=11, textColor=GOLD, fontName="Helvetica", alignment=TA_CENTER, spaceAfter=4)),
        Paragraph("NOTTO Transplant Manual | THOA 1994 &amp; Amendment 2011 | MoHFW, Govt of India",
                  S("cr", fontSize=9, textColor=LTGRAY, fontName="Helvetica-Oblique", alignment=TA_CENTER)),
    ]]
    ct = Table([cov], colWidths=[W-3.6*cm])
    ct.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,-1),NAVY),
        ("TOPPADDING",(0,0),(-1,-1),55), ("BOTTOMPADDING",(0,0),(-1,-1),55),
        ("LEFTPADDING",(0,0),(-1,-1),20), ("RIGHTPADDING",(0,0),(-1,-1),20),
        ("LINEBELOW",(0,0),(-1,-1),4,ORANGE),
    ]))
    story.append(ct); pb()

    # ══════════ 1. FRAMEWORK ══════════
    banner("1. NOTP / NOTTO FRAMEWORK")
    para("<b>NOTP</b> (National Organ Transplant Programme) is the MoHFW flagship scheme. <b>NOTTO</b> is the apex body at Safdarjung Hospital, New Delhi. The network flows: <b>NOTTO → ROTTO (4 zones) → SOTTO (each state/UT) → Hospital</b>.")
    sp(3)
    two_col([
        ("<b>NOTTO</b> — National apex; networking, registry, biomaterial centre",
         "<b>ROTTO</b> — 4 Regional bodies (North/South/East/West)"),
        ("<b>SOTTO</b> — One per state/UT; allocation, waiting list",
         "<b>Hospital</b> — Transplant Centre OR NTORC (retrieval only)"),
    ])

    # ══════════ 2. LEGAL BASIS ══════════
    banner("2. LEGAL BASIS — THOA 1994 &amp; Amendment 2011")
    two_col([
        ("<b>THOA 1994</b><br/>&#x2022; Legalized Brain Stem Death in India<br/>&#x2022; Permitted deceased donor transplantation<br/>&#x2022; Prohibited commercial organ trading",
         "<b>Amendment 2011 (THOTA) — Key Changes</b><br/>&#x2022; Intensivist/Anaesthetist can declare BSD (if no neurologist)<br/>&#x2022; Any ICU hospital can register as NTORC<br/>&#x2022; Transplant Coordinators made mandatory<br/>&#x2022; Mandatory request to every ICU family<br/>&#x2022; Donor costs NOT borne by donor family<br/>&#x2022; Central Govt mandated to form NOTTO &amp; national registry"),
    ])
    pb()

    # ══════════ 3. TYPES OF REGISTRATION ══════════
    banner("3. TYPES OF HOSPITAL REGISTRATION")
    reg = [
        ["<b>Type</b>","<b>Name</b>","<b>Can Do</b>","<b>Form</b>"],
        ["1","Transplant Centre","Transplantation + Retrieval + BSD","Form 11/12"],
        ["2","NTORC (Non-Transplant Organ Retrieval Centre)","BSD Declaration + Retrieval ONLY","Form 14/16"],
        ["3","Tissue Bank","Skin/Bone/Heart valve bank","Form 14"],
    ]
    t = Table(reg, colWidths=[(W-3.6*cm)*p for p in [0.07,0.38,0.42,0.13]])
    t.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,0),NAVY), ("TEXTCOLOR",(0,0),(-1,0),WHITE),
        ("FONTSIZE",(0,0),(-1,-1),9), ("ROWBACKGROUNDS",(0,1),(-1,-1),[OFFWHITE,WHITE]),
        ("GRID",(0,0),(-1,-1),0.4,LTGRAY), ("VALIGN",(0,0),(-1,-1),"TOP"),
        ("TOPPADDING",(0,0),(-1,-1),5), ("BOTTOMPADDING",(0,0),(-1,-1),5),
        ("LEFTPADDING",(0,0),(-1,-1),6), ("RIGHTPADDING",(0,0),(-1,-1),6),
        ("BACKGROUND",(0,1),(0,1),NAVY), ("TEXTCOLOR",(0,1),(0,1),WHITE),
        ("BACKGROUND",(0,2),(0,2),TEAL), ("TEXTCOLOR",(0,2),(0,2),WHITE),
        ("BACKGROUND",(0,3),(0,3),ORANGE), ("TEXTCOLOR",(0,3),(0,3),WHITE),
    ]))
    story.append(t); sp(5)
    para("<i>All registrations require approval from Appropriate Authority (AA) = DHS of state/UT.</i>")
    sp(6)

    # ══════════ 4. REGISTRATION STEPS ══════════
    banner("4. STEP-BY-STEP REGISTRATION PROCESS")
    for n, s in [
        (1,"Ensure functional ICU with ventilators, monitoring, and 24x7 intensivist"),
        (2,"Ensure sterile OT for organ retrieval + cold preservation solutions + temporary storage"),
        (3,"Set up Lab (blood group, serology: HIV/HBsAg/HCV/CMV) and imaging (CT/MRI tie-up)"),
        (4,"Tie up with a government hospital for post-mortem in medico-legal deaths"),
        (5,"Appoint minimum 2 NOTTO-trained Transplant Coordinators (mandatory under THOTA 2011)"),
        (6,"Fill Form 14 (NTORC) or Form 11 (Transplant Centre) → submit to state DHS"),
        (7,"Inspection by Appropriate Authority using hospital readiness checklist"),
        (8,"Receive Certificate of Registration — Form 16 (valid 5 years)"),
        (9,"Apply to state AA for Brain Death Committee (BDC) approval"),
        (10,"Once BDC approved — begin BSD declarations, organ retrieval & NOTTO data entry"),
    ]:
        num(n, s)
    pb()

    # ══════════ 5. BRAIN DEATH COMMITTEE ══════════
    banner("5. BRAIN DEATH COMMITTEE (BDC)")
    sub("Composition — 4 Members (THOA 1994 + 2011)")
    for n, m in [
        (1,"Medical Administrator in charge of the hospital"),
        (2,"Intensivist / Anaesthesiologist"),
        (3,"Neurologist / Neurosurgeon (Physician/Surgeon if unavailable — post-2011)"),
        (4,"Medical Officer treating the patient"),
    ]:
        num(n, m)
    sp(5)
    sub("Key Rules", bg=ORANGE)
    for r in [
        "Transplant team doctors <b>CANNOT</b> be BDC members — complete separation mandatory",
        "Transplant Coordinator must be present during BSD declaration (THOA Rules 2014)",
        "All 4 members must sign Form 10 after both BSD tests",
        "Apply to state AA/DHS for BDC approval after obtaining Form 16",
    ]:
        bul(r)
    sp(6)

    # ══════════ 6. BSD PROTOCOL ══════════
    banner("6. BSD CERTIFICATION PROTOCOL")
    for n, s in [
        (1,"<b>Suspect BSD</b>: GCS = 3/15, non-reactive pupils, absent brainstem reflexes in ICU"),
        (2,"<b>Preconditions</b>: Rule out hypothermia, drugs, metabolic causes, shock"),
        (3,"<b>TEST 1</b>: All 4 BDC members — absent brainstem reflexes + Apnea Test (PaCO2 ↑ ≥20 mmHg, no spontaneous breath) → sign Form 10"),
        (4,"<b>Wait minimum 6 hours</b> between Test 1 and Test 2"),
        (5,"<b>TEST 2</b>: Repeat full clinical assessment by same BDC → sign Form 10"),
        (6,"<b>Form 10 completed</b> → BSD legally declared under THOA → TC begins NOK counseling"),
    ]:
        num(n, s)
    pb()

    # ══════════ 7. TRANSPLANT COORDINATOR ══════════
    banner("7. TRANSPLANT COORDINATOR (TC)")
    two_col([
        ("<b>Legal Status</b><br/>&#x2022; Mandatory in all transplant/retrieval hospitals<br/>&#x2022; Min 2 TCs trained &amp; approved by NOTTO<br/>&#x2022; Must be present during BSD declaration<br/>&#x2022; Cannot be part of treating or transplant team",
         "<b>Key Duties</b><br/>&#x2022; Counsel Next of Kin (NOK) — obtain written consent<br/>&#x2022; Notify SOTTO for organ allocation<br/>&#x2022; Coordinate OT, retrieval team, transport<br/>&#x2022; Arrange Green Corridor / air transport<br/>&#x2022; Enter all data in NOTTO National Registry"),
        ("<b>Training</b><br/>&#x2022; Initial induction by NOTTO — mandatory<br/>&#x2022; Regular refresher training (soft skills, counseling)<br/>&#x2022; Skills centre training at NOTTO/ROTTO/SOTTO",
         "<b>Counseling Rules</b><br/>&#x2022; Mandatory request — every ICU family must be approached<br/>&#x2022; Non-coercive, sensitive approach<br/>&#x2022; Explain BSD clearly in layman's terms<br/>&#x2022; Respect cultural/religious beliefs"),
    ])

    # ══════════ 8. DONOR CONSENT & COSTS ══════════
    banner("8. DONOR IDENTIFICATION, CONSENT &amp; COSTS")
    two_col([
        ("<b>Consent Types</b><br/>&#x2022; Before death: donor's own pledge (NOTTO portal/card)<br/>&#x2022; After death: closest NOK — spouse &gt; children &gt; parents &gt; siblings<br/>&#x2022; Written signed consent mandatory",
         "<b>Cost Policy (THOTA 2011)</b><br/>Donor management, retrieval, transport &amp; preservation costs borne by:<br/>&#x2022; Recipient OR<br/>&#x2022; Institution OR<br/>&#x2022; Government / NGO<br/><b>NOT by the donor family</b>"),
        ("<b>Exclusion Criteria</b><br/>&#x2022; Active malignancy<br/>&#x2022; Uncontrolled sepsis<br/>&#x2022; HIV disease, prion disease<br/>&#x2022; Certain viral encephalitides",
         "<b>Medico-Legal Cases</b><br/>&#x2022; Simplified under THOTA 2011<br/>&#x2022; TC coordinates Police/Magistrate clearance<br/>&#x2022; Post-mortem tie-up with govt hospital<br/>&#x2022; No delay in organ retrieval"),
    ])
    pb()

    # ══════════ 9. ORGAN RETRIEVAL & TRANSPORT ══════════
    banner("9. ORGAN RETRIEVAL, PRESERVATION &amp; TRANSPORT")
    sub("Cold Ischaemia Time Limits")
    ci = [
        ["<b>Organ</b>","<b>Max Cold Ischaemia</b>"],
        ["Heart","4–6 hours"],["Lungs","6–8 hours"],
        ["Liver","12–24 hours"],["Pancreas","12–24 hours"],
        ["Kidney","24–36 hours"],["Cornea","Up to 14 days"],
    ]
    t = Table(ci, colWidths=[(W-3.6*cm)*0.5,(W-3.6*cm)*0.5])
    t.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,0),NAVY),("TEXTCOLOR",(0,0),(-1,0),WHITE),
        ("FONTSIZE",(0,0),(-1,-1),9),("ROWBACKGROUNDS",(0,1),(-1,-1),[OFFWHITE,WHITE]),
        ("GRID",(0,0),(-1,-1),0.4,LTGRAY),("ALIGN",(0,0),(-1,-1),"CENTER"),
        ("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
    ]))
    story.append(t); sp(5)
    two_col([
        ("<b>Preservation</b><br/>&#x2022; Cold preservation solution (HTK/UW/Celsior)<br/>&#x2022; Triple-bag + rigid outer container<br/>&#x2022; 0–4°C throughout<br/>&#x2022; Label: organ, blood group, cross-clamp time",
         "<b>Transport</b><br/>&#x2022; Green Corridor (police escort) for road<br/>&#x2022; DGCA-facilitated air transport (inter-state)<br/>&#x2022; Chain of custody at each handover<br/>&#x2022; TC coordinates with recipient centre"),
    ])

    # ══════════ 10. NETWORKING & ALLOCATION ══════════
    banner("10. NETWORKING &amp; ORGAN ALLOCATION")
    for n, s in [
        (1,"Donor identified → TC immediately notifies SOTTO"),
        (2,"SOTTO checks state waiting list (ABO match, urgency, weight)"),
        (3,"No match in state → escalate to ROTTO (regional)"),
        (4,"No match regionally → escalate to NOTTO (national)"),
        (5,"NOTTO identifies recipient, coordinates inter-state transport"),
        (6,"All allocation decisions entered into NOTTO registry in real time"),
    ]:
        num(n, s)
    sp(4)
    para("<b>Important:</b> Hospitals <b>cannot independently allocate organs</b>. All allocations routed through SOTTO → ROTTO → NOTTO. Non-compliance = punitive action under law.")
    pb()

    # ══════════ 11. KEY FORMS ══════════
    banner("11. KEY FORMS &amp; DOCUMENTATION")
    fd = [
        ["<b>Form</b>","<b>Purpose</b>"],
        ["Form 10","Brain Stem Death Certificate — signed by all 4 BDC members after both tests"],
        ["Form 11","Application for registration as Transplant Centre"],
        ["Form 12","Certificate of Registration — Transplant Centre"],
        ["Form 14","Application for registration as NTORC / Tissue Bank"],
        ["Form 16","Certificate of Registration — NTORC (valid 5 years)"],
        ["Consent Form","Written NOK consent for organ donation after BSD"],
        ["TC Register","TC case log — all donor cases, outcomes, retrieval details"],
        ["NOTTO Registry","Real-time online entry of all donation/retrieval/transplant data"],
    ]
    t = Table(fd, colWidths=[(W-3.6*cm)*0.22,(W-3.6*cm)*0.78])
    t.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,0),NAVY),("TEXTCOLOR",(0,0),(-1,0),WHITE),
        ("FONTSIZE",(0,0),(-1,-1),9),("ROWBACKGROUNDS",(0,1),(-1,-1),[OFFWHITE,WHITE]),
        ("GRID",(0,0),(-1,-1),0.4,LTGRAY),("VALIGN",(0,0),(-1,-1),"TOP"),
        ("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
        ("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6),
    ]))
    story.append(t); sp(6)

    # ══════════ 12. CHECKLIST ══════════
    banner("12. HOSPITAL READINESS CHECKLIST")
    two_col([
        ("<b>Infrastructure</b><br/>"
         "&#x25A1; ICU with ventilators &amp; monitoring<br/>"
         "&#x25A1; Sterile OT for retrieval<br/>"
         "&#x25A1; Cold preservation storage<br/>"
         "&#x25A1; Lab (blood group, serology)<br/>"
         "&#x25A1; CT/MRI (in-house or tie-up)<br/>"
         "&#x25A1; Post-mortem tie-up<br/><br/>"
         "<b>Legal / Admin</b><br/>"
         "&#x25A1; Hospital registered with DHS<br/>"
         "&#x25A1; BDC applied &amp; approved<br/>"
         "&#x25A1; NOTTO portal registration done<br/>"
         "&#x25A1; Forms 10, 14/11, 16 in place",
         "<b>Human Resources</b><br/>"
         "&#x25A1; Medical Admin as nodal officer<br/>"
         "&#x25A1; Intensivist on BDC<br/>"
         "&#x25A1; Neurologist / alternate designated<br/>"
         "&#x25A1; Min 2 NOTTO-trained TCs appointed<br/>"
         "&#x25A1; Retrieval surgeon identified<br/><br/>"
         "<b>Protocols</b><br/>"
         "&#x25A1; BSD &amp; donor maintenance protocol<br/>"
         "&#x25A1; Staff sensitization done<br/>"
         "&#x25A1; Mandatory request policy in ICU<br/>"
         "&#x25A1; NOTTO data entry workflow set up"),
    ])
    pb()

    # ══════════ 13. WORKFLOW ══════════
    banner("13. END-TO-END WORKFLOW — ICU to Transplantation")
    flow = [
        ("ICU → Suspect BSD","GCS 3, non-reactive pupils, absent brainstem reflexes"),
        ("BDC Test 1","BSD assessment + Apnea Test → Form 10 signed"),
        ("6-hour wait","Mandatory interval; donor maintained in ICU"),
        ("BDC Test 2","Repeat assessment → Form 10 signed → BSD declared"),
        ("TC Counsels NOK","Written consent obtained"),
        ("Notify SOTTO","Waiting list matched (SOTTO → ROTTO → NOTTO if needed)"),
        ("Multi-Organ Retrieval in OT","Organs harvested, cross-clamp time recorded"),
        ("Preserve &amp; Transport","Cold chain maintained; Green Corridor / air transport"),
        ("Transplant at Recipient Centre","Surgery performed within cold ischaemia limits"),
        ("NOTTO Registry Entry","All data entered in real time"),
    ]
    fd2 = [["<b>Step</b>","<b>Action</b>"]] + [[a, b] for a, b in flow]
    t = Table(fd2, colWidths=[(W-3.6*cm)*0.30,(W-3.6*cm)*0.70])
    t.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,0),NAVY),("TEXTCOLOR",(0,0),(-1,0),WHITE),
        ("FONTSIZE",(0,0),(-1,-1),9),("ROWBACKGROUNDS",(0,1),(-1,-1),[OFFWHITE,WHITE]),
        ("GRID",(0,0),(-1,-1),0.4,LTGRAY),("VALIGN",(0,0),(-1,-1),"TOP"),
        ("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
        ("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6),
    ]))
    story.append(t); sp(5)

    # ══════════ 14. KEY TAKEAWAYS ══════════
    banner("14. KEY TAKEAWAYS")
    for i, t_item in enumerate([
        "Register as NTORC (Form 14) or Transplant Centre (Form 11) with state DHS",
        "Constitute a 4-member BDC and get it approved by state AA",
        "Appoint minimum 2 NOTTO-approved Transplant Coordinators",
        "Implement mandatory ICU BSD screening protocol",
        "Ensure ICU, OT, lab and cold chain infrastructure is inspection-ready",
        "Connect with state SOTTO for allocation and networking",
        "Enter ALL data into NOTTO National Registry in real time",
        "Sensitize all staff — doctors, nurses, admin — on BSD and THOA",
        "Donor family must NOT be charged — costs borne by recipient/institution/govt",
    ], 1):
        story.append(Paragraph(f"<b>&#x2713; {i}.</b>&nbsp;&nbsp;{t_item}",
                                S("tk", fontSize=9.5, textColor=TEXT, fontName="Helvetica",
                                  leftIndent=10, spaceAfter=4, leading=13)))
    sp(8)
    hr(ORANGE, 2)
    sp(4)
    ref = Table([[Paragraph(
        "<b>Sources:</b> NOTTO Transplant Manual | NOTP Operational Guidelines (2021-26) | "
        "THOA 1994 &amp; Amendment 2011 | THO Rules 1995/2014 | MoHFW, Govt of India | notto.mohfw.gov.in",
        S("ref", fontSize=7.5, textColor=LTGRAY, fontName="Helvetica-Oblique", alignment=TA_CENTER)
    )]], colWidths=[W-3.6*cm])
    ref.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,-1),NAVY),
        ("TOPPADDING",(0,0),(-1,-1),8),("BOTTOMPADDING",(0,0),(-1,-1),8),
        ("LEFTPADDING",(0,0),(-1,-1),12),("RIGHTPADDING",(0,0),(-1,-1),12),
    ]))
    story.append(ref)

    doc.multiBuild(story, canvasmaker=HFC)
    print(f"Short PDF saved: {OUTPUT}")

build()
Running Command

cd /home/daytona/workspace/organ-donation-ppt && python build_pdf_short.py 2>&1

Running Command

ls -lh /home/daytona/workspace/organ-donation-ppt/Organ_Donation_Facility_NOTP_Short.pdf

Here's the compact version:

Organ Donation Facility NOTP Short

PDF Document · PDF


This shorter PDF covers all 14 key topics in a concise format:
#Topic
1NOTP / NOTTO Framework
2Legal Basis — THOA 1994 & 2011
3Types of Registration (table)
410-Step Registration Process
5Brain Death Committee
6BSD Certification Protocol
7Transplant Coordinator
8Donor Consent & Costs
9Organ Retrieval & Transport (cold ischaemia table)
10Networking & Allocation
11Key Forms & Documentation
12Hospital Readiness Checklist
13End-to-End Workflow Table
14Key Takeaways
Compared to the detailed version (52KB, many pages), this is a compact quick-reference guide with all essential content — no filler text, mostly tables and bullet points.

Please explain me in easy words

Sure! Here's the whole thing explained in simple, everyday language — like explaining it to a colleague over tea. ☕

🏥 How to Start an Organ Donation Program at Your Hospital

Think of it Like This...

Imagine someone meets with a serious accident and is in your ICU. Their brain has completely stopped working — they are brain dead. Their heart, kidneys, and liver are still working fine. If your hospital has the right setup, those organs can save 5-8 other lives within the next few hours.
That's exactly what this program is about. Here's how to set it up, step by step.

1. 🏛️ Who is in Charge? (The Bosses)

Think of it like a chain of command in the army:
LevelWho They AreWhat They Do
NOTTONational body (New Delhi)The top boss — makes all the rules, runs the national waiting list
ROTTO4 regional officesMiddle management — covers your zone (North/South/East/West)
SOTTOOne per stateYour state's transplant office — matches donors to patients
Your HospitalYouActually finds donors, removes organs, does surgery
Think of it like Zomato: NOTTO is the HQ, ROTTO is the regional hub, SOTTO is the city office, your hospital is the restaurant. You cook (retrieve organs), they deliver (allocate to the right patient).

2. ⚖️ What is the Law?

The law is called THOA — Transplantation of Human Organs Act, 1994 (updated in 2011).
In simple words, the law says:
  • Brain death = legal death in India (so removing organs is legal)
  • Any ICU hospital can participate — you don't need to be a big transplant centre
  • You MUST have a Transplant Coordinator (a dedicated person to handle families)
  • You MUST ask every ICU family if they want to donate
  • Donor's family pays NOTHING — the recipient or government pays all costs
  • No selling organs — strictly illegal, punishable

3. 📋 What Type Should Your Hospital Register As?

There are 3 options. Pick based on what your hospital can do:
Option A — Transplant Centre
Your hospital does the full thing — removes organs AND transplants them into a new patient. Big hospitals with full surgical teams.
Option B — NTORC (Retrieval Only Centre)
Your hospital just removes the organs from the donor and sends them to a transplant centre. Any hospital with an ICU can do this. This is the most common starting point.
Option C — Tissue Bank
Your hospital stores and provides tissues like skin, bone, cornea for other hospitals.
Most hospitals should start as NTORC — it's simpler and requires less infrastructure.

4. 🪜 How to Get Started — 10 Steps

Think of this as a checklist to open a new department:
  1. Set up your ICU properly — ventilators, monitors, a doctor available 24x7
  2. Have an Operation Theatre ready for organ removal
  3. Get your lab ready — blood tests, HIV/Hepatitis tests, blood group matching
  4. Tie up with a nearby government hospital for post-mortem cases
  5. Hire a Transplant Coordinator — a trained person whose full-time job is to talk to families and coordinate everything
  6. Fill the registration form (Form 14 for NTORC) and submit to your state's Health Department
  7. Government inspector visits your hospital to check everything is in order
  8. You get your certificate (Form 16) — valid for 5 years
  9. Apply to form your Brain Death Committee — a panel of 4 doctors
  10. You're ready to go! Start finding donors, removing organs, saving lives.

5. 🧠 What is Brain Death? And Why Does It Matter?

Brain death means: The brain has completely and permanently stopped. The person will never wake up, ever. But machines keep the heart beating and blood flowing.
Why it matters: Those organs are alive and can be given to someone who desperately needs them.
How do you officially declare it? The Brain Death Committee (BDC):
Your hospital must have a panel of 4 doctors to officially confirm brain death:
  1. The hospital's senior administrator / medical head
  2. An ICU doctor or anaesthetist
  3. A neurologist (brain specialist) — or any senior doctor if neurologist is not available
  4. The doctor who was treating the patient
⚠️ IMPORTANT RULE: The transplant surgeon who will do the operation CANNOT be in this committee. The person confirming death and the person using the organs must be completely different people. This prevents conflict of interest.
The test is done TWICE, 6 hours apart — just to be 100% sure. Both times, all 4 doctors sign a paper called Form 10 (the official death certificate).

6. 🤝 Who Talks to the Family? (Transplant Coordinator)

This is your most important person. Every hospital MUST have at least 2 of them.
Think of them as: A caring counselor + logistics manager + data entry officer — all in one.
Their job:
  • After brain death is declared, they sit with the family and gently explain what happened
  • They answer questions: "What is brain death?" "Will donation hurt my family member?" "What happens to the body?"
  • They get the family's written permission (consent) to donate organs
  • Once consent is given, they call SOTTO, arrange the OT, call the retrieval surgeon, book transport, and enter everything into the computer system
  • The family NEVER deals with logistics — the TC handles it all
Rule: The TC must NOT be the same person who was treating the patient, or the one who will do the transplant. Fresh person, no conflict.

7. 🫀 What Happens to the Organs? (The Clock is Ticking!)

Once organs are removed, there's a strict time limit before they stop being usable:
OrganTime LimitWhy the Urgency
Heart4–6 hoursMost sensitive organ
Lungs6–8 hoursVery fragile
Liver12–24 hoursModerate urgency
Kidney24–36 hoursMost forgiving
Cornea (eye)Up to 14 daysCan be stored in eye bank
The organs are packed like this:
  • Placed in cold preservation liquid (like a special salt solution)
  • Sealed in 3 bags
  • Kept on ice at 0–4°C (like a cool box for food, but sterile)
  • Labeled clearly with organ name, blood group, time it was removed
Transport:
  • Road: Police escort clears all traffic signals — called a "Green Corridor"
  • Air: Special permission from aviation authority for urgent inter-state flights

8. 🔁 How Does the Right Patient Get the Organ?

Your hospital cannot decide who gets the organ. It goes through the system:
  1. You find a donor → Call SOTTO (your state office)
  2. SOTTO checks: who in your state needs this organ and matches the blood group?
  3. If no match in state → ROTTO checks the whole region
  4. If still no match → NOTTO checks nationally
  5. The right patient is found → organ is sent → surgery is done
It's like blood bank stock management — first use locally, if not used, it goes wider.

9. 📝 Important Papers You Need

PaperWhat It Is
Form 10The brain death certificate — 4 doctors sign it twice
Form 14Your application to become an NTORC
Form 16The government's approval certificate you receive
Consent FormFamily's written permission to donate
NOTTO Online EntryEvery case must be entered into the national computer system

10. ✅ Is Your Hospital Ready? Quick Check

Before you apply, make sure you have:
  • ICU with ventilators ✓
  • Operation theatre available ✓
  • Basic lab (blood group, HIV tests) ✓
  • At least 2 trained Transplant Coordinators ✓
  • 4 doctors willing to be on the Brain Death Committee ✓
  • Your hospital is registered with the state Health Department ✓
  • You've told your ICU staff, nurses and admin about this program ✓

🎯 The Big Picture in One Line

Any hospital with an ICU can save lives through organ donation — you just need the right team, the right paperwork, and connect to the government network (SOTTO → ROTTO → NOTTO).
The law supports you. The government network is ready. The families are often willing. The missing piece is often just your hospital setting up the program.

Want me to make this explanation into a PDF or add it to the PowerPoint as speaker notes?
This is a shared conversation. Sign in to Orris to start your own chat.