Just tell me what to study in anatomy and how

Asking for Preferences
Asking for Preferences
Here is a focused, practical guide for anatomy in NEET PG / INI-CET as a beginner.

What to Study in Anatomy for NEET PG / INI-CET

Big Picture First

Anatomy carries roughly 10-15 questions in NEET PG. High-yield topics are concentrated - you do not need to memorize every nerve and vessel. Focus on clinically applied anatomy because that is what the exam tests.

High-Yield Topics (in order of priority)

1. Neuroanatomy (highest yield)

  • Internal capsule - blood supply (lenticulostriate), limbs, lesions
  • Brainstem - cranial nerve nuclei, their levels, and named syndromes (Weber, Wallenberg, Benedict, Millard-Gubler)
  • Thalamic nuclei and connections
  • Cerebellum - layers, flocculonodular lobe, peduncles
  • Ventricular system - CSF pathway, foramina (Foramen of Monro, Magendie, Luschka)
  • Blood supply of brain - Circle of Willis, MCA/ACA territory strokes
  • Spinal cord tracts - anterolateral (pain/temp), dorsal column (touch/proprioception), corticospinal; classical cord syndromes (Brown-Sequard, syringomyelia, tabes dorsalis, subacute combined degeneration)
  • Meninges and dural sinuses - cavernous sinus contents, danger area of face

2. Gross Anatomy - Clinically Applied Areas

  • Femoral triangle - boundaries, contents, order (NAVEL from lateral to medial)
  • Inguinal canal - walls, contents, differences between direct and indirect hernia
  • Axilla - boundaries, contents, axillary nerve injury (deltoid, surgical neck of humerus)
  • Brachial plexus - roots, trunks, divisions, cords, branches; named palsies (Erb's, Klumpke's, wrist drop, claw hand, ape thumb)
  • Cubital fossa - boundaries and contents
  • Popliteal fossa - contents, popliteal artery being deepest
  • Diaphragm - openings at T8/T10/T12 and what passes through each
  • Peritoneum - retroperitoneal organs (SAD PUCKER mnemonic), lesser sac, foramen of Winslow
  • Portal-systemic anastomoses - 4 sites and clinical relevance (varices)
  • Heart - conducting system (SA node blood supply = RCA in 60%), valves and surface markings
  • Lung root contents and their arrangement
  • Urogenital triangle vs. anal triangle - perineal spaces, perineal body

3. Embryology (very high yield for NEET PG)

  • Derivatives of pharyngeal arches (arch 1, 2, 3, 4, 6 - muscles, nerves, cartilages)
  • Pharyngeal pouches - what each forms (palatine tonsil, parathyroid, thymus, ultimobranchial body)
  • Gut rotation - malrotation, volvulus, hernias
  • Congenital heart defects - VSD most common, ASD ostium secundum most common
  • Neural tube defects - folate, spina bifida types
  • Urogenital development - mesonephros/metanephros, Mullerian vs Wolffian duct derivatives
  • Branchial cyst, thyroglossal cyst - developmental basis
  • Placenta - types of implantation, placenta previa

4. Histology (moderate yield)

  • Cell types you must identify - goblet cells, Paneth cells, chief/parietal cells of stomach, Kupffer cells, Ito cells, Sertoli cells, Leydig cells
  • Epithelial types by organ - transitional (urinary), pseudostratified (respiratory), simple columnar (GI)
  • Testis histology - seminiferous tubules, blood-testis barrier
  • Skin layers - mnemonic: "Come Let's Get Sun Burnt" (Corneum, Lucidum, Granulosum, Spinosum, Basale)
  • Bone - Haversian system, types of cartilage (hyaline, elastic, fibrocartilage)

5. Surface Anatomy / Clinical

  • Nerve injury at specific sites - radial nerve at spiral groove vs posterior interosseous; ulnar nerve at medial epicondyle; common peroneal nerve at fibular neck
  • McBurney's point, Hilton's white line, dentate line (surgery/anatomy overlap)
  • Lymph node drainage - testes drain to para-aortic, not inguinal (high NEET yield)
  • Referred pain - gallbladder to right shoulder (phrenic nerve C3-C5), cardiac pain to left arm

How to Study It

Step 1 - Get the right resources (do not over-collect)

  • BD Chaurasia Vol 1-3 + Handbook - main text
  • Snell's Clinical Anatomy - for applied/clinical correlations
  • Inderbir Singh - for embryology and histology
  • Across or Amit Ashish question bank - MCQ practice
For INI-CET specifically, also look at Netter's Atlas for image-based questions.

Step 2 - Learn the sequence

  1. Start with Gross Anatomy region by region (Upper limb -> Lower limb -> Thorax -> Abdomen -> Head & Neck -> Neuroanatomy)
  2. Interleave Embryology for each region as you go (e.g., study GI embryology right after GI anatomy)
  3. Study Histology in blocks - it is largely memory-based so short, daily sessions work best
  4. End each region with MCQ practice before moving to the next

Step 3 - Active recall techniques

  • Draw diagrams from memory - brachial plexus, Circle of Willis, ventricular system, diaphragm openings; drawing is far more effective than re-reading
  • Flashcards (Anki) for histology cell types, nerve injury patterns, embryology derivatives
  • Solve previous year questions (PYQs) from NEET PG and AIIMS PG - doing 10 MCQs after each topic tells you exactly what the exam expects
  • Do NOT highlight and re-read - it feels productive but builds almost no retention

Step 4 - Revision schedule

WeekFocus
1-2Upper limb (gross + embryology of limbs)
3Lower limb
4Thorax + heart embryology
5Abdomen + GI embryology
6Head & neck + pharyngeal arch derivatives
7Neuroanatomy (dedicate a full week - high yield)
8Histology + revision of all diagrams
Ongoing20-30 MCQs daily from day 1

Step 5 - What NOT to waste time on

  • Detailed muscle origins/insertions (too many, very low yield for NEET PG)
  • Exact measurements and weights unless they appear in PYQs
  • Obscure foramina of the skull base
  • Full Gray's Anatomy level detail on lymphatics

One Practical Rule

Every time you read a structure, ask: "What happens clinically when this is damaged or diseased?" NEET PG and INI-CET almost always frame anatomy questions as clinical scenarios. If you can connect a structure to its clinical implication, you will get the question right even if you have forgotten the exact detail.

Create a NEET PG anatomy study schedule in PDF format

Create a neet pg 2027 exam daily schedule with 3 times proper study and 3times revision

Reading File
Reading File
Running Command

mkdir -p /home/daytona/workspace/neet-pg-schedule

Writing File

~/neet-pg-schedule/create_schedule.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, PageBreak
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import KeepTogether

OUTPUT = "/home/daytona/workspace/neet-pg-schedule/NEET_PG_Anatomy_Schedule.pdf"

# ── Colours ──────────────────────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1A3A5C")
MID_BLUE    = colors.HexColor("#2E6DA4")
LIGHT_BLUE  = colors.HexColor("#D6E8F7")
ACCENT      = colors.HexColor("#E8A020")
LIGHT_GREY  = colors.HexColor("#F4F6F9")
MED_GREY    = colors.HexColor("#C8D0DA")
GREEN       = colors.HexColor("#1E7E34")
LIGHT_GREEN = colors.HexColor("#D4EDDA")
PURPLE      = colors.HexColor("#6F42C1")
LIGHT_PURPLE= colors.HexColor("#EDE7F6")
RED         = colors.HexColor("#C0392B")
LIGHT_RED   = colors.HexColor("#FDECEA")
WHITE       = colors.white
BLACK       = colors.black

# ── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

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

title_style = S("MainTitle",
    fontName="Helvetica-Bold", fontSize=22, textColor=WHITE,
    alignment=TA_CENTER, spaceAfter=4, leading=28)

subtitle_style = S("SubTitle",
    fontName="Helvetica", fontSize=12, textColor=LIGHT_BLUE,
    alignment=TA_CENTER, spaceAfter=2)

section_head = S("SectionHead",
    fontName="Helvetica-Bold", fontSize=13, textColor=WHITE,
    alignment=TA_LEFT, leading=18, leftIndent=6)

body = S("Body",
    fontName="Helvetica", fontSize=9, textColor=BLACK,
    alignment=TA_LEFT, leading=13)

body_bold = S("BodyBold",
    fontName="Helvetica-Bold", fontSize=9, textColor=DARK_BLUE,
    alignment=TA_LEFT, leading=13)

small = S("Small",
    fontName="Helvetica", fontSize=8, textColor=colors.HexColor("#444444"),
    alignment=TA_LEFT, leading=11)

small_bold = S("SmallBold",
    fontName="Helvetica-Bold", fontSize=8, textColor=DARK_BLUE,
    alignment=TA_LEFT, leading=11)

cell_head = S("CellHead",
    fontName="Helvetica-Bold", fontSize=8.5, textColor=WHITE,
    alignment=TA_CENTER, leading=11)

cell_body = S("CellBody",
    fontName="Helvetica", fontSize=8, textColor=BLACK,
    alignment=TA_LEFT, leading=11)

cell_body_bold = S("CellBodyBold",
    fontName="Helvetica-Bold", fontSize=8, textColor=DARK_BLUE,
    alignment=TA_LEFT, leading=11)

note_style = S("Note",
    fontName="Helvetica-Oblique", fontSize=8, textColor=colors.HexColor("#555555"),
    alignment=TA_LEFT, leading=11)

footer_style = S("Footer",
    fontName="Helvetica", fontSize=7.5, textColor=colors.HexColor("#888888"),
    alignment=TA_CENTER)

# ── Helper: coloured banner paragraph ────────────────────────────────────────
def banner(text, bg=DARK_BLUE, style=section_head):
    tbl = Table([[Paragraph(text, style)]], colWidths=[17.5*cm])
    tbl.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),
        ("ROUNDEDCORNERS", (0,0), (-1,-1), [4,4,4,4]),
    ]))
    return tbl

# ── Daily time-block data ─────────────────────────────────────────────────────
# 3 × study sessions + 3 × revision sessions every day
daily_blocks = [
    # (Time, Type, Label, Colour pair bg/fg)
    ("6:00 – 7:00 AM",  "Warm-Up",   "Wake up, freshen up, light breakfast, 10-min review of yesterday's notes", LIGHT_GREY, BLACK),
    ("7:00 – 9:30 AM",  "STUDY 1",   "New Topic — Gross Anatomy (deep reading + diagram drawing)", LIGHT_BLUE, DARK_BLUE),
    ("9:30 – 10:00 AM", "REVISION 1","Revise Study 1 material: re-draw diagrams from memory + 10 MCQs", LIGHT_GREEN, GREEN),
    ("10:00 – 10:15 AM","Break",     "Short break — water, stretch", LIGHT_GREY, BLACK),
    ("10:15 AM – 12:45 PM","STUDY 2","New Topic — Neuroanatomy / Embryology (read + flashcard creation)", LIGHT_BLUE, DARK_BLUE),
    ("12:45 – 1:15 PM", "REVISION 2","Revise Study 2 material: active recall + 10 MCQs", LIGHT_GREEN, GREEN),
    ("1:15 – 2:15 PM",  "Lunch + Rest","Meal + 30-min rest or nap (no screens)", LIGHT_GREY, BLACK),
    ("2:15 – 4:45 PM",  "STUDY 3",   "New Topic — Histology / Surface Anatomy / Clinical Applied (read + notes)", LIGHT_BLUE, DARK_BLUE),
    ("4:45 – 5:15 PM",  "REVISION 3","Revise Study 3 material: Anki flashcards + 10 MCQs", LIGHT_GREEN, GREEN),
    ("5:15 – 5:45 PM",  "Break",     "Evening snack, walk, rest", LIGHT_GREY, BLACK),
    ("5:45 – 7:00 PM",  "MCQ Practice","Solve 30 NEET PG/INI-CET PYQs (mixed topics)", LIGHT_PURPLE, PURPLE),
    ("7:00 – 8:00 PM",  "Weekly Weak Zone","Target your weakest topic of the week — re-read + re-draw", LIGHT_RED, RED),
    ("8:00 – 9:00 PM",  "Dinner + Relax","Dinner, family time, no study material", LIGHT_GREY, BLACK),
    ("9:00 – 10:00 PM", "Day Wrap-Up","Write a 1-page summary of everything studied today. Plan tomorrow.", colors.HexColor("#FFF8E1"), colors.HexColor("#7B4F00")),
    ("10:00 PM",        "Sleep",     "Minimum 7 hours of sleep — essential for memory consolidation", LIGHT_GREY, BLACK),
]

# ── 8-Week topic plan ─────────────────────────────────────────────────────────
weekly_plan = [
    ("Week 1\nJul 13–19", "Upper Limb",
     "Bones & joints, Brachial plexus (Erb's, Klumpke's), Axilla, Cubital fossa, "
     "Nerve injuries (radial/ulnar/median), Dermatomes",
     "Study: BD Chaurasia Vol 1\nHistology: Bone & cartilage types\nEmbryology: Limb development\nMCQs: 70/week PYQs"),
    ("Week 2\nJul 20–26", "Lower Limb",
     "Femoral triangle (NAVEL), Popliteal fossa, Sciatic nerve, Common peroneal nerve at fibular neck, "
     "Hip joint, Knee joint, Foot arches",
     "Study: BD Chaurasia Vol 1\nHistology: Muscle fibre types\nEmbryology: Lower limb rotation\nMCQs: 70/week PYQs"),
    ("Week 3\nJul 27 – Aug 2", "Thorax",
     "Heart – conducting system, blood supply, surface markings, valves; Lung roots; Diaphragm openings "
     "(T8/T10/T12); Mediastinum; Pericardium",
     "Study: BD Chaurasia Vol 2\nHistology: Cardiac muscle vs skeletal\nEmbryology: Heart development, septal defects\nMCQs: 70/week PYQs"),
    ("Week 4\nAug 3–9", "Abdomen",
     "Peritoneum, retroperitoneal organs (SAD PUCKER), Portal-systemic anastomoses, Inguinal canal "
     "(direct vs indirect hernia), Lumbar plexus, Kidney & ureters",
     "Study: BD Chaurasia Vol 2\nHistology: GI layers, goblet/Paneth/chief/parietal cells\nEmbryology: Gut rotation, Meckel's diverticulum\nMCQs: 70/week PYQs"),
    ("Week 5\nAug 10–16", "Head & Neck",
     "Triangles of neck, Carotid arteries, Cranial nerves (overview), Cavernous sinus, Thyroid & parathyroid, "
     "Parotid gland, Orbit, Pharynx & larynx",
     "Study: BD Chaurasia Vol 3\nHistology: Salivary glands, thyroid follicles\nEmbryology: Pharyngeal arches & pouches\nMCQs: 70/week PYQs"),
    ("Week 6\nAug 17–23", "Neuroanatomy Part 1",
     "Internal capsule (blood supply, limbs, lesions), Cerebral cortex areas, Basal ganglia, Thalamic nuclei, "
     "Brainstem – levels, cranial nerve nuclei",
     "Study: Snell's Neuroanatomy + BD Vol 3\nHistology: Neuron types, glial cells\nEmbryology: Neural tube defects\nMCQs: 70/week PYQs"),
    ("Week 7\nAug 24–30", "Neuroanatomy Part 2",
     "Spinal cord tracts + syndromes (Brown-Sequard, syringomyelia, SACD, tabes dorsalis), "
     "Cerebellum, Ventricular system & CSF pathway, Circle of Willis, Meninges & dural sinuses",
     "Study: Snell's Neuroanatomy\nHistology: Cerebellum layers, blood-brain barrier\nEmbryology: Neural crest derivatives\nMCQs: 70/week PYQs"),
    ("Week 8\nAug 31 – Sep 6", "Full Revision + Histology",
     "Rapid revision of all 7 weeks — diagram redraws only; Complete histology block "
     "(skin, testis, liver, kidney, GI); Grand test: 100 anatomy MCQs timed",
     "Revise all flashcard decks\nRedo all weak-zone topics\nTarget score: >70% in grand test\nPlan weeks 9–12 for other subjects"),
]

# ── Revision strategy table ───────────────────────────────────────────────────
revision_rules = [
    ("Revision 1\n(same day, 30 min)", "Right after Study 1", "Re-draw diagram from memory. Answer 10 MCQs from that topic."),
    ("Revision 2\n(same day, 30 min)", "Right after Study 2", "Active recall: close book, write key points. Answer 10 MCQs."),
    ("Revision 3\n(same day, 30 min)", "Right after Study 3", "Review Anki flashcards created that day. Answer 10 MCQs."),
    ("Weekly Review\n(Sunday, 2 hrs)", "Every Sunday morning", "Re-draw all diagrams of the week. Solve 50 PYQs (timed). Mark weak spots."),
    ("Monthly Grand Test\n(last Sunday of month)", "End of each month", "100-question timed test. Review all wrong answers the same day."),
    ("Spaced Repetition\n(Anki, daily 20 min)", "Every evening", "Review Anki cards due that day. Add new cards from today's study."),
]

# ── Key resources ─────────────────────────────────────────────────────────────
resources = [
    ("Gross Anatomy",  "BD Chaurasia Vol 1–3 + Handbook"),
    ("Applied Anatomy","Snell's Clinical Anatomy (8th ed)"),
    ("Embryology",     "Inderbir Singh — Human Embryology"),
    ("Histology",      "Inderbir Singh — Textbook of Human Histology"),
    ("Atlas",          "Netter's Atlas of Human Anatomy"),
    ("MCQ Bank",       "Across / Amit Ashish Anatomy"),
    ("PYQs",           "NEET PG + AIIMS PG previous 10 years"),
    ("Flashcards",     "Anki (free app) — create your own cards"),
]

# ══════════════════════════════════════════════════════════════════════════════
#  BUILD THE PDF
# ══════════════════════════════════════════════════════════════════════════════
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=1.8*cm, rightMargin=1.8*cm,
    topMargin=2.0*cm,  bottomMargin=2.0*cm,
)

story = []
W = 17.5*cm  # usable width

# ─── COVER BLOCK ──────────────────────────────────────────────────────────────
cover_data = [[
    Paragraph("NEET PG / INI-CET 2027", title_style),
    Paragraph("ANATOMY STUDY SCHEDULE", title_style),
    Paragraph("Complete 8-Week Daily Plan with 3 Study Sessions + 3 Revisions Per Day", subtitle_style),
    Paragraph("Starting: July 13, 2026  |  Target Exam: NEET PG 2027", subtitle_style),
]]
cover = Table(cover_data, colWidths=[W])
cover.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,-1), DARK_BLUE),
    ("TOPPADDING",    (0,0), (-1,-1), 18),
    ("BOTTOMPADDING", (0,0), (-1,-1), 18),
    ("LEFTPADDING",   (0,0), (-1,-1), 14),
    ("RIGHTPADDING",  (0,0), (-1,-1), 14),
    ("ROUNDEDCORNERS",(0,0), (-1,-1), [6,6,6,6]),
]))
story.append(cover)
story.append(Spacer(1, 0.4*cm))

# accent bar
story.append(Table([[""]], colWidths=[W], rowHeights=[4]))
story.append(Spacer(1, 0.3*cm))

# ─── EXAM OVERVIEW ────────────────────────────────────────────────────────────
story.append(banner("  EXAM OVERVIEW", DARK_BLUE))
story.append(Spacer(1, 0.2*cm))

overview_data = [
    [Paragraph("<b>Exam</b>", cell_body_bold), Paragraph("NEET PG 2027 / INI-CET", cell_body)],
    [Paragraph("<b>Anatomy weightage</b>", cell_body_bold), Paragraph("~10–15 questions | Focus: clinically applied anatomy", cell_body)],
    [Paragraph("<b>Schedule duration</b>", cell_body_bold), Paragraph("8 weeks (July 13 – September 6, 2026)", cell_body)],
    [Paragraph("<b>Daily study hours</b>", cell_body_bold), Paragraph("~9 hours active study + revision (6 AM – 10 PM with breaks)", cell_body)],
    [Paragraph("<b>Study sessions/day</b>", cell_body_bold), Paragraph("3 × 2.5-hour study blocks (Gross, Neuro/Embryology, Histology)", cell_body)],
    [Paragraph("<b>Revision sessions/day</b>", cell_body_bold), Paragraph("3 × 30-min revisions (immediately after each study block)", cell_body)],
    [Paragraph("<b>MCQs/day</b>", cell_body_bold), Paragraph("30+ PYQs daily (10 after each study block + 30 MCQ practice slot)", cell_body)],
]
ov_tbl = Table(overview_data, colWidths=[5.5*cm, 12*cm])
ov_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (0,-1), LIGHT_BLUE),
    ("BACKGROUND",    (1,0), (1,-1), WHITE),
    ("ROWBACKGROUNDS",(0,0), (-1,-1), [LIGHT_BLUE, LIGHT_GREY]),
    ("GRID",          (0,0), (-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING",   (0,0), (-1,-1), 8),
    ("RIGHTPADDING",  (0,0), (-1,-1), 8),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(ov_tbl)
story.append(Spacer(1, 0.4*cm))

# ─── DAILY SCHEDULE TABLE ─────────────────────────────────────────────────────
story.append(banner("  DAILY TIME SCHEDULE  (Monday – Saturday)", MID_BLUE))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(
    "This schedule repeats every weekday. Sunday is the weekly review day (see below).",
    note_style))
story.append(Spacer(1, 0.2*cm))

# header row
daily_header = [
    Paragraph("TIME", cell_head),
    Paragraph("SESSION TYPE", cell_head),
    Paragraph("ACTIVITY", cell_head),
]
daily_rows = [daily_header]
for (time, stype, activity, bg, fg) in daily_blocks:
    row = [
        Paragraph(f"<b>{time}</b>", S("t", fontName="Helvetica-Bold", fontSize=8, textColor=DARK_BLUE, leading=11)),
        Paragraph(f"<b>{stype}</b>", S("s", fontName="Helvetica-Bold", fontSize=8, textColor=fg, leading=11)),
        Paragraph(activity, S("a", fontName="Helvetica", fontSize=8, textColor=BLACK, leading=11)),
    ]
    daily_rows.append(row)

daily_tbl = Table(daily_rows, colWidths=[3.5*cm, 3*cm, 11*cm])
row_bgs = []
for i, (_, stype, _, bg, _) in enumerate(daily_blocks, start=1):
    row_bgs.append(("BACKGROUND", (0,i), (-1,i), bg))

daily_tbl.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
    ("GRID",       (0,0), (-1,-1), 0.4, MED_GREY),
    ("TOPPADDING", (0,0), (-1,-1), 5),
    ("BOTTOMPADDING",(0,0),(-1,-1), 5),
    ("LEFTPADDING",(0,0),(-1,-1), 7),
    ("RIGHTPADDING",(0,0),(-1,-1), 7),
    ("VALIGN",     (0,0),(-1,-1), "MIDDLE"),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [LIGHT_GREY, WHITE]),
] + row_bgs))
story.append(daily_tbl)
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph(
    "★  STUDY 1 = Gross Anatomy   |   STUDY 2 = Neuroanatomy / Embryology   |   STUDY 3 = Histology / Surface / Clinical Applied",
    note_style))
story.append(Spacer(1, 0.4*cm))

# ─── PAGE BREAK before weekly plan ───────────────────────────────────────────
story.append(PageBreak())

# ─── 8-WEEK TOPIC PLAN ────────────────────────────────────────────────────────
story.append(banner("  8-WEEK TOPIC PLAN  (July 13 – September 6, 2026)", DARK_BLUE))
story.append(Spacer(1, 0.2*cm))

week_header = [
    Paragraph("WEEK", cell_head),
    Paragraph("REGION / TOPIC", cell_head),
    Paragraph("KEY AREAS TO COVER", cell_head),
    Paragraph("NOTES", cell_head),
]
week_rows = [week_header]
alt = [LIGHT_BLUE, WHITE]
for i, (week, topic, areas, notes) in enumerate(weekly_plan):
    bg = alt[i % 2]
    week_rows.append([
        Paragraph(f"<b>{week}</b>", S("w", fontName="Helvetica-Bold", fontSize=8, textColor=DARK_BLUE, alignment=TA_CENTER, leading=11)),
        Paragraph(f"<b>{topic}</b>", S("tp", fontName="Helvetica-Bold", fontSize=8, textColor=MID_BLUE, leading=11)),
        Paragraph(areas, S("ar", fontName="Helvetica", fontSize=7.5, textColor=BLACK, leading=11)),
        Paragraph(notes, S("nt", fontName="Helvetica", fontSize=7.5, textColor=colors.HexColor("#333333"), leading=11)),
    ])

week_tbl = Table(week_rows, colWidths=[2.4*cm, 2.8*cm, 7.3*cm, 5*cm])
row_bgs_w = [("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_BLUE, WHITE])]
week_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), DARK_BLUE),
    ("GRID",          (0,0), (-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("RIGHTPADDING",  (0,0), (-1,-1), 6),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_BLUE, WHITE]),
]))
story.append(week_tbl)
story.append(Spacer(1, 0.4*cm))

# ─── SUNDAY PLAN ──────────────────────────────────────────────────────────────
story.append(banner("  SUNDAY – WEEKLY REVIEW DAY", colors.HexColor("#1E7E34")))
story.append(Spacer(1, 0.2*cm))

sunday_data = [
    [Paragraph("7:00 – 9:00 AM", cell_body_bold),  Paragraph("Re-draw all diagrams of the week from memory (no book)", cell_body)],
    [Paragraph("9:00 – 10:30 AM", cell_body_bold),  Paragraph("50 timed PYQ MCQs — all topics covered so far", cell_body)],
    [Paragraph("10:30 – 11:00 AM", cell_body_bold), Paragraph("Review wrong answers. Add weak points to Anki.", cell_body)],
    [Paragraph("11:00 AM – 12:00 PM", cell_body_bold), Paragraph("Target your 3 weakest topics — re-read only those pages", cell_body)],
    [Paragraph("12:00 PM onward", cell_body_bold),  Paragraph("Rest, recreation, light reading — no new anatomy topics", cell_body)],
]
sun_tbl = Table(sunday_data, colWidths=[4*cm, 13.5*cm])
sun_tbl.setStyle(TableStyle([
    ("ROWBACKGROUNDS",(0,0),(-1,-1),[LIGHT_GREEN, WHITE]),
    ("GRID",          (0,0),(-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 5),
    ("BOTTOMPADDING", (0,0),(-1,-1), 5),
    ("LEFTPADDING",   (0,0),(-1,-1), 8),
    ("RIGHTPADDING",  (0,0),(-1,-1), 8),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
]))
story.append(sun_tbl)
story.append(Spacer(1, 0.4*cm))

# ─── PAGE BREAK ───────────────────────────────────────────────────────────────
story.append(PageBreak())

# ─── REVISION STRATEGY ────────────────────────────────────────────────────────
story.append(banner("  REVISION STRATEGY  (3 Daily + Weekly + Monthly)", MID_BLUE))
story.append(Spacer(1, 0.2*cm))

rev_header = [
    Paragraph("REVISION TYPE", cell_head),
    Paragraph("WHEN", cell_head),
    Paragraph("HOW", cell_head),
]
rev_rows = [rev_header]
for rt, when, how in revision_rules:
    rev_rows.append([
        Paragraph(f"<b>{rt}</b>", S("rh", fontName="Helvetica-Bold", fontSize=8, textColor=GREEN, leading=11)),
        Paragraph(when, cell_body),
        Paragraph(how, cell_body),
    ])
rev_tbl = Table(rev_rows, colWidths=[3.8*cm, 4.5*cm, 9.2*cm])
rev_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), DARK_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREEN, WHITE]),
    ("GRID",          (0,0),(-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 5),
    ("BOTTOMPADDING", (0,0),(-1,-1), 5),
    ("LEFTPADDING",   (0,0),(-1,-1), 7),
    ("RIGHTPADDING",  (0,0),(-1,-1), 7),
    ("VALIGN",        (0,0),(-1,-1), "TOP"),
]))
story.append(rev_tbl)
story.append(Spacer(1, 0.4*cm))

# ─── HIGH-YIELD TOPICS ────────────────────────────────────────────────────────
story.append(banner("  HIGH-YIELD TOPICS FOR NEET PG / INI-CET", DARK_BLUE))
story.append(Spacer(1, 0.2*cm))

hy_categories = [
    ("Neuroanatomy", LIGHT_RED, RED, [
        "Internal capsule — blood supply (lenticulostriate), limbs, lesion features",
        "Spinal cord syndromes — Brown-Sequard, syringomyelia, SACD, tabes dorsalis",
        "Brainstem syndromes — Weber, Wallenberg, Benedict, Millard-Gubler",
        "Ventricular system — CSF pathway, foramina of Monro / Magendie / Luschka",
        "Circle of Willis — MCA/ACA territory strokes",
        "Cerebellum — peduncles, layers, flocculonodular lobe",
    ]),
    ("Gross Anatomy", LIGHT_BLUE, MID_BLUE, [
        "Brachial plexus — roots-trunks-divisions-cords; Erb's & Klumpke's palsy",
        "Femoral triangle — NAVEL order (lateral to medial)",
        "Inguinal canal — walls, contents, direct vs indirect hernia",
        "Diaphragm openings — T8 (IVC), T10 (oesophagus + vagus), T12 (aorta + thoracic duct)",
        "Portal-systemic anastomoses — 4 sites and clinical relevance",
        "Lymph drainage of testes — para-aortic nodes (NOT inguinal)",
    ]),
    ("Embryology", LIGHT_PURPLE, PURPLE, [
        "Pharyngeal arches 1/2/3/4/6 — muscles, nerves, cartilages",
        "Pharyngeal pouches — palatine tonsil, thymus, parathyroid, ultimobranchial body",
        "Congenital heart defects — VSD most common; ASD ostium secundum most common",
        "Gut rotation — malrotation, volvulus, Meckel's diverticulum (rule of 2s)",
        "Neural tube defects — folate; spina bifida types",
        "Wolffian vs Mullerian duct derivatives",
    ]),
    ("Histology", LIGHT_GREEN, GREEN, [
        "GI cells — goblet cells, Paneth cells, chief cells (pepsinogen), parietal cells (HCl)",
        "Liver cells — Kupffer cells (macrophages), Ito cells (store Vit A / hepatic fibrosis)",
        "Testis — Sertoli cells (blood-testis barrier, inhibin), Leydig cells (testosterone)",
        "Skin layers — Corneum, Lucidum, Granulosum, Spinosum, Basale (Come Let's Get Sun Burnt)",
        "Cartilage types — hyaline (articular), elastic (ear/epiglottis), fibrocartilage (disc/pubis)",
        "Bone — Haversian system (osteon), endosteum vs periosteum",
    ]),
]

for (cat_name, bg, fg, items) in hy_categories:
    cat_hdr = Table([[Paragraph(f"  {cat_name}", S("ch", fontName="Helvetica-Bold", fontSize=9, textColor=WHITE, leading=13))]], colWidths=[W])
    cat_hdr.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,-1), fg),
        ("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
        ("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10),
    ]))
    story.append(cat_hdr)
    item_rows = [[Paragraph(f"• {it}", S("it", fontName="Helvetica", fontSize=8, textColor=BLACK, leading=11))] for it in items]
    item_tbl = Table(item_rows, colWidths=[W])
    item_tbl.setStyle(TableStyle([
        ("ROWBACKGROUNDS",(0,0),(-1,-1),[bg, WHITE]),
        ("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
        ("LEFTPADDING",(0,0),(-1,-1),12),("RIGHTPADDING",(0,0),(-1,-1),8),
        ("LINEBELOW",(0,0),(-1,-1),0.3, MED_GREY),
    ]))
    story.append(item_tbl)
    story.append(Spacer(1, 0.15*cm))

story.append(Spacer(1, 0.3*cm))

# ─── RESOURCES ────────────────────────────────────────────────────────────────
story.append(banner("  RECOMMENDED RESOURCES", DARK_BLUE))
story.append(Spacer(1, 0.2*cm))

res_header = [Paragraph("TOPIC", cell_head), Paragraph("RESOURCE", cell_head)]
res_rows = [res_header]
for topic, resource in resources:
    res_rows.append([
        Paragraph(f"<b>{topic}</b>", cell_body_bold),
        Paragraph(resource, cell_body),
    ])
res_tbl = Table(res_rows, colWidths=[5*cm, 12.5*cm])
res_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), DARK_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
    ("GRID",          (0,0),(-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 5),
    ("BOTTOMPADDING", (0,0),(-1,-1), 5),
    ("LEFTPADDING",   (0,0),(-1,-1), 8),
    ("RIGHTPADDING",  (0,0),(-1,-1), 8),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
]))
story.append(res_tbl)
story.append(Spacer(1, 0.4*cm))

# ─── GOLDEN RULES ─────────────────────────────────────────────────────────────
story.append(banner("  10 GOLDEN RULES FOR NEET PG ANATOMY", ACCENT))
story.append(Spacer(1, 0.2*cm))

rules = [
    "Draw every diagram from memory — never just re-read.",
    "After every topic, ask: 'What happens clinically when this is damaged?'",
    "Solve PYQs the SAME day you study a topic — not next week.",
    "Lymph drainage of testes = para-aortic (not inguinal) — guaranteed NEET question.",
    "Spaced repetition (Anki) beats cramming every single time.",
    "Do NOT skip embryology — it gives easy, predictable marks.",
    "Neuroanatomy = highest yield; spend 2 full weeks on it minimum.",
    "Surface anatomy and nerve injury patterns appear almost every year.",
    "7 hours of sleep is non-negotiable — memory consolidation happens during sleep.",
    "Never start a new topic without finishing the revision of the previous one.",
]
rule_rows = [[
    Paragraph(f"<b>{i+1}.</b>", S("rn", fontName="Helvetica-Bold", fontSize=9, textColor=ACCENT, alignment=TA_CENTER, leading=13)),
    Paragraph(rule, S("rb", fontName="Helvetica", fontSize=8.5, textColor=BLACK, leading=13)),
] for i, rule in enumerate(rules)]

rule_tbl = Table(rule_rows, colWidths=[1*cm, 16.5*cm])
rule_tbl.setStyle(TableStyle([
    ("ROWBACKGROUNDS",(0,0),(-1,-1),[colors.HexColor("#FFF8E1"), WHITE]),
    ("LINEBELOW",(0,0),(-1,-1),0.3, MED_GREY),
    ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
    ("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),8),
    ("VALIGN",(0,0),(-1,-1),"MIDDLE"),
]))
story.append(rule_tbl)
story.append(Spacer(1, 0.5*cm))

# ─── FOOTER ───────────────────────────────────────────────────────────────────
story.append(HRFlowable(width=W, thickness=1, color=MED_GREY))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
    "NEET PG 2027 Anatomy Study Schedule  |  Generated July 12, 2026  |  3 Study Sessions + 3 Revisions per Day",
    footer_style))

# ─── BUILD ────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
Running Command

cd /home/daytona/workspace/neet-pg-schedule && python create_schedule.py

Your PDF is ready. Here is the download link:

NEET PG Anatomy Schedule

PDF Document · PDF


What's inside the PDF (4 pages):
  1. Daily Time Schedule - Full day from 6 AM to 10 PM with exactly 3 study sessions (2.5 hrs each) and 3 revision sessions (30 min each), plus MCQ practice, meal breaks, and a day wrap-up slot.
  2. 8-Week Topic Plan - Week-by-week breakdown starting July 13, 2026: Upper Limb → Lower Limb → Thorax → Abdomen → Head & Neck → Neuroanatomy (2 weeks) → Full Revision + Histology.
  3. Revision Strategy - 6-tier revision system: 3 daily + weekly Sunday review + monthly grand test + Anki spaced repetition.
  4. High-Yield Topics - Colour-coded by category (Neuroanatomy, Gross, Embryology, Histology) with the specific lines that appear in NEET PG repeatedly.
  5. Resources + 10 Golden Rules - Book list and the key habits that separate toppers from average scorers.

No i need plan for 1 year for 2027 pg subject wise each subject should be studied 3 time and 3 revisions total please form a plan accordingly and i can study only 4-5hrs per day and ill start from 19

Writing File

~/neet-pg-schedule/create_1year_schedule.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from datetime import date, timedelta

OUTPUT = "/home/daytona/workspace/neet-pg-schedule/NEET_PG_2027_1Year_Plan.pdf"

# ── Colours ───────────────────────────────────────────────────────────────────
DARK_BLUE    = colors.HexColor("#1A3A5C")
MID_BLUE     = colors.HexColor("#2E6DA4")
LIGHT_BLUE   = colors.HexColor("#D6E8F7")
ACCENT       = colors.HexColor("#E8A020")
LIGHT_GREY   = colors.HexColor("#F4F6F9")
MED_GREY     = colors.HexColor("#C8D0DA")
GREEN        = colors.HexColor("#1E7E34")
LIGHT_GREEN  = colors.HexColor("#D4EDDA")
PURPLE       = colors.HexColor("#6F42C1")
LIGHT_PURPLE = colors.HexColor("#EDE7F6")
RED          = colors.HexColor("#C0392B")
LIGHT_RED    = colors.HexColor("#FDECEA")
ORANGE       = colors.HexColor("#E8A020")
LIGHT_ORANGE = colors.HexColor("#FFF3CD")
TEAL         = colors.HexColor("#117A65")
LIGHT_TEAL   = colors.HexColor("#D1F2EB")
WHITE        = colors.white
BLACK        = colors.black

# ── Styles ────────────────────────────────────────────────────────────────────
def S(name, **kw):
    return ParagraphStyle(name, **kw)

title_s  = S("T",  fontName="Helvetica-Bold",   fontSize=20, textColor=WHITE,      alignment=TA_CENTER, leading=26, spaceAfter=3)
sub_s    = S("Su", fontName="Helvetica",         fontSize=11, textColor=colors.HexColor("#B0CCE8"), alignment=TA_CENTER, leading=15)
sh_s     = S("SH", fontName="Helvetica-Bold",    fontSize=11, textColor=WHITE,      alignment=TA_LEFT,   leading=15)
body_s   = S("B",  fontName="Helvetica",         fontSize=8.5,textColor=BLACK,      alignment=TA_LEFT,   leading=12)
bold_s   = S("Bb", fontName="Helvetica-Bold",    fontSize=8.5,textColor=DARK_BLUE,  alignment=TA_LEFT,   leading=12)
small_s  = S("Sm", fontName="Helvetica",         fontSize=7.5,textColor=colors.HexColor("#444"), alignment=TA_LEFT, leading=10)
note_s   = S("N",  fontName="Helvetica-Oblique", fontSize=8,  textColor=colors.HexColor("#555"), alignment=TA_LEFT, leading=11)
ch_s     = S("Ch", fontName="Helvetica-Bold",    fontSize=8.5,textColor=WHITE,      alignment=TA_CENTER, leading=12)
foot_s   = S("F",  fontName="Helvetica",         fontSize=7,  textColor=colors.HexColor("#888"), alignment=TA_CENTER)
num_s    = S("Nm", fontName="Helvetica-Bold",    fontSize=8.5,textColor=ACCENT,     alignment=TA_CENTER, leading=12)

W = 17.2*cm

def banner(text, bg=DARK_BLUE, style=sh_s):
    tbl = Table([[Paragraph(text, style)]], colWidths=[W])
    tbl.setStyle(TableStyle([
        ("BACKGROUND",    (0,0),(-1,-1), bg),
        ("TOPPADDING",    (0,0),(-1,-1), 7),
        ("BOTTOMPADDING", (0,0),(-1,-1), 7),
        ("LEFTPADDING",   (0,0),(-1,-1), 12),
        ("RIGHTPADDING",  (0,0),(-1,-1), 12),
    ]))
    return tbl

# ══════════════════════════════════════════════════════════════════════════════
#  SCHEDULE DATA
#
#  Start: July 19, 2026
#  NEET PG 2027 estimated: ~January 25, 2027
#  Total: ~27 weeks (Jul 19 – Jan 18, 2027)
#
#  Structure:
#  PHASE 1 – First Read (Pass 1)  : Weeks 1–13   (Jul 19 – Oct 17)
#  PHASE 2 – Second Read (Pass 2) : Weeks 14–22  (Oct 18 – Dec 19)
#  PHASE 3 – Third Read (Pass 3)  : Weeks 23–25  (Dec 20 – Jan 9)
#  PHASE 4 – Grand Revision       : Weeks 26–27  (Jan 10 – Jan 23)
#  EXAM WEEK                      : Jan 25 (est.)
#
#  Each phase has built-in revision slots.
#  Total revisions per subject = 3 (end-of-phase rapid reviews)
# ══════════════════════════════════════════════════════════════════════════════

START = date(2026, 7, 19)
EXAM  = date(2027, 1, 25)

def wdate(week_offset, day_offset=0):
    """Return date string for START + week_offset weeks + day_offset days."""
    d = START + timedelta(weeks=week_offset, days=day_offset)
    return d.strftime("%b %d")

def wrange(w_start, w_end):
    d1 = START + timedelta(weeks=w_start)
    d2 = START + timedelta(weeks=w_end) - timedelta(days=1)
    return f"{d1.strftime('%b %d')} – {d2.strftime('%b %d, %Y')}"

# ── Subjects with weights & phase allocations ─────────────────────────────────
# (Subject, pass1_weeks, pass2_weeks, pass3_weeks, colour_bg, colour_fg, category)
# Total weeks available per pass:
#   Pass 1: 13 weeks  Pass 2: 9 weeks  Pass 3: 3 weeks
# High yield = more time; short subjects = less time

subjects = [
    # PRECLINICAL (heavy)
    ("Anatomy",             1.5, 1.0, 0.5, LIGHT_BLUE,   MID_BLUE,  "Pre-clinical"),
    ("Physiology",          1.5, 1.0, 0.5, LIGHT_BLUE,   MID_BLUE,  "Pre-clinical"),
    ("Biochemistry",        1.0, 0.5, 0.25,LIGHT_BLUE,   MID_BLUE,  "Pre-clinical"),
    # PARA-CLINICAL (heavy)
    ("Pathology",           1.5, 1.0, 0.5, LIGHT_PURPLE, PURPLE,    "Para-clinical"),
    ("Microbiology",        1.0, 0.75,0.25,LIGHT_PURPLE, PURPLE,    "Para-clinical"),
    ("Pharmacology",        1.5, 1.0, 0.5, LIGHT_PURPLE, PURPLE,    "Para-clinical"),
    ("Forensic Medicine",   0.5, 0.5, 0.25,LIGHT_PURPLE, PURPLE,    "Para-clinical"),
    # COMMUNITY MEDICINE
    ("PSM / Comm. Medicine",1.0, 0.75,0.25,LIGHT_GREEN,  GREEN,     "Community"),
    # CLINICAL (major)
    ("Medicine",            1.5, 1.0, 0.5, LIGHT_RED,    RED,       "Clinical"),
    ("Surgery",             1.0, 0.75,0.25,LIGHT_RED,    RED,       "Clinical"),
    ("OBG",                 0.75,0.5, 0.25,LIGHT_RED,    RED,       "Clinical"),
    ("Pediatrics",          0.75,0.5, 0.25,LIGHT_RED,    RED,       "Clinical"),
    ("Orthopedics",         0.5, 0.5, 0.25,LIGHT_RED,    RED,       "Clinical"),
    # CLINICAL (short/high yield)
    ("Ophthalmology",       0.5, 0.5, 0.25,LIGHT_ORANGE, ORANGE,    "Clinical"),
    ("ENT",                 0.5, 0.5, 0.25,LIGHT_ORANGE, ORANGE,    "Clinical"),
    ("Dermatology",         0.5, 0.5, 0.25,LIGHT_ORANGE, ORANGE,    "Clinical"),
    ("Psychiatry",          0.5, 0.5, 0.25,LIGHT_ORANGE, ORANGE,    "Clinical"),
    ("Radiology",           0.25,0.25,0.0, LIGHT_TEAL,   TEAL,      "Clinical"),
    ("Anesthesia",          0.25,0.25,0.0, LIGHT_TEAL,   TEAL,      "Clinical"),
]

# Assign cumulative start weeks for each pass
def assign_weeks(subj_list):
    p1_cursor = 0.0   # starts at week 0 (Jul 19)
    p2_cursor = 13.0  # starts at week 13 (Oct 18)
    p3_cursor = 22.0  # starts at week 22 (Dec 20)
    result = []
    for (name, w1, w2, w3, bg, fg, cat) in subj_list:
        p1_start = p1_cursor
        p1_end   = p1_cursor + w1
        p2_start = p2_cursor
        p2_end   = p2_cursor + w2
        p3_start = p3_cursor
        p3_end   = p3_cursor + w3
        result.append({
            "name": name, "bg": bg, "fg": fg, "cat": cat,
            "w1": w1, "w2": w2, "w3": w3,
            "p1s": p1_start, "p1e": p1_end,
            "p2s": p2_start, "p2e": p2_end,
            "p3s": p3_start, "p3e": p3_end,
        })
        p1_cursor = p1_end
        p2_cursor = p2_end
        p3_cursor = p3_end
    return result

sched = assign_weeks(subjects)

# ══════════════════════════════════════════════════════════════════════════════
story = []
doc = SimpleDocTemplate(
    OUTPUT, pagesize=A4,
    leftMargin=1.8*cm, rightMargin=1.8*cm,
    topMargin=1.8*cm,  bottomMargin=1.8*cm,
)

# ── COVER ─────────────────────────────────────────────────────────────────────
cover = Table([[
    Paragraph("NEET PG 2027", title_s),
    Paragraph("1-YEAR SUBJECT-WISE STUDY PLAN", title_s),
    Paragraph("Each Subject: 3 Full Reads + 3 Revisions  |  4–5 Hours/Day", sub_s),
    Paragraph("Start: July 19, 2026   |   Target Exam: January 2027", sub_s),
]], colWidths=[W])
cover.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,-1), DARK_BLUE),
    ("TOPPADDING",    (0,0),(-1,-1), 20),
    ("BOTTOMPADDING", (0,0),(-1,-1), 20),
    ("LEFTPADDING",   (0,0),(-1,-1), 16),
    ("RIGHTPADDING",  (0,0),(-1,-1), 16),
]))
story.append(cover)
story.append(Spacer(1, 0.35*cm))

# ── OVERALL PLAN STRUCTURE ────────────────────────────────────────────────────
story.append(banner("  OVERALL PLAN STRUCTURE", DARK_BLUE))
story.append(Spacer(1, 0.2*cm))

phases_data = [
    [Paragraph("PHASE", ch_s), Paragraph("PERIOD", ch_s), Paragraph("WEEKS", ch_s),
     Paragraph("WHAT YOU DO", ch_s), Paragraph("DAILY HOURS", ch_s)],
    [Paragraph("Phase 1\nFirst Read", S("ph1", fontName="Helvetica-Bold", fontSize=8.5, textColor=MID_BLUE, leading=12)),
     Paragraph(f"Jul 19 – Oct 17, 2026", body_s),
     Paragraph("13 weeks", bold_s),
     Paragraph("Read all 19 subjects once. Draw diagrams. Make short notes. 10 MCQs per topic after each session.", body_s),
     Paragraph("3 hrs study\n+ 1 hr MCQ", bold_s)],
    [Paragraph("Revision 1\n(End of Phase 1)", S("rv1", fontName="Helvetica-Bold", fontSize=8.5, textColor=GREEN, leading=12)),
     Paragraph("Oct 18–24, 2026", body_s),
     Paragraph("1 week", bold_s),
     Paragraph("Rapid flip through all subjects. Re-read short notes only. 50 MCQs/day mixed topics.", body_s),
     Paragraph("4–5 hrs/day", bold_s)],
    [Paragraph("Phase 2\nSecond Read", S("ph2", fontName="Helvetica-Bold", fontSize=8.5, textColor=PURPLE, leading=12)),
     Paragraph("Oct 25 – Dec 19, 2026", body_s),
     Paragraph("8 weeks", bold_s),
     Paragraph("Read all subjects a second time (faster). Focus on high-yield + weak areas. 20 MCQs/subject-day.", body_s),
     Paragraph("3 hrs study\n+ 1 hr MCQ", bold_s)],
    [Paragraph("Revision 2\n(End of Phase 2)", S("rv2", fontName="Helvetica-Bold", fontSize=8.5, textColor=GREEN, leading=12)),
     Paragraph("Dec 20–26, 2026", body_s),
     Paragraph("1 week", bold_s),
     Paragraph("Second full rapid revision. Anki cards. 100 MCQs/day. Identify final weak zones.", body_s),
     Paragraph("4–5 hrs/day", bold_s)],
    [Paragraph("Phase 3\nThird Read", S("ph3", fontName="Helvetica-Bold", fontSize=8.5, textColor=RED, leading=12)),
     Paragraph("Dec 27 – Jan 9, 2027", body_s),
     Paragraph("2 weeks", bold_s),
     Paragraph("Rapid third pass — short notes + diagrams only. No new reading. 30 MCQs/subject-day.", body_s),
     Paragraph("2 hrs study\n+ 2 hrs MCQ", bold_s)],
    [Paragraph("Revision 3\nGrand Revision", S("rv3", fontName="Helvetica-Bold", fontSize=8.5, textColor=RED, leading=12)),
     Paragraph("Jan 10–24, 2027", body_s),
     Paragraph("2 weeks", bold_s),
     Paragraph("Full mock tests daily (180 Qs, 3.5 hrs). Review all wrong answers. No new topics.", body_s),
     Paragraph("5 hrs/day", bold_s)],
    [Paragraph("EXAM\n(Est.)", S("ex", fontName="Helvetica-Bold", fontSize=8.5, textColor=WHITE, leading=12)),
     Paragraph("~Jan 25, 2027", S("ed", fontName="Helvetica-Bold", fontSize=8.5, textColor=WHITE, leading=12)),
     Paragraph("—", S("dash", fontName="Helvetica", fontSize=8.5, textColor=WHITE, leading=12)),
     Paragraph("NEET PG 2027 / INI-CET", S("exam", fontName="Helvetica-Bold", fontSize=8.5, textColor=WHITE, leading=12)),
     Paragraph("EXAM DAY", S("ed2", fontName="Helvetica-Bold", fontSize=8.5, textColor=ACCENT, leading=12))],
]

phase_tbl = Table(phases_data, colWidths=[2.8*cm, 3.5*cm, 1.8*cm, 7.1*cm, 2*cm])
phase_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0), DARK_BLUE),
    ("BACKGROUND",    (0,-1),(-1,-1), RED),
    ("ROWBACKGROUNDS",(0,1),(-1,-2), [LIGHT_GREY, WHITE, LIGHT_GREEN, WHITE, LIGHT_RED, LIGHT_GREEN]),
    ("GRID",          (0,0),(-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 6),
    ("BOTTOMPADDING", (0,0),(-1,-1), 6),
    ("LEFTPADDING",   (0,0),(-1,-1), 7),
    ("RIGHTPADDING",  (0,0),(-1,-1), 7),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
]))
story.append(phase_tbl)
story.append(Spacer(1, 0.35*cm))

# ── DAILY TIME SCHEDULE ───────────────────────────────────────────────────────
story.append(banner("  DAILY TIME SCHEDULE  (4–5 Hours/Day)", MID_BLUE))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Adapt the time slots to your routine — the structure matters more than the exact clock times.", note_s))
story.append(Spacer(1, 0.15*cm))

daily = [
    ("TIME SLOT",    "SESSION",      "ACTIVITY",                                    DARK_BLUE,   WHITE),
    ("Morning\n(any 2 hrs)",  "STUDY BLOCK 1",  "Read new topic (textbook/notes). Draw 1 diagram. Write 5 key points.", LIGHT_BLUE, DARK_BLUE),
    ("After Block 1\n(20 min)", "MINI REVISION 1","Re-draw diagram from memory. Answer 10 MCQs on that topic.",         LIGHT_GREEN, GREEN),
    ("Break\n(30 min)",       "Rest / Meal",    "Meal, water, short walk. No study material.",                          LIGHT_GREY, BLACK),
    ("Afternoon\n(1.5 hrs)",  "STUDY BLOCK 2",  "Continue topic or start next sub-topic. Make Anki flashcards.",        LIGHT_BLUE, DARK_BLUE),
    ("After Block 2\n(20 min)","MINI REVISION 2","Active recall: close book, write key points. 10 MCQs.",               LIGHT_GREEN, GREEN),
    ("Evening\n(45 min)",     "MCQ PRACTICE",   "Solve 20–30 PYQ MCQs (mixed subjects). Note wrong answers.",           LIGHT_PURPLE, PURPLE),
    ("Night\n(10 min)",       "Day Wrap-Up",    "Write tomorrow's study target. Review Anki cards due today.",           LIGHT_ORANGE, ORANGE),
]

day_rows = []
for row in daily:
    time_, sess, act, bg, fg = row
    if time_ == "TIME SLOT":
        day_rows.append([Paragraph(time_, ch_s), Paragraph(sess, ch_s), Paragraph(act, ch_s)])
    else:
        day_rows.append([
            Paragraph(f"<b>{time_}</b>", S("dt", fontName="Helvetica-Bold", fontSize=8, textColor=DARK_BLUE, leading=11)),
            Paragraph(f"<b>{sess}</b>",  S("ds", fontName="Helvetica-Bold", fontSize=8, textColor=fg, leading=11)),
            Paragraph(act, small_s),
        ])

day_tbl = Table(day_rows, colWidths=[3*cm, 3.5*cm, 10.7*cm])
row_bgs_day = []
for i, row in enumerate(daily[1:], 1):
    row_bgs_day.append(("BACKGROUND", (0,i),(-1,i), row[3]))
day_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0), DARK_BLUE),
    ("GRID",          (0,0),(-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 5),
    ("BOTTOMPADDING", (0,0),(-1,-1), 5),
    ("LEFTPADDING",   (0,0),(-1,-1), 7),
    ("RIGHTPADDING",  (0,0),(-1,-1), 7),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
] + row_bgs_day))
story.append(day_tbl)
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(
    "Total: ~4 hrs study + 30 min MCQ practice = 4.5 hrs/day  |  Sunday = weekly review (revise weak topics + 50 MCQs)",
    note_s))
story.append(Spacer(1, 0.3*cm))

story.append(PageBreak())

# ── PHASE 1 SUBJECT-WISE TABLE ────────────────────────────────────────────────
story.append(banner("  PHASE 1 — FIRST READ  (Jul 19 – Oct 17, 2026)  |  13 Weeks", DARK_BLUE))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
    "Read each subject for the FIRST time. Goal: understand, not memorize. Make short notes. Solve 10 MCQs after each topic.",
    note_s))
story.append(Spacer(1, 0.2*cm))

p1_hdr = [Paragraph(h, ch_s) for h in ["#", "SUBJECT", "CATEGORY", "WEEKS", "DATES (2026)", "DAILY FOCUS"]]
p1_rows = [p1_hdr]

phase1_focus = {
    "Anatomy":             "Gross: draw diagrams. Neuro: tract/syndromes. Embryology. Histology cells.",
    "Physiology":          "Systems approach. CVS, Resp, Neuro, Endocrine. Normal values table.",
    "Biochemistry":        "Metabolic pathways (glycolysis, TCA). Enzymes. Vitamins. Genetics basics.",
    "Pathology":           "General pathology first (cell injury, inflammation). Then systemic.",
    "Microbiology":        "Bacteriology (high yield organisms). Virology. Immunology.",
    "Pharmacology":        "Drug classes, MOA, side effects. Autonomic NS first.",
    "Forensic Medicine":   "Cause/manner of death. Wounds. Toxicology basics. Legal aspects.",
    "PSM / Comm. Medicine":"Epidemiology basics. Disease indices. National health programs.",
    "Medicine":            "CVS, Resp, GI, Neuro high-yield. ECG basics. Clinical scenarios.",
    "Surgery":             "Surgical anatomy. GI surgery. Hernias. Trauma basics.",
    "OBG":                 "Normal obstetrics. Antenatal care. Gynaecology overview.",
    "Pediatrics":          "Growth/development milestones. Neonatal emergencies. Vaccines.",
    "Orthopedics":         "Fractures (upper + lower limb). Spine. Congenital anomalies.",
    "Ophthalmology":       "Anatomy of eye. Common eye diseases. Refractive errors.",
    "ENT":                 "Ear anatomy. Hearing loss. Throat. Nasal disorders.",
    "Dermatology":         "Skin lesion morphology. Common disorders. Drugs in derm.",
    "Psychiatry":          "DSM classification. Schizophrenia, mood disorders, anxiety.",
    "Radiology":           "X-ray basics. CT/MRI signs. High-yield findings.",
    "Anesthesia":          "Pre-operative assessment. Drugs. Complications.",
}

cat_cols = {"Pre-clinical": LIGHT_BLUE, "Para-clinical": LIGHT_PURPLE,
            "Community": LIGHT_GREEN, "Clinical": LIGHT_RED}
cat_fg   = {"Pre-clinical": MID_BLUE,  "Para-clinical": PURPLE,
            "Community": GREEN,        "Clinical": RED}

for i, s in enumerate(sched):
    d1 = START + timedelta(weeks=s["p1s"])
    d2 = START + timedelta(weeks=s["p1e"]) - timedelta(days=1)
    weeks_str = f"{s['w1']:.1f} wks" if s['w1'] >= 0.5 else "3–4 days"
    row = [
        Paragraph(f"<b>{i+1}</b>", num_s),
        Paragraph(f"<b>{s['name']}</b>", bold_s),
        Paragraph(s["cat"], S("cat", fontName="Helvetica", fontSize=7.5, textColor=cat_fg.get(s["cat"], BLACK), leading=10)),
        Paragraph(weeks_str, S("wk", fontName="Helvetica-Bold", fontSize=8, textColor=DARK_BLUE, alignment=TA_CENTER, leading=11)),
        Paragraph(f"{d1.strftime('%b %d')} –\n{d2.strftime('%b %d')}", small_s),
        Paragraph(phase1_focus.get(s["name"], ""), small_s),
    ]
    p1_rows.append(row)

p1_tbl = Table(p1_rows, colWidths=[0.7*cm, 3.2*cm, 2.2*cm, 1.6*cm, 2.2*cm, 7.3*cm])
p1_row_bgs = []
for i, s in enumerate(sched, 1):
    bg = cat_cols.get(s["cat"], LIGHT_GREY)
    p1_row_bgs.append(("BACKGROUND", (0,i),(-1,i), bg if i%2==1 else WHITE))

p1_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0), DARK_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
    ("GRID",          (0,0),(-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 4),
    ("BOTTOMPADDING", (0,0),(-1,-1), 4),
    ("LEFTPADDING",   (0,0),(-1,-1), 5),
    ("RIGHTPADDING",  (0,0),(-1,-1), 5),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
] + p1_row_bgs))
story.append(p1_tbl)
story.append(Spacer(1, 0.2*cm))

# Revision 1 box
rev1 = Table([[Paragraph(
    "<b>REVISION 1  |  Oct 18–24, 2026  (1 week)</b>  —  Flip through short notes of all subjects. "
    "Do NOT re-read full text. Solve 50 mixed MCQs/day. Mark your top 5 weak subjects.",
    S("r1", fontName="Helvetica", fontSize=8.5, textColor=GREEN, leading=12)
)]], colWidths=[W])
rev1.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1), LIGHT_GREEN),
    ("TOPPADDING",(0,0),(-1,-1),8),("BOTTOMPADDING",(0,0),(-1,-1),8),
    ("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10),
    ("BOX",(0,0),(-1,-1),1.5, GREEN),
]))
story.append(rev1)
story.append(Spacer(1, 0.3*cm))

story.append(PageBreak())

# ── PHASE 2 SUBJECT-WISE TABLE ────────────────────────────────────────────────
story.append(banner("  PHASE 2 — SECOND READ  (Oct 25 – Dec 19, 2026)  |  8 Weeks", MID_BLUE))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
    "Second pass — faster. Focus on HIGH-YIELD topics and your marked weak areas. Solve 20 MCQs per subject-day.",
    note_s))
story.append(Spacer(1, 0.2*cm))

p2_hdr = [Paragraph(h, ch_s) for h in ["#", "SUBJECT", "WEEKS", "DATES", "HIGH-YIELD FOCUS FOR PASS 2"]]
p2_rows = [p2_hdr]

phase2_focus = {
    "Anatomy":             "Internal capsule, brachial plexus, embryology arches/pouches, spinal cord syndromes",
    "Physiology":          "CVS physiology, spirometry, GFR, hormones — memorise normal values",
    "Biochemistry":        "Enzyme disorders, vitamin deficiencies, PCR/blot techniques, HbA1c",
    "Pathology":           "Tumour markers, granulomas, amyloid, renal pathology, haematology",
    "Microbiology":        "Culture media, special stains, TORCH, hepatitis serology, HIV",
    "Pharmacology":        "Drug interactions, contraindications, anti-TB, anti-malarials, anaesthetics",
    "Forensic Medicine":   "Rigor mortis, postmortem lividity, sexual offences, poisons (organophosphate)",
    "PSM / Comm. Medicine":"Vaccines (schedule+cold chain), screening tests, vital statistics, nutrition",
    "Medicine":            "Murmurs, CXR patterns, liver disease, renal failure, electrolytes, ECG arrhythmias",
    "Surgery":             "GI bleed, pancreatitis, thyroid surgery, breast Ca, trauma ATLS",
    "OBG":                 "Hypertension in pregnancy, APH/PPH, PCOS, Ca cervix screening",
    "Pediatrics":          "Congenital heart disease, neonatal jaundice, fever management, nutrition",
    "Orthopedics":         "Compartment syndrome, osteomyelitis, joint replacement, spine injuries",
    "Ophthalmology":       "Glaucoma, cataract, retinal detachment, diabetic retinopathy",
    "ENT":                 "CSOM vs CSOM, cholesteatoma, vocal cord palsy, neck masses",
    "Dermatology":         "Pemphigus vs pemphigoid, SLE rash, scabies, leprosy, drug rashes",
    "Psychiatry":          "ECT, drug doses, ICD-11 criteria, suicide risk, substance use disorders",
    "Radiology":           "Classic X-ray signs (sail sign, double bubble, snowstorm), CT head",
    "Anesthesia":          "Spinal vs epidural, malignant hyperthermia, TIVA, pain management",
}

for i, s in enumerate(sched):
    d1 = START + timedelta(weeks=s["p2s"])
    d2 = START + timedelta(weeks=s["p2e"]) - timedelta(days=1)
    weeks_str = f"{s['w2']:.2g} wks" if s['w2'] >= 0.5 else "3–4 days"
    row = [
        Paragraph(f"<b>{i+1}</b>", num_s),
        Paragraph(f"<b>{s['name']}</b>", bold_s),
        Paragraph(weeks_str, S("wk2", fontName="Helvetica-Bold", fontSize=8, textColor=PURPLE, alignment=TA_CENTER, leading=11)),
        Paragraph(f"{d1.strftime('%b %d')} –\n{d2.strftime('%b %d')}", small_s),
        Paragraph(phase2_focus.get(s["name"], ""), small_s),
    ]
    p2_rows.append(row)

p2_tbl = Table(p2_rows, colWidths=[0.7*cm, 3.2*cm, 1.8*cm, 2.2*cm, 9.3*cm])
p2_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0), MID_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_PURPLE, WHITE]),
    ("GRID",          (0,0),(-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 4),
    ("BOTTOMPADDING", (0,0),(-1,-1), 4),
    ("LEFTPADDING",   (0,0),(-1,-1), 5),
    ("RIGHTPADDING",  (0,0),(-1,-1), 5),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
]))
story.append(p2_tbl)
story.append(Spacer(1, 0.2*cm))

rev2 = Table([[Paragraph(
    "<b>REVISION 2  |  Dec 20–26, 2026  (1 week)</b>  —  Second rapid revision using short notes + Anki. "
    "Solve 100 MCQs/day. Attempt 1 full mock test (180 Qs). Finalize your top 3 weak subjects.",
    S("r2", fontName="Helvetica", fontSize=8.5, textColor=GREEN, leading=12)
)]], colWidths=[W])
rev2.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1), LIGHT_GREEN),
    ("TOPPADDING",(0,0),(-1,-1),8),("BOTTOMPADDING",(0,0),(-1,-1),8),
    ("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10),
    ("BOX",(0,0),(-1,-1),1.5, GREEN),
]))
story.append(rev2)
story.append(Spacer(1, 0.3*cm))

story.append(PageBreak())

# ── PHASE 3 ───────────────────────────────────────────────────────────────────
story.append(banner("  PHASE 3 — THIRD READ  (Dec 27, 2026 – Jan 9, 2027)  |  2 Weeks", RED))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
    "Rapid third pass — short notes, diagrams, and one-liners ONLY. No new reading. 30 MCQs per subject-day.",
    note_s))
story.append(Spacer(1, 0.2*cm))

p3_hdr = [Paragraph(h, ch_s) for h in ["#", "SUBJECT", "DAYS", "DATES", "WHAT TO COVER IN PASS 3"]]
p3_rows = [p3_hdr]

phase3_focus = {
    "Anatomy":             "Diagrams only: brachial plexus, Circle of Willis, cord syndromes, embryology mnemonics",
    "Physiology":          "Normal values table, graph-based concepts, hormonal axes",
    "Biochemistry":        "Pathway summaries, vitamin deficiency table, enzyme disease table",
    "Pathology":           "Morphology one-liners, tumour markers, special stains",
    "Microbiology":        "Culture media table, serology patterns, vaccine types",
    "Pharmacology":        "Drug class + prototype + key ADR table",
    "Forensic Medicine":   "Time since death signs table, toxins table",
    "PSM / Comm. Medicine":"Vaccine schedule poster, disease indices, program dates",
    "Medicine":            "ECG criteria, murmur table, drug treatment summary",
    "Surgery":             "Operative steps and complications one-liners",
    "OBG":                 "Bishop score, Partogram, drug doses in obstetrics",
    "Pediatrics":          "Milestone table, vaccine schedule, neonatal emergencies",
    "Orthopedics":         "Fracture types + complications + management table",
    "Ophthalmology":       "IOP values, drug mnemonics, fundus findings",
    "ENT":                 "Hearing loss types, tuning fork tests summary",
    "Dermatology":         "Lesion type + disease table, drug reactions",
    "Psychiatry":          "Diagnostic criteria one-liners, drug doses",
    "Radiology":           "Classic X-ray/CT signs list",
    "Anesthesia":          "Drug doses, stages of anaesthesia, complications",
}

p3_start_week = 23.0

# Group subjects into 2-week blocks based on p3 weeks
for i, s in enumerate(sched):
    d1 = START + timedelta(weeks=s["p3s"])
    d2 = START + timedelta(weeks=s["p3e"]) - timedelta(days=1)
    if s["w3"] > 0:
        days = int(s["w3"] * 7)
        days_str = f"{days}d"
    else:
        days_str = "1–2 days"
        d2 = d1 + timedelta(days=2)
    row = [
        Paragraph(f"<b>{i+1}</b>", num_s),
        Paragraph(f"<b>{s['name']}</b>", bold_s),
        Paragraph(days_str, S("d3", fontName="Helvetica-Bold", fontSize=8, textColor=RED, alignment=TA_CENTER, leading=11)),
        Paragraph(f"{d1.strftime('%b %d')} –\n{d2.strftime('%b %d')}", small_s),
        Paragraph(phase3_focus.get(s["name"], ""), small_s),
    ]
    p3_rows.append(row)

p3_tbl = Table(p3_rows, colWidths=[0.7*cm, 3.2*cm, 1.5*cm, 2.2*cm, 9.6*cm])
p3_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0), RED),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_RED, WHITE]),
    ("GRID",          (0,0),(-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 4),
    ("BOTTOMPADDING", (0,0),(-1,-1), 4),
    ("LEFTPADDING",   (0,0),(-1,-1), 5),
    ("RIGHTPADDING",  (0,0),(-1,-1), 5),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
]))
story.append(p3_tbl)
story.append(Spacer(1, 0.2*cm))

rev3 = Table([[Paragraph(
    "<b>REVISION 3 / GRAND REVISION  |  Jan 10–24, 2027  (2 weeks)</b>  —  "
    "Full mock tests EVERY DAY (180 Qs, 3.5 hrs). Review all wrong answers the same day. "
    "No new topics. Sleep minimum 7 hours. Reach the exam centre 1 hour early.",
    S("r3", fontName="Helvetica", fontSize=8.5, textColor=RED, leading=12)
)]], colWidths=[W])
rev3.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1), LIGHT_RED),
    ("TOPPADDING",(0,0),(-1,-1),8),("BOTTOMPADDING",(0,0),(-1,-1),8),
    ("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10),
    ("BOX",(0,0),(-1,-1),1.5, RED),
]))
story.append(rev3)
story.append(Spacer(1, 0.35*cm))

story.append(PageBreak())

# ── MONTHLY MILESTONE CALENDAR ────────────────────────────────────────────────
story.append(banner("  MONTHLY MILESTONES", DARK_BLUE))
story.append(Spacer(1, 0.2*cm))

milestones = [
    ("July 19–31\n2026",   "Start",       "Anatomy + Physiology (Pass 1 begins). Set up Anki deck. Solve 10 MCQs/day.",              LIGHT_BLUE),
    ("August\n2026",       "Pass 1",       "Biochemistry + Pathology + Microbiology. Total MCQs this month: 300+.",                   LIGHT_BLUE),
    ("September\n2026",    "Pass 1",       "Pharmacology + Forensic + PSM + Medicine (Pass 1). Mid-month: first mock test.",          LIGHT_BLUE),
    ("October\n2026",      "Pass 1 → Rev1","Surgery + OBG + Peds + Ortho + short subjects. Oct 18–24: Revision 1 week.",              LIGHT_GREEN),
    ("November\n2026",     "Pass 2",       "Pass 2 begins Oct 25. Heavy subjects (Anatomy → Medicine). 20 MCQs/subject-day.",         LIGHT_PURPLE),
    ("December\n2026",     "Pass 2 → Rev2","Complete Pass 2. Dec 20–26: Revision 2 week + first 100-Q mock daily.",                   LIGHT_GREEN),
    ("Dec 27 –\nJan 9, 2027","Pass 3",     "Rapid third pass — short notes + diagrams only. 30 MCQs/subject-day.",                    LIGHT_RED),
    ("Jan 10–24\n2027",    "Rev 3",        "Grand revision: full mock every day. Review only wrong answers. No new topics.",           LIGHT_RED),
    ("~Jan 25\n2027",      "EXAM",         "NEET PG 2027 / INI-CET. Rest well the night before. Trust your preparation.",             colors.HexColor("#FFF3CD")),
]

ms_hdr = [Paragraph(h, ch_s) for h in ["PERIOD", "PHASE", "TARGETS", ""]]
ms_rows = [ms_hdr]
for period, phase, target, bg in milestones:
    ms_rows.append([
        Paragraph(f"<b>{period}</b>", bold_s),
        Paragraph(f"<b>{phase}</b>",  S("msp", fontName="Helvetica-Bold", fontSize=8, textColor=DARK_BLUE, leading=11)),
        Paragraph(target, small_s),
        Paragraph("", body_s),
    ])

ms_tbl = Table(ms_rows, colWidths=[2.5*cm, 2.2*cm, 12.5*cm, 0*cm])
ms_row_bgs = [("BACKGROUND",(0,i+1),(-1,i+1), milestones[i][3]) for i in range(len(milestones))]
ms_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0), DARK_BLUE),
    ("GRID",          (0,0),(-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 5),
    ("BOTTOMPADDING", (0,0),(-1,-1), 5),
    ("LEFTPADDING",   (0,0),(-1,-1), 7),
    ("RIGHTPADDING",  (0,0),(-1,-1), 7),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
] + ms_row_bgs))
story.append(ms_tbl)
story.append(Spacer(1, 0.35*cm))

# ── SUBJECT PRIORITY + HIGH YIELD ────────────────────────────────────────────
story.append(banner("  SUBJECT PRIORITY & MARKS WEIGHTAGE (NEET PG)", DARK_BLUE))
story.append(Spacer(1, 0.2*cm))

priority_data = [
    [Paragraph(h, ch_s) for h in ["PRIORITY", "SUBJECT", "EST. Qs", "WHY HIGH YIELD"]],
    [Paragraph("★★★★★", S("st5", fontName="Helvetica-Bold", fontSize=9, textColor=ACCENT, leading=12)),
     Paragraph("Medicine", bold_s), Paragraph("30–35", body_s),
     Paragraph("Largest clinical subject. Single biggest scoring area.", body_s)],
    [Paragraph("★★★★★", S("st5b", fontName="Helvetica-Bold", fontSize=9, textColor=ACCENT, leading=12)),
     Paragraph("Pharmacology", bold_s), Paragraph("25–30", body_s),
     Paragraph("High yield across all subjects. Drug knowledge tested in every specialty.", body_s)],
    [Paragraph("★★★★", S("st4a", fontName="Helvetica-Bold", fontSize=9, textColor=MID_BLUE, leading=12)),
     Paragraph("Pathology", bold_s), Paragraph("20–25", body_s),
     Paragraph("Foundation for clinical diagnosis. High number of image-based Qs.", body_s)],
    [Paragraph("★★★★", S("st4b", fontName="Helvetica-Bold", fontSize=9, textColor=MID_BLUE, leading=12)),
     Paragraph("Surgery", bold_s), Paragraph("20–25", body_s),
     Paragraph("Surgical anatomy + emergency management heavily tested.", body_s)],
    [Paragraph("★★★★", S("st4c", fontName="Helvetica-Bold", fontSize=9, textColor=MID_BLUE, leading=12)),
     Paragraph("OBG", bold_s), Paragraph("15–20", body_s),
     Paragraph("Normal obstetrics + obstetric emergencies = guaranteed questions.", body_s)],
    [Paragraph("★★★", S("st3a", fontName="Helvetica-Bold", fontSize=9, textColor=GREEN, leading=12)),
     Paragraph("Anatomy / Physiology / Biochemistry / Microbiology / PSM / Pediatrics", bold_s),
     Paragraph("10–15 each", body_s),
     Paragraph("Moderate but consistent. Strong base improves all clinical subjects.", body_s)],
    [Paragraph("★★", S("st2", fontName="Helvetica-Bold", fontSize=9, textColor=MED_GREY, leading=12)),
     Paragraph("ENT / Ophthalmology / Derm / Psychiatry / Ortho / Forensic / Radio / Anaesthesia", bold_s),
     Paragraph("5–10 each", body_s),
     Paragraph("Short subjects — high ROI if studied well in Pass 2 and 3.", body_s)],
]

pri_tbl = Table(priority_data, colWidths=[2.5*cm, 5.5*cm, 1.8*cm, 7.4*cm])
pri_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0), DARK_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_ORANGE, WHITE, LIGHT_BLUE, LIGHT_BLUE, LIGHT_RED, LIGHT_GREY, LIGHT_GREY]),
    ("GRID",          (0,0),(-1,-1), 0.4, MED_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 5),
    ("BOTTOMPADDING", (0,0),(-1,-1), 5),
    ("LEFTPADDING",   (0,0),(-1,-1), 6),
    ("RIGHTPADDING",  (0,0),(-1,-1), 6),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
]))
story.append(pri_tbl)
story.append(Spacer(1, 0.35*cm))

# ── GOLDEN RULES ──────────────────────────────────────────────────────────────
story.append(banner("  10 RULES FOR 4–5 HRS/DAY PREPARATION", ACCENT))
story.append(Spacer(1, 0.15*cm))

rules = [
    "Never study more than 2.5 hours without a break — quality over quantity.",
    "Solve at least 20 MCQs every single day, even on low-energy days.",
    "Make short notes in a pocket diary — during revision, read ONLY those notes.",
    "Anki flashcards every evening for 15 minutes beats weekend cramming.",
    "Sunday = weak-topic day. Identify your 3 weakest subjects each week and attack them.",
    "After each phase, mark every topic as: Strong / OK / Weak — then prioritize the Weak list.",
    "Never skip a revision week — the 3 revision windows are what make it stick long-term.",
    "Full mock tests must start by December. Exam stamina is a separate skill to build.",
    "Sleep 7 hours minimum — memory consolidation happens only during sleep.",
    "On exam day: attempt high-confidence questions first, flag the doubtful ones, review at the end.",
]
rule_rows = [[
    Paragraph(f"<b>{i+1}.</b>", S("rn2", fontName="Helvetica-Bold", fontSize=9, textColor=ACCENT, alignment=TA_CENTER, leading=13)),
    Paragraph(rule, S("rb2", fontName="Helvetica", fontSize=8.5, textColor=BLACK, leading=13)),
] for i, rule in enumerate(rules)]

rule_tbl = Table(rule_rows, colWidths=[0.9*cm, 16.3*cm])
rule_tbl.setStyle(TableStyle([
    ("ROWBACKGROUNDS",(0,0),(-1,-1),[colors.HexColor("#FFF8E1"), WHITE]),
    ("LINEBELOW",(0,0),(-1,-1),0.3, MED_GREY),
    ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
    ("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),8),
    ("VALIGN",(0,0),(-1,-1),"MIDDLE"),
]))
story.append(rule_tbl)
story.append(Spacer(1, 0.4*cm))

# ── FOOTER ────────────────────────────────────────────────────────────────────
story.append(HRFlowable(width=W, thickness=1, color=MED_GREY))
story.append(Spacer(1, 0.12*cm))
story.append(Paragraph(
    "NEET PG 2027 | 1-Year Subject-Wise Plan | 4–5 hrs/day | 3 Reads + 3 Revisions per Subject | Generated July 12, 2026",
    foot_s))

doc.build(story)
print(f"PDF created: {OUTPUT}")
Running Command

cd /home/daytona/workspace/neet-pg-schedule && python create_1year_schedule.py

Editing File

~/neet-pg-schedule/create_1year_schedule.py

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/neet-pg-schedule/create_1year_schedule.py'
Running Command

cd /home/daytona/workspace/neet-pg-schedule && python create_1year_schedule.py

Your 1-year plan PDF is ready:

NEET PG 2027 1Year Plan

PDF Document · PDF


Here is what the PDF contains across 5 pages:
Page 1 - Overall Structure + Daily Schedule
  • Full phase breakdown: Pass 1 (13 wks) → Revision 1 → Pass 2 (8 wks) → Revision 2 → Pass 3 (2 wks) → Grand Revision (2 wks) → Exam
  • Daily 4–5 hr timetable: 2 study blocks + 2 mini-revisions + MCQ practice
Page 2 - Phase 1 (First Read, Jul 19 – Oct 17)
  • All 19 subjects with exact start/end dates and what to focus on in the first pass
  • Highlighted Revision 1 block: Oct 18–24
Page 3 - Phase 2 (Second Read, Oct 25 – Dec 19)
  • All 19 subjects with high-yield focus areas for the second pass
  • Revision 2 block: Dec 20–26
Page 4 - Phase 3 (Third Read) + Monthly Milestones + Subject Priority
  • Rapid third pass: Dec 27 – Jan 9 (short notes + diagrams only)
  • Grand Revision 3: Jan 10–24
  • Month-by-month milestone checklist
  • Subject priority ranked by estimated question weightage (Medicine and Pharmacology = top priority)
Page 5 - 10 Golden Rules for 4–5 hrs/day prep

The core logic behind the plan:
  • Each subject is touched exactly 3 times in 3 progressively faster passes
  • 3 dedicated revision windows (Oct, Dec, Jan) are built in - not optional
  • 4 hrs/day = 3 hrs study + 1 hr MCQs (sustainable, not burnout-pace)
  • Mock tests begin December onwards so exam stamina builds before the real thing
This is a shared conversation. Sign in to Orris to start your own chat.