I'm a third year bds student at nair hospital dental college Mumbai I'm trying to study for neet mds exam please provide me the best guidance
NEET MDS 2025 2026 exam pattern syllabus preparation strategy
NEET MDS best books study material preparation tips BDS students
https://www.reddit.com/r/dentalschoolindia/comments/1pdd61v/β¦
| Feature | Detail |
|---|---|
| Mode | Computer-Based Test (CBT) |
| Duration | 3 hours |
| Total Questions | 240 MCQs |
| Part A | 100 questions (75 min) |
| Part B | 140 questions (105 min) |
| Marking | +4 correct / -1 wrong |
| Language | English only |
| Total Marks | 960 |
| Subject | Recommended Book |
|---|---|
| Oral Pathology | Shafer's Textbook of Oral Pathology (theory base) + MCQ revision book |
| Periodontology | Carranza's Clinical Periodontology (concise reading) |
| Conservative Dentistry & Endo | Sturdevant + MCQ book (CEEDEES/Gobind Rai Gard) |
| Prosthodontics | Zarb Bolender Prosthodontics + MCQ revision |
| Orthodontics | Graber / Profit (selective chapters) |
| Oral Surgery | Fragiskos or Peterson's - selective chapters |
| Pedodontics | McDonald Avery (selective) |
| Oral Medicine & Radiology | Tyldesley's / Burket's |
| Dental Materials | Craig's / Anusavice |
| Public Health Dentistry | Soben Peter (very important - frequently tested) |
| Subject | Recommended Book |
|---|---|
| Pharmacology | KD Tripathi (theory) + Gobind Rai Gard (MCQs) |
| General Pathology | Harsh Mohan (selective chapters) |
| Anatomy | BD Chaurasia (selective) |
| Microbiology | Ananthanarayan (selective) |
| Physiology & Biochemistry | Ganong / Harper (selective) |
| Time Available | Expected Rank (if consistent) |
|---|---|
| 2+ years of prep (your case) | Top 500 possible |
| 1 year serious prep | Top 1000-2000 |
| 6 months crash prep | 2000-5000 range |
Create a subject-wise study schedule for my NEET MDS preparation
mkdir -p /home/daytona/workspace/neet-mds-schedule && ls /home/daytona/workspaceβ¦
~/neet-mds-schedule/build_schedule.py
from openpyxl import Workbook
from openpyxl.styles import (Font, PatternFill, Alignment, Border, Side,
GradientFill)
from openpyxl.utils import get_column_letter
wb = Workbook()
# βββββββββββββββββββββββββββββββββββββββββββββ
# COLOUR PALETTE
# βββββββββββββββββββββββββββββββββββββββββββββ
DARK_BLUE = "1F3864"
MED_BLUE = "2E75B6"
LIGHT_BLUE = "D6E4F0"
TEAL = "1ABC9C"
LIGHT_TEAL = "D5F5E3"
ORANGE = "E67E22"
LIGHT_ORANGE= "FDEBD0"
PURPLE = "7D3C98"
LIGHT_PURPLE= "E8DAEF"
GREEN = "1E8449"
LIGHT_GREEN = "D5F5E3"
RED = "C0392B"
LIGHT_RED = "FADBD8"
YELLOW = "F1C40F"
LIGHT_YELLOW= "FEF9E7"
GREY_BG = "F2F2F2"
WHITE = "FFFFFF"
BLACK = "000000"
def hdr_font(size=11, bold=True, color=WHITE):
return Font(name="Arial", size=size, bold=bold, color=color)
def body_font(size=10, bold=False, color=BLACK):
return Font(name="Arial", size=size, bold=bold, color=color)
def fill(hex_color):
return PatternFill("solid", start_color=hex_color, fgColor=hex_color)
def center(wrap=False):
return Alignment(horizontal="center", vertical="center", wrap_text=wrap)
def left(wrap=True):
return Alignment(horizontal="left", vertical="center", wrap_text=wrap)
def thin_border():
s = Side(style="thin", color="BFBFBF")
return Border(left=s, right=s, top=s, bottom=s)
def thick_border():
s = Side(style="medium", color="1F3864")
return Border(left=s, right=s, top=s, bottom=s)
def apply_range(ws, row1, col1, row2, col2, font=None, fill_=None,
align=None, border=None):
for r in range(row1, row2+1):
for c in range(col1, col2+1):
cell = ws.cell(row=r, column=c)
if font: cell.font = font
if fill_: cell.fill = fill_
if align: cell.alignment = align
if border: cell.border = border
def merge_and_set(ws, r1, c1, r2, c2, value, font=None, fill_=None, align=None):
ws.merge_cells(start_row=r1, start_column=c1,
end_row=r2, end_column=c2)
cell = ws.cell(row=r1, column=c1)
cell.value = value
if font: cell.font = font
if fill_: cell.fill = fill_
if align: cell.alignment = align
return cell
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SHEET 1 β OVERVIEW / COVER
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ws1 = wb.active
ws1.title = "π Overview"
ws1.sheet_view.showGridLines = False
ws1.column_dimensions["A"].width = 3
for col in ["B","C","D","E","F","G","H","I"]:
ws1.column_dimensions[col].width = 18
ws1.row_dimensions[1].height = 10
ws1.row_dimensions[2].height = 50
ws1.row_dimensions[3].height = 28
# Title banner
merge_and_set(ws1, 2,2,2,9,
"π¦· NEET MDS 2028 β Master Study Schedule",
font=Font(name="Arial", size=18, bold=True, color=WHITE),
fill_=fill(DARK_BLUE),
align=center())
merge_and_set(ws1, 3,2,3,9,
"3rd Year BDS | Nair Hospital Dental College, Mumbai | Target: NEET MDS 2028 | Daily Commitment: 1-2 hrs",
font=Font(name="Arial", size=11, bold=False, color=WHITE),
fill_=fill(MED_BLUE),
align=center())
# Info boxes row
ws1.row_dimensions[5].height = 20
ws1.row_dimensions[6].height = 45
ws1.row_dimensions[7].height = 20
info = [
("B","C", "π
Start Date", "July 2026"),
("D","E", "π― Target Exam", "NEET MDS 2028"),
("F","G", "β± Daily Study", "1-2 hours"),
("H","I", "π Total Subjects", "17 Subjects"),
]
for c1l, c2l, label, val in info:
c1 = ord(c1l)-64; c2 = ord(c2l)-64
merge_and_set(ws1,5,c1,5,c2, label,
font=hdr_font(10, True, WHITE), fill_=fill(MED_BLUE), align=center())
merge_and_set(ws1,6,c1,6,c2, val,
font=Font(name="Arial",size=14,bold=True,color=DARK_BLUE),
fill_=fill(LIGHT_BLUE), align=center())
ws1.row_dimensions[8].height = 18
# Phase summary table
phases = [
("PHASE 1","Jul 2026 β Jun 2027","12 months","Foundation Building",
"Build subject-by-subject theory base. Cover all 17 subjects once.\nAlign NEET study with your 3rd/4th year BDS curriculum.",
MED_BLUE, LIGHT_BLUE),
("PHASE 2","Jul 2027 β Mar 2028","9 months","Intensive MCQ Drill",
"Subject-wise MCQ practice, previous year question banks.\nTarget 50+ MCQs daily. Weekly subject tests on MERITERS/PULP.",
TEAL, LIGHT_TEAL),
("PHASE 3","Apr 2028 β Sep 2028","6 months","Revision & Mock Tests",
"Full-length mock exams every 2 weeks. High-yield rapid revision.\nFocus on weak areas. Recall-based question solving.",
ORANGE, LIGHT_ORANGE),
("PHASE 4","Oct 2028 β Dec 2028","2-3 months","Final Sprint",
"Grand mocks, last 5-year recall papers, subject flash revision.\nMaintain confidence; no new topics after this phase.",
PURPLE, LIGHT_PURPLE),
]
r = 9
merge_and_set(ws1,r,2,r,9,"PHASE-WISE PREPARATION OVERVIEW",
font=hdr_font(12,True,WHITE), fill_=fill(DARK_BLUE), align=center())
r+=1
headers = ["Phase","Period","Duration","Focus","Goals"]
col_spans = [(2,2),(3,4),(5,5),(6,6),(7,9)]
for h,(c1,c2) in zip(headers,col_spans):
merge_and_set(ws1,r,c1,r,c2, h,
font=hdr_font(10,True,WHITE), fill_=fill(MED_BLUE), align=center())
r+=1
for ph, period, dur, focus, goals, hc, lc in phases:
ws1.row_dimensions[r].height = 50
merge_and_set(ws1,r,2,r,2, ph,
font=Font(name="Arial",size=11,bold=True,color=WHITE),
fill_=fill(hc), align=center())
merge_and_set(ws1,r,3,r,4, period,
font=body_font(10,False,DARK_BLUE), fill_=fill(lc), align=center())
merge_and_set(ws1,r,5,r,5, dur,
font=body_font(10,True,DARK_BLUE), fill_=fill(lc), align=center())
merge_and_set(ws1,r,6,r,6, focus,
font=body_font(10,True,DARK_BLUE), fill_=fill(lc), align=center())
merge_and_set(ws1,r,7,r,9, goals,
font=body_font(10,False,DARK_BLUE), fill_=fill(lc), align=left())
apply_range(ws1,r,2,r,9, border=thin_border())
r+=1
r+=1
# Subject weightage quick reference
ws1.row_dimensions[r].height = 20
merge_and_set(ws1,r,2,r,9,"SUBJECT WEIGHTAGE & PRIORITY",
font=hdr_font(12,True,WHITE), fill_=fill(DARK_BLUE), align=center())
r+=1
ws1.row_dimensions[r].height = 20
subj_hdr = ["Subject","Part","Approx Qs","Priority","Best Book / Resource"]
col_w = [(2,3),(4,4),(5,5),(6,6),(7,9)]
for h,(c1,c2) in zip(subj_hdr,col_w):
merge_and_set(ws1,r,c1,r,c2, h,
font=hdr_font(10,True,WHITE), fill_=fill(MED_BLUE), align=center())
r+=1
subjects = [
("Oral Pathology","B","15-18","βββ HIGH","Shafer's (theory) + MERITERS MCQs", LIGHT_RED),
("Periodontology","B","12-15","βββ HIGH","Carranza's (concise) + MERITERS", LIGHT_RED),
("Prosthodontics","B","12-15","βββ HIGH","Zarb Bolender + CEEDEES MCQs", LIGHT_RED),
("Conservative Dentistry & Endo","B","10-12","βββ HIGH","Sturdevant + Gobind Rai Gard", LIGHT_RED),
("Pharmacology","A","10-12","βββ HIGH","KD Tripathi + Gobind Rai Gard", LIGHT_RED),
("Public Health Dentistry","B","10-12","βββ HIGH","Soben Peter", LIGHT_RED),
("Orthodontics","B","8-10","ββ MED","Graber / Profit (selective)", LIGHT_YELLOW),
("Oral & Maxillofacial Surgery","B","8-10","ββ MED","Fragiskos / Peterson's (selective)", LIGHT_YELLOW),
("Pedodontics","B","7-9","ββ MED","McDonald Avery", LIGHT_YELLOW),
("Dental Materials","B","7-9","ββ MED","Craig's / Anusavice", LIGHT_YELLOW),
("Oral Medicine & Radiology","B","7-9","ββ MED","Tyldesley's / Burket's", LIGHT_YELLOW),
("General Pathology","A","6-8","ββ MED","Harsh Mohan (selective)", LIGHT_YELLOW),
("General Anatomy","A","5-7","β BASIC","BD Chaurasia (selective)", LIGHT_GREEN),
("Physiology & Biochemistry","A","5-7","β BASIC","Ganong / Harper (selective)", LIGHT_GREEN),
("Microbiology","A","5-6","β BASIC","Ananthanarayan (selective)", LIGHT_GREEN),
("General Medicine","A","5-6","β BASIC","Davidson's / Harrison's (selective)", LIGHT_GREEN),
("General Surgery","A","4-5","β BASIC","Bailey & Love (selective)", LIGHT_GREEN),
]
for subj, part, qs, priority, book, bg in subjects:
ws1.row_dimensions[r].height = 22
merge_and_set(ws1,r,2,r,3, subj,
font=body_font(10,True,DARK_BLUE), fill_=fill(bg), align=left(False))
ws1.cell(r,4).value=part; ws1.cell(r,4).font=body_font(10,True,MED_BLUE)
ws1.cell(r,4).fill=fill(bg); ws1.cell(r,4).alignment=center()
ws1.cell(r,5).value=qs; ws1.cell(r,5).font=body_font(10); ws1.cell(r,5).fill=fill(bg); ws1.cell(r,5).alignment=center()
ws1.cell(r,6).value=priority; ws1.cell(r,6).font=body_font(10,True,DARK_BLUE); ws1.cell(r,6).fill=fill(bg); ws1.cell(r,6).alignment=center()
merge_and_set(ws1,r,7,r,9, book,
font=body_font(10,False,DARK_BLUE), fill_=fill(bg), align=left(False))
apply_range(ws1,r,2,r,9, border=thin_border())
r+=1
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SHEET 2 β PHASE-WISE MONTHLY PLAN
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ws2 = wb.create_sheet("π
Phase Plan")
ws2.sheet_view.showGridLines = False
ws2.column_dimensions["A"].width = 3
col_widths2 = {"B":8,"C":18,"D":24,"E":28,"F":20,"G":22,"H":18}
for col,w in col_widths2.items():
ws2.column_dimensions[col].width = w
merge_and_set(ws2,2,2,2,8,
"π¦· NEET MDS 2028 β Phase-Wise Monthly Study Plan",
font=Font(name="Arial",size=16,bold=True,color=WHITE),
fill_=fill(DARK_BLUE), align=center())
ws2.row_dimensions[2].height = 40
merge_and_set(ws2,3,2,3,8,
"3rd Year BDS | 1-2 Hours/Day Commitment | Start: July 2026",
font=Font(name="Arial",size=10,bold=False,color=WHITE),
fill_=fill(MED_BLUE), align=center())
ws2.row_dimensions[3].height = 22
monthly_data = [
# Phase 1
("PHASE 1: FOUNDATION BUILDING (Jul 2026 β Jun 2027)", None, DARK_BLUE, WHITE, True),
("Month","Period","Subjects to Cover","Key Tasks","Daily MCQ Target","Resources","Milestone"),
("Month 1","Jul 2026","Oral Pathology (Part 1)\nDental Anatomy & Histology",
"Read Shafer's Ch 1-8 (lesions, cysts)\nRead Dental Anatomy (Bath-Balogh)\nLink cases seen in OPD",
"10-15 MCQs/day (Oral Path + Dental Anatomy)","Shafer's, MERITERS App","Complete Oral Path β Developmental Lesions"),
("Month 2","Aug 2026","Oral Pathology (Part 2)",
"Complete Shafer's (infections, tumours, systemic)\nPrevious year Oral Path MCQs",
"15-20 MCQs/day","Shafer's, PULP App","Full Oral Path 1st reading done"),
("Month 3","Sep 2026","Periodontology",
"Carranza's Ch 1-20 (classification, pathogenesis, treatment)\nClinical correlation at Nair OPD",
"15-20 MCQs/day","Carranza's, CEEDEES","Perio: classification + treatment protocols"),
("Month 4","Oct 2026","Pharmacology (Part 1)",
"KD Tripathi: ANS, CVS, Respiratory drugs\nDental pharmacology (LA, analgesics, antibiotics)",
"15-20 MCQs/day","KD Tripathi, Gobind Rai Gard","Pharm Part 1 complete"),
("Month 5","Nov 2026","Pharmacology (Part 2) + General Pathology",
"KD Tripathi: remaining + Harsh Mohan Ch 1-12\n(inflammation, neoplasia, immunity)",
"20 MCQs/day","KD Tripathi, Harsh Mohan","Pharm complete; Gen Path Part 1"),
("Month 6","Dec 2026","Prosthodontics (Part 1)",
"Zarb Bolender: complete dentures, RPD\nDental Materials relevant to Prostho",
"15-20 MCQs/day","Zarb Bolender, CEEDEES","Prostho β removable prosthetics done"),
("Month 7","Jan 2027","Prosthodontics (Part 2) + Dental Materials",
"Zarb: FPD, Implants\nAnusavice/Craig's: impressions, ceramics, metals",
"20 MCQs/day","Zarb, Anusavice","Prostho + Materials complete"),
("Month 8","Feb 2027","Conservative Dentistry & Endodontics",
"Sturdevant: cavity prep, restorations\nPathways of the Pulp: access, instrumentation",
"20 MCQs/day","Sturdevant, Pathways of the Pulp","Cons + Endo 1st reading done"),
("Month 9","Mar 2027","Orthodontics",
"Graber/Profit: growth, malocclusion classification\nAppliances, treatment planning basics",
"15-20 MCQs/day","Graber, MERITERS","Ortho foundation complete"),
("Month 10","Apr 2027","Oral Surgery + Oral Medicine & Radiology",
"Peterson's: extractions, flaps, impactions (selective)\nOral Medicine: Tyldesley's / Burket's",
"20 MCQs/day","Peterson's, Tyldesley's","OMS + OM&R 1st reading"),
("Month 11","May 2027","Pedodontics + Public Health Dentistry",
"McDonald: growth, caries management\nSoben Peter: complete (very high yield!)",
"20 MCQs/day","McDonald, Soben Peter","Pedo + PHD complete"),
("Month 12","Jun 2027","Basic Sciences Rapid Reading\n(Anatomy, Physiology, Biochemistry,\nMicrobiology, Medicine, Surgery)",
"Use MCQ-based revision only for basic sciences\nDo not read full textbooks β use notes/MERITERS",
"25-30 MCQs/day (mixed)","MERITERS Notes, Dental Bytes","Phase 1 COMPLETE β all 17 subjects covered"),
# Phase 2
("PHASE 2: INTENSIVE MCQ DRILL (Jul 2027 β Mar 2028)", None, TEAL, WHITE, True),
("Month","Period","Focus Subject","MCQ Strategy","Daily Target","Platform","Milestone"),
("Month 13","Jul 2027","Oral Pathology + Perio",
"Solve 200+ previous year Oral Path MCQs\nAnalyse every wrong answer","50+ MCQs/day","MERITERS, PULP","Oral Path accuracy >70%"),
("Month 14","Aug 2027","Prosthodontics + Dental Materials",
"CEEDEES question bank full drill\nSolve 5 years PYQs on these subjects","50+ MCQs/day","CEEDEES, MERITERS","Prostho accuracy >70%"),
("Month 15","Sep 2027","Conservative + Endo",
"Gobind Rai Gard (Cons section)\nEndodontic MCQs β instruments, obturation","50+ MCQs/day","Gobind Rai Gard, PULP","Cons+Endo accuracy >70%"),
("Month 16","Oct 2027","Pharmacology (deep MCQ drill)",
"KD Tripathi MCQs, Gobind Rai Gard Pharm\nFocus: dental pharmacology, mechanisms","50+ MCQs/day","Gobind Rai Gard","Pharm accuracy >70%"),
("Month 17","Nov 2027","PHD + Orthodontics + Pedodontics",
"Soben Peter MCQs β indices, statistics, surveys\nOrtho: cephalometrics, appliances MCQs","50+ MCQs/day","MERITERS, CEEDEES","PHD+Ortho+Pedo accuracy >65%"),
("Month 18","Dec 2027","OMS + OM&R + Dental Materials",
"Peterson's MCQs, Oral Medicine MCQs\nDental Materials 5-year PYQs","50+ MCQs/day","MERITERS, PULP","OMS+OM accuracy >65%"),
("Month 19","Jan 2028","Basic Sciences (Part A) Intensive",
"Gen Path, Anatomy, Physiology, Micro MCQs\nMedical pharmacology recap","60+ MCQs/day","MERITERS, Dental Bytes","Part A accuracy >65%"),
("Month 20","Feb 2028","Full Mixed Subject Test Series",
"Start weekly full-length mock tests (240 Qs)\nAnalyse performance sheet; target weak areas","80-100 MCQs/day","MERITERS Pro Test Series","1st mock: target score 500+/960"),
("Month 21","Mar 2028","Weak Area Targeted Revision",
"Identify 3 weakest subjects from mock analysis\nDo focused re-reading + MCQ drill on those only","60-80 MCQs/day","MERITERS, Subject books","Score improvement 50+ pts in weak areas"),
# Phase 3
("PHASE 3: REVISION & MOCK TESTS (Apr 2028 β Sep 2028)", None, ORANGE, WHITE, True),
("Month","Period","Focus","Strategy","Mock Tests","Key Activity","Target"),
("Month 22","Apr 2028","High-yield rapid revision: Oral Path + Perio + Prostho",
"Use MERITERS 'Bytes' (concise notes)\nSolve recall questions from 2020-2024 NEET MDS","1 mock/fortnight","Rapid notes + PYQ recalls","Score 580+/960 in mock"),
("Month 23","May 2028","Rapid revision: Cons + Endo + Pharm + Dental Materials",
"Flash revision: 1 chapter/day max\nFocus on 'most likely tested' lists from MERITERS blog","1 mock/fortnight","MERITERS High-Yield Notes","Score 600+/960"),
("Month 24","Jun 2028","Rapid revision: PHD + Ortho + Pedo + OMS",
"Statistical indices, cephalometric values, drug doses\n(These are direct recall MCQs β memorize values)","1 mock/fortnight","Value tables / mnemonics","Score 620+/960"),
("Month 25","Jul 2028","Rapid revision: Basic Sciences (Part A)",
"Focus on high-yield Part A topics only\nDo not go deep β use only MCQ-based approach","1 mock/fortnight","Dental Bytes / MERITERS Notes","Score 640+/960"),
("Month 26","Aug 2028","Grand mock test month",
"3 full-length mocks in August\nDetailed error analysis after each mock\nRevise wrong answers within 48 hours","3 mocks in August","MERITERS National Mocks","Consistent score 660+/960"),
("Month 27","Sep 2028","Mixed revision + 5-year recall paper solving",
"Solve 2019-2024 NEET MDS recall papers\nIdentify repeat questions (30-40% of exam is repeats)","2 mocks","PYQ Recall books (Neeraj Wadhwan)","Accuracy on repeats >80%"),
# Phase 4
("PHASE 4: FINAL SPRINT (Oct 2028 β Dec 2028)", None, PURPLE, WHITE, True),
("Month","Period","Activity","Instructions","Mock Tests","Do NOT Do","Goal"),
("Month 28","Oct 2028","Grand mock + error book revision",
"Maintain 'error book' β review all wrong MCQs\nNo new topics β consolidation only","3 mocks","Don't start new subjects","Score 680+/960"),
("Month 29","Nov 2028","Subject flash revision (1 subject/day rotation)\nRecall paper solving",
"Rotate all 17 subjects in 30 days (1/day)\n30-min flash revision per subject","2 mocks","Don't re-read full chapters","Score 700+/960"),
("Month 30","Dec 2028","EXAM MONTH β Final 2 weeks",
"Last 2 full mocks β stop mocks 5 days before exam\nLight revision, mnemonics, stay calm","1 mock (early Dec only)","No heavy studying last 3 days","Peak performance on exam day"),
]
r = 5
phase_colors = {
"PHASE 1": (DARK_BLUE, WHITE, LIGHT_BLUE),
"PHASE 2": (TEAL, WHITE, LIGHT_TEAL),
"PHASE 3": (ORANGE, WHITE, LIGHT_ORANGE),
"PHASE 4": (PURPLE, WHITE, LIGHT_PURPLE),
}
current_bg = LIGHT_BLUE
for row_data in monthly_data:
ws2.row_dimensions[r].height = 20
if len(row_data)==5 and row_data[4]==True:
# Section header
label = row_data[0]
hc = row_data[2]; tc = row_data[3]
for ph in phase_colors:
if ph in label:
current_bg = phase_colors[ph][2]
ws2.row_dimensions[r].height = 28
merge_and_set(ws2,r,2,r,8, label,
font=Font(name="Arial",size=12,bold=True,color=tc),
fill_=fill(hc), align=center())
apply_range(ws2,r,2,r,8, border=thick_border())
r+=1
elif len(row_data)==7 and row_data[0]=="Month":
# Column headers
for ci, val in enumerate(row_data):
col = ci+2
ws2.row_dimensions[r].height = 22
ws2.cell(r,col).value = val
ws2.cell(r,col).font = hdr_font(10,True,WHITE)
ws2.cell(r,col).fill = fill(MED_BLUE)
ws2.cell(r,col).alignment = center(True)
ws2.cell(r,col).border = thin_border()
r+=1
else:
# Data row
ws2.row_dimensions[r].height = 55
for ci, val in enumerate(row_data):
col = ci+2
cell = ws2.cell(r,col)
cell.value = val if val else ""
cell.font = body_font(10, ci==0, DARK_BLUE)
cell.fill = fill(current_bg)
cell.alignment = left()
cell.border = thin_border()
r+=1
ws2.row_dimensions[r].height = 10
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SHEET 3 β WEEKLY TIMETABLE
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ws3 = wb.create_sheet("π Weekly Timetable")
ws3.sheet_view.showGridLines = False
col_widths3 = {"A":3,"B":16,"C":26,"D":26,"E":22,"F":20,"G":22}
for col,w in col_widths3.items():
ws3.column_dimensions[col].width = w
merge_and_set(ws3,2,2,2,7,
"π¦· NEET MDS β Weekly Study Timetable (1-2 Hours/Day)",
font=Font(name="Arial",size=15,bold=True,color=WHITE),
fill_=fill(DARK_BLUE), align=center())
ws3.row_dimensions[2].height = 38
merge_and_set(ws3,3,2,3,7,
"Designed for a 3rd Year BDS student at Nair Hospital Dental College | Adapt slot timings to your college schedule",
font=Font(name="Arial",size=10,color=WHITE),
fill_=fill(MED_BLUE), align=center())
ws3.row_dimensions[3].height = 22
# Note box
ws3.row_dimensions[5].height = 18
merge_and_set(ws3,5,2,5,7,
"π How to use: Slot 1 = Theory reading (45 min). Slot 2 = MCQ practice (30-45 min). Adjust Phase based on your current phase in the Phase Plan sheet.",
font=Font(name="Arial",size=9,color=DARK_BLUE),
fill_=fill(LIGHT_YELLOW), align=left())
ws3.row_dimensions[7].height = 22
headers3 = ["Day","Slot 1 β Theory (45 min)","Slot 2 β MCQ Practice (30-45 min)","Weekly Test / Activity","Daily MCQ Target","Notes"]
for ci,h in enumerate(headers3):
ws3.cell(7, ci+2).value = h
ws3.cell(7, ci+2).font = hdr_font(10,True,WHITE)
ws3.cell(7, ci+2).fill = fill(MED_BLUE)
ws3.cell(7, ci+2).alignment = center(True)
ws3.cell(7, ci+2).border = thin_border()
day_schedule = [
("Monday\n(College Day)","Oral Pathology / Oral Medicine\n(20-30 pages of theory)",
"MERITERS: 20 MCQs on today's theory topic","-","20","Morning or after dinner β 1.5 hrs total",LIGHT_BLUE),
("Tuesday\n(College Day)","Periodontology / Conservative Dentistry\n(20-30 pages)",
"PULP app: 20 MCQs on Perio or Cons","-","20","Link theory to OPD cases you saw",LIGHT_BLUE),
("Wednesday\n(College Day)","Pharmacology\n(KD Tripathi β 1-2 drug chapters)",
"Gobind Rai Gard: 20 Pharm MCQs","-","20","Focus on dental pharmacology first",LIGHT_BLUE),
("Thursday\n(College Day)","Prosthodontics / Dental Materials\n(Zarb / Anusavice β selective)",
"CEEDEES: 20 MCQs on Prostho/Materials","-","20","Great to read this after Prostho clinic",LIGHT_BLUE),
("Friday\n(College Day)","Public Health Dentistry / Pedodontics\n(Soben Peter β 20-30 pages)",
"MERITERS: 20 PHD/Pedo MCQs","-","20","PHD has direct recall MCQs β memorize indices",LIGHT_BLUE),
("Saturday\n(Half Day / Free)","Orthodontics OR Oral Surgery\n(selective chapters)",
"MERITERS/PULP: 30 MCQs β mixed subjects","π Take 1 subject test online\n(MERITERS free subject test)","30","Use extra time for longer reading session",LIGHT_TEAL),
("Sunday\n(Rest + Light Study)","Basic Sciences revision\n(Gen Path / Anatomy / Physio / Micro)\nOR Weak subject catch-up",
"20 MCQs β Previous Year Questions (any subject)","π Review the week's wrong answers\nUpdate your error notebook","20","Rest is important β keep Sunday light",LIGHT_YELLOW),
]
r = 8
for day, slot1, slot2, wktest, target, notes, bg in day_schedule:
ws3.row_dimensions[r].height = 65
vals = [day, slot1, slot2, wktest, target, notes]
for ci, v in enumerate(vals):
cell = ws3.cell(r, ci+2)
cell.value = v
cell.font = body_font(10, ci==0, DARK_BLUE)
cell.fill = fill(bg)
cell.alignment = left()
cell.border = thin_border()
r+=1
# Phase-specific adjustments note
r+=1
ws3.row_dimensions[r].height = 20
merge_and_set(ws3,r,2,r,7,"β οΈ PHASE-SPECIFIC ADJUSTMENTS TO THIS TIMETABLE",
font=hdr_font(11,True,WHITE), fill_=fill(DARK_BLUE), align=center())
r+=1
phase_adj = [
("Phase 1\n(Year 1)","Keep Slot 1 as theory reading. 10-20 MCQs in Slot 2 is enough.\nDon't rush β depth of understanding matters in this phase.",LIGHT_BLUE),
("Phase 2\n(Year 2 β MCQ Drill)","Reduce theory reading time. Slot 1 becomes MCQ drill (30 MCQs).\nSlot 2 becomes error analysis. Target 50+ MCQs/day minimum.",LIGHT_TEAL),
("Phase 3\n(Revision)","Replace Slot 1 with rapid notes (MERITERS Bytes, 20 min max/topic).\nSlot 2 = 40-50 MCQs. One full mock every 2 weeks (Sunday).",LIGHT_ORANGE),
("Phase 4\n(Final Sprint)","Slot 1 = recall MCQs from PYQ books. Slot 2 = error book revision.\nStop new topics. Sleep 7-8 hrs. Health is non-negotiable.",LIGHT_PURPLE),
]
adj_hdrs = ["Phase","Timetable Adjustment"]
for ci,h in enumerate(adj_hdrs):
ws3.cell(r,ci+2).value = h
ws3.cell(r,ci+2).font = hdr_font(10,True,WHITE)
ws3.cell(r,ci+2).fill = fill(MED_BLUE)
ws3.cell(r,ci+2).alignment = center()
ws3.cell(r,ci+2).border = thin_border()
# merge col for adjustment text
ws3.merge_cells(start_row=r,start_column=4,end_row=r,end_column=7)
ws3.cell(r,4).value="Slot Adjustments"
ws3.cell(r,4).font=hdr_font(10,True,WHITE)
ws3.cell(r,4).fill=fill(MED_BLUE)
ws3.cell(r,4).alignment=center()
ws3.cell(r,4).border=thin_border()
r+=1
for ph, adj, bg in phase_adj:
ws3.row_dimensions[r].height = 50
ws3.cell(r,2).value = ph
ws3.cell(r,2).font = body_font(10,True,DARK_BLUE)
ws3.cell(r,2).fill = fill(bg)
ws3.cell(r,2).alignment = center(True)
ws3.cell(r,2).border = thin_border()
ws3.merge_cells(start_row=r,start_column=3,end_row=r,end_column=3)
ws3.cell(r,3).value = ""
ws3.cell(r,3).fill = fill(bg)
ws3.cell(r,3).border = thin_border()
ws3.merge_cells(start_row=r,start_column=4,end_row=r,end_column=7)
ws3.cell(r,4).value = adj
ws3.cell(r,4).font = body_font(10,False,DARK_BLUE)
ws3.cell(r,4).fill = fill(bg)
ws3.cell(r,4).alignment = left()
ws3.cell(r,4).border = thin_border()
r+=1
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SHEET 4 β RESOURCES & APPS
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ws4 = wb.create_sheet("π Resources & Apps")
ws4.sheet_view.showGridLines = False
ws4.column_dimensions["A"].width = 3
for col,w in {"B":20,"C":22,"D":30,"E":20,"F":24}.items():
ws4.column_dimensions[col].width = w
merge_and_set(ws4,2,2,2,6,
"π¦· NEET MDS β Best Resources, Apps & Books",
font=Font(name="Arial",size=15,bold=True,color=WHITE),
fill_=fill(DARK_BLUE), align=center())
ws4.row_dimensions[2].height = 38
merge_and_set(ws4,3,2,3,6,
"Curated for NEET MDS 2028 | 3rd Year BDS | Nair Hospital Dental College, Mumbai",
font=Font(name="Arial",size=10,color=WHITE),
fill_=fill(MED_BLUE), align=center())
ws4.row_dimensions[3].height = 22
r = 5
# Apps section
merge_and_set(ws4,r,2,r,6,"π± MUST-HAVE APPS & ONLINE PLATFORMS",
font=hdr_font(12,True,WHITE), fill_=fill(DARK_BLUE), align=center())
ws4.row_dimensions[r].height = 25; r+=1
apps_hdr = ["App / Platform","Cost","Best Used For","When to Start","Rating"]
for ci,h in enumerate(apps_hdr):
ws4.cell(r,ci+2).value=h; ws4.cell(r,ci+2).font=hdr_font(10,True,WHITE)
ws4.cell(r,ci+2).fill=fill(MED_BLUE); ws4.cell(r,ci+2).alignment=center(True)
ws4.cell(r,ci+2).border=thin_border()
ws4.row_dimensions[r].height=22; r+=1
apps = [
("MERITERS (MDSPrep)","Free + Paid plans","QBank, High-Yield Bytes, Mock Tests, Analytics","Phase 1 β Start NOW","βββββ",LIGHT_RED),
("PULP","Free (33,000+ MCQs)","Daily MCQ practice, free daily tests, analytics","Phase 1 β Start NOW","βββββ",LIGHT_RED),
("CEEDEES","Paid (books + app)","Subject-wise MCQ drill, Dr. Gowrishankar's material","Phase 1-2","ββββ",LIGHT_ORANGE),
("Gobind Rai Gard Review","Book + app","Pharmacology MCQs specifically","Phase 1-2","ββββ",LIGHT_ORANGE),
("Dental Bytes (book/app)","Book (affordable)","Compact rapid revision for all subjects","Phase 2-3","ββββ",LIGHT_YELLOW),
("Neeraj Wadhwan PYQ Book","Book","5-10 year solved previous year papers","Phase 2 onwards","βββββ",LIGHT_RED),
("MERITERS National Mocks","Paid","Full-length national-level mock tests","Phase 3","βββββ",LIGHT_RED),
("YouTube (free channels)","Free","Concept revision videos, toppers' strategies","All phases","βββ",LIGHT_GREEN),
]
for app,cost,use,when,rating,bg in apps:
ws4.row_dimensions[r].height=30
for ci,v in enumerate([app,cost,use,when,rating]):
ws4.cell(r,ci+2).value=v; ws4.cell(r,ci+2).font=body_font(10,ci==0,DARK_BLUE)
ws4.cell(r,ci+2).fill=fill(bg); ws4.cell(r,ci+2).alignment=left(False)
ws4.cell(r,ci+2).border=thin_border()
r+=1
r+=1
# Books section
merge_and_set(ws4,r,2,r,6,"π SUBJECT-WISE RECOMMENDED BOOKS",
font=hdr_font(12,True,WHITE), fill_=fill(DARK_BLUE), align=center())
ws4.row_dimensions[r].height=25; r+=1
bk_hdr=["Subject","Primary Textbook","MCQ / Revision Book","Reading Depth","Phase"]
for ci,h in enumerate(bk_hdr):
ws4.cell(r,ci+2).value=h; ws4.cell(r,ci+2).font=hdr_font(10,True,WHITE)
ws4.cell(r,ci+2).fill=fill(MED_BLUE); ws4.cell(r,ci+2).alignment=center(True)
ws4.cell(r,ci+2).border=thin_border()
ws4.row_dimensions[r].height=22; r+=1
books=[
("Oral Pathology","Shafer's Textbook of Oral Pathology","MERITERS MCQs","Full read","Phase 1",LIGHT_RED),
("Periodontology","Carranza's Clinical Periodontology","CEEDEES Perio MCQs","Selective chapters","Phase 1",LIGHT_RED),
("Prosthodontics","Zarb Bolender (Complete + FPD)","CEEDEES MCQs","Selective chapters","Phase 1",LIGHT_RED),
("Conservative + Endo","Sturdevant + Pathways of the Pulp","Gobind Rai Gard","Selective","Phase 1",LIGHT_RED),
("Pharmacology","KD Tripathi","Gobind Rai Gard Review of Pharmacology","Full read","Phase 1",LIGHT_RED),
("Public Health Dentistry","Soben Peter","MERITERS PHD MCQs","Full read β every page matters","Phase 1",LIGHT_RED),
("Orthodontics","Graber / Profit (selective)","MERITERS Ortho MCQs","Selective","Phase 1",LIGHT_ORANGE),
("Oral Surgery","Peterson's / Fragiskos (selective)","MERITERS OMS MCQs","Selective chapters","Phase 1",LIGHT_ORANGE),
("Pedodontics","McDonald & Avery (selective)","MERITERS Pedo MCQs","Selective","Phase 1",LIGHT_ORANGE),
("Dental Materials","Craig's / Anusavice","CEEDEES Materials MCQs","Selective","Phase 1",LIGHT_ORANGE),
("Oral Medicine & Radiology","Tyldesley's / Burket's","MERITERS OM MCQs","Selective","Phase 1",LIGHT_ORANGE),
("General Pathology","Harsh Mohan (Ch 1-15 only)","MERITERS Gen Path MCQs","Selective","Phase 1",LIGHT_YELLOW),
("Pharmacology (Part A)","KD Tripathi (General Pharm sections)","Gobind Rai Gard","Selective","Phase 1",LIGHT_YELLOW),
("Anatomy","BD Chaurasia (selective β head & neck)","MERITERS Anatomy MCQs","Selective only","Phase 1",LIGHT_GREEN),
("Physiology","Ganong (selective chapters)","MERITERS Physio MCQs","Selective only","Phase 1",LIGHT_GREEN),
("Biochemistry","Harper's (selected metabolic chapters)","MERITERS Biochem MCQs","Selective only","Phase 1",LIGHT_GREEN),
("Microbiology","Ananthanarayan (selective)","MERITERS Micro MCQs","Selective only","Phase 1",LIGHT_GREEN),
("General Medicine","Davidson's (selective clinical chapters)","MERITERS Medicine MCQs","Selective only","Phase 1",LIGHT_GREEN),
("General Surgery","Bailey & Love (selective)","MERITERS Surgery MCQs","Selective only","Phase 1",LIGHT_GREEN),
]
for row_ in books:
ws4.row_dimensions[r].height=28
for ci,v in enumerate(row_[:-1]):
ws4.cell(r,ci+2).value=v; ws4.cell(r,ci+2).font=body_font(10,ci==0,DARK_BLUE)
ws4.cell(r,ci+2).fill=fill(row_[-1]); ws4.cell(r,ci+2).alignment=left(False)
ws4.cell(r,ci+2).border=thin_border()
r+=1
r+=1
# Pro tips box
merge_and_set(ws4,r,2,r,6,"π‘ PRO TIPS FROM NEET MDS TOPPERS",
font=hdr_font(12,True,WHITE), fill_=fill(DARK_BLUE), align=center())
ws4.row_dimensions[r].height=25; r+=1
tips=[
"1. 30-40% of NEET MDS questions are direct repeats from previous years. Solving 5+ years of PYQs is the single highest ROI activity.",
"2. PHD (Public Health Dentistry) β most students under-prepare this. It has 10-12 direct factual questions. Soben Peter cover-to-cover is a must.",
"3. Use the Nair Hospital OPD to your advantage β link every clinical case to NEET MCQ theory. This improves retention dramatically.",
"4. Maintain an 'Error Notebook' from Day 1 β write every wrong MCQ answer with the correct explanation. Review it weekly.",
"5. Do NOT try to read full textbooks for basic sciences (Anatomy, Physiology, etc.) β use MCQ-based revision only for Part A.",
"6. MERITERS and PULP apps are free to start β use them from 3rd year itself. Even 15 min of MCQs daily in 3rd year adds up to 5,000+ MCQs by final year.",
"7. Never skip a full-length mock. Attempting all 240 Qs in 3 hours is a skill that needs training β start mock tests in Phase 2.",
]
for tip in tips:
ws4.row_dimensions[r].height=28
merge_and_set(ws4,r,2,r,6, tip,
font=body_font(10,False,DARK_BLUE), fill_=fill(LIGHT_BLUE), align=left())
apply_range(ws4,r,2,r,6, border=thin_border())
r+=1
# Save
out_path = "/home/daytona/workspace/neet-mds-schedule/NEET_MDS_2028_Study_Schedule.xlsx"
wb.save(out_path)
print(f"Saved: {out_path}")
cd /home/daytona/workspace/neet-mds-schedule && python build_schedule.py
cd /home/daytona/workspace/neet-mds-schedule && python build_schedule.py 2>&1 | β¦
python3 -c " import io, os from openpyxl import Workbook wb = Workbook() ws = wbβ¦
~/neet-mds-schedule/build_schedule.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/neet-mds-schedule/build_schedule.py'
cd /home/daytona/workspace/neet-mds-schedule && python3 build_schedule.py && ls β¦
python /home/daytona/skills/xlsx/scripts/recalc.py /home/daytona/workspace/neet-β¦
NEET MDS 2028 Study Schedule
Spreadsheet Β· XLSX
| Phase | Period | Focus |
|---|---|---|
| Phase 1 | Jul 2026 β Jun 2027 (12 months) | Subject-by-subject theory foundation. All 17 subjects covered once. |
| Phase 2 | Jul 2027 β Mar 2028 (9 months) | Intensive MCQ drill - 50+ MCQs/day, weekly subject tests |
| Phase 3 | Apr 2028 β Sep 2028 (6 months) | Rapid revision + full mock tests every 2 weeks |
| Phase 4 | Oct 2028 β Dec 2028 (2-3 months) | Final sprint - grand mocks, PYQ recalls, error book |
Create a subject-by-subject high-yield notes summary document
Create a subject-by-subject high-yield notes summary document
mkdir -p /home/daytona/workspace/neet-mds-notes && python3 -c "from reportlab.liβ¦