Open vial policy
Open Vial Policy WHO vaccine multi-dose guidelines 2024
https://www.who.int/publications/i/item/WHO-IVB-14.07
| Applicable (Can reuse up to 28 days) | NOT Applicable (Discard after session) |
|---|---|
| DPT | Measles / MR |
| Tetanus Toxoid (TT) | BCG |
| Hepatitis B | Japanese Encephalitis (JE) |
| Oral Polio Vaccine (OPV) | Rotavirus |
| Liquid Pentavalent | |
| Pneumococcal Conjugate Vaccine (PCV) | |
| Injectable IPV |
Globally (per WHO/PAHO), reconstituted lyophilized vaccines (BCG, MMR, Yellow Fever) must be discarded within 6 hours of reconstitution or at the end of session, whichever comes first.
Make a pdf of it
mkdir -p /home/daytona/workspace/open-vial-policy && ls /home/daytona/workspace/
~/open-vial-policy/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUTPUT = "/home/daytona/workspace/open-vial-policy/Open_Vial_Policy.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
"Title", parent=styles["Title"],
fontSize=22, textColor=colors.HexColor("#1a5276"),
spaceAfter=6, alignment=TA_CENTER
)
subtitle_style = ParagraphStyle(
"Subtitle", parent=styles["Normal"],
fontSize=11, textColor=colors.HexColor("#555555"),
spaceAfter=12, alignment=TA_CENTER
)
h2_style = ParagraphStyle(
"H2", parent=styles["Heading2"],
fontSize=13, textColor=colors.HexColor("#1a5276"),
spaceBefore=14, spaceAfter=4,
borderPad=3
)
body_style = ParagraphStyle(
"Body", parent=styles["Normal"],
fontSize=10.5, leading=16, spaceAfter=4
)
bullet_style = ParagraphStyle(
"Bullet", parent=styles["Normal"],
fontSize=10.5, leading=16, leftIndent=16, spaceAfter=3,
bulletIndent=4
)
note_style = ParagraphStyle(
"Note", parent=styles["Normal"],
fontSize=9.5, leading=14, textColor=colors.HexColor("#7d6608"),
leftIndent=12, spaceAfter=4
)
source_style = ParagraphStyle(
"Source", parent=styles["Normal"],
fontSize=9, textColor=colors.grey, alignment=TA_CENTER, spaceBefore=18
)
story = []
# ── Title ─────────────────────────────────────────────────────────────────────
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Open Vial Policy (OVP)", title_style))
story.append(Paragraph("WHO / Universal Immunization Programme Guidelines (2015)", subtitle_style))
story.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor("#1a5276")))
story.append(Spacer(1, 0.4*cm))
# ── Definition ────────────────────────────────────────────────────────────────
story.append(Paragraph("Definition", h2_style))
story.append(Paragraph(
"The Open Vial Policy (OVP) allows reuse of partially used <b>multi-dose vaccine vials</b> "
"across subsequent immunization sessions (both fixed and outreach) for up to <b>4 weeks (28 days)</b> "
"after first opening, provided specific conditions are met. The primary goal is to <b>reduce vaccine wastage</b>.",
body_style
))
# ── Vaccines Covered ───────────────────────────────────────────────────────────
story.append(Paragraph("Vaccines Covered Under OVP", h2_style))
table_data = [
[Paragraph("<b>Applicable — Can reuse up to 28 days</b>", body_style),
Paragraph("<b>NOT Applicable — Discard after session</b>", body_style)],
["DPT", "Measles / MR"],
["Tetanus Toxoid (TT)", "BCG"],
["Hepatitis B", "Japanese Encephalitis (JE)"],
["Oral Polio Vaccine (OPV)", "Rotavirus"],
["Liquid Pentavalent", ""],
["Pneumococcal Conjugate Vaccine (PCV)", ""],
["Injectable IPV", ""],
]
col_widths = [9*cm, 8*cm]
tbl = Table(table_data, colWidths=col_widths, repeatRows=1)
tbl.setStyle(TableStyle([
("BACKGROUND", (0, 0), (0, 0), colors.HexColor("#d6eaf8")),
("BACKGROUND", (1, 0), (1, 0), colors.HexColor("#fadbd8")),
("TEXTCOLOR", (0, 0), (-1, -1), colors.black),
("FONTSIZE", (0, 0), (-1, -1), 10),
("LEADING", (0, 0), (-1, -1), 14),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.white, colors.HexColor("#f4f6f7")]),
("GRID", (0, 0), (-1, -1), 0.5, colors.HexColor("#aab7b8")),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING", (0, 0), (-1, -1), 5),
("LEFTPADDING", (0, 0), (-1, -1), 8),
]))
story.append(tbl)
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph(
"⚠ Globally (WHO/PAHO): Reconstituted lyophilized vaccines (BCG, MMR, Yellow Fever) must be "
"discarded within <b>6 hours</b> of reconstitution or at end of session, whichever comes first.",
note_style
))
# ── Conditions ────────────────────────────────────────────────────────────────
story.append(Paragraph("Conditions for Reuse (ALL must be met)", h2_style))
story.append(Paragraph(
"A vial opened at a session site can be used in more than one session up to 4 weeks, <b>provided</b>:",
body_style
))
conditions = [
"Expiry date has <b>not passed</b>.",
"Vaccines are stored under <b>appropriate cold chain temperatures</b> during both transport and storage.",
"The <b>vaccine vial septum</b> has not been submerged in water or contaminated in any way.",
"<b>Aseptic technique</b> was used to withdraw all doses.",
"The <b>Vaccine Vial Monitor (VVM)</b> has not reached the discard point.",
"The vial has <b>not been exposed to direct sunlight</b>.",
]
for c in conditions:
story.append(Paragraph(f"✓ {c}", bullet_style))
# ── Operational Rules ─────────────────────────────────────────────────────────
story.append(Paragraph("Key Operational Rules", h2_style))
ops = [
"Record the <b>date and time of opening</b> on each open vial.",
"Open vials should <b>never be submerged in water</b> (e.g., water accumulated in vaccine carrier) — this increases risk of septum contamination.",
"At the end of every session, all open vials must be <b>returned to the Cold Chain Point</b>.",
"At the Cold Chain Point, segregate vials into:<br/>"
" • <b>Reusable:</b> DPT, TT, Hep B, Pentavalent (if all criteria met)<br/>"
" • <b>Non-reusable:</b> Measles/MR, BCG, JE — destroy within 48 hours or before next session, whichever is earlier.",
]
for op in ops:
story.append(Paragraph(f"• {op}", bullet_style))
# ── AEFI ──────────────────────────────────────────────────────────────────────
story.append(Paragraph("In Case of AEFI (Adverse Event Following Immunization)", h2_style))
story.append(Paragraph(
"If any AEFI is reported, <b>all open vials</b> (both usable and non-usable) must <b>not be discarded or used</b>. "
"They must be stored under proper cold chain conditions until the investigation is complete.",
body_style
))
# ── Historical Note ───────────────────────────────────────────────────────────
story.append(Paragraph("Historical Note", h2_style))
story.append(Paragraph(
"The Open Vial Policy was introduced under India's Universal Immunization Programme (UIP) in "
"<b>2012-2013</b> and updated with revised guidelines in <b>2015</b>. It is based on the "
"<b>WHO multi-dose vial policy (2014 revision)</b>, reference WHO/IVB/14.07, which provides the global framework.",
body_style
))
# ── Footer / Source ───────────────────────────────────────────────────────────
story.append(Spacer(1, 0.5*cm))
story.append(HRFlowable(width="100%", thickness=0.8, color=colors.HexColor("#aab7b8")))
story.append(Paragraph(
"Source: Park's Textbook of Preventive and Social Medicine (Open Vial Policy, 2015 guidelines) · WHO/IVB/14.07 (2014 Revision)",
source_style
))
doc.build(story)
print(f"PDF created: {OUTPUT}")
cat > /home/daytona/workspace/open-vial-policy/generate_pdf.py << 'PYEOF' from r…
Open Vial Policy
PDF Document · PDF
/visual learning of open vial policy
A clean, colorful medical infographic titled "Open Vial Policy (OVP)" for immunization education. The infographic is divided into clear sections: 1. TOP BANNER: Bold title "Open Vial Policy (OVP)" with subtitle "Reduce Vaccine Wastage" on a deep blue background with vaccine vial icons. 2. DEFINITION BOX: Light blue box stating "Allows reuse of opened multi-dose vaccine vials across sessions for up to 28 DAYS (4 weeks)" with a calendar icon. 3. TWO-COLUMN TABLE labeled "VACCINES": - LEFT (green column, checkmark icon): "CAN Reuse up to 28 days" listing: DPT, TT, Hepatitis B, OPV, Pentavalent, PCV, IPV - RIGHT (red column, X icon): "DISCARD After Session" listing: Measles/MR, BCG, Japanese Encephalitis, Rotavirus, All Reconstituted Vaccines (6 hrs) 4. CONDITIONS CHECKLIST section titled "6 Conditions to Reuse a Vial" with green checkmark icons: ✓ Not expired ✓ Cold chain maintained ✓ Septum not submerged in water ✓ Aseptic technique used ✓ VVM not reached discard point ✓ Not exposed to sunlight 5. BOTTOM RULES strip with icons: - Clock icon: "Record date & time of opening" - Snowflake icon: "Return to Cold Chain Point after session" - Warning icon: "Never submerge vial in water" - Alert icon: "In AEFI — preserve ALL vials, do not discard" Clean white background, professional medical illustration style, bold readable fonts, icons for each point.
