National immunization schedule details in tabular coloumn
India national immunization schedule 2025 UIP vaccines age table
https://nhm.gov.in/New_Updates_2018/NHM_Components/Immunizat…
| Age | Vaccines Given |
|---|---|
| Birth | BCG, OPV-0 (zero dose), Hepatitis B (birth dose) |
| 6 Weeks | OPV-1, Pentavalent-1, Rotavirus Vaccine (RVV)-1, fIPV-1, PCV-1 |
| 10 Weeks | OPV-2, Pentavalent-2, RVV-2 |
| 14 Weeks | OPV-3, Pentavalent-3, fIPV-2, RVV-3, PCV-2 |
| 9-12 Months | MR-1, JE-1, PCV Booster, Vitamin A (1st dose) |
| 16-24 Months | MR-2, JE-2, DPT Booster-1, OPV Booster, Vitamin A (2nd dose) |
| 5-6 Years | DPT Booster-2 |
| 10 Years | Td |
| 16 Years | Td |
| Pregnant Women | Td-1, Td-2 (or Td Booster) |
| Vaccine | When to Give | Dose | Route | Site |
|---|---|---|---|---|
| BCG | At birth (up to 1 year if missed) | 0.1 ml (0.05 ml up to 1 month) | Intra-dermal | Left upper arm |
| Hepatitis B - Birth dose | At birth, within 24 hours | 0.5 ml | Intra-muscular | Antero-lateral mid-thigh |
| OPV-0 | At birth, within first 15 days | 2 drops | Oral | Oral |
| OPV-1, 2, 3 | 6, 10 & 14 weeks (can give till 5 years) | 2 drops | Oral | Oral |
| OPV Booster | 16-24 months | 2 drops | Oral | Oral |
| Pentavalent 1, 2, 3 (DPT + HepB + Hib) | 6, 10 & 14 weeks (till 1 year) | 0.5 ml | Intra-muscular | Antero-lateral mid-thigh |
| fIPV-1 | 6 weeks | 0.1 ml | Intra-dermal | Right upper arm |
| fIPV-2 | 14 weeks | 0.1 ml | Intra-dermal | Right upper arm |
| Rotavirus Vaccine (RVV) 1, 2, 3 | 6, 10 & 14 weeks (till 1 year) | 5 drops (liquid) / 2.5 ml (lyophilized) | Oral | Oral |
| PCV-1 | 6 weeks | 0.5 ml | Intra-muscular | Antero-lateral mid-thigh |
| PCV-2 | 14 weeks | 0.5 ml | Intra-muscular | Antero-lateral mid-thigh |
| PCV Booster | 9-12 months | 0.5 ml | Intra-muscular | Antero-lateral mid-thigh |
| MR-1 (Measles-Rubella) | 9-12 months (Measles alone till 5 yrs) | 0.5 ml | Sub-cutaneous | Right upper arm |
| MR-2 | 16-24 months | 0.5 ml | Sub-cutaneous | Right upper arm |
| JE-1 (Japanese Encephalitis) | 9-12 months (endemic districts) | 0.5 ml | SC (live) / IM (killed) | Left upper arm (live) / Antero-lateral thigh (killed) |
| JE-2 | 16-24 months | 0.5 ml | SC (live) / IM (killed) | Left upper arm (live) / Antero-lateral thigh (killed) |
| Vitamin A - 1st dose | 9 months with MR-1 | 1 ml (1 lakh IU) | Oral | Oral |
| Vitamin A - 2nd to 9th dose | 16-18 months, then every 6 months till 5 years | 2 ml (2 lakh IU) | Oral | Oral |
| DPT Booster-1 | 16-24 months | 0.5 ml | Intra-muscular | Antero-lateral mid-thigh |
| DPT Booster-2 | 5-6 years | 0.5 ml | Intra-muscular | Upper arm |
| Td | 10 years & 16 years | 0.5 ml | Intra-muscular | Upper arm |
| Vaccine | When to Give | Dose | Route | Site |
|---|---|---|---|---|
| Td-1 | Early in pregnancy | 0.5 ml | Intra-muscular | Upper arm |
| Td-2 | 4 weeks after Td-1 | 0.5 ml | Intra-muscular | Upper arm |
| Td Booster | If received 2 TT/Td doses in a pregnancy within the last 3 years | 0.5 ml | Intra-muscular | Upper arm |
| Vaccine | Recommended Schedule |
|---|---|
| MMR | 15 months |
| Typhoid conjugate | 2 years, 5 years, 8 years, 12 years |
| Varicella | 15 months (or after 1 year) |
| Hepatitis A | 18 months, and 6 months later (high-risk infants) |
| PCV (if not in UIP area) | Starting at 6 weeks |
| Influenza | 6 months of age, annually (high-risk infants) |
Create a one-page reference PDF for immunization schedules
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not found"
mkdir -p /home/daytona/workspace/immunization-schedule && python3 -c "import reportlab; print('reportlab ok')"
~/immunization-schedule/generate_pdf.py
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib import colors
from reportlab.lib.units import mm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, HRFlowable
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import KeepTogether
OUTPUT = "/home/daytona/workspace/immunization-schedule/NIS_India_Reference.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A4),
leftMargin=10*mm, rightMargin=10*mm,
topMargin=8*mm, bottomMargin=8*mm,
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
"Title", parent=styles["Normal"],
fontSize=14, fontName="Helvetica-Bold",
alignment=TA_CENTER, textColor=colors.HexColor("#1a3a5c"),
spaceAfter=2*mm,
)
subtitle_style = ParagraphStyle(
"Subtitle", parent=styles["Normal"],
fontSize=8.5, fontName="Helvetica",
alignment=TA_CENTER, textColor=colors.HexColor("#555555"),
spaceAfter=3*mm,
)
section_style = ParagraphStyle(
"Section", parent=styles["Normal"],
fontSize=8, fontName="Helvetica-Bold",
textColor=colors.white,
alignment=TA_CENTER,
)
cell_style = ParagraphStyle(
"Cell", parent=styles["Normal"],
fontSize=6.8, fontName="Helvetica",
leading=9, alignment=TA_LEFT,
)
cell_bold = ParagraphStyle(
"CellBold", parent=styles["Normal"],
fontSize=6.8, fontName="Helvetica-Bold",
leading=9, alignment=TA_LEFT,
)
note_style = ParagraphStyle(
"Note", parent=styles["Normal"],
fontSize=6.2, fontName="Helvetica",
textColor=colors.HexColor("#333333"),
leading=8,
)
HEADER_BG = colors.HexColor("#1a3a5c") # dark navy
ROW_BG1 = colors.HexColor("#eef4fb") # light blue
ROW_BG2 = colors.white
ACCENT_PREG = colors.HexColor("#fff3cd") # warm yellow for pregnant women rows
ACCENT_CHILD= colors.HexColor("#d4edda") # soft green for children booster
def make_header(text):
return Paragraph(text, section_style)
def c(text, bold=False):
return Paragraph(text, cell_bold if bold else cell_style)
# ── MAIN SCHEDULE TABLE ──────────────────────────────────────────────────────
header_row = [
make_header("Age / Recipient"),
make_header("Vaccine(s)"),
make_header("Dose"),
make_header("Route"),
make_header("Site"),
make_header("Notes"),
]
rows = [
# ---- INFANTS ----
[c("Birth", bold=True),
c("BCG\nOPV-0 (zero dose)\nHepatitis B – Birth dose"),
c("0.1 ml\n2 drops\n0.5 ml"),
c("Intra-dermal\nOral\nIM"),
c("Left upper arm\n–\nAntero-lat. mid-thigh"),
c("BCG 0.05 ml if age <1 month\nGive within 15 days of birth\nGive within 24 hours of birth")],
[c("6 Weeks", bold=True),
c("OPV-1\nPentavalent-1 (DPT+HepB+Hib)\nRotavirus (RVV)-1\nfIPV-1\nPCV-1"),
c("2 drops\n0.5 ml\n5 drops / 2.5 ml\n0.1 ml\n0.5 ml"),
c("Oral\nIM\nOral\nIntra-dermal\nIM"),
c("–\nAntero-lat. mid-thigh\n–\nRight upper arm\nAntero-lat. mid-thigh"),
c("Pentavalent replaces DPT+HepB+Hib\nPCV in select states only\nRVV: liquid 5 drops; lyophilized 2.5 ml")],
[c("10 Weeks", bold=True),
c("OPV-2\nPentavalent-2\nRVV-2"),
c("2 drops\n0.5 ml\n5 drops / 2.5 ml"),
c("Oral\nIM\nOral"),
c("–\nAntero-lat. mid-thigh\n–"),
c("No fIPV or PCV at this visit")],
[c("14 Weeks", bold=True),
c("OPV-3\nPentavalent-3\nfIPV-2\nRVV-3\nPCV-2"),
c("2 drops\n0.5 ml\n0.1 ml\n5 drops / 2.5 ml\n0.5 ml"),
c("Oral\nIM\nIntra-dermal\nOral\nIM"),
c("–\nAntero-lat. mid-thigh\nRight upper arm\n–\nAntero-lat. mid-thigh"),
c("Last primary dose for OPV, Penta, RVV, fIPV, PCV")],
[c("9–12 Months", bold=True),
c("MR-1 (Measles-Rubella)\nJE-1*\nPCV Booster\nVitamin A – 1st dose"),
c("0.5 ml\n0.5 ml\n0.5 ml\n1 ml (1 lakh IU)"),
c("Sub-cutaneous\nSC (live) / IM (killed)\nIM\nOral"),
c("Right upper arm\nLeft upper arm / Antero-lat. thigh\nAntero-lat. mid-thigh\n–"),
c("*JE endemic districts only\nGive Vitamin A with MR-1\nMR measles alone can be given till 5 yrs")],
[c("16–24 Months", bold=True),
c("MR-2\nJE-2*\nDPT Booster-1\nOPV Booster\nVitamin A – 2nd dose"),
c("0.5 ml\n0.5 ml\n0.5 ml\n2 drops\n2 ml (2 lakh IU)"),
c("Sub-cutaneous\nSC (live) / IM (killed)\nIM\nOral\nOral"),
c("Right upper arm\nLeft upper arm / Antero-lat. thigh\nAntero-lat. mid-thigh\n–\n–"),
c("*JE endemic districts only\nVitamin A then every 6 months till age 5")],
[c("5–6 Years", bold=True),
c("DPT Booster-2"),
c("0.5 ml"),
c("IM"),
c("Upper arm"),
c("–")],
[c("10 Years", bold=True),
c("Td (Tetanus + adult Diphtheria)"),
c("0.5 ml"),
c("IM"),
c("Upper arm"),
c("1 dose if vaccinated within last 3 years")],
[c("16 Years", bold=True),
c("Td"),
c("0.5 ml"),
c("IM"),
c("Upper arm"),
c("–")],
# ---- PREGNANT WOMEN ----
[c("Pregnancy – Early", bold=True),
c("Td-1"),
c("0.5 ml"),
c("IM"),
c("Upper arm"),
c("As early as possible in pregnancy")],
[c("Pregnancy – 4 wks after Td-1", bold=True),
c("Td-2"),
c("0.5 ml"),
c("IM"),
c("Upper arm"),
c("4 weeks after Td-1")],
[c("Pregnancy – Booster", bold=True),
c("Td Booster"),
c("0.5 ml"),
c("IM"),
c("Upper arm"),
c("If 2 TT/Td doses received within last 3 years")],
]
col_w = [27*mm, 58*mm, 28*mm, 25*mm, 48*mm, 75*mm]
table_data = [header_row] + rows
tbl = Table(table_data, colWidths=col_w, repeatRows=1)
# Row background alternation — pregnant women rows start at index 10 (0-based header=0)
preg_rows = [10, 11, 12] # 0-based after including header
child_booster = [7, 8, 9] # 5-6 yrs, 10 yrs, 16 yrs
style_cmds = [
# Header
("BACKGROUND", (0,0), (-1,0), HEADER_BG),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 8),
("ALIGN", (0,0), (-1,0), "CENTER"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
# Grid
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
("LINEBELOW", (0,0), (-1,0), 1, HEADER_BG),
# Cell padding
("TOPPADDING", (0,0), (-1,-1), 2.5),
("BOTTOMPADDING", (0,0), (-1,-1), 2.5),
("LEFTPADDING", (0,0), (-1,-1), 3),
("RIGHTPADDING", (0,0), (-1,-1), 3),
# Alternating row colours
*[("BACKGROUND", (0, i+1), (-1, i+1), ROW_BG1 if i % 2 == 0 else ROW_BG2)
for i in range(len(rows))],
# Pregnant women override
*[("BACKGROUND", (0, r+1), (-1, r+1), ACCENT_PREG) for r in preg_rows],
# Booster / adolescent override
*[("BACKGROUND", (0, r+1), (-1, r+1), ACCENT_CHILD) for r in child_booster],
]
tbl.setStyle(TableStyle(style_cmds))
# ── LEGEND / NOTES ───────────────────────────────────────────────────────────
notes_text = (
"<b>Abbreviations:</b> BCG=Bacillus Calmette-Guérin | OPV=Oral Polio Vaccine | "
"fIPV=Fractional Inactivated Polio Vaccine | Penta=Pentavalent (DPT+HepB+Hib) | "
"RVV=Rotavirus Vaccine | PCV=Pneumococcal Conjugate Vaccine | "
"MR=Measles-Rubella | JE=Japanese Encephalitis | DPT=Diphtheria-Pertussis-Tetanus | "
"Td=Tetanus+adult Diphtheria | IM=Intra-muscular | SC=Sub-cutaneous "
"<b>Colour key:</b> "
"<font color='#155724'>Green = Adolescent/booster doses</font> | "
"<font color='#856404'>Yellow = Pregnant women doses</font> "
"<b>*PCV</b> available in select states (Bihar, HP, MP, UP, Rajasthan, Haryana). "
"<b>*JE</b> given in endemic districts only, after campaign introduction. "
"Vitamin A 2nd–9th dose: every 6 months from 16 months to 5 years. "
"<b>Source:</b> NHM India UIP / Park's Textbook of Preventive & Social Medicine"
)
notes_para = Paragraph(notes_text, note_style)
# ── BUILD DOCUMENT ────────────────────────────────────────────────────────────
elements = [
Paragraph("National Immunization Schedule (NIS) — India", title_style),
Paragraph("Universal Immunization Programme (UIP) | Ministry of Health & Family Welfare, Government of India", subtitle_style),
HRFlowable(width="100%", thickness=1, color=HEADER_BG, spaceAfter=3*mm),
tbl,
Spacer(1, 3*mm),
notes_para,
]
doc.build(elements)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/immunization-schedule && python3 generate_pdf.py
ls -lh /home/daytona/workspace/immunization-schedule/NIS_India_Reference.pdf
cd /home/daytona/workspace/immunization-schedule && python3 -c " from pypdf import PdfReader r = PdfReader('NIS_India_Reference.pdf') print(f'Pages: {len(r.pages)}') for i, p in enumerate(r.pages): print(f'Page {i+1}: {p.mediabox}') text = p.extract_text() print(text[:500]) "
cd /home/daytona/workspace/immunization-schedule && python3 -c " from pypdf import PdfReader r = PdfReader('NIS_India_Reference.pdf') text = r.pages[0].extract_text() # Check for key rows checks = ['Birth','6 Weeks','10 Weeks','14 Weeks','9–12','16–24','5–6','10 Years','16 Years','Pregnancy','Td-1','Td-2','Booster'] for c in checks: found = c in text print(f'{c}: {\"OK\" if found else \"MISSING\"}')"
NIS India Reference
PDF Document · PDF