hi
which subject do i have to study in firsy year mbbs in india nad which books should i study
first year MBBS subjects books India NMC curriculum 2024
| Subject | Teaching Hours |
|---|---|
| Anatomy | ~620 hrs |
| Physiology | ~445 hrs |
| Biochemistry | ~232 hrs |
| Community Medicine (intro) | ~40 hrs |
| AETCOM (Ethics & Communication) | Longitudinal |
| Early Clinical Exposure (ECE) | Included |
| Foundation Course (2 weeks) | ~80 hrs |
| Book | Author | Notes |
|---|---|---|
| Gray's Anatomy for Students | Drake, Vogl, Mitchell | International standard |
| BD Chaurasia's Human Anatomy (3 volumes) | B.D. Chaurasia | Most popular in India, exam-focused |
| Inderbir Singh's Textbook of Human Anatomy | Inderbir Singh | Great for Indian exams |
| Snell's Clinical Anatomy | Richard Snell | Good for clinical correlation |
| Vishram Singh Anatomy | Vishram Singh | Very concise, popular for exams |
| Book | Author | Notes |
|---|---|---|
| Guyton & Hall Textbook of Medical Physiology | Guyton & Hall | Gold standard, NMC recommended |
| AK Jain's Textbook of Physiology | AK Jain | Most popular in India |
| Ganong's Review of Medical Physiology | Barrett et al. | Excellent for concepts |
| Sembulingam Physiology | K. Sembulingam | Simple language, good for beginners |
| Book | Author | Notes |
|---|---|---|
| Harper's Illustrated Biochemistry | Murray et al. | International standard |
| Lippincott's Illustrated Reviews: Biochemistry | Lieberman & Marks | Very visual, concept-based |
| DM Vasudevan's Textbook of Biochemistry | DM Vasudevan | Most popular in India |
| U Satyanarayan's Biochemistry | U Satyanarayana | Simple, widely used in India |
Create a study schedule guide for first year MBBS
mkdir -p /home/daytona/workspace/mbbs-schedule && ls /home/daytona/workspace/
~/mbbs-schedule/generate_schedule.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
OUTPUT = "/home/daytona/workspace/mbbs-schedule/First_Year_MBBS_Study_Schedule.pdf"
# ββ Color palette ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DARK_BLUE = colors.HexColor("#1A3C5E")
MED_BLUE = colors.HexColor("#2E6DA4")
LIGHT_BLUE = colors.HexColor("#D6E8FA")
ACCENT_RED = colors.HexColor("#C0392B")
ACCENT_GREEN= colors.HexColor("#1E8449")
GOLD = colors.HexColor("#D4AC0D")
LIGHT_GRAY = colors.HexColor("#F4F6F7")
MID_GRAY = colors.HexColor("#BDC3C7")
WHITE = colors.white
ORANGE = colors.HexColor("#E67E22")
PURPLE = colors.HexColor("#6C3483")
# ββ Styles βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
styles = getSampleStyleSheet()
def S(name, **kwargs):
return ParagraphStyle(name, **kwargs)
title_style = S("Title2",
fontSize=28, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", spaceAfter=4, leading=34)
subtitle_style = S("Sub",
fontSize=13, textColor=LIGHT_BLUE, alignment=TA_CENTER,
fontName="Helvetica", spaceAfter=2)
h1 = S("H1",
fontSize=16, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, spaceAfter=4, leading=20)
h2 = S("H2",
fontSize=13, textColor=DARK_BLUE, fontName="Helvetica-Bold",
spaceBefore=8, spaceAfter=4, leading=16)
h3 = S("H3",
fontSize=11, textColor=MED_BLUE, fontName="Helvetica-Bold",
spaceBefore=4, spaceAfter=2, leading=14)
body = S("Body2",
fontSize=9.5, textColor=colors.HexColor("#2C3E50"),
fontName="Helvetica", spaceAfter=3, leading=13)
body_bold = S("BodyBold",
fontSize=9.5, textColor=colors.HexColor("#2C3E50"),
fontName="Helvetica-Bold", spaceAfter=3, leading=13)
bullet_style = S("Bullet",
fontSize=9.5, textColor=colors.HexColor("#2C3E50"),
fontName="Helvetica", leftIndent=12, spaceAfter=2,
leading=13, bulletIndent=4)
small_center = S("SmallC",
fontSize=8, textColor=colors.HexColor("#7F8C8D"),
alignment=TA_CENTER, fontName="Helvetica", leading=10)
tip_style = S("Tip",
fontSize=9, textColor=colors.HexColor("#1A5276"),
fontName="Helvetica-Oblique", leftIndent=8, spaceAfter=2, leading=12)
# ββ Helper: colored section header βββββββββββββββββββββββββββββββββββββββββ
def section_header(text, bg=DARK_BLUE, style=h1):
data = [[Paragraph(text, style)]]
t = Table(data, colWidths=[17*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("ROUNDEDCORNERS", [6,6,6,6]),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
return t
# ββ Helper: info box ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def info_box(text, bg=LIGHT_BLUE, text_color=DARK_BLUE):
st = S("IB", fontSize=9.5, textColor=text_color,
fontName="Helvetica", leading=13, alignment=TA_LEFT)
data = [[Paragraph(text, st)]]
t = Table(data, colWidths=[17*cm])
t.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),
("BOX", (0,0), (-1,-1), 1, MED_BLUE),
]))
return t
# ββ Document ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=1.5*cm, bottomMargin=2*cm,
title="First Year MBBS Study Schedule Guide",
author="Orris AI"
)
story = []
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PAGE 1 β COVER
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
cover_data = [[Paragraph("π©Ί FIRST YEAR MBBS", title_style)],
[Paragraph("Complete Study Schedule Guide", subtitle_style)],
[Paragraph("India | NMC CBME 2024 Curriculum", subtitle_style)]]
cover = Table(cover_data, colWidths=[17*cm])
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), 16),
("RIGHTPADDING", (0,0), (-1,-1), 16),
]))
story.append(cover)
story.append(Spacer(1, 0.4*cm))
# Quick overview boxes
overview = [
["π Subjects", "Anatomy Β· Physiology Β· Biochemistry"],
["β± Duration", "12 Months (Phase I)"],
["π― Exam", "University Theory + Practical | NExT"],
["π
Schedule", "Daily Hour-by-Hour Timetable Included"],
]
ov_table = Table(overview, colWidths=[5*cm, 12*cm])
ov_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), MED_BLUE),
("BACKGROUND", (1,0), (1,-1), LIGHT_BLUE),
("TEXTCOLOR", (0,0), (0,-1), WHITE),
("TEXTCOLOR", (1,0), (1,-1), DARK_BLUE),
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("FONTNAME", (1,0), (1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 10),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
]))
story.append(ov_table)
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Generated by Orris AI β’ Based on NMC CBME 2024 Guidelines", small_center))
story.append(PageBreak())
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PAGE 2 β SUBJECT OVERVIEW & WEIGHTAGE
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("π SUBJECT OVERVIEW & EXAM PATTERN"))
story.append(Spacer(1, 0.3*cm))
subj_data = [
["Subject", "Theory\nHours", "Practical\nHours", "Theory\nMarks", "Practical\nMarks", "Pass\nMarks"],
["Anatomy", "210", "400", "200", "100", "50% each"],
["Physiology", "130", "305", "200", "100", "50% each"],
["Biochemistry", " 78", "144", "200", "100", "50% each"],
["Comm. Medicine"," 20", " 20", " 50", "β", "50%"],
]
subj_hdr = S("SH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=11)
subj_cell = S("SC", fontSize=9, textColor=DARK_BLUE, fontName="Helvetica",
alignment=TA_CENTER, leading=11)
subj_table = Table(
[[Paragraph(c, subj_hdr) if r==0 else Paragraph(c, subj_cell) for c in row]
for r, row in enumerate(subj_data)],
colWidths=[4.5*cm, 2.2*cm, 2.5*cm, 2.2*cm, 2.5*cm, 2.6*cm]
)
subj_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("BACKGROUND", (0,1), (-1,1), LIGHT_GRAY),
("BACKGROUND", (0,2), (-1,2), WHITE),
("BACKGROUND", (0,3), (-1,3), LIGHT_GRAY),
("BACKGROUND", (0,4), (-1,4), WHITE),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(subj_table)
story.append(Spacer(1, 0.4*cm))
story.append(Paragraph("Additional Compulsory Modules:", h2))
mods = [
("π§ AETCOM", "Attitude, Ethics & Communication β runs as a longitudinal module throughout the year"),
("π₯ ECE", "Early Clinical Exposure β hospital visits integrated into all 3 subjects"),
("πΏ FAP", "Family Adoption Programme β village outreach & community health"),
("π Foundation", "2-week orientation course at the very start of the year"),
]
for icon_name, desc in mods:
row_data = [[Paragraph(f"<b>{icon_name}</b>", body_bold), Paragraph(desc, body)]]
t = Table(row_data, colWidths=[3.5*cm, 13.5*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), LIGHT_BLUE),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("BOX", (0,0), (-1,-1), 0.5, MID_GRAY),
]))
story.append(t)
story.append(Spacer(1, 0.15*cm))
story.append(PageBreak())
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PAGE 3 β DAILY HOUR-BY-HOUR TIMETABLE (WEEKDAY)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("β° DAILY HOUR-BY-HOUR TIMETABLE (Monday β Friday)", bg=MED_BLUE))
story.append(Spacer(1, 0.3*cm))
story.append(info_box(
"β‘ This timetable covers both college hours and self-study. Adapt the self-study blocks "
"to your personal speed. College timetable may vary by institution β adjust accordingly."
))
story.append(Spacer(1, 0.3*cm))
time_hdr = S("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12)
time_cell_time = S("TT", fontSize=9, textColor=DARK_BLUE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12)
time_cell_act = S("TA", fontSize=9, textColor=colors.HexColor("#2C3E50"),
fontName="Helvetica", leading=12)
time_cell_note = S("TN", fontSize=8.5, textColor=colors.HexColor("#7F8C8D"),
fontName="Helvetica-Oblique", leading=11)
def time_row(t, activity, note="", bg=WHITE):
return [Paragraph(t, time_cell_time), Paragraph(activity, time_cell_act),
Paragraph(note, time_cell_note), bg]
weekday_rows = [
# time, activity, note, row_bg
("5:00 β 5:30 AM", "Wake up, freshen up, light exercise/yoga",
"Keeps mind alert; skip if you sleep late", LIGHT_GRAY),
("5:30 β 7:00 AM", "π Self-Study Block 1 β Anatomy",
"Read BD Chaurasia / Gray's; draw diagrams", WHITE),
("7:00 β 7:30 AM", "Breakfast + travel to college",
"Avoid skipping breakfast", LIGHT_GRAY),
("8:00 β 9:00 AM", "π« College: Anatomy Lecture",
"Annotate notes during class", WHITE),
("9:00 β 10:00 AM", "π« College: Physiology Lecture",
"Key concepts + diagrams", LIGHT_GRAY),
("10:00 β 11:00 AM","π« College: Biochemistry Lecture",
"Pathways, enzymes, clinical correlations", WHITE),
("11:00 β 11:15 AM","β Short break",
"Hydrate, snack", LIGHT_GRAY),
("11:15 AM β 1:15 PM","π¬ Practical / Dissection Hall",
"Anatomy dissection or Physio/Biochem practical", WHITE),
("1:15 β 2:00 PM", "π½ Lunch + Rest",
"20-min power nap if possible", LIGHT_GRAY),
("2:00 β 3:00 PM", "π« Tutorial / SGL (Small Group Learning)",
"ECE / AETCOM sessions on some days", WHITE),
("3:00 β 3:30 PM", "Travel home + freshen up",
"", LIGHT_GRAY),
("3:30 β 5:30 PM", "π Self-Study Block 2 β Physiology",
"AK Jain / Guyton; solve MCQs from Across", WHITE),
("5:30 β 6:00 PM", "π Physical activity / break",
"Sports, walk, or hobby", LIGHT_GRAY),
("6:00 β 7:00 PM", "π Self-Study Block 3 β Biochemistry",
"Vasudevan / Harper's; flowcharts of pathways", WHITE),
("7:00 β 7:30 PM", "π½ Dinner",
"", LIGHT_GRAY),
("7:30 β 9:00 PM", "π Revision + Note-Making",
"Revise today's lectures; write short notes", WHITE),
("9:00 β 9:30 PM", "π Quick MCQ Practice",
"10β15 MCQs per subject (Across/Sparsh app)", LIGHT_GRAY),
("9:30 β 10:00 PM", "π
Plan tomorrow + wind down",
"Review next day's topics; no screens after 10", WHITE),
("10:00 PM", "π΄ Sleep",
"7β8 hrs essential for memory consolidation", LIGHT_GRAY),
]
header_row = [
Paragraph("TIME", time_hdr),
Paragraph("ACTIVITY", time_hdr),
Paragraph("NOTES", time_hdr),
]
table_data = [header_row]
row_bgs = [DARK_BLUE]
for ttime, act, note, bg in weekday_rows:
table_data.append([
Paragraph(ttime, time_cell_time),
Paragraph(act, time_cell_act),
Paragraph(note, time_cell_note),
])
row_bgs.append(bg)
col_w = [3.8*cm, 7.2*cm, 6.0*cm]
tt = Table(table_data, colWidths=col_w)
ts_cmds = [
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("GRID", (0,0), (-1,-1), 0.4, MID_GRAY),
("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"),
]
for i, bg in enumerate(row_bgs[1:], start=1):
ts_cmds.append(("BACKGROUND", (0,i), (-1,i), bg))
tt.setStyle(TableStyle(ts_cmds))
story.append(tt)
story.append(PageBreak())
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PAGE 4 β SATURDAY & SUNDAY SCHEDULE
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("π
SATURDAY & SUNDAY SCHEDULE", bg=PURPLE))
story.append(Spacer(1, 0.3*cm))
# Saturday
story.append(Paragraph("SATURDAY β Half-Day College + Extended Self Study", h2))
sat_rows = [
("5:30 β 7:00 AM", "π Anatomy / Physiology deep reading", "Cover 1 full chapter"),
("7:00 β 7:30 AM", "Breakfast + travel", ""),
("8:00 β 12:00 PM", "π« College (Lectures / Practicals)", "Most colleges have Saturday morning classes"),
("12:00 β 1:00 PM", "π½ Lunch + rest", ""),
("1:00 β 3:00 PM", "π Weekly revision β Anatomy", "Re-read all week's notes; draw labeled diagrams"),
("3:00 β 5:00 PM", "π Weekly revision β Physiology", "Flashcards, flowcharts, previous year questions"),
("5:00 β 5:30 PM", "β Break", ""),
("5:30 β 7:00 PM", "π Weekly revision β Biochemistry", "Metabolic pathways in color diagrams"),
("7:00 β 8:00 PM", "π½ Dinner + leisure", ""),
("8:00 β 9:30 PM", "π Extra reading / Doubt clearing", "Netter's atlas, clinical cases, YouTube lectures"),
("10:00 PM", "π΄ Sleep", ""),
]
# Sunday
sun_rows = [
("6:00 β 7:00 AM", "Wake, exercise, light yoga / walk", "Recharge for the week"),
("7:00 β 7:30 AM", "Breakfast", ""),
("7:30 β 9:30 AM", "π Self Study β Topic of Choice / Weak Area", "Focus on toughest topic this week"),
("9:30 β 11:00 AM", "π Previous Year Question (PYQ) Practice", "1 hr per subject rotating weekly"),
("11:00 AM β 12:00 PM","β Break / leisure", ""),
("12:00 β 1:30 PM", "π Biochemistry: pathway diagrams & mnemonics", ""),
("1:30 β 2:30 PM", "π½ Lunch + nap", ""),
("2:30 β 4:00 PM", "π Mock test / MCQ block (all 3 subjects)", "Time yourself; 50 MCQs in 50 min"),
("4:00 β 5:30 PM", "π Analyze mistakes from mock test", "Most important step β understand why you erred"),
("5:30 β 6:00 PM", "π Outdoor activity / walk", ""),
("6:00 β 7:30 PM", "π
Plan next week's topics", "Set daily targets for MonβFri"),
("7:30 β 8:30 PM", "π½ Dinner + family / leisure time", ""),
("8:30 β 9:30 PM", "π Light reading β anatomy atlas / physio", "No heavy study on Sunday evening"),
("10:00 PM", "π΄ Sleep", ""),
]
def make_day_table(rows, hdr_text, hdr_color):
hdr = [Paragraph("TIME", time_hdr), Paragraph("ACTIVITY", time_hdr), Paragraph("NOTES", time_hdr)]
data = [hdr]
bgs = [hdr_color]
for i, (tt2, act, note) in enumerate(rows):
data.append([Paragraph(tt2, time_cell_time), Paragraph(act, time_cell_act),
Paragraph(note, time_cell_note)])
bgs.append(LIGHT_GRAY if i % 2 == 0 else WHITE)
t = Table(data, colWidths=[3.8*cm, 7.2*cm, 6.0*cm])
cmds = [
("BACKGROUND", (0,0), (-1,0), hdr_color),
("GRID", (0,0), (-1,-1), 0.4, MID_GRAY),
("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"),
]
for i, bg in enumerate(bgs[1:], 1):
cmds.append(("BACKGROUND", (0,i), (-1,i), bg))
t.setStyle(TableStyle(cmds))
return t
story.append(make_day_table(sat_rows, "SATURDAY", PURPLE))
story.append(Spacer(1, 0.5*cm))
story.append(Paragraph("SUNDAY β Rest + Deep Study + Planning", h2))
story.append(make_day_table(sun_rows, "SUNDAY", ACCENT_GREEN))
story.append(PageBreak())
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PAGE 5 β WEEKLY & MONTHLY PLAN
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("π WEEKLY SUBJECT ROTATION PLAN", bg=ACCENT_GREEN))
story.append(Spacer(1, 0.3*cm))
story.append(info_box(
"Rotate the evening self-study focus each day so all 3 subjects get equal attention. "
"Anatomy needs the most time β give it priority on 2β3 days per week."
))
story.append(Spacer(1, 0.3*cm))
week_data = [
["DAY", "Morning Self-Study\n(5:30β7 AM)", "Evening Block 2\n(3:30β5:30 PM)",
"Evening Block 3\n(6β7 PM)", "Night Revision\n(7:30β9 PM)"],
["Monday", "Anatomy β Gross", "Physiology", "Biochemistry", "Today's lectures"],
["Tuesday", "Anatomy β Histo", "Anatomy", "Physiology", "Today's lectures"],
["Wednesday", "Physiology", "Biochemistry", "Anatomy", "Today's lectures"],
["Thursday", "Biochemistry", "Physiology", "Anatomy", "Today's lectures"],
["Friday", "Anatomy β Neuro", "Anatomy", "Biochemistry", "Week mini-test (MCQs)"],
["Saturday", "Anatomy / Physio", "Full revision", "Full revision", "Doubt clearing"],
["Sunday", "Weak area", "PYQ practice", "Mock test", "Next week plan"],
]
wh = S("WH", fontSize=8.5, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=11)
wc = S("WC", fontSize=8.5, textColor=DARK_BLUE, fontName="Helvetica",
alignment=TA_CENTER, leading=11)
wd = S("WD", fontSize=8.5, textColor=DARK_BLUE, fontName="Helvetica-Bold",
alignment=TA_LEFT, leading=11)
week_table_data = []
for r, row in enumerate(week_data):
if r == 0:
week_table_data.append([Paragraph(c, wh) for c in row])
else:
week_table_data.append(
[Paragraph(row[0], wd)] + [Paragraph(c, wc) for c in row[1:]]
)
wt = Table(week_table_data, colWidths=[2.5*cm, 3.5*cm, 3.5*cm, 3.5*cm, 4.0*cm])
wt_cmds = [
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("BACKGROUND", (0,6), (-1,6), colors.HexColor("#E8F8F5")), # Saturday
("BACKGROUND", (0,7), (-1,7), colors.HexColor("#FEF9E7")), # Sunday
("GRID", (0,0), (-1,-1), 0.4, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING",(0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]
for i in [1, 3, 5]:
wt_cmds.append(("BACKGROUND", (0,i), (-1,i), LIGHT_GRAY))
wt.setStyle(TableStyle(wt_cmds))
story.append(wt)
story.append(Spacer(1, 0.5*cm))
story.append(section_header("π
MONTHLY MILESTONE PLAN (12 Months)", bg=ORANGE))
story.append(Spacer(1, 0.3*cm))
monthly = [
("Months 1β2", "Foundation + Orientation",
"Complete Foundation Course. Start Anatomy (Upper Limb + Lower Limb). "
"Begin Physiology Unit 1 (Cell physiology, Blood). Biochemistry: Carbohydrate metabolism."),
("Months 3β4", "Core Building",
"Anatomy: Thorax + Abdomen + Pelvis. Physiology: CVS + Respiratory. "
"Biochemistry: Lipid metabolism, Proteins. First internal assessment."),
("Months 5β6", "Deep Study",
"Anatomy: Head & Neck + Neuroanatomy. Physiology: Nervous system + Endocrine. "
"Biochemistry: Nucleic acids, enzymes, vitamins. Mid-term revision."),
("Month 7", "First Internal Exam Prep",
"Comprehensive revision of all topics covered. PYQ practice. Full-length mock tests."),
("Months 8β9", "Advanced Topics",
"Anatomy: Embryology + Histology in detail. Physiology: Renal + GIT + Reproduction. "
"Biochemistry: Clinical biochemistry, nutrition."),
("Months 10β11","Second Internal + Revision",
"Second internal exam. Topic-wise revision. Focus on weak areas. High-yield MCQ banks."),
("Month 12", "Final Exam Preparation",
"Full syllabus revision. Daily mock tests. Practical viva preparation. "
"Anatomy spotters, Physio experiments, Biochem practicals."),
]
mh = S("MH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12)
mm_s = S("MM", fontSize=9, textColor=ORANGE, fontName="Helvetica-Bold",
alignment=TA_LEFT, leading=12)
md = S("MD", fontSize=9, textColor=DARK_BLUE, fontName="Helvetica",
alignment=TA_LEFT, leading=12, wordWrap='LTR')
month_hdr_row = [Paragraph("PERIOD", mh), Paragraph("FOCUS", mh), Paragraph("TOPICS & TARGETS", mh)]
month_data = [month_hdr_row]
for i, (period, focus, detail) in enumerate(monthly):
month_data.append([
Paragraph(period, mm_s),
Paragraph(f"<b>{focus}</b>", S("MF", fontSize=9, textColor=ACCENT_GREEN,
fontName="Helvetica-Bold", leading=12)),
Paragraph(detail, md)
])
mt = Table(month_data, colWidths=[2.8*cm, 3.8*cm, 10.4*cm])
mt_cmds = [
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("GRID", (0,0), (-1,-1), 0.4, MID_GRAY),
("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), "TOP"),
]
for i in range(1, len(monthly)+1):
if i % 2 == 0:
mt_cmds.append(("BACKGROUND", (0,i), (-1,i), LIGHT_GRAY))
mt.setStyle(TableStyle(mt_cmds))
story.append(mt)
story.append(PageBreak())
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PAGE 6 β STUDY TIPS, RESOURCES & EXAM STRATEGY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("π‘ STUDY TIPS, RESOURCES & EXAM STRATEGY", bg=ACCENT_RED))
story.append(Spacer(1, 0.3*cm))
# Subject-wise tips
tips = [
(DARK_BLUE, "𦴠ANATOMY",
[("Books", "BD Chaurasia (main) + Netter's Atlas (visual) + Snell's (clinical)"),
("Practicals", "Attend every dissection β you remember what you see and touch"),
("Diagrams", "Draw labeled diagrams daily β most exam marks come from diagrams"),
("Neuroanatomy", "Use 3D brain apps (e.g. Brain Atlas) β it's the toughest part"),
("Histology", "Use color-coded flash cards for tissue identification"),
("Radioanatomy", "Practice identifying structures on X-rays from day 1"),
]),
(ACCENT_GREEN, "π« PHYSIOLOGY",
[("Books", "AK Jain for Indian exams; Guyton for deep concepts; Ganong for MCQs"),
("Graphs", "Practice drawing graphs (ECG, spirometry, renal clearance) perfectly"),
("Mnemonics", "Create your own β they stick better than memorizing borrowed ones"),
("Practicals", "Understand the principle behind each experiment β viva questions focus here"),
("MCQs", "Solve Across and Sparsh MCQ banks chapter by chapter"),
]),
(PURPLE, "π§ͺ BIOCHEMISTRY",
[("Books", "U Satyanarayana (main) + Lippincott's (visual) + Harper's (reference)"),
("Pathways", "Draw ALL metabolic pathways as flow diagrams on A3 paper β revise weekly"),
("Enzymes", "Learn enzymes with their co-factors and clinical deficiency diseases together"),
("Clinical", "Always link a pathway to a disease β makes it memorable and exam-relevant"),
("Practicals", "Understand the chemistry behind each lab test"),
]),
]
for color, title, tip_list in tips:
story.append(Paragraph(title, S("TipH", fontSize=12, textColor=WHITE,
fontName="Helvetica-Bold", spaceAfter=0,
leading=14)))
tip_hdr_data = [[Paragraph(title, S("TH2", fontSize=11, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_LEFT,
leading=14))]]
tip_hdr_t = Table(tip_hdr_data, colWidths=[17*cm])
tip_hdr_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING",(0,0), (-1,-1), 10),
]))
story.append(tip_hdr_t)
for key, val in tip_list:
row = [[Paragraph(f"<b>{key}</b>",
S("K", fontSize=9, textColor=color, fontName="Helvetica-Bold",
leading=12, alignment=TA_CENTER)),
Paragraph(val, body)]]
rt = Table(row, colWidths=[3*cm, 14*cm])
rt.setStyle(TableStyle([
("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING",(0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8),
("GRID", (0,0), (-1,-1), 0.3, MID_GRAY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(rt)
story.append(Spacer(1, 0.3*cm))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("π± Recommended Apps & Resources", h2))
apps_data = [
["App / Resource", "Use For"],
["Across MCQ Bank", "Best MCQ app for Phase I subjects"],
["Sparsh", "Anatomy, Physiology, Biochemistry MCQs"],
["Netter's Anatomy Flash Cards","Anatomy visual learning"],
["Anki (Flashcard app)", "Spaced repetition for biochemistry pathways & anatomy"],
["YouTube β Armando Hasudungan","Beautiful hand-drawn physiology & biochemistry videos"],
["YouTube β Ninja Nerd Science","Excellent in-depth physiology lectures"],
["YouTube β Zero To Finals", "Quick medical concept overviews"],
["USMLE First Aid (reference)", "High-yield tables for integrated learning"],
]
ah = S("AH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_LEFT, leading=12)
ac = S("AC", fontSize=9, textColor=DARK_BLUE, fontName="Helvetica",
alignment=TA_LEFT, leading=12)
app_tbl = Table(
[[Paragraph(r[0], ah if i==0 else ac), Paragraph(r[1], ah if i==0 else ac)]
for i, r in enumerate(apps_data)],
colWidths=[6*cm, 11*cm]
)
app_cmds = [
("BACKGROUND", (0,0), (-1,0), MED_BLUE),
("GRID", (0,0), (-1,-1), 0.4, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING",(0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8),
]
for i in range(1, len(apps_data)):
if i % 2 == 0:
app_cmds.append(("BACKGROUND", (0,i), (-1,i), LIGHT_GRAY))
app_tbl.setStyle(TableStyle(app_cmds))
story.append(app_tbl)
story.append(PageBreak())
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PAGE 7 β EXAM STRATEGY + FINAL REMINDERS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("π― EXAM STRATEGY & FINAL REMINDERS", bg=GOLD))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Theory Exam Strategy", h2))
theory_tips = [
"Answer anatomy questions with LABELED DIAGRAMS β they fetch the most marks.",
"For physiology, always explain in physiological order: stimulus β response β mechanism.",
"Biochemistry essays: Start with the pathway diagram, then explain step by step.",
"Write neatly β examiners reward clarity. Use headings and subheadings.",
"Attempt ALL questions β partial marks can be the difference between pass and fail.",
"Practice writing answers in timed conditions from month 4 onwards.",
]
for tip in theory_tips:
story.append(Paragraph(f"β {tip}", bullet_style))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Practical / Viva Strategy", h2))
viva_tips = [
"Anatomy viva: Know origins, insertions, nerve supply and blood supply for every muscle.",
"Anatomy spotters: Practice identifying bones, histology slides, radiology images.",
"Physiology practicals: Know the PRINCIPLE of each experiment β examiners always ask.",
"Biochemistry practicals: Know normal reference values for all tests.",
"Speak confidently in viva β say 'I'm not sure but...' rather than guessing wildly.",
"Attend all practicals β practical attendance is compulsory for exam eligibility.",
]
for tip in viva_tips:
story.append(Paragraph(f"β {tip}", bullet_style))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Mental Health & Self Care", h2))
story.append(info_box(
"β οΈ MBBS is a marathon, not a sprint. Burnout in first year is common. "
"Protect your sleep (minimum 7 hrs), eat properly, exercise, and maintain social connections. "
"Your academic performance is better when you are mentally healthy. "
"Seek help from seniors, counselors, or faculty when struggling β it's a sign of strength, not weakness.",
bg=colors.HexColor("#FEF9E7"), text_color=DARK_BLUE
))
story.append(Spacer(1, 0.4*cm))
# Final motivational box
final_data = [[Paragraph(
"\"The practice of medicine is an art, not a trade; a calling, not a business; "
"a calling in which your heart will be exercised equally with your head.\"\nβ Sir William Osler",
S("Quote", fontSize=10, textColor=WHITE, fontName="Helvetica-Oblique",
alignment=TA_CENTER, leading=14)
)]]
ft = Table(final_data, colWidths=[17*cm])
ft.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 14), ("BOTTOMPADDING", (0,0), (-1,-1), 14),
("LEFTPADDING",(0,0), (-1,-1), 16), ("RIGHTPADDING", (0,0), (-1,-1), 16),
]))
story.append(ft)
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Good Luck with Your MBBS Journey! π©Ί", h2))
story.append(Paragraph("Generated by Orris AI β’ Based on NMC CBME 2024 Curriculum β’ July 2026", small_center))
# ββ Build ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/mbbs-schedule && python generate_schedule.py
ls -lh /home/daytona/workspace/mbbs-schedule/First_Year_MBBS_Study_Schedule.pdf
First Year MBBS Study Schedule
PDF Document Β· PDF
| Page | Content |
|---|---|
| 1 | Cover page with subject overview |
| 2 | Subject weightage, exam pattern & compulsory modules |
| 3 | Full weekday (Mon-Fri) hour-by-hour timetable |
| 4 | Saturday & Sunday detailed schedules |
| 5 | Weekly subject rotation plan + 12-month milestone plan |
| 6 | Subject-wise study tips + recommended apps & YouTube channels |
| 7 | Exam strategy (theory + viva) + mental health reminders |