Make 20 slide ppt on the topic national population policy and national health policy take reference with k park edition 28
mkdir -p /tmp/workspace/national-policy-ppt && ls /tmp/workspace/
~/national-policy-ppt/create_ppt.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.util import Inches, Pt
import copy
# ── Color palette ──
DARK_BLUE = RGBColor(0x1A, 0x37, 0x6C) # header bg
MID_BLUE = RGBColor(0x21, 0x5A, 0x96) # accent / sub-header
TEAL = RGBColor(0x00, 0x86, 0x9B) # bullet icons / dividers
LIGHT_BLUE = RGBColor(0xE8, 0xF4, 0xFD) # body background
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
ORANGE = RGBColor(0xE8, 0x6B, 0x1F) # highlight
DARK_TEXT = RGBColor(0x1C, 0x1C, 0x1C)
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6] # fully blank
# ─────────────────────────────────────────────
# Helper functions
# ─────────────────────────────────────────────
def add_rect(slide, x, y, w, h, fill_rgb, alpha=None):
shape = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h))
shape.fill.solid()
shape.fill.fore_color.rgb = fill_rgb
shape.line.fill.background()
return shape
def add_text(slide, text, x, y, w, h, font_size, bold=False,
color=DARK_TEXT, align=PP_ALIGN.LEFT, wrap=True,
italic=False, font_name="Calibri"):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = wrap
tf.margin_left = Inches(0.05)
tf.margin_right = Inches(0.05)
tf.margin_top = Inches(0.03)
tf.margin_bottom = Inches(0.03)
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.size = Pt(font_size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
run.font.name = font_name
return tb
def add_para(tf, text, font_size, bold=False, color=DARK_TEXT,
align=PP_ALIGN.LEFT, italic=False, space_before=0):
p = tf.add_paragraph()
p.alignment = align
p.space_before = Pt(space_before)
run = p.add_run()
run.text = text
run.font.size = Pt(font_size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
run.font.name = "Calibri"
return p
def add_textbox_multi(slide, paragraphs, x, y, w, h):
"""paragraphs = list of dicts with keys: text, size, bold, color, align, italic, space_before"""
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = Inches(0.05)
tf.margin_right = Inches(0.05)
tf.margin_top = Inches(0.03)
tf.margin_bottom = Inches(0.03)
for i, para in enumerate(paragraphs):
if i == 0:
p = tf.paragraphs[0]
else:
p = tf.add_paragraph()
p.alignment = para.get('align', PP_ALIGN.LEFT)
p.space_before = Pt(para.get('space_before', 0))
run = p.add_run()
run.text = para.get('text', '')
run.font.size = Pt(para.get('size', 18))
run.font.bold = para.get('bold', False)
run.font.italic = para.get('italic', False)
run.font.color.rgb = para.get('color', DARK_TEXT)
run.font.name = "Calibri"
return tb
def header_band(slide, title, subtitle=None):
"""Top blue header band"""
add_rect(slide, 0, 0, 13.333, 1.25, DARK_BLUE)
add_rect(slide, 0, 1.25, 13.333, 0.07, TEAL)
add_text(slide, title, 0.4, 0.08, 12.5, 0.9, 28, bold=True,
color=WHITE, align=PP_ALIGN.LEFT)
if subtitle:
add_text(slide, subtitle, 0.4, 0.9, 12.5, 0.4, 14,
color=RGBColor(0xB0, 0xD4, 0xF1), align=PP_ALIGN.LEFT)
def footer(slide, ref="Reference: Park's Textbook of Preventive & Social Medicine, 28th Edition"):
add_rect(slide, 0, 7.15, 13.333, 0.35, DARK_BLUE)
add_text(slide, ref, 0.3, 7.17, 12.7, 0.28, 9,
color=RGBColor(0xB0, 0xD4, 0xF1), align=PP_ALIGN.LEFT)
def body_bg(slide):
add_rect(slide, 0, 1.32, 13.333, 5.83, LIGHT_BLUE)
def bullet_list(slide, items, x, y, w, h, size=16, title=None, title_color=MID_BLUE):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = Inches(0.05)
tf.margin_right = Inches(0.05)
tf.margin_top = Inches(0.03)
tf.margin_bottom = Inches(0.03)
first = True
if title:
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.LEFT
run = p.add_run()
run.text = title
run.font.size = Pt(size + 2)
run.font.bold = True
run.font.color.rgb = title_color
run.font.name = "Calibri"
first = False
for item in items:
p = tf.paragraphs[0] if first else tf.add_paragraph()
first = False
p.alignment = PP_ALIGN.LEFT
p.space_before = Pt(3)
run = p.add_run()
run.text = " \u25cf " + item
run.font.size = Pt(size)
run.font.bold = False
run.font.color.rgb = DARK_TEXT
run.font.name = "Calibri"
# ─────────────────────────────────────────────
# SLIDE 1 – Title Slide
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, DARK_BLUE)
add_rect(s, 0, 3.15, 13.333, 0.12, TEAL)
add_rect(s, 0, 3.27, 13.333, 0.12, ORANGE)
add_text(s, "National Population Policy", 1.0, 1.0, 11.333, 1.1, 40,
bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_text(s, "& National Health Policy", 1.0, 2.0, 11.333, 1.0, 36,
bold=True, color=RGBColor(0xB0, 0xD4, 0xF1), align=PP_ALIGN.CENTER)
add_text(s, "Reference: Park's Textbook of Preventive & Social Medicine", 1.0, 3.5, 11.333, 0.6, 18,
color=RGBColor(0xFF, 0xD7, 0x00), align=PP_ALIGN.CENTER, italic=True)
add_text(s, "28th Edition", 1.0, 4.0, 11.333, 0.5, 20,
bold=True, color=ORANGE, align=PP_ALIGN.CENTER)
add_text(s, "Community Medicine | Preventive & Social Medicine", 1.0, 5.0, 11.333, 0.5, 16,
color=RGBColor(0xB0, 0xD4, 0xF1), align=PP_ALIGN.CENTER)
# ─────────────────────────────────────────────
# SLIDE 2 – Overview / Table of Contents
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "Overview", "Topics Covered in This Presentation")
footer(s)
items_left = [
"Definition & Concept of Population Policy",
"History of Population Policy in India",
"National Population Policy 2000 – Background",
"NPP 2000 – Immediate Objectives",
"NPP 2000 – Medium-Term Objectives",
"NPP 2000 – Long-Term Objectives",
"NPP 2000 – Socio-Demographic Goals",
"NPP 2000 – National Commission on Population",
"NPP 2000 – Key Strategies",
"Progress & Achievements",
]
items_right = [
"National Health Policy – Background",
"NHP 1983 & NHP 2002",
"National Health Policy 2017 – Aims",
"NHP 2017 – Health Status Goals",
"NHP 2017 – Mortality Goals",
"NHP 2017 – Disease Goals",
"NHP 2017 – Health System Performance",
"NHP 2017 – Health System Strengthening",
"NHP 2017 – Key Policy Principles",
"Summary & Comparison",
]
bullet_list(s, items_left, 0.5, 1.4, 6.0, 5.8, size=14)
bullet_list(s, items_right, 6.8, 1.4, 6.0, 5.8, size=14)
# ─────────────────────────────────────────────
# SLIDE 3 – Definition & Concept
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "Population Policy – Definition & Concept")
footer(s)
add_rect(s, 0.5, 1.45, 12.333, 0.05, TEAL)
add_textbox_multi(s, [
{"text": "Definition", "size": 20, "bold": True, "color": MID_BLUE},
{"text": 'Population policy refers to policies intended to decrease the birth rate or growth rate. Statement of goals, objectives and targets are inherent in the population policy.', "size": 17, "color": DARK_TEXT, "space_before": 4},
], 0.5, 1.55, 12.333, 1.2)
add_rect(s, 0.5, 2.9, 12.333, 0.05, TEAL)
add_textbox_multi(s, [
{"text": "Why is Population Policy Needed?", "size": 20, "bold": True, "color": MID_BLUE},
], 0.5, 2.95, 12.333, 0.4)
bullet_list(s, [
"India is the most populous country in the world (surpassed China in 2023)",
"High population growth strains health, education, employment and environmental resources",
"Rapid population growth impedes socio-economic development",
"Unmet need for family planning services remains significant",
"Adolescent health, gender equity, and reproductive rights need addressing",
"Achieving replacement level fertility is essential for sustainable development",
], 0.5, 3.4, 12.333, 3.5, size=16)
# ─────────────────────────────────────────────
# SLIDE 4 – History of Population Policy
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "History of Population Policy in India")
footer(s)
# Timeline boxes
milestones = [
("1952", "World's FIRST National\nFamily Planning Programme launched"),
("1976", "First 'National Population Policy' formed.\nLegal minimum age of marriage raised:\n Girls 15→18 yrs, Boys 18→21 yrs"),
("1977", "Policy modified after change of government.\nTitle changed to 'Family Welfare Programme'.\nTarget-free approach emphasised."),
("1983", "National Health Policy approved by Parliament.\nGoal: NRR of 1 by year 2000."),
("2000", "National Population Policy 2000 released.\nTarget-free approach; goal: TFR to\nreplacement level by 2010."),
]
colors = [TEAL, MID_BLUE, DARK_BLUE, TEAL, ORANGE]
x_starts = [0.3, 2.85, 5.4, 7.95, 10.5]
for i, (year, desc) in enumerate(milestones):
add_rect(s, x_starts[i], 1.45, 2.3, 0.65, colors[i])
add_text(s, year, x_starts[i], 1.45, 2.3, 0.65, 26,
bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_rect(s, x_starts[i], 2.1, 2.3, 4.8, WHITE)
add_rect(s, x_starts[i], 2.1, 2.3, 0.04, colors[i])
add_text(s, desc, x_starts[i]+0.08, 2.18, 2.15, 4.6, 13,
color=DARK_TEXT, wrap=True)
# ─────────────────────────────────────────────
# SLIDE 5 – NPP 2000 Background
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "National Population Policy 2000 – Background")
footer(s)
add_textbox_multi(s, [
{"text": "NPP 2000 – A Landmark Document", "size": 21, "bold": True, "color": MID_BLUE},
{"text": "The NPP 2000 reaffirms the commitment of the Government towards a target-free approach in administering family planning services. It gives informed choice to people to voluntarily avail reproductive health care services.", "size": 16, "color": DARK_TEXT, "space_before": 6},
], 0.5, 1.45, 12.333, 1.5)
add_textbox_multi(s, [
{"text": "Broader Scope of NPP 2000", "size": 20, "bold": True, "color": MID_BLUE},
], 0.5, 3.1, 12.333, 0.4)
bullet_list(s, [
"Women's education & empowerment for improved health and nutrition",
"Child survival & health",
"Unmet needs for family welfare services",
"Health care for under-served groups: urban slums, tribal communities, hill areas, migrants",
"Adolescent health and education",
"Increased participation of men in planned parenthood",
"Collaboration with NGOs and civil society",
], 0.5, 3.55, 12.333, 3.4, size=15)
# ─────────────────────────────────────────────
# SLIDE 6 – NPP 2000 Immediate Objectives
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NPP 2000 – Immediate Objectives",
"Address Unmet Needs for Contraception, Health Care Infrastructure & Personnel")
footer(s)
bullet_list(s, [
"Address the unmet needs for contraception",
"Health care infrastructure and health personnel",
"Integrated service delivery for basic reproductive & child health care",
"Supplies and logistics for anti-natal and post-natal services",
"Prevention and management of reproductive tract infections (RTIs)",
"Management of sexually transmitted infections (STIs) including HIV/AIDS",
"Integration of emergency obstetric care in primary health care",
"Provision of safe abortion services",
"Referral transport and communication",
"Elimination of gender discrimination and child marriage",
], 0.5, 1.45, 12.333, 5.5, size=17)
# ─────────────────────────────────────────────
# SLIDE 7 – NPP 2000 Medium-Term Objectives
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NPP 2000 – Medium-Term Objectives",
"Bring Total Fertility Rate (TFR) to Replacement Level by 2010")
footer(s)
add_textbox_multi(s, [
{"text": "Primary Medium-Term Goal", "size": 20, "bold": True, "color": MID_BLUE},
{"text": "Bring the TFR (Total Fertility Rate) to replacement level by 2010", "size": 18, "bold": False, "color": ORANGE, "space_before": 4},
], 0.5, 1.5, 12.333, 0.9)
bullet_list(s, [
"Vigorously implement Reproductive and Child Health (RCH) Programme",
"Make school education up to age 14 free and compulsory",
"Reduce school dropout rates to below 20% for both boys and girls",
"Expand and strengthen primary health centres and sub-centres",
"Strengthen referral services from PHC to district hospitals",
"Increase male participation and shared responsibility in family planning",
"Promote delayed marriage and first pregnancy",
"Incentivize adoption of small family norm at community level",
"Strengthen and expand the network of Village Health Guides, Dais, AWWs",
], 0.5, 2.55, 12.333, 4.4, size=16)
# ─────────────────────────────────────────────
# SLIDE 8 – NPP 2000 Long-Term Objectives
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NPP 2000 – Long-Term Objectives")
footer(s)
add_textbox_multi(s, [
{"text": "Ultimate Goal", "size": 20, "bold": True, "color": MID_BLUE},
{"text": "Achieve a stable population by 2045 at a level consistent with requirements of sustainable economic growth, social development and environmental protection", "size": 17, "color": DARK_TEXT, "space_before": 4},
], 0.5, 1.5, 12.333, 1.2)
add_textbox_multi(s, [
{"text": "Key Long-Term Targets", "size": 20, "bold": True, "color": MID_BLUE},
], 0.5, 2.85, 12.333, 0.4)
bullet_list(s, [
"Achieve Net Reproduction Rate (NRR) = 1",
"Achieve replacement level fertility (TFR = 2.1)",
"Reduce Infant Mortality Rate (IMR) to below 30 per 1,000 live births",
"Reduce Maternal Mortality Rate (MMR) to below 100 per 1,00,000 live births",
"Achieve universal immunization coverage for all vaccine-preventable diseases",
"Achieve 80% institutional deliveries",
"Universal access to safe drinking water and sanitation",
"Elimination of child marriage – no girl to be married below 18 years",
], 0.5, 3.3, 12.333, 3.6, size=16)
# ─────────────────────────────────────────────
# SLIDE 9 – NPP 2000 Socio-Demographic Goals by 2010
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NPP 2000 – National Socio-Demographic Goals by 2010")
footer(s)
# Two columns
col_items_1 = [
"Address unmet needs for basic reproductive & child health services",
"Free & compulsory school education up to age 14; drop-outs < 20%",
"IMR < 30 per 1,000 live births",
"MMR < 100 per 1,00,000 live births",
"Universal immunization of children against all vaccine-preventable diseases",
]
col_items_2 = [
"80% institutional deliveries & 100% skilled birth attendance",
"Universal access to contraception",
"Prevention & control of RTI / STI / HIV/AIDS",
"Integrate AYUSH into mainstream health care",
"Vigorously address female foeticide, child marriage & social gender discrimination",
]
add_text(s, "Column A", 0.5, 1.42, 6.0, 0.4, 16, bold=True, color=MID_BLUE)
add_text(s, "Column B", 6.9, 1.42, 6.0, 0.4, 16, bold=True, color=MID_BLUE)
bullet_list(s, col_items_1, 0.5, 1.82, 6.2, 5.0, size=15)
bullet_list(s, col_items_2, 6.9, 1.82, 6.0, 5.0, size=15)
add_rect(s, 6.77, 1.4, 0.06, 5.7, TEAL)
# ─────────────────────────────────────────────
# SLIDE 10 – NPP 2000 National Commission on Population
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NPP 2000 – National Commission on Population (NCP)")
footer(s)
add_textbox_multi(s, [
{"text": "Establishment of National Commission on Population", "size": 20, "bold": True, "color": MID_BLUE},
{"text": "To oversee and monitor the implementation of NPP 2000, a National Commission on Population was constituted under the Chairmanship of the Prime Minister.", "size": 16, "color": DARK_TEXT, "space_before": 5},
], 0.5, 1.5, 12.333, 1.2)
add_textbox_multi(s, [
{"text": "Functions of NCP", "size": 20, "bold": True, "color": MID_BLUE},
], 0.5, 2.85, 12.333, 0.4)
bullet_list(s, [
"Oversee implementation of NPP 2000 across ministries and departments",
"Review and monitor progress towards demographic goals",
"Provide policy guidance for inter-sectoral coordination",
"Commission district-level plans and state-level action plans",
"Ensure effective convergence of basic services – health, education, ICDS, RCH",
"Promote research and data collection on population and reproductive health",
], 0.5, 3.3, 12.333, 3.6, size=16)
# ─────────────────────────────────────────────
# SLIDE 11 – NPP 2000 Key Strategies
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NPP 2000 – Key Strategies & Features")
footer(s)
boxes = [
("Target-Free Approach", "Move away from targets; focus on individual needs & informed choice"),
("Cafeteria Approach", "Wide range of contraceptive methods offered; clients choose freely"),
("Decentralization", "District-level plans prepared by community participation"),
("Inter-Sectoral Convergence", "Health, education, ICDS, water & sanitation coordinated"),
("Involvement of NGOs", "NGOs and private sector as partners in delivery of services"),
("Male Participation", "Men encouraged to share responsibility in family planning"),
]
x_pos = [0.4, 4.55, 8.7, 0.4, 4.55, 8.7]
y_pos = [1.45, 1.45, 1.45, 4.1, 4.1, 4.1]
for i, (ttl, desc) in enumerate(boxes):
add_rect(s, x_pos[i], y_pos[i], 3.8, 2.45, WHITE)
add_rect(s, x_pos[i], y_pos[i], 3.8, 0.55, MID_BLUE)
add_text(s, ttl, x_pos[i]+0.1, y_pos[i]+0.05, 3.6, 0.45, 15,
bold=True, color=WHITE, wrap=True)
add_text(s, desc, x_pos[i]+0.1, y_pos[i]+0.6, 3.6, 1.75, 14,
color=DARK_TEXT, wrap=True)
# ─────────────────────────────────────────────
# SLIDE 12 – Progress & Achievements
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NPP – Progress & Key Achievements")
footer(s)
add_textbox_multi(s, [
{"text": "Notable Demographic Progress (India)", "size": 20, "bold": True, "color": MID_BLUE},
], 0.5, 1.45, 12.333, 0.4)
data = [
("Indicator", "Earlier Baseline", "Recent Status"),
("Total Fertility Rate (TFR)", "5.2 (1971)", "~2.0 (2019-21, NFHS-5)"),
("Infant Mortality Rate (IMR)", "129 (1971)", "~28 (2020)"),
("Maternal Mortality Rate (MMR)", "~600 (1990)", "~97 (2018-20)"),
("Couple Protection Rate (CPR)", "<10% (1970)", "~56% (NFHS-5)"),
("Institutional Deliveries", "<15% (1990s)", "~89% (NFHS-5)"),
("Life Expectancy at Birth", "47 years (1971)", "~69.7 years (2020)"),
]
row_ht = 0.68
for r, row in enumerate(data):
y = 1.92 + r * row_ht
bg = MID_BLUE if r == 0 else (RGBColor(0xD6, 0xEA, 0xF8) if r % 2 == 0 else WHITE)
add_rect(s, 0.5, y, 12.333, row_ht - 0.04, bg)
txt_color = WHITE if r == 0 else DARK_TEXT
for c, (txt, cx, cw) in enumerate(zip(row,
[0.55, 4.5, 8.4],
[3.85, 3.75, 4.35])):
add_text(s, txt, cx, y+0.05, cw, row_ht-0.1, 14 if r>0 else 15,
bold=(r==0), color=txt_color)
# ─────────────────────────────────────────────
# SLIDE 13 – National Health Policy Background
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "National Health Policy – Background & Evolution")
footer(s)
add_textbox_multi(s, [
{"text": "Context for a New Health Policy", "size": 20, "bold": True, "color": MID_BLUE},
{"text": "The National Health Policy of 1983 and NHP 2002 served well in guiding the health sector in Five-Year Plans. By 2016, four major contextual changes demanded a new policy:", "size": 16, "color": DARK_TEXT, "space_before": 5},
], 0.5, 1.5, 12.333, 1.2)
changes = [
("1. Changing Health Priorities",
"Maternal & child mortality declined rapidly. Growing burden from NCDs and re-emerging infectious diseases."),
("2. Emergence of Robust Healthcare Industry",
"Health sector estimated to be growing at double-digit rates; private sector plays expanding role."),
("3. Catastrophic Expenditure on Health",
"Rising out-of-pocket health costs – a major contributor to poverty & financial hardship."),
("4. Enhanced Fiscal Capacity",
"Rising economic growth enables greater government investment in health."),
]
x_c = [0.4, 6.9, 0.4, 6.9]
y_c = [2.85, 2.85, 5.0, 5.0]
for i, (ttl, desc) in enumerate(changes):
add_rect(s, x_c[i], y_c[i], 6.1, 1.9, WHITE)
add_rect(s, x_c[i], y_c[i], 6.1, 0.08, ORANGE)
add_text(s, ttl, x_c[i]+0.1, y_c[i]+0.12, 5.9, 0.55, 15,
bold=True, color=MID_BLUE, wrap=True)
add_text(s, desc, x_c[i]+0.1, y_c[i]+0.7, 5.9, 1.1, 14,
color=DARK_TEXT, wrap=True)
# ─────────────────────────────────────────────
# SLIDE 14 – NHP 1983 & NHP 2002
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NHP 1983 & NHP 2002 – Key Highlights")
footer(s)
add_text(s, "National Health Policy 1983", 0.5, 1.45, 6.0, 0.45, 19, bold=True, color=MID_BLUE)
bullet_list(s, [
"First comprehensive national health policy of India",
"Adopted the goal of 'Health for All by 2000 AD' (Alma Ata, 1978)",
"Set NRR = 1 as demographic goal by year 2000",
"Stressed establishment of PHCs and sub-centres",
"Advocated for strengthening AYUSH",
"Integrated approach to curative, preventive and promotive health",
], 0.5, 1.9, 6.0, 4.9, size=14)
add_rect(s, 6.77, 1.4, 0.06, 5.7, TEAL)
add_text(s, "National Health Policy 2002", 6.9, 1.45, 6.0, 0.45, 19, bold=True, color=MID_BLUE)
bullet_list(s, [
"Aimed to achieve universal access to health services",
"Increase public health spending to 2% of GDP by 2010",
"Reduce IMR to 30, MMR to 100 by 2010",
"Focus on rural health infrastructure & human resources",
"Introduced concept of public-private partnership",
"Regulation of private sector and medical education",
"Emphasis on disease surveillance & control",
], 6.9, 1.9, 6.0, 4.9, size=14)
# ─────────────────────────────────────────────
# SLIDE 15 – NHP 2017 Aims & Principles
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "National Health Policy 2017 – Primary Aim & Principles")
footer(s)
add_textbox_multi(s, [
{"text": "Primary Aim (NHP 2017)", "size": 20, "bold": True, "color": MID_BLUE},
{"text": "To inform, clarify, strengthen and prioritize the role of the Government in shaping health systems in all its dimensions – investments in health, organization of healthcare services, prevention of diseases and promotion of good health through cross-sectoral actions, access to technologies, developing human resources, encouraging medical pluralism, building knowledge base, developing better financial protection strategies, strengthening regulation and health assurance.", "size": 15, "color": DARK_TEXT, "space_before": 5},
], 0.5, 1.5, 12.333, 2.0)
add_textbox_multi(s, [
{"text": "Core Principles", "size": 20, "bold": True, "color": MID_BLUE},
], 0.5, 3.6, 12.333, 0.4)
bullet_list(s, [
"Universality – Health for all, irrespective of income, caste, gender, or religion",
"Equity – Reduce health disparities across social and economic groups",
"Patient-centred care – Evidence-based, rational treatment",
"Pluralism – Integration of AYUSH and modern medicine",
"Decentralization – District-level planning and accountability",
"Financial protection – Reducing catastrophic out-of-pocket expenditure",
], 0.5, 4.05, 12.333, 2.9, size=15)
# ─────────────────────────────────────────────
# SLIDE 16 – NHP 2017 Health Status Goals (Life Expectancy & Fertility)
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NHP 2017 – Health Status Goals: Life Expectancy & Fertility")
footer(s)
goals = [
("Life Expectancy", "Increase life expectancy at birth from 67.5 to 70 by 2025"),
("DALY Tracking", "Establish regular tracking of DALY index as measure of burden of disease by 2022"),
("TFR", "Reduce TFR to 2.1 at national and sub-national level by 2025"),
("Under-5 Mortality", "Reduce under-five mortality to 23 per 1,000 live births by 2025"),
("MMR", "Reduce MMR from current levels to 100 per 1,00,000 live births by 2020"),
("IMR", "Reduce IMR to 28 per 1,000 live births by 2019"),
("Neonatal Mortality", "Reduce neonatal mortality to single digit by 2025"),
("Stillbirth Rate", "Reduce stillbirth rate to single digit by 2025"),
]
for i, (label, desc) in enumerate(goals):
x = 0.5 if i % 2 == 0 else 6.9
y = 1.5 + (i // 2) * 1.42
add_rect(s, x, y, 6.0, 1.32, WHITE)
add_rect(s, x, y, 0.18, 1.32, TEAL if i % 2 == 0 else ORANGE)
add_text(s, label, x+0.3, y+0.08, 5.6, 0.45, 15, bold=True, color=MID_BLUE)
add_text(s, desc, x+0.3, y+0.5, 5.6, 0.75, 13, color=DARK_TEXT, wrap=True)
# ─────────────────────────────────────────────
# SLIDE 17 – NHP 2017 Disease Burden Goals
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NHP 2017 – Disease-Specific Goals")
footer(s)
data = [
("Disease / Condition", "Target / Goal"),
("Tuberculosis (TB)", "Reduce incidence to <85/lakh by 2020; eliminate by 2025"),
("Leprosy", "Eliminate leprosy by 2018"),
("Kala-azar", "Eliminate by 2017"),
("Lymphatic Filariasis", "Eliminate by 2017"),
("Malaria", "Reduce malaria mortality to <1 per 1,000 population at risk by 2020"),
("HIV/AIDS", "Reduce incidence; maintain ART coverage and linkage to care"),
("NCDs (DM, HTN, CVD, Cancer)", "Reduce premature mortality from NCDs by 25% by 2025"),
("Blindness", "Reduce prevalence of blindness to 0.25% by 2025"),
("Tobacco Use", "30% relative reduction in tobacco use by 2025"),
]
row_ht = 0.58
for r, row in enumerate(data):
y = 1.45 + r * row_ht
bg = MID_BLUE if r == 0 else (RGBColor(0xD6, 0xEA, 0xF8) if r % 2 == 0 else WHITE)
add_rect(s, 0.5, y, 12.333, row_ht - 0.03, bg)
txt_color = WHITE if r == 0 else DARK_TEXT
for txt, cx, cw in zip(row, [0.55, 5.8], [5.15, 7.0]):
add_text(s, txt, cx, y+0.04, cw, row_ht-0.08, 14 if r > 0 else 15,
bold=(r == 0), color=txt_color)
# ─────────────────────────────────────────────
# SLIDE 18 – NHP 2017 Health System Performance Goals
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NHP 2017 – Health System Performance Goals")
footer(s)
add_text(s, "B. Health Systems Performance", 0.5, 1.45, 12.333, 0.45, 19, bold=True, color=MID_BLUE)
bullet_list(s, [
"Increase utilization of public health facilities by 50% from current levels by 2025",
"Ensure full immunization coverage in all districts and sub-districts",
"Meet family planning needs through public health system – no out-of-pocket expenditure for 90% of cases",
"Reduce proportion of out-of-pocket expenditure from 60%+ to 25% by 2025",
"Reduce proportion of household below poverty line due to health costs by 25% by 2025",
"Antenatal care coverage for >90% of pregnant women",
"At least 90% of newborns receive essential newborn care",
"All districts to have functional District Early Intervention Centres (DEICs)",
], 0.5, 1.95, 12.333, 3.8, size=16)
add_text(s, "C. Health System Strengthening", 0.5, 5.8, 12.333, 0.4, 19, bold=True, color=MID_BLUE)
bullet_list(s, [
"Increase health expenditure to 2.5% of GDP by 2025",
"Increase state sector health spending to >8% of state budgets by 2020",
], 0.5, 6.15, 12.333, 0.9, size=16)
# ─────────────────────────────────────────────
# SLIDE 19 – NHP 2017 System Strengthening (continued)
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "NHP 2017 – Health System Strengthening (Continued)")
footer(s)
bullet_list(s, [
"Establish primary and secondary health care infrastructure in all areas",
"Establish standard of care benchmarks, clinical practice guidelines",
"Achieve IPHS (Indian Public Health Standards) norms for PHCs and CHCs",
"Recruit and retain health workforce in remote and rural areas with incentives",
"Establish regulatory mechanisms for medical education quality",
"All districts to have adequate numbers of public health specialists",
"Increase specialist (OBG, Paediatrics, Medicine, Surgery) cover in CHCs to 40% by 2020",
"Develop a National Health Information Network (digital health ecosystem)",
"Implement all components of Ayushman Bharat scheme",
"Strengthen national drug policy, rational use of medicines, & generic drug supply",
], 0.5, 1.45, 12.333, 5.5, size=16)
# ─────────────────────────────────────────────
# SLIDE 20 – Summary Comparison & Key Takeaways
# ─────────────────────────────────────────────
s = prs.slides.add_slide(blank)
body_bg(s)
header_band(s, "Summary: NPP 2000 vs NHP 2017 – Key Takeaways")
footer(s)
# Two-column comparison
add_rect(s, 0.5, 1.45, 6.0, 5.5, WHITE)
add_rect(s, 0.5, 1.45, 6.0, 0.55, MID_BLUE)
add_text(s, "National Population Policy 2000", 0.6, 1.5, 5.8, 0.45,
16, bold=True, color=WHITE)
bullet_list(s, [
"Target-free, cafeteria approach",
"Goal: TFR to replacement level by 2010",
"NRR = 1 as ultimate target",
"Addresses unmet need for FP services",
"Focus: RCH, adolescent health, gender equity",
"National Commission on Population (NCP)",
"IMR < 30 | MMR < 100 per 1,00,000",
"Universal immunization, 80% institutional delivery",
"Voluntary, informed consent emphasized",
], 0.5, 2.05, 6.0, 4.85, size=13)
add_rect(s, 6.9, 1.45, 5.95, 5.5, WHITE)
add_rect(s, 6.9, 1.45, 5.95, 0.55, TEAL)
add_text(s, "National Health Policy 2017", 7.0, 1.5, 5.75, 0.45,
16, bold=True, color=WHITE)
bullet_list(s, [
"Universal Health Coverage as core goal",
"Raise public health spend to 2.5% of GDP",
"Life expectancy → 70 by 2025",
"TFR → 2.1 by 2025; NMR to single digit",
"Eliminate TB by 2025; leprosy by 2018",
"Reduce out-of-pocket expenditure to 25%",
"NCDs – reduce premature mortality 25% by 2025",
"Emphasizes pluralism (AYUSH + modern medicine)",
"Digital health ecosystem & health assurance",
], 6.9, 2.05, 5.95, 4.85, size=13)
add_textbox_multi(s, [
{"text": "Source: Park's Textbook of Preventive & Social Medicine, 28th Edition (K. Park)", "size": 11, "italic": True, "color": MID_BLUE, "align": PP_ALIGN.CENTER},
], 0.5, 6.95, 12.333, 0.2)
# ─────────────────────────────────────────────
# Save
# ─────────────────────────────────────────────
output_path = "/tmp/workspace/national-policy-ppt/National_Population_Health_Policy.pptx"
prs.save(output_path)
print(f"Saved: {output_path}")
print(f"Slides: {len(prs.slides)}")
cd /tmp/workspace/national-policy-ppt && python create_ppt.py
National Population Health Policy
Presentation · PPTX
| # | Slide Title |
|---|---|
| 1 | Title Slide – National Population Policy & National Health Policy (K. Park, 28th Ed.) |
| 2 | Overview / Table of Contents |
| 3 | Population Policy – Definition & Concept |
| 4 | History of Population Policy in India (1952-2000 timeline) |
| 5 | NPP 2000 – Background & Broader Scope |
| 6 | NPP 2000 – Immediate Objectives |
| 7 | NPP 2000 – Medium-Term Objectives |
| 8 | NPP 2000 – Long-Term Objectives |
| 9 | NPP 2000 – National Socio-Demographic Goals by 2010 |
| 10 | NPP 2000 – National Commission on Population (NCP) |
| 11 | NPP 2000 – Key Strategies (Target-free, Cafeteria, Decentralization, etc.) |
| 12 | NPP – Progress & Key Achievements (data table: TFR, IMR, MMR, CPR) |
| 13 | National Health Policy – Background & Evolution |
| 14 | NHP 1983 & NHP 2002 – Key Highlights |
| 15 | NHP 2017 – Primary Aim & Core Principles |
| 16 | NHP 2017 – Health Status Goals (Life Expectancy, Fertility, Mortality) |
| 17 | NHP 2017 – Disease-Specific Goals (TB, Leprosy, Malaria, NCDs, etc.) |
| 18 | NHP 2017 – Health System Performance Goals |
| 19 | NHP 2017 – Health System Strengthening |
| 20 | Summary Comparison: NPP 2000 vs NHP 2017 |
Make 2 poster mind map on national population policy take reference with k park edition 28
mkdir -p /tmp/workspace/npp-mindmaps && python3 -c "import matplotlib; print(matplotlib.__version__)"
~/npp-mindmaps/mindmap1.py
"""
POSTER MIND MAP 1 – National Population Policy 2000
Topic: History · Immediate Objectives · Medium-Term Objectives · Long-Term Objectives · Socio-Demographic Goals
Reference: Park's Textbook of Preventive & Social Medicine, 28th Edition
"""
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.patches import FancyBboxPatch, FancyArrowPatch
import numpy as np
# ── Canvas ──────────────────────────────────────────────────────────────────
fig = plt.figure(figsize=(24, 17), dpi=150)
fig.patch.set_facecolor('#0D1B2A')
ax = fig.add_axes([0, 0, 1, 1])
ax.set_xlim(0, 24)
ax.set_ylim(0, 17)
ax.axis('off')
# ── Colour palette ────────────────────────────────────────────────────────
C_DARK = '#0D1B2A'
C_NAVY = '#1A3764'
C_BLUE = '#1E5F9E'
C_TEAL = '#0A8A8A'
C_GREEN = '#1A7A4A'
C_ORANGE = '#D4610C'
C_YELLOW = '#D4A700'
C_PURPLE = '#6A2D8F'
C_RED = '#B02020'
C_WHITE = '#F0F4FF'
C_LIGHT = '#C8DCF0'
C_GOLD = '#FFD700'
def draw_box(ax, x, y, w, h, facecolor, edgecolor, radius=0.25, alpha=1.0, lw=2):
box = FancyBboxPatch((x - w/2, y - h/2), w, h,
boxstyle=f"round,pad=0.05,rounding_size={radius}",
facecolor=facecolor, edgecolor=edgecolor,
linewidth=lw, alpha=alpha, zorder=3)
ax.add_patch(box)
def draw_text(ax, x, y, text, size=9, color=C_WHITE, weight='normal',
ha='center', va='center', wrap_width=None, style='normal'):
ax.text(x, y, text, fontsize=size, color=color, fontweight=weight,
ha=ha, va=va, zorder=5, style=style,
wrap=True, multialignment='center',
fontfamily='DejaVu Sans')
def draw_arrow(ax, x1, y1, x2, y2, color='#4A90D9', lw=2, style='->', alpha=0.8):
ax.annotate('', xy=(x2, y2), xytext=(x1, y1),
arrowprops=dict(arrowstyle=style, color=color,
lw=lw, alpha=alpha,
connectionstyle='arc3,rad=0.0'),
zorder=2)
def draw_curved_arrow(ax, x1, y1, x2, y2, color='#4A90D9', lw=1.8, rad=0.15, alpha=0.75):
ax.annotate('', xy=(x2, y2), xytext=(x1, y1),
arrowprops=dict(arrowstyle='->', color=color, lw=lw, alpha=alpha,
connectionstyle=f'arc3,rad={rad}'),
zorder=2)
# ── Background decorative gradient circles ──────────────────────────────────
for cx, cy, r, alph in [(12, 8.5, 8, 0.04), (12, 8.5, 5.5, 0.05), (12, 8.5, 3, 0.06)]:
circle = plt.Circle((cx, cy), r, color='#1E5F9E', alpha=alph, zorder=0)
ax.add_patch(circle)
# ══════════════════════════════════════════════
# TITLE BANNER
# ══════════════════════════════════════════════
draw_box(ax, 12, 16.2, 22, 1.2, C_NAVY, C_GOLD, radius=0.3, lw=3)
draw_text(ax, 12, 16.45, "NATIONAL POPULATION POLICY 2000", size=20, color=C_GOLD, weight='bold')
draw_text(ax, 12, 15.95, "History · Objectives · Socio-Demographic Goals",
size=11, color=C_LIGHT)
draw_text(ax, 12, 15.6, "Reference: Park's Textbook of Preventive & Social Medicine, 28th Edition",
size=8.5, color='#8ABADC', style='italic')
# ══════════════════════════════════════════════
# CENTRE NODE
# ══════════════════════════════════════════════
cx, cy = 12.0, 8.5
draw_box(ax, cx, cy, 3.6, 1.7, C_ORANGE, C_GOLD, radius=0.35, lw=3.5)
draw_text(ax, cx, cy+0.3, "NPP 2000", size=18, color=C_WHITE, weight='bold')
draw_text(ax, cx, cy-0.35, "National Population\nPolicy 2000", size=10, color=C_LIGHT)
# ══════════════════════════════════════════════
# BRANCH 1 – HISTORY (top-left)
# ══════════════════════════════════════════════
b1x, b1y = 3.8, 13.0
draw_box(ax, b1x, b1y, 4.5, 0.9, C_PURPLE, '#C890FF', radius=0.25, lw=2.5)
draw_text(ax, b1x, b1y, "📜 HISTORY", size=13, color=C_WHITE, weight='bold')
draw_curved_arrow(ax, cx-1.5, cy+0.6, b1x+2.0, b1y-0.4, color='#C890FF', lw=2, rad=-0.3)
history_items = [
(3.0, 11.6, "1952", "World's FIRST National\nFamily Planning Programme", C_PURPLE),
(3.0, 10.2, "1976", "First NPP formed\nMin. age marriage:\nGirls 15→18 | Boys 18→21 yrs", C_PURPLE),
(3.0, 8.6, "1977", "Policy modified; title changed to\n'Family Welfare Programme'\nTarget-free approach", C_PURPLE),
(3.0, 7.1, "1983", "National Health Policy approved\nGoal: NRR=1 by 2000 AD", C_PURPLE),
]
for hx, hy, yr, txt, col in history_items:
draw_box(ax, hx-0.35, hy, 1.1, 0.6, col, '#C890FF', radius=0.18, lw=2)
draw_text(ax, hx-0.35, hy, yr, size=10, color=C_GOLD, weight='bold')
draw_box(ax, hx+1.8, hy, 3.0, 0.72, '#1A1040', '#C890FF', radius=0.18, lw=1.5)
draw_text(ax, hx+1.8, hy, txt, size=8.5, color=C_WHITE)
ax.plot([hx+0.2, hx+0.3], [hy, hy], color='#C890FF', lw=1.5, zorder=2)
# ══════════════════════════════════════════════
# BRANCH 2 – IMMEDIATE OBJECTIVES (top-right)
# ══════════════════════════════════════════════
b2x, b2y = 20.2, 13.2
draw_box(ax, b2x, b2y, 4.8, 0.9, C_TEAL, '#80FFFF', radius=0.25, lw=2.5)
draw_text(ax, b2x, b2y, "⚡ IMMEDIATE OBJECTIVES", size=12, color=C_WHITE, weight='bold')
draw_curved_arrow(ax, cx+1.5, cy+0.7, b2x-2.2, b2y-0.4, color='#80FFFF', lw=2, rad=0.3)
imm = [
"Address unmet needs for contraception",
"Health care infrastructure & personnel",
"Integrated RCH service delivery",
"RTI / STI / HIV-AIDS prevention & mgmt",
"Safe abortion & emergency obstetric care",
"Referral transport & communication",
"Eliminate child marriage & gender discrimination",
]
for i, txt in enumerate(imm):
iy = 11.9 - i * 0.78
draw_box(ax, 20.2, iy, 4.6, 0.62, '#082828', '#80FFFF', radius=0.15, lw=1.5)
draw_text(ax, 20.2, iy, f"▸ {txt}", size=8.5, color=C_WHITE)
# ══════════════════════════════════════════════
# BRANCH 3 – MEDIUM-TERM OBJECTIVES (left)
# ══════════════════════════════════════════════
b3x, b3y = 2.8, 5.2
draw_box(ax, b3x, b3y, 4.5, 0.9, C_BLUE, '#88C4F4', radius=0.25, lw=2.5)
draw_text(ax, b3x, b3y, "📅 MEDIUM-TERM OBJECTIVES", size=11, color=C_WHITE, weight='bold')
draw_curved_arrow(ax, cx-1.7, cy-0.4, b3x+2.1, b3y+0.3, color='#88C4F4', lw=2, rad=0.2)
med = [
"Bring TFR to replacement level by 2010",
"Free & compulsory education up to age 14",
"Reduce school dropouts < 20% (boys & girls)",
"Expand PHC & sub-centre network",
"Strengthen referral from PHC to district hospital",
"Delay marriage & first pregnancy",
"Incentivize small family norm at community level",
]
for i, txt in enumerate(med):
my = 4.0 - i * 0.68
draw_box(ax, 2.8, my, 4.8, 0.58, '#071830', '#88C4F4', radius=0.14, lw=1.5)
draw_text(ax, 2.8, my, f"▸ {txt}", size=8.5, color=C_WHITE)
# ══════════════════════════════════════════════
# BRANCH 4 – LONG-TERM OBJECTIVES (right)
# ══════════════════════════════════════════════
b4x, b4y = 21.2, 5.2
draw_box(ax, b4x, b4y, 4.5, 0.9, C_GREEN, '#80FFAA', radius=0.25, lw=2.5)
draw_text(ax, b4x, b4y, "🎯 LONG-TERM OBJECTIVES", size=12, color=C_WHITE, weight='bold')
draw_curved_arrow(ax, cx+1.7, cy-0.4, b4x-2.0, b4y+0.3, color='#80FFAA', lw=2, rad=-0.2)
lng = [
"NRR = 1 (Net Reproduction Rate)",
"TFR = 2.1 (Replacement level fertility)",
"IMR < 30 per 1,000 live births",
"MMR < 100 per 1,00,000 live births",
"Universal immunization coverage",
"80% institutional deliveries",
"Stable population by 2045",
]
for i, txt in enumerate(lng):
ly = 4.0 - i * 0.68
draw_box(ax, 21.2, ly, 4.6, 0.58, '#071C10', '#80FFAA', radius=0.14, lw=1.5)
draw_text(ax, 21.2, ly, f"▸ {txt}", size=8.5, color=C_WHITE)
# ══════════════════════════════════════════════
# BRANCH 5 – SOCIO-DEMOGRAPHIC GOALS (bottom)
# ══════════════════════════════════════════════
b5x, b5y = 12.0, 3.6
draw_box(ax, b5x, b5y, 5.0, 0.9, C_YELLOW, '#FFEE60', radius=0.25, lw=2.5)
draw_text(ax, b5x, b5y, "📊 SOCIO-DEMOGRAPHIC GOALS (by 2010)", size=12, color=C_DARK, weight='bold')
draw_arrow(ax, cx, cy-0.85, b5x, b5y+0.45, color='#FFD700', lw=2.5)
sdg_items = [
(6.5, 2.3, "Universal\nImmunization"),
(9.0, 2.3, "IMR < 30\nper 1000 LB"),
(11.5, 2.3, "MMR < 100\nper 1,00,000 LB"),
(14.0, 2.3, "80% Institutional\nDeliveries"),
(16.5, 2.3, "Eliminate Child\nMarriage"),
(6.5, 1.0, "Free Education\nup to Age 14"),
(9.0, 1.0, "Dropouts < 20%\n(Boys & Girls)"),
(11.5, 1.0, "Universal Access\nto Contraception"),
(14.0, 1.0, "RTI/STI/HIV\nPrevention"),
(16.5, 1.0, "AYUSH\nIntegration"),
]
colors_sdg = [C_TEAL, C_BLUE, C_GREEN, C_ORANGE, C_RED,
C_PURPLE, C_BLUE, C_TEAL, C_GREEN, C_ORANGE]
for (sx, sy, stxt), scol in zip(sdg_items, colors_sdg):
draw_box(ax, sx, sy, 2.2, 0.75, scol, C_GOLD, radius=0.15, lw=1.8)
draw_text(ax, sx, sy, stxt, size=8, color=C_WHITE, weight='bold')
# ══════════════════════════════════════════════
# FOOTER
# ══════════════════════════════════════════════
draw_box(ax, 12, 0.35, 22, 0.5, '#0A1520', '#1E5F9E', radius=0.1, lw=1.5)
draw_text(ax, 12, 0.35,
"Park's Textbook of Preventive & Social Medicine, 28th Edition | Mind Map 1 of 2",
size=8.5, color='#6AAED6', style='italic')
plt.savefig('/tmp/workspace/npp-mindmaps/NPP_MindMap_1_History_Objectives_Goals.png',
dpi=150, bbox_inches='tight', facecolor=C_DARK)
plt.close()
print("Saved MindMap 1")
~/npp-mindmaps/mindmap2.py
"""
POSTER MIND MAP 2 – National Population Policy 2000
Topic: Key Strategies · Family Planning Methods · Achievements · National Commission · Special Groups
Reference: Park's Textbook of Preventive & Social Medicine, 28th Edition
"""
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.patches import FancyBboxPatch
import numpy as np
fig = plt.figure(figsize=(24, 17), dpi=150)
fig.patch.set_facecolor('#0A0E1A')
ax = fig.add_axes([0, 0, 1, 1])
ax.set_xlim(0, 24)
ax.set_ylim(0, 17)
ax.axis('off')
C_DARK = '#0A0E1A'
C_NAVY = '#112244'
C_BLUE = '#1B4F8A'
C_TEAL = '#0D7A7A'
C_GREEN = '#1A6B40'
C_ORANGE = '#C85A10'
C_YELLOW = '#C8A000'
C_PURPLE = '#5A2080'
C_RED = '#9A1818'
C_PINK = '#8A1060'
C_WHITE = '#EEF4FF'
C_LIGHT = '#BCCEE4'
C_GOLD = '#FFD700'
C_CYAN = '#00CCCC'
def draw_box(ax, x, y, w, h, fc, ec, radius=0.22, alpha=1.0, lw=2.0):
box = FancyBboxPatch((x - w/2, y - h/2), w, h,
boxstyle=f"round,pad=0.04,rounding_size={radius}",
facecolor=fc, edgecolor=ec,
linewidth=lw, alpha=alpha, zorder=3)
ax.add_patch(box)
def txt(ax, x, y, s, size=9, color=C_WHITE, weight='normal',
ha='center', va='center', style='normal'):
ax.text(x, y, s, fontsize=size, color=color, fontweight=weight,
ha=ha, va=va, zorder=5, multialignment='center',
fontfamily='DejaVu Sans', style=style, wrap=True)
def arrow(ax, x1, y1, x2, y2, color='#4A90D9', lw=2.0, rad=0.0, alpha=0.85):
ax.annotate('', xy=(x2, y2), xytext=(x1, y1),
arrowprops=dict(arrowstyle='->', color=color, lw=lw, alpha=alpha,
connectionstyle=f'arc3,rad={rad}'), zorder=2)
# Background glow rings
for r, a in [(9, 0.03), (6.5, 0.04), (4, 0.05)]:
ax.add_patch(plt.Circle((12, 8.5), r, color='#1B4F8A', alpha=a, zorder=0))
# ══════════════════════════════════════════════
# TITLE
# ══════════════════════════════════════════════
draw_box(ax, 12, 16.2, 22.5, 1.2, C_NAVY, C_GOLD, radius=0.3, lw=3.5)
txt(ax, 12, 16.45, "NATIONAL POPULATION POLICY 2000", size=20, color=C_GOLD, weight='bold')
txt(ax, 12, 15.95, "Strategies · Family Planning · Special Groups · NCP · Achievements",
size=11, color=C_LIGHT)
txt(ax, 12, 15.6,
"Reference: Park's Textbook of Preventive & Social Medicine, 28th Edition",
size=8.5, color='#7AAAC8', style='italic')
# ══════════════════════════════════════════════
# CENTRE NODE
# ══════════════════════════════════════════════
cx, cy = 12.0, 8.5
draw_box(ax, cx, cy, 3.8, 1.8, C_RED, C_GOLD, radius=0.38, lw=3.5)
txt(ax, cx, cy+0.35, "NPP 2000", size=18, color=C_WHITE, weight='bold')
txt(ax, cx, cy-0.35, "Key Features &\nImplementation", size=10, color='#FFCCCC')
# ══════════════════════════════════════════════
# BRANCH A – KEY STRATEGIES (top-left)
# ══════════════════════════════════════════════
ax_branch = 3.5, 13.5
draw_box(ax, ax_branch[0], ax_branch[1], 5.0, 0.9, C_TEAL, C_CYAN, radius=0.25, lw=2.8)
txt(ax, ax_branch[0], ax_branch[1], "⚙ KEY STRATEGIES", size=13, color=C_WHITE, weight='bold')
arrow(ax, cx-1.6, cy+0.65, ax_branch[0]+2.2, ax_branch[1]-0.45, color=C_CYAN, lw=2.2, rad=-0.25)
strategies = [
("Target-Free Approach",
"No individual or area targets; focus\non client's unmet need"),
("Cafeteria Approach",
"Wide choice of FP methods offered;\nclient chooses freely"),
("Decentralized Planning",
"District-level plans through\ncommunity participation"),
("Inter-Sectoral Convergence",
"Health + Education + ICDS +\nWater & Sanitation coordinated"),
("NGO & Private Sector",
"Partnership with NGOs &\nprivate sector for service delivery"),
("Male Participation",
"Men share responsibility\nin family planning decisions"),
]
for i, (stitle, sdesc) in enumerate(strategies):
sy = 12.3 - i * 1.1
draw_box(ax, 3.5, sy, 4.8, 0.95, '#051C1C', C_CYAN, radius=0.18, lw=1.5)
txt(ax, 3.5, sy+0.2, stitle, size=9.5, color=C_CYAN, weight='bold')
txt(ax, 3.5, sy-0.2, sdesc, size=8, color=C_WHITE)
# ══════════════════════════════════════════════
# BRANCH B – FAMILY PLANNING METHODS (top-right)
# ══════════════════════════════════════════════
bx, by = 20.5, 13.5
draw_box(ax, bx, by, 5.0, 0.9, C_PURPLE, '#CC88FF', radius=0.25, lw=2.8)
txt(ax, bx, by, "💊 FAMILY PLANNING METHODS", size=11.5, color=C_WHITE, weight='bold')
arrow(ax, cx+1.6, cy+0.7, bx-2.2, by-0.45, color='#CC88FF', lw=2.2, rad=0.25)
fp_methods = [
("SPACING METHODS",
["• OCP – Oral Contraceptive Pills",
"• IUD – Cu-T 200B, Cu-T 380A (2002)",
"• Condoms (male & female)",
"• Diaphragm / Cervical cap",
"• Injectable (DMPA) / Implants"]),
("TERMINAL METHODS",
["• Female Sterilization (Tubectomy)",
"• Male Sterilization (Vasectomy)",
"• Minilap / Laparoscopic sterilization",
"• MTP (Medical Termination of Pregnancy)"]),
]
fy = 12.2
for mcat, mitems in fp_methods:
draw_box(ax, bx, fy, 4.8, 0.55, C_PURPLE, '#CC88FF', radius=0.15, lw=1.8)
txt(ax, bx, fy, mcat, size=9.5, color=C_GOLD, weight='bold')
fy -= 0.65
for mi in mitems:
draw_box(ax, bx, fy, 4.6, 0.52, '#1A0830', '#CC88FF', radius=0.12, lw=1.2)
txt(ax, bx, fy, mi, size=8.5, color=C_WHITE)
fy -= 0.62
fy -= 0.1
# ══════════════════════════════════════════════
# BRANCH C – SPECIAL POPULATION GROUPS (left)
# ══════════════════════════════════════════════
cx3, cy3 = 2.8, 6.0
draw_box(ax, cx3, cy3, 4.5, 0.9, C_ORANGE, '#FFB060', radius=0.25, lw=2.8)
txt(ax, cx3, cy3, "👥 SPECIAL POPULATION GROUPS", size=10.5, color=C_WHITE, weight='bold')
arrow(ax, cx-1.75, cy-0.35, cx3+2.0, cy3+0.2, color='#FFB060', lw=2.2, rad=0.2)
groups = [
("Urban Slum Population", "Targeted RCH & family welfare services"),
("Tribal Communities", "Culturally sensitive health delivery"),
("Hill Area Population", "Mobile health units & outreach"),
("Displaced / Migrants", "Portable health records & continuity"),
("Adolescents (10-19 yrs)", "Adolescent Reproductive & Sexual Health"),
("Women Empowerment", "Education, nutrition & decision-making"),
]
for i, (gname, gdesc) in enumerate(groups):
gy = 4.9 - i * 0.82
draw_box(ax, 2.8, gy, 4.8, 0.7, '#1C0D04', '#FFB060', radius=0.15, lw=1.5)
txt(ax, 2.8, gy+0.14, gname, size=9, color='#FFB060', weight='bold')
txt(ax, 2.8, gy-0.19, gdesc, size=8, color=C_WHITE)
# ══════════════════════════════════════════════
# BRANCH D – NATIONAL COMMISSION ON POPULATION (right)
# ══════════════════════════════════════════════
dx, dy = 21.2, 6.0
draw_box(ax, dx, dy, 4.5, 0.9, C_GREEN, '#60FF90', radius=0.25, lw=2.8)
txt(ax, dx, dy, "🏛 NATIONAL COMMISSION\nON POPULATION (NCP)", size=11, color=C_WHITE, weight='bold')
arrow(ax, cx+1.75, cy-0.35, dx-2.0, dy+0.2, color='#60FF90', lw=2.2, rad=-0.2)
ncp_items = [
("Chairman", "Prime Minister of India"),
("Composition", "Ministers, CMs of States, experts"),
("Role", "Oversee & monitor NPP 2000 implementation"),
("Function", "Review demographic goals & targets"),
("Coordination", "Inter-ministerial convergence"),
("Plans", "Commission district & state action plans"),
]
for i, (nlabel, ndesc) in enumerate(ncp_items):
ny = 4.9 - i * 0.82
draw_box(ax, 21.2, ny, 4.8, 0.7, '#061408', '#60FF90', radius=0.15, lw=1.5)
txt(ax, 21.2, ny+0.14, nlabel, size=9, color='#60FF90', weight='bold')
txt(ax, 21.2, ny-0.19, ndesc, size=8, color=C_WHITE)
# ══════════════════════════════════════════════
# BRANCH E – ACHIEVEMENTS / PROGRESS (bottom)
# ══════════════════════════════════════════════
ex, ey = 12.0, 3.5
draw_box(ax, ex, ey, 5.2, 0.9, C_YELLOW, '#FFEE44', radius=0.25, lw=2.8)
txt(ax, ex, ey, "📈 ACHIEVEMENTS & PROGRESS", size=13, color=C_DARK, weight='bold')
arrow(ax, cx, cy-0.9, ex, ey+0.45, color=C_GOLD, lw=2.5)
ach_data = [
("TFR", "5.2 (1971)\n→ ~2.0\n(NFHS-5)", C_BLUE),
("IMR", "129 (1971)\n→ ~28\n(2020)", C_TEAL),
("MMR", "~600 (1990)\n→ ~97\n(2018-20)", C_GREEN),
("CPR", "<10% (1970)\n→ ~56%\n(NFHS-5)", C_ORANGE),
("Inst.\nDeliv.", "< 15%\n→ ~89%\n(NFHS-5)", C_PURPLE),
("Life\nExpec.", "47 yrs (1971)\n→ ~69.7 yrs\n(2020)", C_RED),
]
aw = 3.5
for i, (alabel, aval, acol) in enumerate(ach_data):
ax_pos = 2.5 + i * 3.25
draw_box(ax, ax_pos, 2.3, 3.0, 1.4, acol, C_GOLD, radius=0.2, lw=2.0)
txt(ax, ax_pos, 2.6, alabel, size=10, color=C_GOLD, weight='bold')
txt(ax, ax_pos, 1.95, aval, size=8.5, color=C_WHITE)
# ── Connector lines from centre to branch nodes ──────────────────────────
for (px, py, rad, col) in [
(ax_branch[0]+2.2, ax_branch[1]-0.45, -0.25, C_CYAN),
(bx-2.2, by-0.45, 0.25, '#CC88FF'),
(cx3+2.0, cy3+0.2, 0.2, '#FFB060'),
(dx-2.0, dy+0.2, -0.2, '#60FF90'),
(ex, ey+0.45, 0.0, C_GOLD),
]:
pass # arrows already drawn above
# ══════════════════════════════════════════════
# FOOTER
# ══════════════════════════════════════════════
draw_box(ax, 12, 0.35, 22.5, 0.5, '#060810', '#1B4F8A', radius=0.1, lw=1.5)
txt(ax, 12, 0.35,
"Park's Textbook of Preventive & Social Medicine, 28th Edition | Mind Map 2 of 2",
size=8.5, color='#6AAED6', style='italic')
plt.savefig('/tmp/workspace/npp-mindmaps/NPP_MindMap_2_Strategies_Achievements.png',
dpi=150, bbox_inches='tight', facecolor=C_DARK)
plt.close()
print("Saved MindMap 2")
cd /tmp/workspace/npp-mindmaps && python mindmap1.py && python mindmap2.py
ls -lh /tmp/workspace/npp-mindmaps/*.png
NPP MindMap 1 History Objectives Goals
Image · PNG
NPP MindMap 2 Strategies Achievements
Image · PNG