Kindly prepare best sop pdf for biomedical waste with nhm logo and hospital name - SDH dwarka hospital

Reading File
Searching the Web

NHM National Health Mission logo PNG download official

Running Command

mkdir -p /tmp/workspace/bmw-sop && ls /tmp/workspace/

Running Command

cd /tmp/workspace/bmw-sop && python3 << 'EOF' import requests # Download NHM logo from iconape (SVG/PNG) urls = [ ("https://iconape.com/wp-content/files/tx/264217/svg/264217.svg", "nhm_logo.svg"), ("https://www.clipartmax.com/png/middle/145-1452518_national-rural-health-mission-logo-vector.png", "nhm_logo.png"), ] for url, fname in urls: try: r = requests.get(url, timeout=10, headers={"User-Agent": "Mozilla/5.0"}) if r.status_code == 200: with open(fname, "wb") as f: f.write(r.content) print(f"Downloaded {fname}: {len(r.content)} bytes") else: print(f"Failed {url}: {r.status_code}") except Exception as e: print(f"Error {url}: {e}") EOF

Running Command

cd /tmp/workspace/bmw-sop && python3 << 'PYEOF' from PIL import Image import io # Verify image img = Image.open("nhm_logo.png") print(f"NHM logo size: {img.size}, mode: {img.mode}") img.save("nhm_logo_converted.png") print("Saved nhm_logo_converted.png") PYEOF

Running Command

cat > /tmp/workspace/bmw-sop/generate_sop.py << 'PYEOF' 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, TA_RIGHT from reportlab.platypus import ( SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, Image as RLImage, PageBreak, KeepTogether ) from reportlab.pdfgen import canvas from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate from reportlab.lib.colors import HexColor, white, black from datetime import datetime import os OUTPUT = "/tmp/workspace/bmw-sop/BMW_SOP_SDH_Dwarka.pdf" LOGO_PATH = "/tmp/workspace/bmw-sop/nhm_logo_converted.png" # ── Colours ────────────────────────────────────────────────────────────────── DARK_GREEN = HexColor("#1a5c2a") MED_GREEN = HexColor("#2e7d32") LIGHT_GREEN = HexColor("#e8f5e9") ORANGE = HexColor("#e65100") LIGHT_ORANGE = HexColor("#fff3e0") BLUE = HexColor("#0d47a1") LIGHT_BLUE = HexColor("#e3f2fd") RED = HexColor("#c62828") YELLOW_BG = HexColor("#fffde7") GREY_BG = HexColor("#f5f5f5") HEADER_BG = HexColor("#1b5e20") TABLE_HDR = HexColor("#2e7d32") PAGE_W, PAGE_H = A4 # ── Styles ──────────────────────────────────────────────────────────────────── styles = getSampleStyleSheet() def S(name, **kw): base = styles.get(name, styles["Normal"]) return ParagraphStyle(name + str(id(kw)), parent=base, **kw) title_style = S("Normal", fontSize=16, fontName="Helvetica-Bold", textColor=white, alignment=TA_CENTER, spaceAfter=2) subtitle_style= S("Normal", fontSize=11, fontName="Helvetica-Bold", textColor=LIGHT_GREEN, alignment=TA_CENTER, spaceAfter=2) hospital_style= S("Normal", fontSize=13, fontName="Helvetica-Bold", textColor=LIGHT_GREEN, alignment=TA_CENTER, spaceAfter=4) sop_title = S("Normal", fontSize=14, fontName="Helvetica-Bold", textColor=DARK_GREEN, alignment=TA_CENTER, spaceAfter=6, spaceBefore=6) h1 = S("Normal", fontSize=12, fontName="Helvetica-Bold", textColor=white, spaceBefore=8, spaceAfter=4) h2 = S("Normal", fontSize=11, fontName="Helvetica-Bold", textColor=DARK_GREEN, spaceBefore=6, spaceAfter=3) body = S("Normal", fontSize=9.5, fontName="Helvetica", leading=14, spaceAfter=3, alignment=TA_JUSTIFY) body_bold = S("Normal", fontSize=9.5, fontName="Helvetica-Bold", leading=14, spaceAfter=3) bullet_style = S("Normal", fontSize=9.5, fontName="Helvetica", leading=14, leftIndent=14, spaceAfter=2, bulletIndent=4, bulletFontName="Helvetica") small_italic = S("Normal", fontSize=8.5, fontName="Helvetica-Oblique", textColor=HexColor("#555555"), spaceAfter=2) table_hdr_st = S("Normal", fontSize=9, fontName="Helvetica-Bold", textColor=white, alignment=TA_CENTER) table_cell = S("Normal", fontSize=9, fontName="Helvetica", leading=12, alignment=TA_LEFT) table_cell_c = S("Normal", fontSize=9, fontName="Helvetica", leading=12, alignment=TA_CENTER) footer_style = S("Normal", fontSize=8, fontName="Helvetica-Oblique", textColor=HexColor("#555555"), alignment=TA_CENTER) warning_style = S("Normal", fontSize=9.5, fontName="Helvetica-Bold", textColor=RED, alignment=TA_CENTER) # ── Section heading helper ──────────────────────────────────────────────────── def section_heading(text, bg=TABLE_HDR): data = [[Paragraph(text, h1)]] t = Table(data, colWidths=[PAGE_W - 4*cm]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 10), ("RIGHTPADDING", (0,0), (-1,-1), 10), ("ROUNDEDCORNERS", [4]), ])) return t def info_box(rows, col_widths, header_row=True, alt_color=LIGHT_GREEN): style_cmds = [ ("GRID", (0,0), (-1,-1), 0.5, HexColor("#cccccc")), ("FONTSIZE", (0,0), (-1,-1), 9), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ] if header_row: style_cmds += [ ("BACKGROUND", (0,0), (-1,0), TABLE_HDR), ("TEXTCOLOR", (0,0), (-1,0), white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("ALIGN", (0,0), (-1,0), "CENTER"), ] for i in range(1, len(rows)): bg = LIGHT_GREEN if i % 2 == 0 else white style_cmds.append(("BACKGROUND", (0,i), (-1,i), bg)) t = Table(rows, colWidths=col_widths) t.setStyle(TableStyle(style_cmds)) return t def colour_box(text, bg=LIGHT_ORANGE, txt_color=ORANGE): p = Paragraph(text, S("Normal", fontSize=9.5, fontName="Helvetica-Bold", textColor=txt_color, alignment=TA_CENTER, spaceBefore=0, spaceAfter=0)) t = Table([[p]], colWidths=[PAGE_W - 4*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), ("BOX", (0,0), (-1,-1), 1, txt_color), ])) return t # ── Canvas callbacks (header/footer on each page) ──────────────────────────── def on_page(canvas_obj, doc): w, h = PAGE_W, PAGE_H # top colour bar canvas_obj.setFillColor(HEADER_BG) canvas_obj.rect(0, h - 25*mm, w, 25*mm, fill=1, stroke=0) # logo try: canvas_obj.drawImage(LOGO_PATH, 12*mm, h - 22*mm, width=38*mm, height=16*mm, preserveAspectRatio=True, mask="auto") except Exception: pass # Hospital name in header canvas_obj.setFillColor(white) canvas_obj.setFont("Helvetica-Bold", 11) canvas_obj.drawCentredString(w/2, h - 10*mm, "SDH DWARKA HOSPITAL") canvas_obj.setFont("Helvetica", 8) canvas_obj.drawCentredString(w/2, h - 15*mm, "Under National Health Mission | Govt. of NCT of Delhi") # SOP tag top-right canvas_obj.setFont("Helvetica-Bold", 8) canvas_obj.setFillColor(LIGHT_GREEN) canvas_obj.drawRightString(w - 12*mm, h - 10*mm, "Biomedical Waste SOP") canvas_obj.drawRightString(w - 12*mm, h - 16*mm, f"Rev. 1.0 | {datetime.now().strftime('%B %Y')}") # bottom footer canvas_obj.setFillColor(HEADER_BG) canvas_obj.rect(0, 0, w, 12*mm, fill=1, stroke=0) canvas_obj.setFillColor(white) canvas_obj.setFont("Helvetica", 7.5) canvas_obj.drawCentredString( w/2, 5*mm, "SOP-BMW-001 | SDH Dwarka Hospital | NHM Delhi | " f"Confidential | Page {canvas_obj.getPageNumber()}" ) canvas_obj.setFillColor(ORANGE) canvas_obj.rect(0, 11*mm, w, 1.2*mm, fill=1, stroke=0) def on_first_page(canvas_obj, doc): on_page(canvas_obj, doc) # ── Build content ───────────────────────────────────────────────────────────── story = [] sp = lambda n=1: Spacer(1, n*mm) # ─ COVER / Title area (below header which is painted by on_page) ─ story += [ sp(32), colour_box("STANDARD OPERATING PROCEDURE", bg=DARK_GREEN, txt_color=white), sp(3), colour_box("BIOMEDICAL WASTE MANAGEMENT", bg=ORANGE, txt_color=white), sp(4), Paragraph("SDH DWARKA HOSPITAL", S("Normal", fontSize=18, fontName="Helvetica-Bold", textColor=DARK_GREEN, alignment=TA_CENTER)), Paragraph("Sub-District Hospital, Dwarka Sector-12, New Delhi - 110078", S("Normal", fontSize=10, fontName="Helvetica", textColor=HexColor("#444"), alignment=TA_CENTER)), sp(4), ] # Meta info box meta = [ [Paragraph("<b>Document No.</b>", table_cell), Paragraph("SOP-BMW-001", table_cell), Paragraph("<b>Version</b>", table_cell), Paragraph("1.0", table_cell)], [Paragraph("<b>Effective Date</b>", table_cell), Paragraph(datetime.now().strftime("%d %B %Y"), table_cell), Paragraph("<b>Review Date</b>", table_cell), Paragraph("Annual", table_cell)], [Paragraph("<b>Prepared By</b>", table_cell), Paragraph("Hospital Infection Control Committee", table_cell), Paragraph("<b>Approved By</b>", table_cell), Paragraph("Medical Superintendent", table_cell)], [Paragraph("<b>Applicable To</b>", table_cell), Paragraph("All departments generating biomedical waste", table_cell), Paragraph("<b>Classification</b>", table_cell), Paragraph("Controlled Document", table_cell)], ] cw = [(PAGE_W-4*cm)/4] * 4 t = Table(meta, colWidths=cw) t.setStyle(TableStyle([ ("GRID", (0,0), (-1,-1), 0.5, HexColor("#aaaaaa")), ("FONTSIZE", (0,0), (-1,-1), 9), ("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,0), (0,-1), LIGHT_GREEN), ("BACKGROUND", (2,0), (2,-1), LIGHT_GREEN), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story += [t, sp(5)] story += [ colour_box( "⚠ This document must be read, understood and followed by ALL hospital staff handling biomedical waste.", bg=LIGHT_ORANGE, txt_color=ORANGE), sp(3), colour_box( "Bio-Medical Waste (Management and Handling) Rules 2016 | CPCB Guidelines | MoHFW Protocols", bg=LIGHT_BLUE, txt_color=BLUE), PageBreak(), ] # ─ 1. PURPOSE ─ story += [ sp(4), section_heading("1. PURPOSE"), sp(2), Paragraph( "This Standard Operating Procedure (SOP) establishes a systematic framework for the " "safe collection, segregation, transportation, storage, treatment, and disposal of " "biomedical waste (BMW) generated at SDH Dwarka Hospital. The objective is to protect " "patients, healthcare workers, waste handlers, and the general public from exposure to " "infectious and hazardous materials, and to ensure compliance with the Bio-Medical " "Waste Management Rules, 2016 as amended.", body), sp(3), ] # ─ 2. SCOPE ─ story += [ section_heading("2. SCOPE"), sp(2), Paragraph("This SOP applies to:", body_bold), ] scope_items = [ "All wards, OPD, OT, labour room, ICU, dialysis unit, dental unit, laboratory, radiology, pharmacy and any other area within SDH Dwarka Hospital.", "All permanent, contractual, and outsourced staff involved in patient care or waste handling.", "Third-party agencies contracted for BMW collection and disposal.", "Visitors and students during their tenure at the hospital.", ] for item in scope_items: story.append(Paragraph(f"• {item}", bullet_style)) story.append(sp(3)) # ─ 3. DEFINITIONS ─ story += [ section_heading("3. KEY DEFINITIONS"), sp(2), ] defn_rows = [ [Paragraph("<b>Term</b>", table_hdr_st), Paragraph("<b>Definition</b>", table_hdr_st)], [Paragraph("Biomedical Waste (BMW)", table_cell_c), Paragraph("Any waste generated during diagnosis, treatment or immunisation of human beings or animals, or in research activities thereof, or in the production or testing of biologicals.", table_cell)], [Paragraph("Segregation", table_cell_c), Paragraph("The process of sorting waste into predefined colour-coded categories at the point of generation.", table_cell)], [Paragraph("Cytotoxic Waste", table_cell_c), Paragraph("Waste containing cytotoxic drugs (genotoxic); requires special handling and incineration.", table_cell)], [Paragraph("CBWTF", table_cell_c), Paragraph("Common Bio-Medical Waste Treatment Facility - authorised off-site treatment plant.", table_cell)], [Paragraph("SPCB/DPCC", table_cell_c), Paragraph("Delhi Pollution Control Committee - state regulatory authority for BMW authorisation.", table_cell)], [Paragraph("HCF", table_cell_c), Paragraph("Health Care Facility - any establishment generating BMW.", table_cell)], [Paragraph("PPE", table_cell_c), Paragraph("Personal Protective Equipment - gloves, mask, gown, goggles, boots.", table_cell)], ] story += [info_box(defn_rows, [(PAGE_W-4*cm)*0.28, (PAGE_W-4*cm)*0.72]), sp(3)] # ─ 4. COLOUR CODING ─ story += [ section_heading("4. COLOUR-CODED SEGREGATION SYSTEM (BMW Rules 2016)"), sp(2), Paragraph( "All BMW MUST be segregated at the point of generation using the four-colour system " "mandated under Schedule I of BMW Management Rules 2016:", body), sp(2), ] cc_rows = [ [Paragraph("<b>Bag / Container Colour</b>", table_hdr_st), Paragraph("<b>Waste Category</b>", table_hdr_st), Paragraph("<b>Treatment / Disposal</b>", table_hdr_st), Paragraph("<b>Examples</b>", table_hdr_st)], [Paragraph("🟡 YELLOW BAG", S("Normal", fontSize=9, fontName="Helvetica-Bold", textColor=HexColor("#795500"), alignment=TA_CENTER)), Paragraph("Cat. 1, 2, 3, 6\nHuman anatomical / animal waste / soiled waste / solid chemical waste", table_cell), Paragraph("Incineration / Deep burial (Cat.1,2) | Pre-treatment + secure landfill (Cat.6)", table_cell), Paragraph("Body parts, blood-soaked items, used bandages, expired cytotoxic drugs", table_cell)], [Paragraph("🔴 RED BAG / CONTAINER", S("Normal", fontSize=9, fontName="Helvetica-Bold", textColor=HexColor("#c62828"), alignment=TA_CENTER)), Paragraph("Cat. 3\nContaminated/recyclable waste", table_cell), Paragraph("Autoclaving / Microwaving / Chemical treatment → recycling", table_cell), Paragraph("Tubing, IV bottles, catheters, non-sharp plastic", table_cell)], [Paragraph("🔵 BLUE / WHITE\nPUNCTURE-PROOF CONTAINER", S("Normal", fontSize=9, fontName="Helvetica-Bold", textColor=BLUE, alignment=TA_CENTER)), Paragraph("Cat. 4\nWaste sharps (used)", table_cell), Paragraph("Autoclaving / Dry heat sterilisation → shredding → metal recycler", table_cell), Paragraph("Needles, syringes, lancets, broken glass ampules, scalpels", table_cell)], [Paragraph("⚫ BLACK BAG", S("Normal", fontSize=9, fontName="Helvetica-Bold", textColor=HexColor("#212121"), alignment=TA_CENTER)), Paragraph("Cat. 7\nGeneral solid waste (non-BMW)", table_cell), Paragraph("Municipal solid waste (MSW) disposal", table_cell), Paragraph("Wrappers, food waste, paper, packaging", table_cell)], [Paragraph("☢ RADIOACTIVE\nLEAD CONTAINER", S("Normal", fontSize=9, fontName="Helvetica-Bold", textColor=HexColor("#6a1a6a"), alignment=TA_CENTER)), Paragraph("Radioactive waste (if applicable)", table_cell), Paragraph("AERB guidelines; stored until safe decay", table_cell), Paragraph("Radio-isotopes used in nuclear medicine", table_cell)], ] cc_col_w = [(PAGE_W-4*cm)*x for x in [0.20, 0.28, 0.27, 0.25]] t = Table(cc_rows, colWidths=cc_col_w) t.setStyle(TableStyle([ ("GRID", (0,0), (-1,-1), 0.5, HexColor("#bbbbbb")), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("BACKGROUND", (0,0), (-1,0), TABLE_HDR), ("BACKGROUND", (0,1), (-1,1), HexColor("#fffde7")), ("BACKGROUND", (0,2), (-1,2), HexColor("#ffebee")), ("BACKGROUND", (0,3), (-1,3), HexColor("#e3f2fd")), ("BACKGROUND", (0,4), (-1,4), HexColor("#efebe9")), ("BACKGROUND", (0,5), (-1,5), HexColor("#f3e5f5")), ])) story += [t, sp(3)] # ─ 5. SEGREGATION PROCEDURE ─ story += [ section_heading("5. WASTE SEGREGATION PROCEDURE"), sp(2), ] seg_steps = [ ("Step 1: Point of Generation", [ "Place the appropriate colour-coded bag/container in a pedal-operated bin at the point of waste generation BEFORE starting any procedure.", "Never segregate waste after it has been mixed — cross-contamination renders the entire batch as Category 1 (highest risk).", "Waste bags must NOT be filled beyond 3/4 (75%) capacity.", ]), ("Step 2: Labelling", [ "All bags must be labelled with: Name of HCF, Department, Date, Waste category.", "Pre-printed tie-tags or stickers approved by the Infection Control Committee shall be used.", "Do NOT write with marker pens directly on bio-hazard bags (ink may bleed).", ]), ("Step 3: Tying / Sealing", [ "Use the neck-lock tie or cable tie provided — never use staple pins or tape alone.", "For sharps containers: close the lid firmly once 3/4 full; do NOT re-open.", "Double-bag yellow bags containing anatomical/cytotoxic waste.", ]), ("Step 4: Transport from Ward", [ "Collect waste using the designated BMW trolley (leak-proof, covered, colour-coded).", "Transport ONLY via the designated BMW corridor or service lift — never through patient/visitor areas.", "Timing: rounds at 6 AM, 12 PM, 6 PM (or as per hospital schedule).", "Waste handler must wear full PPE (heavy-duty gloves, mask, apron, boots).", ]), ] for title, points in seg_steps: story.append(Paragraph(title, h2)) for pt in points: story.append(Paragraph(f"• {pt}", bullet_style)) story.append(sp(1)) story.append(sp(2)) # ─ 6. SHARPS MANAGEMENT ─ story += [ section_heading("6. SHARPS MANAGEMENT (HIGH-PRIORITY)"), sp(2), colour_box("NEVER RECAP NEEDLES | NEVER OVERFILL SHARPS CONTAINERS | " "NEEDLE-STICK INJURY IS PREVENTABLE", bg=HexColor("#ffebee"), txt_color=RED), sp(2), ] sharps_rules = [ "Use single-handed scoop technique or a needle-cutter/hub cutter for needle removal.", "Place used sharps directly into the Blue puncture-proof sharps container at the point of use.", "Sharps containers must be rigid, puncture-resistant, leak-proof, and tamper-evident.", "Close sharps container at 3/4 full; seal, label, and send to BMW storage area.", "Do NOT carry unprotected sharps; do NOT bend, break or manipulate used needles.", "Report needle-stick/sharp injuries IMMEDIATELY to Casualty Medical Officer and Infection Control Nurse.", "Post-exposure prophylaxis (PEP): Report within 2 hours for HIV PEP eligibility assessment.", ] for rule in sharps_rules: story.append(Paragraph(f"▶ {rule}", bullet_style)) story.append(sp(3)) # ─ 7. BMW STORAGE AREA ─ story += [ section_heading("7. BIOMEDICAL WASTE STORAGE AREA - REQUIREMENTS"), sp(2), Paragraph("SDH Dwarka Hospital shall maintain a designated BMW Storage Area (also called Dhabbri/Dustbin Room) meeting the following standards:", body), sp(2), ] storage_rows = [ [Paragraph("<b>Parameter</b>", table_hdr_st), Paragraph("<b>Requirement</b>", table_hdr_st)], [Paragraph("Location", table_cell_c), Paragraph("Separate, restricted, well-ventilated area away from patient zones and food areas", table_cell)], [Paragraph("Signage", table_cell_c), Paragraph("Biohazard symbol displayed prominently; 'Authorised Personnel Only' sign", table_cell)], [Paragraph("Flooring", table_cell_c), Paragraph("Impervious, easy-to-clean; drainage provision with effluent treatment", table_cell)], [Paragraph("Access", table_cell_c), Paragraph("Lockable; key held by senior nursing officer / waste supervisor only", table_cell)], [Paragraph("Maximum Storage Time", table_cell_c), Paragraph("Yellow & Red bag: 48 hours | Sharps: till CBWTF collection (max 7 days)", table_cell)], [Paragraph("Refrigeration", table_cell_c), Paragraph("Required if anatomical waste stored > 24 hours (maintain ≤ 8°C)", table_cell)], [Paragraph("Pest Control", table_cell_c), Paragraph("Anti-rodent / anti-insect measures; monthly fumigation record maintained", table_cell)], [Paragraph("Cleaning", table_cell_c), Paragraph("Storage area disinfected daily with 1% sodium hypochlorite solution", table_cell)], [Paragraph("CCTV/Record", table_cell_c), Paragraph("All BMW handed over to CBWTF must be weighed and entry made in BMW logbook", table_cell)], ] story += [info_box(storage_rows, [(PAGE_W-4*cm)*0.28, (PAGE_W-4*cm)*0.72]), sp(3)] # ─ 8. CBWTF HANDOVER ─ story += [ section_heading("8. HANDOVER TO CBWTF / AUTHORISED TRANSPORTER"), sp(2), ] cbwtf_steps = [ "Verify the CBWTF vehicle has a valid DPCC authorisation before accepting waste.", "Weigh each category of waste separately using calibrated weighing scale; record in the BMW Logbook.", "Issue a signed manifest (Form 3 / e-manifest as per DPCC) for every consignment.", "Retain copy of manifest for minimum 3 years for inspection by DPCC.", "CBWTF representative must sign the handover register with date, time, and quantity.", "Report any non-collection by CBWTF to Infection Control Committee and DPCC within 24 hours.", "Monthly BMW quantity data to be submitted on CPCB's online portal (HCF module).", ] for step in cbwtf_steps: story.append(Paragraph(f"• {step}", bullet_style)) story.append(sp(3)) # ─ 9. LIQUID WASTE ─ story += [ section_heading("9. LIQUID / CHEMICAL WASTE MANAGEMENT"), sp(2), ] liq_rows = [ [Paragraph("<b>Waste Type</b>", table_hdr_st), Paragraph("<b>Handling Protocol</b>", table_hdr_st)], [Paragraph("Blood / body fluids (bulk)", table_cell_c), Paragraph("Pre-treat with 1% hypochlorite (contact 30 min) then discharge to ETP / hospital drain connected to STP", table_cell)], [Paragraph("Lab chemicals (non-hazardous)", table_cell_c), Paragraph("Dilute to permissible limits; drain via plumbed sink connected to ETP", table_cell)], [Paragraph("Fixer / developer (X-ray)", table_cell_c), Paragraph("Collect in labelled containers; hand over to authorised silver-recovery agency", table_cell)], [Paragraph("Mercury waste", table_cell_c), Paragraph("Collect in sealed container; hand over to authorised DPCC hazardous waste transporter; DO NOT drain", table_cell)], [Paragraph("Cytotoxic liquid waste", table_cell_c), Paragraph("Double-bag; yellow cat. — incineration only; wear double gloves + N95 mask", table_cell)], ] story += [info_box(liq_rows, [(PAGE_W-4*cm)*0.27, (PAGE_W-4*cm)*0.73]), sp(3)] # ─ 10. PPE ─ story += [ section_heading("10. PERSONAL PROTECTIVE EQUIPMENT (PPE) PROTOCOL"), sp(2), ] ppe_rows = [ [Paragraph("<b>Activity</b>", table_hdr_st), Paragraph("<b>Minimum PPE Required</b>", table_hdr_st)], [Paragraph("Waste collection from wards", table_cell_c), Paragraph("Heavy-duty gloves, face mask (surgical), gown/apron, closed shoes", table_cell)], [Paragraph("Sharps handling", table_cell_c), Paragraph("Cut-resistant heavy-duty gloves, face shield, N95 mask, full gown, safety boots", table_cell)], [Paragraph("BMW storage area cleaning", table_cell_c), Paragraph("Heavy-duty gloves, N95 mask, face shield, gown, waterproof boots", table_cell)], [Paragraph("Cytotoxic waste handling", table_cell_c), Paragraph("Double gloves (chemotherapy grade), N95 mask, face shield, chemo-gown, boots", table_cell)], [Paragraph("Radioactive waste (if any)", table_cell_c), Paragraph("Lead apron, dosimeter badge, as per AERB/Radiation Safety Officer instructions", table_cell)], [Paragraph("COVID / Isolation ward", table_cell_c), Paragraph("Double gloves, N95/FFP2, face shield, full body cover, boot covers; buddy system for doffing", table_cell)], ] story += [info_box(ppe_rows, [(PAGE_W-4*cm)*0.32, (PAGE_W-4*cm)*0.68]), sp(3)] # ─ 11. SPILL MANAGEMENT ─ story += [ section_heading("11. BMW SPILL MANAGEMENT"), sp(2), colour_box("IN CASE OF SPILL: STOP → SECURE AREA → PPE → DECONTAMINATE → DOCUMENT → REPORT", bg=LIGHT_ORANGE, txt_color=ORANGE), sp(2), ] spill_steps = [ ("STOP and alert nearby personnel; do not allow anyone without PPE to enter the spill zone.", ""), ("Don PPE: heavy-duty gloves, mask, gown, face shield, boots.", ""), ("Contain the spill: apply absorbent material (paper towels/dry sand) over liquids; cover solids with a box/container.", ""), ("Disinfect: pour 1% sodium hypochlorite over the area; allow 30-minute contact time.", ""), ("Clean up absorbed material with a scoop/dustpan (never bare hands); place in yellow bag.", ""), ("Wash the area again with detergent and water; dry.", ""), ("Remove PPE safely; wash hands with soap and water for at least 20 seconds.", ""), ("Document in Spill Register: date, time, location, type of waste, action taken, staff involved.", ""), ("Report to Infection Control Nurse and Medical Superintendent within 1 hour.", ""), ] for i, (step, _) in enumerate(spill_steps, 1): story.append(Paragraph(f"<b>Step {i}:</b> {step}", bullet_style)) story.append(sp(3)) # ─ 12. NSI ─ story += [ section_heading("12. NEEDLE-STICK / SHARPS INJURY PROTOCOL"), sp(2), colour_box("IMMEDIATE ACTION REQUIRED — DO NOT DELAY", bg=HexColor("#ffebee"), txt_color=RED), sp(2), ] nsi_rows = [ [Paragraph("<b>Time</b>", table_hdr_st), Paragraph("<b>Action</b>", table_hdr_st)], [Paragraph("0 – 2 min", table_cell_c), Paragraph("Allow wound to bleed freely; wash with soap and water for 5 minutes; do NOT suck wound; apply antiseptic", table_cell)], [Paragraph("< 2 hours", table_cell_c), Paragraph("Report to Casualty MO / Occupational Health Nurse; complete NSI Reporting Form; blood sample from source patient (with consent)", table_cell)], [Paragraph("< 2 hours (HIV)", table_cell_c), Paragraph("PEP counselling and initiation if source patient HIV+/unknown; ART Centre contact", table_cell)], [Paragraph("Within 24 hrs", table_cell_c), Paragraph("Hepatitis B immunoglobulin (if unvaccinated); baseline HBsAg, HCV, HIV serology", table_cell)], [Paragraph("6 weeks / 3 mths / 6 mths", table_cell_c), Paragraph("Follow-up serology; PEP compliance check; counselling", table_cell)], [Paragraph("Documentation", table_cell_c), Paragraph("Record in NSI Register; submit to Infection Control Committee monthly; report to DPCC if required", table_cell)], ] story += [info_box(nsi_rows, [(PAGE_W-4*cm)*0.22, (PAGE_W-4*cm)*0.78]), sp(3)] # ─ 13. TRAINING ─ story += [ section_heading("13. TRAINING AND AWARENESS"), sp(2), ] train_items = [ "All new staff (medical, nursing, housekeeping, lab, OT) must receive BMW induction training within 7 days of joining.", "Refresher training: at minimum annually and after any BMW-related incident.", "Training must cover: segregation, colour codes, PPE donning/doffing, spill management, NSI protocol, CBWTF handover.", "Training attendance register to be maintained; records retained for 3 years.", "Posters and quick-reference cards in Hindi and English must be displayed in all departments.", "Annual BMW audit to be conducted by Hospital Infection Control Committee (HICC).", "Training to be documented and submitted to DPCC on request.", ] for item in train_items: story.append(Paragraph(f"✔ {item}", bullet_style)) story.append(sp(3)) # ─ 14. RECORDS ─ story += [ section_heading("14. RECORDS AND DOCUMENTATION"), sp(2), ] rec_rows = [ [Paragraph("<b>Record</b>", table_hdr_st), Paragraph("<b>Frequency</b>", table_hdr_st), Paragraph("<b>Custodian</b>", table_hdr_st), Paragraph("<b>Retention</b>", table_hdr_st)], [Paragraph("BMW Logbook (weight/category)", table_cell), Paragraph("Each CBWTF collection", table_cell_c), Paragraph("Waste Supervisor", table_cell_c), Paragraph("5 years", table_cell_c)], [Paragraph("CBWTF Manifests (Form 3)", table_cell), Paragraph("Each consignment", table_cell_c), Paragraph("Administrative Officer", table_cell_c), Paragraph("3 years", table_cell_c)], [Paragraph("NSI Register", table_cell), Paragraph("Per incident", table_cell_c), Paragraph("Infection Control Nurse", table_cell_c), Paragraph("5 years", table_cell_c)], [Paragraph("Spill Register", table_cell), Paragraph("Per incident", table_cell_c), Paragraph("Head Nurse / Ward In-charge", table_cell_c), Paragraph("3 years", table_cell_c)], [Paragraph("Training Register", table_cell), Paragraph("Per session", table_cell_c), Paragraph("HICC Chairperson", table_cell_c), Paragraph("3 years", table_cell_c)], [Paragraph("Monthly BMW Report (CPCB portal)", table_cell), Paragraph("Monthly", table_cell_c), Paragraph("Nodal Officer BMW", table_cell_c), Paragraph("Online / 3 years", table_cell_c)], [Paragraph("Annual BMW Audit Report", table_cell), Paragraph("Annually", table_cell_c), Paragraph("Medical Superintendent", table_cell_c), Paragraph("5 years", table_cell_c)], ] story += [info_box(rec_rows, [(PAGE_W-4*cm)*0.38, (PAGE_W-4*cm)*0.18, (PAGE_W-4*cm)*0.24, (PAGE_W-4*cm)*0.20]), sp(3)] # ─ 15. RESPONSIBILITIES ─ story += [ section_heading("15. ROLES AND RESPONSIBILITIES"), sp(2), ] resp_rows = [ [Paragraph("<b>Designation</b>", table_hdr_st), Paragraph("<b>Key BMW Responsibility</b>", table_hdr_st)], [Paragraph("Medical Superintendent", table_cell_c), Paragraph("Overall accountability; authorisation renewal with DPCC; approval of SOP; resource allocation", table_cell)], [Paragraph("HICC Chairperson / CMO", table_cell_c), Paragraph("Policy oversight; monthly review of BMW data; investigation of incidents", table_cell)], [Paragraph("Nodal Officer BMW", table_cell_c), Paragraph("Day-to-day management; CBWTF coordination; CPCB portal reporting; training schedule", table_cell)], [Paragraph("Head Nurses / Sister In-charge", table_cell_c), Paragraph("Ensure correct segregation in their ward; supervise ward boys; report non-compliance", table_cell)], [Paragraph("Doctors / Residents", table_cell_c), Paragraph("Segregate waste at point of care; safe sharps disposal; NSI reporting", table_cell)], [Paragraph("Lab / OT / Radiology In-charge", table_cell_c), Paragraph("Department-specific BMW compliance; chemical waste management; monthly reporting to Nodal Officer", table_cell)], [Paragraph("Housekeeping / Waste Handlers", table_cell_c), Paragraph("Correct collection, transport, and storage; PPE use at all times; spill management; report to supervisor immediately", table_cell)], [Paragraph("Security / Gate Staff", table_cell_c), Paragraph("Verify CBWTF authorisation before allowing waste vehicle entry; do not allow unauthorised removal of BMW", table_cell)], ] story += [info_box(resp_rows, [(PAGE_W-4*cm)*0.30, (PAGE_W-4*cm)*0.70]), sp(3)] # ─ 16. NON-COMPLIANCE ─ story += [ section_heading("16. NON-COMPLIANCE AND PENALTIES"), sp(2), Paragraph( "Non-compliance with this SOP, the BMW Management Rules 2016, or DPCC directives may result in:", body), ] nc_items = [ "Show-cause notice and suspension of hospital BMW authorisation by DPCC.", "Monetary penalties: up to ₹1 lakh per violation per day under Environment Protection Act 1986.", "Prosecution under Solid Waste Management Rules / EP Act / Indian Penal Code as applicable.", "Internal disciplinary action against responsible staff as per service rules.", "Non-compliance incidents to be mandatorily reported to HICC and recorded.", ] for item in nc_items: story.append(Paragraph(f"⚠ {item}", bullet_style)) story.append(sp(3)) # ─ 17. REFERENCES ─ story += [ section_heading("17. REFERENCES AND LEGAL BASIS"), sp(2), ] ref_items = [ "Bio-Medical Waste Management Rules, 2016 (MoEF&CC, Government of India) as amended 2018 & 2019.", "CPCB Guidelines for Management of Healthcare Waste, 2019.", "MoHFW Standard Treatment Workflow for Infection Prevention & Control, 2020.", "Delhi Pollution Control Committee (DPCC) Bio-Medical Waste Authorisation Conditions.", "WHO Safe Management of Wastes from Health-Care Activities (Blue Book), 2nd Ed. 2014.", "National Accreditation Board for Hospitals (NABH) Infection Control Standards, 5th Ed.", "AERB Safety Manual (Radioactive Waste) — applicable to Nuclear Medicine Unit.", "Occupational Safety, Health and Working Conditions Code, 2020 (GoI).", ] for ref in ref_items: story.append(Paragraph(f"[{ref_items.index(ref)+1}] {ref}", bullet_style)) story.append(sp(3)) # ─ 18. REVIEW ─ story += [ section_heading("18. SOP REVIEW SCHEDULE"), sp(2), Paragraph( "This SOP shall be reviewed annually or whenever there is a change in applicable legislation, " "DPCC authorisation conditions, hospital infrastructure, or following a major BMW incident. " "The revised version shall be approved by the Medical Superintendent and distributed to all departments.", body), sp(3), ] # ─ Signature Block ─ story += [ HRFlowable(width=PAGE_W - 4*cm, thickness=1.5, color=DARK_GREEN, spaceAfter=6), ] sig_data = [ [Paragraph("<b>Prepared By</b>", S("Normal", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_GREEN, alignment=TA_CENTER)), Paragraph("<b>Reviewed By</b>", S("Normal", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_GREEN, alignment=TA_CENTER)), Paragraph("<b>Approved By</b>", S("Normal", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_GREEN, alignment=TA_CENTER))], [Paragraph("Hospital Infection Control Committee\nSDH Dwarka Hospital", table_cell_c), Paragraph("HICC Chairperson / CMO\nSDH Dwarka Hospital", table_cell_c), Paragraph("Medical Superintendent\nSDH Dwarka Hospital", table_cell_c)], [Paragraph("Signature: ___________________", table_cell_c), Paragraph("Signature: ___________________", table_cell_c), Paragraph("Signature: ___________________", table_cell_c)], [Paragraph(f"Date: {datetime.now().strftime('%d/%m/%Y')}", table_cell_c), Paragraph(f"Date: {datetime.now().strftime('%d/%m/%Y')}", table_cell_c), Paragraph(f"Date: {datetime.now().strftime('%d/%m/%Y')}", table_cell_c)], ] sig_t = Table(sig_data, colWidths=[(PAGE_W-4*cm)/3]*3) sig_t.setStyle(TableStyle([ ("GRID", (0,0), (-1,-1), 0.5, HexColor("#cccccc")), ("FONTSIZE", (0,0), (-1,-1), 9), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("BACKGROUND", (0,0), (-1,0), LIGHT_GREEN), ])) story += [sig_t, sp(2)] story += [ colour_box( "SOP-BMW-001 v1.0 | SDH Dwarka Hospital | NHM Delhi | " f"Generated: {datetime.now().strftime('%d %B %Y')} | CONFIDENTIAL", bg=LIGHT_GREEN, txt_color=DARK_GREEN), ] # ── Build PDF ────────────────────────────────────────────────────────────────── doc = SimpleDocTemplate( OUTPUT, pagesize=A4, topMargin=3.0*cm, bottomMargin=1.8*cm, leftMargin=2.0*cm, rightMargin=2.0*cm, title="SOP - Biomedical Waste Management - SDH Dwarka Hospital", author="SDH Dwarka Hospital / NHM Delhi", subject="Biomedical Waste SOP", creator="Orris AI", ) doc.build(story, onFirstPage=on_first_page, onLaterPages=on_page) print(f"PDF created: {OUTPUT}") import os; print(f"File size: {os.path.getsize(OUTPUT)/1024:.1f} KB") PYEOF

Running Command

python3 /tmp/workspace/bmw-sop/generate_sop.py

Your Biomedical Waste Management SOP PDF is ready for download:

BMW SOP SDH Dwarka

PDF Document · PDF


What's included in the SOP (18 sections, ~96 KB):
SectionContent
Cover PageNHM logo, SDH Dwarka Hospital name, document metadata (Doc No., Version, Effective Date, Prepared/Approved By)
1. PurposeScope and regulatory basis
2. ScopeAll departments, all staff categories
3. DefinitionsBMW, CBWTF, DPCC, PPE, etc.
4. Colour CodingFull 4-colour system table per BMW Rules 2016 (Yellow/Red/Blue/Black + Radioactive)
5. SegregationStep-by-step: point of generation → labelling → tying → ward transport
6. Sharps ManagementNo-recap rule, PEP, needle-cutter protocol
7. Storage AreaRequirements: flooring, access, max storage time, refrigeration, daily disinfection
8. CBWTF HandoverManifest/Form 3, weighing, DPCC reporting, CPCB portal
9. Liquid/Chemical WasteBlood, X-ray fixer, mercury, cytotoxic liquids
10. PPE ProtocolPer activity (ward collection, sharps, cytotoxic, COVID ward)
11. Spill Management9-step protocol with decontamination and documentation
12. Needle-Stick InjuryTime-based action table, PEP eligibility, follow-up serology
13. TrainingInduction, refresher, records, posters
14. Records & Documentation7 registers with custodians and retention periods
15. Roles & ResponsibilitiesMS to housekeeping staff
16. Non-ComplianceDPCC penalties, EP Act provisions
17. ReferencesBMW Rules 2016, CPCB, WHO, NABH, AERB
18. Review ScheduleAnnual review trigger conditions
Signature BlockPrepared/Reviewed/Approved signature spaces
Design features: NHM logo in the top header on every page, green colour theme aligned with NHM branding, colour-coded waste category table, footer with document number and page number.

Kindly prepare best sop pdf for biomedical waste with nhm logo and hospital name - SDH dwarka hospital

Running Command

ls -lh /tmp/workspace/bmw-sop/ 2>/dev/null && echo "EXISTS" || echo "NOT FOUND"

The file is already available from our previous generation. Here is your download link:

BMW SOP SDH Dwarka

PDF Document · PDF


Quick summary of what's inside (18 sections, ~96 KB, A4 format):
  • Header on every page - NHM logo (top-left) + "SDH DWARKA HOSPITAL" + "Under National Health Mission | Govt. of NCT of Delhi"
  • Cover page - Document number SOP-BMW-001, version, effective date, prepared/approved by fields
  • Section 4 - Full colour-coded segregation table (Yellow / Red / Blue-White / Black / Radioactive) per BMW Management Rules 2016
  • Sections 5-9 - Step-by-step procedures: segregation, sharps, storage area standards, CBWTF handover, liquid/chemical waste
  • Section 10 - PPE protocol by activity including COVID isolation ward
  • Sections 11-12 - Spill management (9-step) and needle-stick injury protocol with time-based PEP table
  • Sections 13-18 - Training, records/documentation, roles & responsibilities, penalties, legal references, review schedule
  • Signature block - Prepared / Reviewed / Approved by with date fields
  • Footer on every page - SOP-BMW-001 | SDH Dwarka Hospital | NHM Delhi | Page number
If you need any changes - different logo, additional sections, Hindi content, or a different layout - just let me know!
This is a shared conversation. Sign in to Orris to start your own chat.