hi can you guide me to prepare for fmge exam January 7 th
What is your current preparation status? ยท Which subjects do you find most challenging? (select all that apply) ยท How many hours per day can you dedicate to studying?
FMGE January 2027 exam syllabus pattern subject wise weightage
| Subject | Questions |
|---|---|
| Medicine | 33 |
| General Surgery | 32 |
| OBG | 30 |
| PSM / Community Medicine | 30 |
| Anatomy | 17 |
| Physiology | 17 |
| Biochemistry | 17 |
| Pediatrics | 15 |
| Ophthalmology | 15 |
| ENT | 15 |
| Pathology | 13 |
| Microbiology | 13 |
| Pharmacology | 13 |
| Forensic Medicine | 10 |
| Dermatology | 5 |
| Psychiatry | 5 |
| Anesthesia | 5 |
| Orthopedics | 5 |
| Radiodiagnosis | 5 |
| Radiotherapy | 5 |
| Subject | Recommended Book/Source |
|---|---|
| Anatomy | BD Chaurasia (key chapters) + Across |
| Physiology | Ganong / AK Jain Rapid Review |
| Biochemistry | Vasudevan + PrepLadder notes |
| Pathology | Harsh Mohan or Robins Review |
| Pharmacology | KD Tripathi key drug tables |
| Microbiology | Ananthnarayan or Rachna Chaurasia |
| Medicine | Harrison's Review MCQ / API Medicine |
| Surgery | Bailey & Love MCQ / SRB Surgery |
| OBG | Dutta Obstetrics + Shaw's Gynecology |
| PSM | Park's Textbook of PSM (essential) |
| Pediatrics | OP Ghai / Meharban Singh |
| FMT | Reddy's FMT |
| Week | Target |
|---|---|
| Each week in Phase 1 & 2 | Complete 1 subject theory + 300 MCQs solved |
| Each week in Phase 3 | 700+ MCQs solved, 2 subjects fully revised |
| Each week in Phase 4 | 2 full mock tests, analyze 100% of mistakes |
iam prepping from august and doin cerebellum
e
i meant cerebellum app iam using to study and prepping from august
| Week | Subject | Cerebellum Focus |
|---|---|---|
| Week 1 | Anatomy | Neuroanatomy, Upper & Lower Limb, Embryology |
| Week 2 | Physiology | CVS, Respiratory, Renal, Neuro |
| Week 3 | Biochemistry | Metabolism, Enzymes, Vitamins, Mol. Bio |
| Week 4 | Pharmacology | General pharmacology + high-yield drug classes |
| Week | Subject |
|---|---|
| Week 1 | Pathology (General + Systemic) |
| Week 2 | Microbiology (Bacteriology, Virology, Parasitology) |
| Week 3 | Forensic Medicine + Dermatology + Psychiatry |
| Week 4 | Ophthalmology (15 Qs in exam - don't underestimate) |
| Week | Subject | Key Areas |
|---|---|---|
| Week 1 | Medicine (33 Qs) | CVS, Respiratory, Nephrology, Neurology, Endocrine |
| Week 2 | Surgery (32 Qs) | GI, Thyroid, Breast, Trauma, Urology |
| Week 3 | OBG (30 Qs) | Normal/Abnormal Obstetrics, Gynecology, Contraception |
| Week 4 | PSM (30 Qs) | Epidemiology, Biostatistics, National Programs, Vaccines |
| Week | Task |
|---|---|
| Week 1 | ENT (15 Qs) + Pediatrics (15 Qs) + Ortho/Anaes/Radio (20 Qs) |
| Week 2-4 | First full revision of ALL subjects on Cerebellum |
| Week | Task |
|---|---|
| Week 1-2 (Dec 1-14) | Full-length 300-question mock tests daily or every other day |
| Week 3 (Dec 15-21) | Analyze mistakes, revise weak subjects |
| Week 4 (Dec 22-31) | Short notes revision only, light Qs |
| Jan 1-6 | Very light revision, sleep well, no new topics |
| Priority | Subjects | Qs in Exam |
|---|---|---|
| ๐ด Must ace | Medicine, Surgery, OBG, PSM | 125 |
| ๐ High yield | Anatomy, Physiology, Biochem, ENT, Ophtho, Peds | 96 |
| ๐ก Don't skip | Patho, Micro, Pharma, FMT | 49 |
| ๐ข Bonus | Derma, Psych, Ortho, Anaes, Radio, RT | 30 |
Generate a daily study schedule template for August-September
ls /home/daytona/workspace/ 2>/dev/null && echo "EXISTS" || mkdir -p /home/daytona/workspace/fmge-schedule && echo "CREATED"
~/fmge-schedule/create_schedule.js
const {
Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
AlignmentType, HeadingLevel, BorderStyle, WidthType, ShadingType,
VerticalAlign, PageNumber, Header, Footer, PageBreak
} = require('docx');
const fs = require('fs');
// Color palette
const COLOR_DARK_BLUE = "1A3A5C";
const COLOR_MED_BLUE = "2E6DA4";
const COLOR_LIGHT_BLUE = "D6E8F7";
const COLOR_ORANGE = "E07B39";
const COLOR_LIGHT_ORANGE = "FDEBD0";
const COLOR_GREEN = "27AE60";
const COLOR_LIGHT_GREEN = "D5F5E3";
const COLOR_RED = "C0392B";
const COLOR_LIGHT_RED = "FADBD8";
const COLOR_YELLOW = "F0C050";
const COLOR_LIGHT_YELLOW = "FEF9E7";
const COLOR_GRAY = "5D6D7E";
const COLOR_LIGHT_GRAY = "EAF0F6";
const COLOR_WHITE = "FFFFFF";
const COLOR_PURPLE = "7D3C98";
const COLOR_LIGHT_PURPLE = "E8DAEF";
function heading1(text) {
return new Paragraph({
children: [new TextRun({ text, bold: true, size: 32, color: COLOR_WHITE, font: "Calibri" })],
heading: HeadingLevel.HEADING_1,
alignment: AlignmentType.CENTER,
shading: { type: ShadingType.SOLID, fill: COLOR_DARK_BLUE },
spacing: { before: 200, after: 200 },
});
}
function heading2(text, color = COLOR_MED_BLUE) {
return new Paragraph({
children: [new TextRun({ text, bold: true, size: 26, color: COLOR_WHITE, font: "Calibri" })],
heading: HeadingLevel.HEADING_2,
alignment: AlignmentType.LEFT,
shading: { type: ShadingType.SOLID, fill: color },
spacing: { before: 200, after: 100 },
indent: { left: 0 },
});
}
function subheading(text, color = COLOR_LIGHT_BLUE) {
return new Paragraph({
children: [new TextRun({ text, bold: true, size: 22, color: COLOR_DARK_BLUE, font: "Calibri" })],
alignment: AlignmentType.LEFT,
shading: { type: ShadingType.SOLID, fill: color },
spacing: { before: 120, after: 80 },
});
}
function bodyPara(text, bold = false, color = "000000") {
return new Paragraph({
children: [new TextRun({ text, bold, size: 20, color, font: "Calibri" })],
spacing: { before: 60, after: 60 },
indent: { left: 200 },
});
}
function bullet(text, bold = false) {
return new Paragraph({
children: [new TextRun({ text: `โข ${text}`, bold, size: 20, font: "Calibri", color: "222222" })],
spacing: { before: 40, after: 40 },
indent: { left: 400 },
});
}
function spacer() {
return new Paragraph({ children: [new TextRun("")], spacing: { before: 80, after: 80 } });
}
function makeTableCell(text, { fill = COLOR_WHITE, bold = false, color = "000000", align = AlignmentType.LEFT, width = null } = {}) {
const cell = new TableCell({
children: [new Paragraph({
children: [new TextRun({ text, bold, size: 19, font: "Calibri", color })],
alignment: align,
spacing: { before: 60, after: 60 },
})],
shading: { type: ShadingType.SOLID, fill },
verticalAlign: VerticalAlign.CENTER,
margins: { top: 80, bottom: 80, left: 120, right: 120 },
...(width ? { width: { size: width, type: WidthType.DXA } } : {}),
});
return cell;
}
function scheduleTable(rows) {
const headerRow = new TableRow({
children: [
makeTableCell("TIME", { fill: COLOR_DARK_BLUE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 1500 }),
makeTableCell("ACTIVITY", { fill: COLOR_DARK_BLUE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 3500 }),
makeTableCell("DETAILS / CEREBELLUM TASK", { fill: COLOR_DARK_BLUE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 4000 }),
makeTableCell("DURATION", { fill: COLOR_DARK_BLUE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 1200 }),
],
tableHeader: true,
});
const dataRows = rows.map((r, i) => new TableRow({
children: [
makeTableCell(r[0], { fill: i % 2 === 0 ? COLOR_LIGHT_GRAY : COLOR_WHITE, align: AlignmentType.CENTER }),
makeTableCell(r[1], { fill: r[3] || (i % 2 === 0 ? COLOR_LIGHT_GRAY : COLOR_WHITE), bold: r[4] || false }),
makeTableCell(r[2], { fill: i % 2 === 0 ? COLOR_LIGHT_GRAY : COLOR_WHITE }),
makeTableCell(r[5] || "", { fill: i % 2 === 0 ? COLOR_LIGHT_GRAY : COLOR_WHITE, align: AlignmentType.CENTER }),
],
}));
return new Table({
rows: [headerRow, ...dataRows],
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.SINGLE, size: 4, color: COLOR_MED_BLUE },
bottom: { style: BorderStyle.SINGLE, size: 4, color: COLOR_MED_BLUE },
left: { style: BorderStyle.SINGLE, size: 4, color: COLOR_MED_BLUE },
right: { style: BorderStyle.SINGLE, size: 4, color: COLOR_MED_BLUE },
insideH:{ style: BorderStyle.SINGLE, size: 2, color: "AACCE0" },
insideV:{ style: BorderStyle.SINGLE, size: 2, color: "AACCE0" },
},
});
}
function weekTable(weeks) {
const headerRow = new TableRow({
children: [
makeTableCell("WEEK", { fill: COLOR_ORANGE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 1200 }),
makeTableCell("SUBJECT", { fill: COLOR_ORANGE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 2200 }),
makeTableCell("TOPICS TO COVER", { fill: COLOR_ORANGE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 4500 }),
makeTableCell("CEREBELLUM MCQs", { fill: COLOR_ORANGE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 2300 }),
],
tableHeader: true,
});
const dataRows = weeks.map((r, i) => new TableRow({
children: [
makeTableCell(r[0], { fill: COLOR_LIGHT_ORANGE, bold: true, align: AlignmentType.CENTER, color: COLOR_RED }),
makeTableCell(r[1], { fill: i % 2 === 0 ? COLOR_LIGHT_ORANGE : COLOR_WHITE, bold: true, color: COLOR_DARK_BLUE }),
makeTableCell(r[2], { fill: i % 2 === 0 ? COLOR_LIGHT_ORANGE : COLOR_WHITE }),
makeTableCell(r[3], { fill: i % 2 === 0 ? COLOR_LIGHT_ORANGE : COLOR_WHITE, align: AlignmentType.CENTER }),
],
}));
return new Table({
rows: [headerRow, ...dataRows],
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.SINGLE, size: 4, color: COLOR_ORANGE },
bottom: { style: BorderStyle.SINGLE, size: 4, color: COLOR_ORANGE },
left: { style: BorderStyle.SINGLE, size: 4, color: COLOR_ORANGE },
right: { style: BorderStyle.SINGLE, size: 4, color: COLOR_ORANGE },
insideH:{ style: BorderStyle.SINGLE, size: 2, color: "F5CBA7" },
insideV:{ style: BorderStyle.SINGLE, size: 2, color: "F5CBA7" },
},
});
}
function tipsTable(tips, fillColor = COLOR_LIGHT_GREEN) {
return new Table({
rows: tips.map((t, i) => new TableRow({
children: [
makeTableCell(`${i + 1}`, { fill: COLOR_GREEN, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 600 }),
makeTableCell(t, { fill: i % 2 === 0 ? fillColor : COLOR_WHITE }),
],
})),
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.SINGLE, size: 4, color: COLOR_GREEN },
bottom: { style: BorderStyle.SINGLE, size: 4, color: COLOR_GREEN },
left: { style: BorderStyle.SINGLE, size: 4, color: COLOR_GREEN },
right: { style: BorderStyle.SINGLE, size: 4, color: COLOR_GREEN },
insideH:{ style: BorderStyle.SINGLE, size: 2, color: "A9DFBF" },
insideV:{ style: BorderStyle.SINGLE, size: 2, color: "A9DFBF" },
},
});
}
// โโโ DAILY SCHEDULE ROWS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// [time, activity, details, fillColor, bold, duration]
const dailyRows = [
["5:00 โ 5:30 AM", "Wake Up & Morning Routine", "Freshen up, light stretching or walk, hydrate", COLOR_LIGHT_YELLOW, false, "30 min"],
["5:30 โ 6:00 AM", "Quick Revision (Flashcards)", "Review yesterday's Cerebellum incorrect Qs / key points", COLOR_LIGHT_YELLOW, false, "30 min"],
["6:00 โ 8:30 AM", "๐ง STUDY SESSION 1", "New topic theory โ video lecture or standard textbook", COLOR_LIGHT_BLUE, true, "2.5 hrs"],
["8:30 โ 9:00 AM", "Breakfast + Short Break", "Eat well, step outside briefly, rest eyes", COLOR_LIGHT_YELLOW, false, "30 min"],
["9:00 โ 11:30 AM", "๐ง STUDY SESSION 2", "Continue new topic OR start next sub-topic from same subject", COLOR_LIGHT_BLUE, true, "2.5 hrs"],
["11:30 AM โ 12:30 PM", "๐ MCQ Practice (Cerebellum)", "Topic-wise MCQs on Cerebellum โ aim 60โ80 Qs, timed mode", COLOR_LIGHT_PURPLE, true, "1 hr"],
["12:30 โ 1:30 PM", "Lunch + Rest", "Eat lunch, short 20โ30 min nap if needed", COLOR_LIGHT_YELLOW, false, "1 hr"],
["1:30 โ 4:00 PM", "๐ง STUDY SESSION 3", "New topic or revision of morning topic with notes", COLOR_LIGHT_BLUE, true, "2.5 hrs"],
["4:00 โ 4:30 PM", "Tea Break + Relaxation", "Walk, light snack, avoid screens for 30 min", COLOR_LIGHT_YELLOW, false, "30 min"],
["4:30 โ 6:30 PM", "๐ MCQ Practice (Cerebellum)", "Subject-wise random Qs โ aim 50โ60 Qs, read ALL explanations", COLOR_LIGHT_PURPLE, true, "2 hrs"],
["6:30 โ 7:00 PM", "Mistake Analysis", "Go through wrong answers, note key facts in personal notes", COLOR_LIGHT_RED, false, "30 min"],
["7:00 โ 8:00 PM", "Dinner + Free Time", "Relax, do not study during dinner", COLOR_LIGHT_YELLOW, false, "1 hr"],
["8:00 โ 9:30 PM", "๐ง STUDY SESSION 4 (Revision)", "Revise TODAY's topic โ read your notes, do rapid recall", COLOR_LIGHT_GREEN, true, "1.5 hrs"],
["9:30 โ 10:00 PM", "Daily Summary + Planning", "Write 5 key points learned today, plan tomorrow's topics", COLOR_LIGHT_YELLOW, false, "30 min"],
["10:00 โ 10:30 PM","Light Reading / Wind Down", "Optional: skim high-yield tables or mnemonics only", COLOR_LIGHT_GRAY, false, "30 min"],
["10:30 PM", "Sleep", "7 hours minimum โ memory consolidation happens during sleep", COLOR_LIGHT_YELLOW, false, "โ"],
];
// โโโ SUNDAY SCHEDULE ROWS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
const sundayRows = [
["7:00 โ 8:00 AM", "Wake Up + Light Morning", "Relax start, light breakfast, review weekly targets", COLOR_LIGHT_YELLOW, false, "1 hr"],
["8:00 โ 10:00 AM", "๐ Weekly Mock Test", "150-Q timed test on Cerebellum covering current week's subjects", COLOR_LIGHT_PURPLE, true, "2 hrs"],
["10:00 โ 11:00 AM","Mock Analysis", "Go through every wrong answer, note down patterns", COLOR_LIGHT_RED, false, "1 hr"],
["11:00 AM โ 1:00 PM","Weak Topic Revision", "Pick the 2 lowest-scoring topics from mock and revise them", COLOR_LIGHT_BLUE, true, "2 hrs"],
["1:00 โ 3:00 PM", "Lunch + Afternoon Rest", "Full break โ rest and recharge for the week", COLOR_LIGHT_YELLOW, false, "2 hrs"],
["3:00 โ 5:00 PM", "Previous Year Questions", "Solve PYQs from the week's subject on Cerebellum", COLOR_LIGHT_GREEN, true, "2 hrs"],
["5:00 โ 6:00 PM", "Notes Consolidation", "Update short notes with new points from the week", COLOR_LIGHT_GRAY, false, "1 hr"],
["6:00 PM onwards", "Family / Personal Time", "Fully switch off โ rest is essential for retention", COLOR_LIGHT_YELLOW, false, "โ"],
];
// โโโ AUGUST WEEK PLAN โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
const augustWeeks = [
["Week 1\n(Aug 1โ7)", "Anatomy", "Upper Limb (bones, muscles, nerves, vessels), Lower Limb basics, Surface Anatomy", "80โ100 Qs"],
["Week 2\n(Aug 8โ14)", "Anatomy", "Head & Neck, Neuroanatomy (cranial nerves, tracts), Embryology (high-yield: heart, gut, neural tube)", "80โ100 Qs"],
["Week 3\n(Aug 15โ21)", "Physiology", "CVS (cardiac cycle, BP regulation, ECG), Respiratory (mechanics, control of breathing, hypoxia)", "80โ100 Qs"],
["Week 4\n(Aug 22โ28)", "Physiology", "Renal (GFR, tubular functions, acid-base), Neurophysiology (synaptic transmission, reflexes, special senses)", "80โ100 Qs"],
["Week 5\n(Aug 29โ31)", "Biochemistry", "Enzymes, carbohydrate metabolism, TCA cycle (3 day jumpstart)", "50โ60 Qs"],
];
// โโโ SEPTEMBER WEEK PLAN โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
const septemberWeeks = [
["Week 1\n(Sep 1โ7)", "Biochemistry", "Lipid metabolism, protein metabolism, vitamins (fat & water soluble), minerals, clinical biochemistry", "80โ100 Qs"],
["Week 2\n(Sep 8โ14)", "Pharmacology", "General pharmacology, ANS drugs, CVS drugs (anti-hypertensives, anti-anginals, anti-arrhythmics)", "80โ100 Qs"],
["Week 3\n(Sep 15โ21)", "Pharmacology", "CNS drugs, antimicrobials, anti-cancer, autacoids, endocrine pharmacology", "80โ100 Qs"],
["Week 4\n(Sep 22โ28)", "Microbiology", "General bacteriology, Gram +ve/-ve bacteria (Staph, Strep, E.coli, Salmonella, Mycobacteria, Clostridia)", "80โ100 Qs"],
["Week 5\n(Sep 29โ30)", "Microbiology", "Virology (HIV, Herpes, Hepatitis, Influenza), Parasitology (Plasmodium, Entamoeba, Wuchereria)", "50โ60 Qs"],
];
// โโโ WEEKLY TARGETS TABLE โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
const weeklyTargets = [
["Mon โ Sat", "Theory + MCQs", "Complete 1 topic/day, 80โ100 Qs/day on Cerebellum", "480โ600 Qs/week"],
["Sunday", "Revision + Mock", "Full week revision + 150 Q mock test + PYQs", "150โ200 Qs"],
["Monthly", "Total MCQs", "All weeks combined", "~2500โ3200 Qs"],
["Monthly", "Subjects Done", "Aug: Anatomy + Physiology + Biochem start", "3 subjects"],
["Monthly", "Subjects Done", "Sep: Biochem complete + Pharmacology + Microbiology", "3 subjects"],
];
// โโโ CEREBELLUM TIPS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
const cerebellumTips = [
"Always use TOPIC-WISE mode first when learning a new subject โ don't jump to random mode until you've covered 70% of the subject.",
"After solving any MCQ, read the FULL explanation even if you got it right โ nuances in wrong options are examinable.",
"Use the INCORRECT QUESTIONS filter every Sunday โ this is your personal weak-topic detector.",
"Enable SPACED REPETITION reminders โ Cerebellum's algorithm shows cards just before you forget them. Never skip these.",
"Solve PYQ mode at least once per subject before moving on โ FMGE repeats questions across years.",
"Track your subject-wise ACCURACY % โ anything below 60% needs an immediate extra revision session.",
"Use TIMED MODE for MCQs at least 3 times per week โ FMGE allows 1 min/question, speed matters.",
"Do NOT solve MCQs passively (just clicking answers). After every 10 Qs, recall what concept was tested.",
];
// โโโ MNEMONIC / HIGH-YIELD NOTE โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
const highYield = [
["Anatomy", "Brachial plexus roots, carpal tunnel structures, cranial nerve nuclei, embryological derivatives"],
["Physiology", "Frank-Starling law, Henderson-Hasselbalch, GFR formula, lung volumes (values), JGA"],
["Biochemistry", "Enzyme deficiency diseases (PKU, galactosemia, etc.), vitamin deficiency symptoms, metabolic pathways"],
["Pharmacology", "Drug of choice lists, receptor types per drug class, side effect profiles, contraindications"],
["Microbiology", "Gram stain results, special media, virulence factors, lab diagnosis of each organism"],
];
function highYieldTable(rows) {
const header = new TableRow({
children: [
makeTableCell("SUBJECT", { fill: COLOR_PURPLE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 2000 }),
makeTableCell("MUST-KNOW HIGH-YIELD AREAS", { fill: COLOR_PURPLE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 8200 }),
],
tableHeader: true,
});
const dataRows = rows.map((r, i) => new TableRow({
children: [
makeTableCell(r[0], { fill: COLOR_LIGHT_PURPLE, bold: true, color: COLOR_PURPLE, align: AlignmentType.CENTER }),
makeTableCell(r[1], { fill: i % 2 === 0 ? COLOR_LIGHT_PURPLE : COLOR_WHITE }),
],
}));
return new Table({
rows: [header, ...dataRows],
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.SINGLE, size: 4, color: COLOR_PURPLE },
bottom: { style: BorderStyle.SINGLE, size: 4, color: COLOR_PURPLE },
left: { style: BorderStyle.SINGLE, size: 4, color: COLOR_PURPLE },
right: { style: BorderStyle.SINGLE, size: 4, color: COLOR_PURPLE },
insideH:{ style: BorderStyle.SINGLE, size: 2, color: "D2B4DE" },
insideV:{ style: BorderStyle.SINGLE, size: 2, color: "D2B4DE" },
},
});
}
function weeklyTargetsTable(rows) {
const header = new TableRow({
children: [
makeTableCell("PERIOD", { fill: COLOR_MED_BLUE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 1500 }),
makeTableCell("FOCUS", { fill: COLOR_MED_BLUE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 2000 }),
makeTableCell("DETAILS", { fill: COLOR_MED_BLUE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 4500 }),
makeTableCell("MCQ TARGET", { fill: COLOR_MED_BLUE, bold: true, color: COLOR_WHITE, align: AlignmentType.CENTER, width: 2200 }),
],
tableHeader: true,
});
const dataRows = rows.map((r, i) => new TableRow({
children: [
makeTableCell(r[0], { fill: COLOR_LIGHT_BLUE, bold: true, align: AlignmentType.CENTER, color: COLOR_DARK_BLUE }),
makeTableCell(r[1], { fill: i % 2 === 0 ? COLOR_LIGHT_BLUE : COLOR_WHITE }),
makeTableCell(r[2], { fill: i % 2 === 0 ? COLOR_LIGHT_BLUE : COLOR_WHITE }),
makeTableCell(r[3], { fill: COLOR_LIGHT_GREEN, bold: true, align: AlignmentType.CENTER, color: COLOR_GREEN }),
],
}));
return new Table({
rows: [header, ...dataRows],
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.SINGLE, size: 4, color: COLOR_MED_BLUE },
bottom: { style: BorderStyle.SINGLE, size: 4, color: COLOR_MED_BLUE },
left: { style: BorderStyle.SINGLE, size: 4, color: COLOR_MED_BLUE },
right: { style: BorderStyle.SINGLE, size: 4, color: COLOR_MED_BLUE },
insideH:{ style: BorderStyle.SINGLE, size: 2, color: "AACCE0" },
insideV:{ style: BorderStyle.SINGLE, size: 2, color: "AACCE0" },
},
});
}
// โโโ BUILD DOCUMENT โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
const doc = new Document({
styles: {
default: {
document: {
run: { font: "Calibri", size: 20 },
},
},
},
sections: [{
properties: {
page: {
margin: { top: 720, bottom: 720, left: 900, right: 900 },
},
},
headers: {
default: new Header({
children: [new Paragraph({
children: [new TextRun({ text: "FMGE PREPARATION SCHEDULE | August โ September 2026 | Cerebellum App", size: 16, color: COLOR_GRAY, font: "Calibri" })],
alignment: AlignmentType.CENTER,
border: { bottom: { style: BorderStyle.SINGLE, size: 4, color: COLOR_MED_BLUE } },
})],
}),
},
footers: {
default: new Footer({
children: [new Paragraph({
children: [new TextRun({ text: "FMGE Jan 2027 | Target: 150+/300 | Keep going, you've got this!", size: 16, color: COLOR_GRAY, font: "Calibri" })],
alignment: AlignmentType.CENTER,
border: { top: { style: BorderStyle.SINGLE, size: 4, color: COLOR_MED_BLUE } },
})],
}),
},
children: [
// โโ TITLE โโ
new Paragraph({
children: [new TextRun({ text: "FMGE PREPARATION SCHEDULE", bold: true, size: 44, color: COLOR_WHITE, font: "Calibri" })],
alignment: AlignmentType.CENTER,
shading: { type: ShadingType.SOLID, fill: COLOR_DARK_BLUE },
spacing: { before: 0, after: 0 },
}),
new Paragraph({
children: [new TextRun({ text: "August โ September 2026 | Cerebellum App | FMGE Jan 7, 2027", bold: true, size: 24, color: COLOR_LIGHT_BLUE, font: "Calibri" })],
alignment: AlignmentType.CENTER,
shading: { type: ShadingType.SOLID, fill: COLOR_DARK_BLUE },
spacing: { before: 0, after: 300 },
}),
// โโ OVERVIEW BOX โโ
new Paragraph({
children: [new TextRun({ text: "๐ PHASE 1 OVERVIEW: PRECLINICAL FOUNDATION", bold: true, size: 24, color: COLOR_DARK_BLUE, font: "Calibri" })],
shading: { type: ShadingType.SOLID, fill: COLOR_LIGHT_YELLOW },
spacing: { before: 200, after: 80 },
indent: { left: 200 },
}),
bodyPara("Subjects covered: Anatomy โข Physiology โข Biochemistry โข Pharmacology โข Microbiology", true),
bodyPara("Daily study hours: 8โ9 hours | MCQ target: 80โ100 per day | Total MCQs in 2 months: ~5,000+"),
bodyPara("Tool: Cerebellum App (topic-wise MCQs + PYQs + spaced repetition + incorrect Qs filter)"),
spacer(),
// โโ SECTION 1: DAILY SCHEDULE (WEEKDAY) โโ
heading2("๐
DAILY STUDY SCHEDULE (Monday to Saturday)"),
spacer(),
scheduleTable(dailyRows),
spacer(),
new Paragraph({
children: [new TextRun({ text: "Total Active Study: ~8.5 hours/day | MCQs: 110โ140 per day", bold: true, size: 20, color: COLOR_GREEN, font: "Calibri" })],
shading: { type: ShadingType.SOLID, fill: COLOR_LIGHT_GREEN },
alignment: AlignmentType.CENTER,
spacing: { before: 100, after: 200 },
}),
// โโ SECTION 2: SUNDAY SCHEDULE โโ
heading2("โ๏ธ SUNDAY SCHEDULE (Weekly Review Day)", COLOR_ORANGE),
spacer(),
scheduleTable(sundayRows),
spacer(),
// โโ PAGE BREAK โโ
new Paragraph({ children: [new PageBreak()] }),
// โโ SECTION 3: AUGUST WEEK PLAN โโ
heading2("๐ AUGUST WEEK-BY-WEEK PLAN (Anatomy โ Physiology โ Biochemistry start)"),
spacer(),
weekTable(augustWeeks),
spacer(),
// โโ SECTION 4: SEPTEMBER WEEK PLAN โโ
heading2("๐ SEPTEMBER WEEK-BY-WEEK PLAN (Biochemistry โ Pharmacology โ Microbiology)", COLOR_GREEN),
spacer(),
weekTable(septemberWeeks),
spacer(),
// โโ SECTION 5: WEEKLY + MONTHLY TARGETS โโ
heading2("๐ฏ WEEKLY & MONTHLY MCQ TARGETS", COLOR_MED_BLUE),
spacer(),
weeklyTargetsTable(weeklyTargets),
spacer(),
// โโ PAGE BREAK โโ
new Paragraph({ children: [new PageBreak()] }),
// โโ SECTION 6: HIGH YIELD AREAS โโ
heading2("โญ HIGH-YIELD AREAS PER SUBJECT (FMGE Focus)", COLOR_PURPLE),
spacer(),
highYieldTable(highYield),
spacer(),
// โโ SECTION 7: CEREBELLUM TIPS โโ
heading2("๐ฑ TIPS FOR USING CEREBELLUM APP EFFECTIVELY", COLOR_GREEN),
spacer(),
tipsTable(cerebellumTips),
spacer(),
// โโ SECTION 8: MONTHLY MILESTONES โโ
heading2("๐ END-OF-MONTH MILESTONES TO CHECK", COLOR_ORANGE),
spacer(),
subheading("August 31 โ Targets"),
bullet("Anatomy: All major sections complete, Cerebellum accuracy > 60%"),
bullet("Physiology: CVS, Respiratory, Renal, Neuro complete, accuracy > 60%"),
bullet("Biochemistry: First 2 weeks started (enzymes + carbs)"),
bullet("Total MCQs solved: 2,500 โ 3,000"),
bullet("PYQs done: Anatomy + Physiology PYQ sets"),
bullet("Sunday mocks: 4 mocks completed, score improving week by week"),
spacer(),
subheading("September 30 โ Targets"),
bullet("Biochemistry: Fully complete, accuracy > 60%"),
bullet("Pharmacology: All major drug classes done, accuracy > 60%"),
bullet("Microbiology: Bacteriology + Virology + Parasitology complete"),
bullet("Total MCQs solved (cumulative 2 months): 5,000 โ 6,000"),
bullet("PYQs done: All 5 subjects' PYQ sets"),
bullet("Sunday mocks: 8 mocks completed, score trending above 120/300"),
spacer(),
// โโ CLOSING MOTIVATION โโ
new Paragraph({
children: [new TextRun({ text: "\"Discipline over motivation. Show up every single day. FMGE Jan 7, 2027 โ you've got this!\"", bold: true, size: 22, color: COLOR_WHITE, font: "Calibri", italics: true })],
alignment: AlignmentType.CENTER,
shading: { type: ShadingType.SOLID, fill: COLOR_DARK_BLUE },
spacing: { before: 200, after: 200 },
}),
],
}],
});
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync("/home/daytona/workspace/fmge-schedule/FMGE_Study_Schedule_Aug_Sep.docx", buffer);
console.log("SUCCESS: File written.");
}).catch(err => {
console.error("ERROR:", err);
process.exit(1);
});
cd /home/daytona/workspace/fmge-schedule && node create_schedule.js 2>&1
python3 /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/workspace/fmge-schedule/FMGE_Study_Schedule_Aug_Sep.docx 2>&1
ls -lh /home/daytona/workspace/fmge-schedule/FMGE_Study_Schedule_Aug_Sep.docx && python3 -c "import zipfile; z=zipfile.ZipFile('/home/daytona/workspace/fmge-schedule/FMGE_Study_Schedule_Aug_Sep.docx'); print('Valid ZIP, files:', z.namelist()[:6])"
FMGE Study Schedule Aug Sep
Word Document ยท DOCX
| Section | Content |
|---|---|
| Daily Schedule (Mon-Sat) | Hour-by-hour timetable from 5 AM to 10:30 PM with 8.5 hrs active study |
| Sunday Schedule | Weekly mock test + revision + PYQ day |
| August Week-by-Week Plan | Anatomy (Wk 1-2) โ Physiology (Wk 3-4) โ Biochemistry start (Wk 5) |
| September Week-by-Week Plan | Biochemistry complete โ Pharmacology โ Microbiology |
| MCQ Targets | Daily, weekly, and monthly targets (2,500+ Aug / 5,000+ cumulative) |
| High-Yield Areas | Per-subject FMGE focus topics |
| Cerebellum App Tips | 8 specific tips to maximize the app |
| End-of-Month Milestones | Checkpoints for Aug 31 and Sep 30 |
Create a daily schedule template for October-November (clinical subjects)
the downloaded document is showing error
cd /home/daytona/workspace/fmge-schedule && python3 -c " import zipfile, xml.etree.ElementTree as ET z = zipfile.ZipFile('FMGE_Study_Schedule_Aug_Sep.docx') xml = z.read('word/document.xml') try: ET.fromstring(xml) print('XML is valid') except ET.ParseError as e: print('XML ERROR:', e) "
cd /home/daytona/workspace/fmge-schedule && python3 -c " import zipfile z = zipfile.ZipFile('FMGE_Study_Schedule_Aug_Sep.docx') print('Files in docx:', z.namelist()) # Check relationships rels = z.read('word/_rels/document.xml.rels').decode() print('RELS:', rels[:500]) "
heading property conflicts with the shading on paragraphs in some Word versions. Let me rebuild it using a cleaner, more compatible approach with Python's python-docx library instead, which produces more universally compatible files.python3 -c "import docx; print('python-docx OK', docx.__version__)"
pip install --user python-docx -q && python3 -c "import docx; print('OK', docx.__version__)"
~/fmge-schedule/build_schedule.py
from docx import Document
from docx.shared import Pt, RGBColor, Inches, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_ALIGN_VERTICAL
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import copy
doc = Document()
# โโ Page margins โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
for section in doc.sections:
section.top_margin = Cm(1.5)
section.bottom_margin = Cm(1.5)
section.left_margin = Cm(1.8)
section.right_margin = Cm(1.8)
# โโ Helpers โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def hex_to_rgb(h):
h = h.lstrip('#')
return tuple(int(h[i:i+2], 16) for i in (0, 2, 4))
def set_cell_bg(cell, hex_color):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear')
shd.set(qn('w:color'), 'auto')
shd.set(qn('w:fill'), hex_color.lstrip('#'))
tcPr.append(shd)
def set_cell_borders(cell, color="AACCE0"):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
tcBorders = OxmlElement('w:tcBorders')
for side in ['top', 'left', 'bottom', 'right']:
border = OxmlElement(f'w:{side}')
border.set(qn('w:val'), 'single')
border.set(qn('w:sz'), '4')
border.set(qn('w:space'), '0')
border.set(qn('w:color'), color.lstrip('#'))
tcBorders.append(border)
tcPr.append(tcBorders)
def cell_text(cell, text, bold=False, font_size=9, color="000000", align=WD_ALIGN_PARAGRAPH.LEFT):
cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER
p = cell.paragraphs[0]
p.alignment = align
run = p.add_run(text)
run.bold = bold
run.font.size = Pt(font_size)
r, g, b = hex_to_rgb(color)
run.font.color.rgb = RGBColor(r, g, b)
# cell padding
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
mar = OxmlElement('w:tcMar')
for side in ['top', 'bottom', 'left', 'right']:
m = OxmlElement(f'w:{side}')
m.set(qn('w:w'), '80')
m.set(qn('w:type'), 'dxa')
mar.append(m)
tcPr.append(mar)
def add_title_para(doc, text, sub=""):
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
pPr = p._p.get_or_add_pPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear')
shd.set(qn('w:color'), 'auto')
shd.set(qn('w:fill'), '1A3A5C')
pPr.append(shd)
spacing = OxmlElement('w:spacing')
spacing.set(qn('w:before'), '120')
spacing.set(qn('w:after'), '120')
pPr.append(spacing)
run = p.add_run(text)
run.bold = True
run.font.size = Pt(20)
run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
if sub:
p2 = doc.add_paragraph()
p2.alignment = WD_ALIGN_PARAGRAPH.CENTER
pPr2 = p2._p.get_or_add_pPr()
shd2 = OxmlElement('w:shd')
shd2.set(qn('w:val'), 'clear')
shd2.set(qn('w:color'), 'auto')
shd2.set(qn('w:fill'), '1A3A5C')
pPr2.append(shd2)
r2 = p2.add_run(sub)
r2.font.size = Pt(11)
r2.font.color.rgb = RGBColor(0xD6, 0xE8, 0xF7)
def add_section_heading(doc, text, fill="2E6DA4", text_color="FFFFFF"):
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.LEFT
pPr = p._p.get_or_add_pPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear')
shd.set(qn('w:color'), 'auto')
shd.set(qn('w:fill'), fill.lstrip('#'))
pPr.append(shd)
sp = OxmlElement('w:spacing')
sp.set(qn('w:before'), '160')
sp.set(qn('w:after'), '80')
pPr.append(sp)
run = p.add_run(f" {text}")
run.bold = True
run.font.size = Pt(12)
r, g, b = hex_to_rgb(text_color)
run.font.color.rgb = RGBColor(r, g, b)
def add_body(doc, text, bold=False, indent=True):
p = doc.add_paragraph()
if indent:
pf = p.paragraph_format
pf.left_indent = Inches(0.25)
run = p.add_run(text)
run.bold = bold
run.font.size = Pt(9.5)
sp = OxmlElement('w:spacing')
sp.set(qn('w:before'), '40')
sp.set(qn('w:after'), '40')
p._p.get_or_add_pPr().append(sp)
def add_bullet(doc, text):
p = doc.add_paragraph(style='List Bullet')
run = p.add_run(text)
run.font.size = Pt(9.5)
def add_spacer(doc):
p = doc.add_paragraph()
sp = OxmlElement('w:spacing')
sp.set(qn('w:before'), '40')
sp.set(qn('w:after'), '40')
p._p.get_or_add_pPr().append(sp)
def add_colored_para(doc, text, fill="D6E8F7", text_color="1A3A5C", bold=True, size=9.5):
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
pPr = p._p.get_or_add_pPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear')
shd.set(qn('w:color'), 'auto')
shd.set(qn('w:fill'), fill.lstrip('#'))
pPr.append(shd)
run = p.add_run(text)
run.bold = bold
run.font.size = Pt(size)
r, g, b = hex_to_rgb(text_color)
run.font.color.rgb = RGBColor(r, g, b)
# โโ Schedule table builder โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def add_schedule_table(doc, rows):
"""rows: [time, activity, details, duration, row_color]"""
headers = ["TIME", "ACTIVITY", "DETAILS / CEREBELLUM TASK", "DURATION"]
widths = [Inches(1.2), Inches(2.0), Inches(3.5), Inches(0.9)]
tbl = doc.add_table(rows=1, cols=4)
tbl.style = 'Table Grid'
hdr = tbl.rows[0]
for i, (h, w) in enumerate(zip(headers, widths)):
cell = hdr.cells[i]
cell.width = w
set_cell_bg(cell, '1A3A5C')
set_cell_borders(cell, '2E6DA4')
cell_text(cell, h, bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
for row in rows:
tr = tbl.add_row()
bg = row[4] if len(row) > 4 else 'FFFFFF'
data = [row[0], row[1], row[2], row[3]]
aligns = [WD_ALIGN_PARAGRAPH.CENTER, WD_ALIGN_PARAGRAPH.LEFT,
WD_ALIGN_PARAGRAPH.LEFT, WD_ALIGN_PARAGRAPH.CENTER]
bolds = [False, True if '๐ง ' in row[1] or '๐' in row[1] else False, False, False]
for i, (d, a, b) in enumerate(zip(data, aligns, bolds)):
cell = tr.cells[i]
set_cell_bg(cell, bg)
set_cell_borders(cell, 'AACCE0')
cell_text(cell, d, bold=b, font_size=8.5, color='111111', align=a)
# โโ Week plan table builder โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def add_week_table(doc, rows, accent='E07B39'):
"""rows: [week, subject, topics, mcq_target]"""
headers = ["WEEK", "SUBJECT", "KEY TOPICS TO COVER", "CEREBELLUM MCQs"]
widths = [Inches(1.0), Inches(1.4), Inches(4.2), Inches(1.0)]
tbl = doc.add_table(rows=1, cols=4)
tbl.style = 'Table Grid'
hdr = tbl.rows[0]
for i, (h, w) in enumerate(zip(headers, widths)):
cell = hdr.cells[i]
cell.width = w
set_cell_bg(cell, accent)
set_cell_borders(cell, accent)
cell_text(cell, h, bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
for idx, row in enumerate(rows):
tr = tbl.add_row()
alt = 'FEF9E7' if idx % 2 == 0 else 'FFFFFF'
for i, d in enumerate(row):
cell = tr.cells[i]
set_cell_bg(cell, alt)
set_cell_borders(cell, 'F5CBA7')
aligns = [WD_ALIGN_PARAGRAPH.CENTER, WD_ALIGN_PARAGRAPH.LEFT,
WD_ALIGN_PARAGRAPH.LEFT, WD_ALIGN_PARAGRAPH.CENTER]
bolds = [True, True, False, True]
colors = ['C0392B', '1A3A5C', '111111', '27AE60']
cell_text(cell, d, bold=bolds[i], font_size=8.5,
color=colors[i], align=aligns[i])
# โโ Tips table โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def add_tips_table(doc, tips, accent='27AE60'):
tbl = doc.add_table(rows=0, cols=2)
tbl.style = 'Table Grid'
for idx, tip in enumerate(tips):
tr = tbl.add_row()
alt = 'D5F5E3' if idx % 2 == 0 else 'FFFFFF'
# number cell
c0 = tr.cells[0]
c0.width = Inches(0.4)
set_cell_bg(c0, accent)
set_cell_borders(c0, accent)
cell_text(c0, str(idx + 1), bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
# tip cell
c1 = tr.cells[1]
set_cell_bg(c1, alt)
set_cell_borders(c1, 'A9DFBF')
cell_text(c1, tip, font_size=8.5, color='111111')
# โโ High yield table โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def add_hy_table(doc, rows, accent='7D3C98'):
headers = ["SUBJECT", "MUST-KNOW HIGH-YIELD AREAS"]
widths = [Inches(1.4), Inches(6.2)]
tbl = doc.add_table(rows=1, cols=2)
tbl.style = 'Table Grid'
hdr = tbl.rows[0]
for i, (h, w) in enumerate(zip(headers, widths)):
cell = hdr.cells[i]
cell.width = w
set_cell_bg(cell, accent)
set_cell_borders(cell, accent)
cell_text(cell, h, bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
for idx, row in enumerate(rows):
tr = tbl.add_row()
alt = 'E8DAEF' if idx % 2 == 0 else 'FFFFFF'
for i, d in enumerate(row):
cell = tr.cells[i]
set_cell_bg(cell, alt)
set_cell_borders(cell, 'D2B4DE')
bolds = [True, False]
colors = ['7D3C98', '111111']
aligns = [WD_ALIGN_PARAGRAPH.CENTER, WD_ALIGN_PARAGRAPH.LEFT]
cell_text(cell, d, bold=bolds[i], font_size=8.5, color=colors[i], align=aligns[i])
# โโ Milestone table โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def add_milestone_table(doc, rows, accent='2E6DA4'):
tbl = doc.add_table(rows=0, cols=3)
tbl.style = 'Table Grid'
# header
hr = tbl.add_row()
for i, h in enumerate(["CHECKPOINT", "TARGET", "STATUS"]):
c = hr.cells[i]
set_cell_bg(c, accent)
set_cell_borders(c, accent)
cell_text(c, h, bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
for idx, row in enumerate(rows):
tr = tbl.add_row()
alt = 'EAF0F6' if idx % 2 == 0 else 'FFFFFF'
for i, d in enumerate(row):
cell = tr.cells[i]
set_cell_bg(cell, alt)
set_cell_borders(cell, 'AACCE0')
aligns = [WD_ALIGN_PARAGRAPH.CENTER, WD_ALIGN_PARAGRAPH.LEFT, WD_ALIGN_PARAGRAPH.CENTER]
bolds = [True, False, False]
cell_text(cell, d, bold=bolds[i], font_size=8.5, color='111111', align=aligns[i])
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# CONTENT
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# โโ TITLE โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_title_para(doc,
"FMGE PREPARATION SCHEDULE | AUGUST โ SEPTEMBER 2026",
"Cerebellum App โข Phase 1: Preclinical Foundation โข FMGE Jan 7, 2027")
add_spacer(doc)
# โโ OVERVIEW โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_colored_para(doc,
"PHASE 1 OVERVIEW: Preclinical Foundation (AugโSep)",
fill='FEF9E7', text_color='1A3A5C', bold=True, size=10.5)
add_body(doc, "Subjects: Anatomy | Physiology | Biochemistry | Pharmacology | Microbiology", bold=True)
add_body(doc, "Daily study hours: 8โ9 hrs | MCQ target: 80โ120/day | Total MCQs in 2 months: ~5,000+")
add_body(doc, "Tool: Cerebellum App โ use topic-wise mode, PYQs, spaced repetition & incorrect Qs filter")
add_spacer(doc)
# โโ DAILY SCHEDULE (MONโSAT) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "DAILY STUDY SCHEDULE โ Monday to Saturday", fill='2E6DA4')
add_spacer(doc)
daily_rows = [
# time activity details dur color
["5:00 โ 5:30 AM", "Wake Up & Morning Routine", "Freshen up, light stretch or walk, hydrate well", "30 min", "FEF9E7"],
["5:30 โ 6:00 AM", "Flashcard Revision", "Review Cerebellum incorrect Qs from yesterday", "30 min", "FEF9E7"],
["6:00 โ 8:30 AM", "๐ง STUDY SESSION 1", "New topic theory โ video lecture or standard textbook notes", "2.5 hrs", "D6E8F7"],
["8:30 โ 9:00 AM", "Breakfast + Break", "Eat well, rest eyes, step outside briefly", "30 min", "FEF9E7"],
["9:00 โ 11:30 AM", "๐ง STUDY SESSION 2", "Continue topic OR move to next sub-topic, make brief notes", "2.5 hrs", "D6E8F7"],
["11:30AMโ12:30PM", "๐ MCQ Block 1 (Cerebellum)", "Topic-wise Qs, timed mode, target 60โ80 Qs", "1 hr", "E8DAEF"],
["12:30 โ 1:30 PM", "Lunch + Rest", "Full break โ short 20 min nap if needed, no study", "1 hr", "FEF9E7"],
["1:30 โ 4:00 PM", "๐ง STUDY SESSION 3", "New topic or notes revision from morning session", "2.5 hrs", "D6E8F7"],
["4:00 โ 4:30 PM", "Tea Break", "Walk, light snack, avoid screens for 30 min", "30 min", "FEF9E7"],
["4:30 โ 6:30 PM", "๐ MCQ Block 2 (Cerebellum)", "Subject-wise random Qs โ 50โ60 Qs, read ALL explanations", "2 hrs", "E8DAEF"],
["6:30 โ 7:00 PM", "Mistake Analysis", "Review wrong answers, note key facts in personal notes", "30 min", "FADBD8"],
["7:00 โ 8:00 PM", "Dinner + Free Time", "Completely relax โ no study during dinner", "1 hr", "FEF9E7"],
["8:00 โ 9:30 PM", "๐ง STUDY SESSION 4 (Revision)","Revise TODAY's topic โ use your notes, do rapid recall", "1.5 hrs", "D5F5E3"],
["9:30 โ 10:00 PM", "Daily Summary + Planning", "Write 5 key points learned today, plan tomorrow's topics", "30 min", "FEF9E7"],
["10:00 โ 10:30 PM","Light Reading (Optional)", "High-yield tables or mnemonics only โ no new topics", "30 min", "EAF0F6"],
["10:30 PM", "SLEEP", "7 hours minimum โ memory consolidation happens during sleep", "โ", "FEF9E7"],
]
add_schedule_table(doc, daily_rows)
add_spacer(doc)
add_colored_para(doc,
"Total Active Study: ~8.5 hours/day | Daily MCQ Target: 110โ140 Qs",
fill='D5F5E3', text_color='1E8449', bold=True, size=9.5)
add_spacer(doc)
# โโ SUNDAY SCHEDULE โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "SUNDAY SCHEDULE โ Weekly Review Day", fill='E07B39')
add_spacer(doc)
sunday_rows = [
["7:00 โ 8:00 AM", "Wake Up + Light Morning", "Relax start, light breakfast, review weekly study targets", "1 hr", "FEF9E7"],
["8:00 โ 10:00 AM", "๐ Weekly Mock Test", "150-Q timed test on Cerebellum โ current week's subjects", "2 hrs", "E8DAEF"],
["10:00 โ 11:00 AM","Mock Analysis", "Go through every wrong answer, identify weak patterns", "1 hr", "FADBD8"],
["11:00AM โ 1:00PM","Weak Topic Revision", "Pick 2 lowest-scoring topics from mock, revise thoroughly", "2 hrs", "D6E8F7"],
["1:00 โ 3:00 PM", "Lunch + Afternoon Rest", "Full break โ rest and recharge for the coming week", "2 hrs", "FEF9E7"],
["3:00 โ 5:00 PM", "Previous Year Questions", "Solve PYQs from this week's subject on Cerebellum", "2 hrs", "D5F5E3"],
["5:00 โ 6:00 PM", "Notes Consolidation", "Update short notes with new points discovered this week", "1 hr", "EAF0F6"],
["6:00 PM onwards", "Family / Personal Time", "Fully switch off โ rest is essential for long-term retention", "โ", "FEF9E7"],
]
add_schedule_table(doc, sunday_rows)
add_spacer(doc)
# โโ PAGE BREAK โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
doc.add_page_break()
# โโ AUGUST WEEK PLAN โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "AUGUST WEEK-BY-WEEK PLAN โ Anatomy โ Physiology โ Biochemistry Start", fill='2E6DA4')
add_spacer(doc)
aug_weeks = [
["Week 1\nAug 1โ7", "Anatomy", "Upper Limb (bones, muscles, nerves, vessels, spaces), Lower Limb (hip, knee, arches), Surface Anatomy", "80โ100 Qs"],
["Week 2\nAug 8โ14", "Anatomy", "Head & Neck (cranial nerves, triangles, spaces), Neuroanatomy (tracts, basal ganglia), Embryology (heart, gut, NTD)", "80โ100 Qs"],
["Week 3\nAug 15โ21", "Physiology", "CVS (cardiac cycle, Frank-Starling, ECG, BP regulation), Respiratory (volumes, compliance, control of breathing)", "80โ100 Qs"],
["Week 4\nAug 22โ28", "Physiology", "Renal (GFR, tubular functions, acid-base, JGA), Neurophysiology (synaptic transmission, reflexes, special senses)", "80โ100 Qs"],
["Week 5\nAug 29โ31", "Biochemistry", "Enzymes (kinetics, inhibition), Carbohydrate metabolism (glycolysis, gluconeogenesis, TCA cycle, glycogen)", "50โ60 Qs"],
]
add_week_table(doc, aug_weeks, accent='2E6DA4')
add_spacer(doc)
# โโ SEPTEMBER WEEK PLAN โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "SEPTEMBER WEEK-BY-WEEK PLAN โ Biochemistry โ Pharmacology โ Microbiology", fill='27AE60')
add_spacer(doc)
sep_weeks = [
["Week 1\nSep 1โ7", "Biochemistry", "Lipid metabolism (fatty acids, ketone bodies, lipoproteins), Protein metabolism (urea cycle, transamination), Vitamins (fat & water soluble), Minerals", "80โ100 Qs"],
["Week 2\nSep 8โ14", "Pharmacology", "General pharmacology (pharmacokinetics, pharmacodynamics), ANS drugs, CVS drugs (anti-hypertensives, anti-anginals, anti-arrhythmics, heart failure)", "80โ100 Qs"],
["Week 3\nSep 15โ21", "Pharmacology", "CNS drugs (sedatives, antidepressants, antiepileptics, antipsychotics), Antimicrobials (penicillins, cephalosporins, aminoglycosides, fluoroquinolones)", "80โ100 Qs"],
["Week 4\nSep 22โ28", "Microbiology", "General bacteriology (Gram stain, culture media), Gram +ve/-ve cocci & bacilli (Staph, Strep, E.coli, Salmonella, Mycobacterium, Clostridia)", "80โ100 Qs"],
["Week 5\nSep 29โ30", "Microbiology", "Virology (HIV, Herpes, Hepatitis B & C, Influenza, Dengue), Parasitology (Plasmodium, Entamoeba, Wuchereria, Leishmania)", "50โ60 Qs"],
]
add_week_table(doc, sep_weeks, accent='27AE60')
add_spacer(doc)
# โโ WEEKLY / MONTHLY TARGETS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "WEEKLY & MONTHLY MCQ TARGETS", fill='2E6DA4')
add_spacer(doc)
target_rows = [
["Mon โ Sat", "Theory + MCQs", "1 topic/day, 80โ120 Qs/day on Cerebellum", "480โ720 Qs/week"],
["Sunday", "Revision + Mock", "Full week revision + 150 Q mock test + PYQs", "150โ200 Qs"],
["August", "Monthly Total", "Anatomy + Physiology complete + Biochem started", "~2,500โ3,000 Qs"],
["September", "Monthly Total", "Biochem complete + Pharmacology + Microbiology complete", "~2,500โ3,000 Qs"],
["Cumulative", "Aug + Sep Total", "All 5 preclinical subjects covered", "~5,000โ6,000 Qs"],
]
tbl = doc.add_table(rows=1, cols=4)
tbl.style = 'Table Grid'
for i, h in enumerate(["PERIOD", "FOCUS", "DETAILS", "MCQ TARGET"]):
c = tbl.rows[0].cells[i]
set_cell_bg(c, '2E6DA4')
set_cell_borders(c, '2E6DA4')
cell_text(c, h, bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
for idx, row in enumerate(target_rows):
tr = tbl.add_row()
alt = 'EAF0F6' if idx % 2 == 0 else 'FFFFFF'
for i, d in enumerate(row):
cell = tr.cells[i]
bolds = [True, False, False, True]
colors = ['1A3A5C', '111111', '111111', '27AE60']
aligns = [WD_ALIGN_PARAGRAPH.CENTER, WD_ALIGN_PARAGRAPH.LEFT, WD_ALIGN_PARAGRAPH.LEFT, WD_ALIGN_PARAGRAPH.CENTER]
bg = 'D5F5E3' if i == 3 else alt
set_cell_bg(cell, bg)
set_cell_borders(cell, 'AACCE0')
cell_text(cell, d, bold=bolds[i], font_size=8.5, color=colors[i], align=aligns[i])
add_spacer(doc)
# โโ PAGE BREAK โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
doc.add_page_break()
# โโ HIGH YIELD AREAS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "HIGH-YIELD AREAS PER SUBJECT (FMGE Focus)", fill='7D3C98')
add_spacer(doc)
hy_rows = [
["Anatomy\n(17 Qs)", "Brachial plexus roots & injuries, carpal tunnel structures, cranial nerve nuclei & lesions, embryological derivatives (pharyngeal arches, heart, gut rotation), thoracic outlet, femoral triangle"],
["Physiology\n(17 Qs)", "Frank-Starling law, JVP waveforms, Henderson-Hasselbalch equation, lung volumes & capacities (values), O2 dissociation curve shifts, GFR formula, tubular max, JGA function"],
["Biochemistry\n(17 Qs)", "Enzyme deficiency diseases (PKU, galactosemia, Gaucher, MCAD), vitamin deficiency symptoms & sources, metabolic pathway regulation, Km & Vmax concepts, lipoprotein types & clinical correlations"],
["Pharmacology\n(13 Qs)", "Drug of choice lists, receptor types per drug class, side effect profiles (e.g., ototoxicity, nephrotoxicity), contraindications, first-pass effect drugs, zero-order kinetics drugs"],
["Microbiology\n(13 Qs)", "Gram stain results & special stains (ZN, India ink, Giemsa), special culture media, virulence factors, serological tests (Widal, VDRL, Paul-Bunnell), anti-microbial resistance mechanisms"],
]
add_hy_table(doc, hy_rows)
add_spacer(doc)
# โโ CEREBELLUM APP TIPS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "TIPS FOR USING CEREBELLUM APP EFFECTIVELY", fill='27AE60')
add_spacer(doc)
tips = [
"Use TOPIC-WISE mode first when learning a new subject โ don't switch to random mode until you've covered 70% of the subject.",
"After solving any MCQ, read the FULL explanation even if you got it right โ nuances in wrong options are commonly re-tested.",
"Use the INCORRECT QUESTIONS filter every Sunday โ this is your personal weak-topic detector. Re-solve them until accuracy > 70%.",
"Enable SPACED REPETITION reminders โ the algorithm shows cards just before you forget them. Never skip these notifications.",
"Solve PYQ mode at least once per subject before moving on โ FMGE frequently repeats questions across years.",
"Track your subject-wise ACCURACY % โ anything below 60% needs an immediate extra revision session the same day.",
"Use TIMED MODE at least 3x per week โ FMGE allows 1 min/question (300 Qs in 300 min). Speed is a real factor.",
"After every 10 Qs, pause and recall: what concept was just tested? Passive clicking without reflection wastes your time.",
]
add_tips_table(doc, tips)
add_spacer(doc)
# โโ MILESTONES โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "END-OF-MONTH MILESTONES โ Check These on Aug 31 & Sep 30", fill='E07B39')
add_spacer(doc)
add_colored_para(doc, "August 31 Targets", fill='FDEBD0', text_color='C0392B', bold=True, size=10)
milestone_aug = [
["Anatomy", "All major sections done, Cerebellum accuracy > 60%", "[ ]"],
["Physiology", "CVS, Respiratory, Renal, Neuro complete, accuracy > 60%", "[ ]"],
["Biochemistry", "Enzymes + Carbohydrate metabolism started", "[ ]"],
["MCQs", "Total 2,500โ3,000 MCQs solved across subjects", "[ ]"],
["PYQs", "Anatomy + Physiology PYQ sets completed", "[ ]"],
["Mock Tests", "4 Sunday mocks done, scores improving each week", "[ ]"],
]
add_milestone_table(doc, milestone_aug, accent='E07B39')
add_spacer(doc)
add_colored_para(doc, "September 30 Targets", fill='D5F5E3', text_color='1E8449', bold=True, size=10)
milestone_sep = [
["Biochemistry", "Fully complete, accuracy > 60%", "[ ]"],
["Pharmacology", "All major drug classes done, accuracy > 60%", "[ ]"],
["Microbiology", "Bacteriology + Virology + Parasitology complete", "[ ]"],
["MCQs", "Cumulative total (Aug+Sep): 5,000โ6,000 MCQs solved", "[ ]"],
["PYQs", "All 5 subjects' PYQ sets completed", "[ ]"],
["Mock Tests", "8 Sunday mocks done, score trending above 120/300", "[ ]"],
]
add_milestone_table(doc, milestone_sep, accent='27AE60')
add_spacer(doc)
# โโ CLOSING โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_title_para(doc,
'"Discipline over motivation. Show up every single day."',
"FMGE Jan 7, 2027 โ Target: 150+/300 โ You've got this!")
# โโ SAVE โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
out = "/home/daytona/workspace/fmge-schedule/FMGE_Schedule_Aug_Sep_2026.docx"
doc.save(out)
print(f"SUCCESS: {out}")
cd /home/daytona/workspace/fmge-schedule && python3 build_schedule.py 2>&1
# Test save to a simple path first python3 -c " from docx import Document doc = Document() doc.add_paragraph('Test') doc.save('/tmp/test.docx') import shutil; shutil.copy('/tmp/test.docx', '/home/daytona/workspace/fmge-schedule/test.docx') print('OK') " 2>&1
# Check permissions and try saving directly to workspace ls -la /home/daytona/workspace/fmge-schedule/ && echo "---" && python3 -c " from docx import Document doc = Document() doc.add_paragraph('Test') import io, os buf = io.BytesIO() doc.save(buf) buf.seek(0) with open('/home/daytona/workspace/fmge-schedule/test_out.docx', 'wb') as f: f.write(buf.read()) print('saved OK, size:', os.path.getsize('/home/daytona/workspace/fmge-schedule/test_out.docx')) " 2>&1
~/fmge-schedule/build_schedule.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/fmge-schedule/build_schedule.py'
cd /home/daytona/workspace/fmge-schedule && python3 build_schedule.py 2>&1
python3 -c " import zipfile, xml.etree.ElementTree as ET z = zipfile.ZipFile('/home/daytona/workspace/fmge-schedule/FMGE_Schedule_Aug_Sep_2026.docx') xml = z.read('word/document.xml') ET.fromstring(xml) print('XML valid. Files:', len(z.namelist())) "
~/fmge-schedule/build_oct_nov.py
from docx import Document
from docx.shared import Pt, RGBColor, Inches, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_ALIGN_VERTICAL
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import io, os
doc = Document()
for section in doc.sections:
section.top_margin = Cm(1.5)
section.bottom_margin = Cm(1.5)
section.left_margin = Cm(1.8)
section.right_margin = Cm(1.8)
def hex_to_rgb(h):
h = h.lstrip('#')
return tuple(int(h[i:i+2], 16) for i in (0, 2, 4))
def set_cell_bg(cell, hex_color):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear')
shd.set(qn('w:color'), 'auto')
shd.set(qn('w:fill'), hex_color.lstrip('#'))
tcPr.append(shd)
def set_cell_borders(cell, color="AACCE0"):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
tcBorders = OxmlElement('w:tcBorders')
for side in ['top', 'left', 'bottom', 'right']:
border = OxmlElement(f'w:{side}')
border.set(qn('w:val'), 'single')
border.set(qn('w:sz'), '4')
border.set(qn('w:space'), '0')
border.set(qn('w:color'), color.lstrip('#'))
tcBorders.append(border)
tcPr.append(tcBorders)
def cell_text(cell, text, bold=False, font_size=9, color="000000", align=WD_ALIGN_PARAGRAPH.LEFT):
cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER
p = cell.paragraphs[0]
p.alignment = align
run = p.add_run(text)
run.bold = bold
run.font.size = Pt(font_size)
r, g, b = hex_to_rgb(color)
run.font.color.rgb = RGBColor(r, g, b)
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
mar = OxmlElement('w:tcMar')
for side in ['top', 'bottom', 'left', 'right']:
m = OxmlElement(f'w:{side}')
m.set(qn('w:w'), '80')
m.set(qn('w:type'), 'dxa')
mar.append(m)
tcPr.append(mar)
def add_title_para(doc, text, sub=""):
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
pPr = p._p.get_or_add_pPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear'); shd.set(qn('w:color'), 'auto'); shd.set(qn('w:fill'), '1A3A5C')
pPr.append(shd)
sp = OxmlElement('w:spacing'); sp.set(qn('w:before'), '120'); sp.set(qn('w:after'), '120')
pPr.append(sp)
run = p.add_run(text)
run.bold = True; run.font.size = Pt(20); run.font.color.rgb = RGBColor(0xFF,0xFF,0xFF)
if sub:
p2 = doc.add_paragraph()
p2.alignment = WD_ALIGN_PARAGRAPH.CENTER
pPr2 = p2._p.get_or_add_pPr()
shd2 = OxmlElement('w:shd')
shd2.set(qn('w:val'), 'clear'); shd2.set(qn('w:color'), 'auto'); shd2.set(qn('w:fill'), '1A3A5C')
pPr2.append(shd2)
r2 = p2.add_run(sub)
r2.font.size = Pt(11); r2.font.color.rgb = RGBColor(0xD6,0xE8,0xF7)
def add_section_heading(doc, text, fill="2E6DA4", text_color="FFFFFF"):
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.LEFT
pPr = p._p.get_or_add_pPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear'); shd.set(qn('w:color'), 'auto'); shd.set(qn('w:fill'), fill.lstrip('#'))
pPr.append(shd)
sp = OxmlElement('w:spacing'); sp.set(qn('w:before'), '160'); sp.set(qn('w:after'), '80')
pPr.append(sp)
run = p.add_run(f" {text}")
run.bold = True; run.font.size = Pt(12)
r, g, b = hex_to_rgb(text_color)
run.font.color.rgb = RGBColor(r, g, b)
def add_body(doc, text, bold=False, indent=True):
p = doc.add_paragraph()
if indent: p.paragraph_format.left_indent = Inches(0.25)
run = p.add_run(text)
run.bold = bold; run.font.size = Pt(9.5)
sp = OxmlElement('w:spacing'); sp.set(qn('w:before'), '40'); sp.set(qn('w:after'), '40')
p._p.get_or_add_pPr().append(sp)
def add_spacer(doc):
p = doc.add_paragraph()
sp = OxmlElement('w:spacing'); sp.set(qn('w:before'), '40'); sp.set(qn('w:after'), '40')
p._p.get_or_add_pPr().append(sp)
def add_colored_para(doc, text, fill="D6E8F7", text_color="1A3A5C", bold=True, size=9.5):
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
pPr = p._p.get_or_add_pPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear'); shd.set(qn('w:color'), 'auto'); shd.set(qn('w:fill'), fill.lstrip('#'))
pPr.append(shd)
run = p.add_run(text)
run.bold = bold; run.font.size = Pt(size)
r, g, b = hex_to_rgb(text_color)
run.font.color.rgb = RGBColor(r, g, b)
def add_schedule_table(doc, rows):
headers = ["TIME", "ACTIVITY", "DETAILS / CEREBELLUM TASK", "DURATION"]
widths = [Inches(1.2), Inches(2.0), Inches(3.5), Inches(0.9)]
tbl = doc.add_table(rows=1, cols=4)
tbl.style = 'Table Grid'
for i, (h, w) in enumerate(zip(headers, widths)):
cell = tbl.rows[0].cells[i]
cell.width = w
set_cell_bg(cell, '1A3A5C'); set_cell_borders(cell, '2E6DA4')
cell_text(cell, h, bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
for row in rows:
tr = tbl.add_row()
bg = row[4] if len(row) > 4 else 'FFFFFF'
data = [row[0], row[1], row[2], row[3]]
aligns = [WD_ALIGN_PARAGRAPH.CENTER, WD_ALIGN_PARAGRAPH.LEFT, WD_ALIGN_PARAGRAPH.LEFT, WD_ALIGN_PARAGRAPH.CENTER]
bolds = [False, True if any(e in row[1] for e in ['๐ง ','๐','๐ด','๐']) else False, False, False]
for i, (d, a, b) in enumerate(zip(data, aligns, bolds)):
cell = tr.cells[i]
set_cell_bg(cell, bg); set_cell_borders(cell, 'AACCE0')
cell_text(cell, d, bold=b, font_size=8.5, color='111111', align=a)
def add_week_table(doc, rows, accent='C0392B'):
headers = ["WEEK", "SUBJECT\n(FMGE Qs)", "KEY TOPICS TO COVER", "CEREBELLUM\nMCQs/Day"]
widths = [Inches(0.9), Inches(1.3), Inches(4.4), Inches(1.0)]
tbl = doc.add_table(rows=1, cols=4)
tbl.style = 'Table Grid'
for i, (h, w) in enumerate(zip(headers, widths)):
cell = tbl.rows[0].cells[i]
cell.width = w
set_cell_bg(cell, accent); set_cell_borders(cell, accent)
cell_text(cell, h, bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
for idx, row in enumerate(rows):
tr = tbl.add_row()
alt = 'FADBD8' if idx % 2 == 0 else 'FFFFFF'
for i, d in enumerate(row):
cell = tr.cells[i]
set_cell_bg(cell, alt); set_cell_borders(cell, 'F5B7B1')
aligns = [WD_ALIGN_PARAGRAPH.CENTER, WD_ALIGN_PARAGRAPH.CENTER, WD_ALIGN_PARAGRAPH.LEFT, WD_ALIGN_PARAGRAPH.CENTER]
bolds = [True, True, False, True]
colors = ['C0392B', '1A3A5C', '111111', '27AE60']
cell_text(cell, d, bold=bolds[i], font_size=8.5, color=colors[i], align=aligns[i])
def add_tips_table(doc, tips, accent='27AE60'):
tbl = doc.add_table(rows=0, cols=2)
tbl.style = 'Table Grid'
for idx, tip in enumerate(tips):
tr = tbl.add_row()
alt = 'D5F5E3' if idx % 2 == 0 else 'FFFFFF'
c0 = tr.cells[0]; c0.width = Inches(0.4)
set_cell_bg(c0, accent); set_cell_borders(c0, accent)
cell_text(c0, str(idx + 1), bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
c1 = tr.cells[1]
set_cell_bg(c1, alt); set_cell_borders(c1, 'A9DFBF')
cell_text(c1, tip, font_size=8.5, color='111111')
def add_milestone_table(doc, rows, accent='C0392B'):
tbl = doc.add_table(rows=1, cols=3)
tbl.style = 'Table Grid'
for i, h in enumerate(["CHECKPOINT", "TARGET", "DONE?"]):
c = tbl.rows[0].cells[i]
set_cell_bg(c, accent); set_cell_borders(c, accent)
cell_text(c, h, bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
for idx, row in enumerate(rows):
tr = tbl.add_row()
alt = 'FADBD8' if idx % 2 == 0 else 'FFFFFF'
for i, d in enumerate(row):
cell = tr.cells[i]
set_cell_bg(cell, alt); set_cell_borders(cell, 'F5B7B1')
aligns = [WD_ALIGN_PARAGRAPH.CENTER, WD_ALIGN_PARAGRAPH.LEFT, WD_ALIGN_PARAGRAPH.CENTER]
bolds = [True, False, False]
cell_text(cell, d, bold=bolds[i], font_size=8.5, color='111111', align=aligns[i])
def add_hy_table(doc, rows, accent='7D3C98'):
tbl = doc.add_table(rows=1, cols=2)
tbl.style = 'Table Grid'
for i, h in enumerate(["SUBJECT", "MUST-KNOW HIGH-YIELD AREAS FOR FMGE"]):
c = tbl.rows[0].cells[i]
set_cell_bg(c, accent); set_cell_borders(c, accent)
cell_text(c, h, bold=True, font_size=9, color='FFFFFF', align=WD_ALIGN_PARAGRAPH.CENTER)
for idx, row in enumerate(rows):
tr = tbl.add_row()
alt = 'E8DAEF' if idx % 2 == 0 else 'FFFFFF'
for i, d in enumerate(row):
cell = tr.cells[i]
set_cell_bg(cell, alt); set_cell_borders(cell, 'D2B4DE')
bolds = [True, False]
colors = ['7D3C98', '111111']
aligns = [WD_ALIGN_PARAGRAPH.CENTER, WD_ALIGN_PARAGRAPH.LEFT]
cell_text(cell, d, bold=bolds[i], font_size=8.5, color=colors[i], align=aligns[i])
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# CONTENT
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_title_para(doc,
"FMGE PREPARATION SCHEDULE | OCTOBER โ NOVEMBER 2026",
"Cerebellum App โข Phase 2: Clinical Subjects โข FMGE Jan 7, 2027")
add_spacer(doc)
add_colored_para(doc,
"PHASE 2 OVERVIEW: The Big Clinical Subjects โ This Phase Decides Your Result",
fill='FADBD8', text_color='C0392B', bold=True, size=10.5)
add_body(doc, "Subjects: Medicine (33 Qs) | Surgery (32 Qs) | OBG (30 Qs) | PSM (30 Qs) | Pediatrics (15 Qs) | ENT (15 Qs) | Ophthalmology (15 Qs)", bold=True)
add_body(doc, "Combined = 170 questions = 57% of the entire FMGE paper. Mastering these = guaranteed pass.")
add_body(doc, "Daily study hours: 8โ9 hrs | MCQ target: 120โ150/day | Total MCQs in 2 months: ~7,000+")
add_body(doc, "Strategy shift: Clinical subjects need CASE-BASED thinking, not just memorization. Understand the LOGIC.")
add_spacer(doc)
# โโ DAILY SCHEDULE MON-SAT โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "DAILY STUDY SCHEDULE โ Monday to Saturday (Clinical Phase)", fill='C0392B')
add_spacer(doc)
daily_rows = [
["5:00 โ 5:30 AM", "Wake Up & Morning Routine", "Freshen up, light stretch, hydrate โ get mentally ready", "30 min", "FEF9E7"],
["5:30 โ 6:00 AM", "Previous Day Rapid Recall", "Cover your short notes from yesterday โ 10 min recall drill", "30 min", "FEF9E7"],
["6:00 โ 8:00 AM", "๐ง STUDY SESSION 1 (Theory)", "New clinical topic โ video lecture (Marrow/PrepLadder) + notes", "2 hrs", "D6E8F7"],
["8:00 โ 8:30 AM", "Breakfast + Break", "Eat, rest eyes, short outdoor walk if possible", "30 min", "FEF9E7"],
["8:30 โ 10:30 AM", "๐ง STUDY SESSION 2 (Theory)", "Continue topic โ focus on clinical features + investigations", "2 hrs", "D6E8F7"],
["10:30โ11:30 AM", "๐ MCQ Block 1 (Cerebellum)", "Topic-wise clinical Qs โ 60โ80 Qs, timed mode", "1 hr", "E8DAEF"],
["11:30AMโ12:00PM", "Mistake Analysis (Block 1)", "Review every wrong answer immediately โ write key fact down", "30 min", "FADBD8"],
["12:00 โ 1:00 PM", "Lunch + Rest", "Full break โ rest mind, 20 min nap if needed", "1 hr", "FEF9E7"],
["1:00 โ 3:00 PM", "๐ง STUDY SESSION 3 (Theory)", "New sub-topic OR treatment/management section of current topic", "2 hrs", "D6E8F7"],
["3:00 โ 3:30 PM", "Tea Break", "Walk, light snack โ no screens", "30 min", "FEF9E7"],
["3:30 โ 5:00 PM", "๐ MCQ Block 2 (Cerebellum)", "Subject-wise random + image-based Qs โ 60โ70 Qs", "1.5 hrs", "E8DAEF"],
["5:00 โ 5:30 PM", "Mistake Analysis (Block 2)", "Review wrong Qs โ update notes with missed points", "30 min", "FADBD8"],
["5:30 โ 7:00 PM", "๐ด PYQ Practice (Cerebellum)", "Solve previous year Qs from today's topic/subject", "1.5 hrs", "FEF3CD"],
["7:00 โ 8:00 PM", "Dinner + Free Time", "Completely relax โ no study during dinner", "1 hr", "FEF9E7"],
["8:00 โ 9:00 PM", "๐ REVISION SESSION", "Re-read today's short notes + key tables + drug of choice lists","1 hr", "D5F5E3"],
["9:00 โ 9:30 PM", "Daily Summary + Planning", "Write 5 key clinical facts, plan tomorrow's topic", "30 min", "FEF9E7"],
["9:30 โ 10:00 PM", "Light Revision (Optional)", "High-yield tables, mnemonics, recent guideline updates only", "30 min", "EAF0F6"],
["10:00 PM", "SLEEP", "7 hours minimum โ non-negotiable for clinical retention", "โ", "FEF9E7"],
]
add_schedule_table(doc, daily_rows)
add_spacer(doc)
add_colored_para(doc,
"Total Active Study: ~8.5 hours/day | Daily MCQ Target: 120โ150 Qs | Daily PYQs: 30โ40 Qs",
fill='D5F5E3', text_color='1E8449', bold=True, size=9.5)
add_spacer(doc)
# โโ SUNDAY โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "SUNDAY SCHEDULE โ Weekly Review + Full Mock Day", fill='E07B39')
add_spacer(doc)
sunday_rows = [
["7:00 โ 8:00 AM", "Wake Up + Light Morning", "Review this week's short notes summary (15 min only)", "1 hr", "FEF9E7"],
["8:00 โ 10:30 AM", "๐ Full Mock Test", "300-Q or 150-Q timed mock on Cerebellum โ full exam simulation", "2.5 hrs", "E8DAEF"],
["10:30AMโ12:00PM", "Mock Analysis + Weak Spotting", "Go through EVERY wrong answer โ identify subject-wise weak areas","1.5 hrs", "FADBD8"],
["12:00 โ 1:00 PM", "Lunch + Rest", "Full break", "1 hr", "FEF9E7"],
["1:00 โ 3:00 PM", "Weak Topic Deep Dive", "Pick the 2 lowest-scoring subjects from mock โ revise concepts", "2 hrs", "D6E8F7"],
["3:00 โ 5:00 PM", "๐ PYQ Marathon", "Solve PYQs from any 2 subjects covered this week", "2 hrs", "D5F5E3"],
["5:00 โ 6:00 PM", "Notes Update", "Add new points to short notes from mock and PYQ analysis", "1 hr", "EAF0F6"],
["6:00 PM onwards", "Family / Personal Time", "Completely switch off โ recovery is part of the strategy", "โ", "FEF9E7"],
]
add_schedule_table(doc, sunday_rows)
add_spacer(doc)
# โโ PAGE BREAK โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
doc.add_page_break()
# โโ OCTOBER WEEK PLAN โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "OCTOBER WEEK-BY-WEEK PLAN โ Medicine โ Surgery โ OBG โ PSM", fill='C0392B')
add_spacer(doc)
oct_weeks = [
["Week 1\nOct 1โ7",
"Medicine\n(33 Qs)",
"CVS: IHD, heart failure, hypertension, valvular diseases, ECG interpretation, arrhythmias\nRespiratory: Pneumonia, TB, COPD, asthma, pleural effusion, lung cancer",
"100โ120 Qs"],
["Week 2\nOct 8โ14",
"Medicine\n(33 Qs)",
"Nephrology: AKI, CKD, nephrotic/nephritic syndromes, RTA\nNeurology: Stroke, meningitis, Parkinson's, epilepsy, dementia\nEndocrine: Diabetes, thyroid disorders, adrenal diseases, pituitary",
"100โ120 Qs"],
["Week 3\nOct 15โ21",
"Medicine\n(33 Qs)",
"GI: GERD, peptic ulcer, IBD, liver cirrhosis, hepatitis, pancreatitis\nRheumatology: RA, SLE, gout, ankylosing spondylitis\nHaematology: Anaemias, leukaemias, coagulation disorders",
"100โ120 Qs"],
["Week 4\nOct 22โ28",
"Surgery\n(32 Qs)",
"GI Surgery: Appendicitis, cholecystitis, intestinal obstruction, hernia, colorectal Ca\nThyroid & Breast: Goiter, thyroid Ca, breast Ca, mastitis, fibroadenoma\nVascular: DVT, varicose veins, peripheral arterial disease",
"100โ120 Qs"],
["Week 5\nOct 29โ31",
"Surgery\n(32 Qs)",
"Urology: BPH, renal calculi, bladder Ca, urethral stricture\nTrauma & Surgical Principles: ATLS, wound healing, burns, blood transfusion, sterilisation\nAnaesthesia basics: Pre-op assessment, local anaesthesia, complications",
"60โ80 Qs"],
]
add_week_table(doc, oct_weeks, accent='C0392B')
add_spacer(doc)
# โโ NOVEMBER WEEK PLAN โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "NOVEMBER WEEK-BY-WEEK PLAN โ OBG โ PSM โ Pediatrics โ ENT โ Ophthalmology", fill='7D3C98')
add_spacer(doc)
nov_weeks = [
["Week 1\nNov 1โ7",
"OBG\n(30 Qs)",
"Normal Obstetrics: ANC, fetal development, normal labour (stages), puerperium\nAbnormal Obstetrics: PIH/pre-eclampsia, APH (placenta previa, abruption), PPH, preterm labour, PROM",
"100โ120 Qs"],
["Week 2\nNov 8โ14",
"OBG\n(30 Qs)",
"Gynecology: Menstrual disorders (PCOS, fibroids, endometriosis), cervical Ca, ovarian tumours\nContraception: OCP, IUDs, sterilisation, emergency contraception\nInfertility: Causes, investigations, treatment options",
"100โ120 Qs"],
["Week 3\nNov 15โ21",
"PSM\n(30 Qs)",
"Epidemiology: Study designs, measures of disease frequency (incidence, prevalence), bias, association vs causation\nBiostatistics: Mean/SD/SEM, sensitivity/specificity, p-value, confidence intervals, screening tests\nNational Health Programs: RCH, NVBDCP, NTEP, NPCDCS, immunisation schedule, NHM",
"100โ120 Qs"],
["Week 4\nNov 22โ28",
"PSM cont. +\nPediatrics (15 Qs)",
"PSM: Nutrition (PEM, vitamins, food fortification), environment health (water, air, waste), vital statistics\nPediatrics: Growth & development milestones, neonatology (birth asphyxia, jaundice, NEC), vaccine schedule\nPediatric diseases: Respiratory (pneumonia, asthma), GI (diarrhoea, intussusception), nephrotic syndrome",
"100โ120 Qs"],
["Week 5\nNov 29โ30",
"ENT (15 Qs) +\nOphthalmology (15 Qs)",
"ENT: CSOM (types, complications), otosclerosis, SNHL, sinusitis, laryngeal Ca, epistaxis management\nOphthalmology: Glaucoma (types, drugs), cataract, retinal detachment, uveitis, squint, corneal ulcer, trachoma",
"60โ80 Qs"],
]
add_week_table(doc, nov_weeks, accent='7D3C98')
add_spacer(doc)
# โโ PAGE BREAK โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
doc.add_page_break()
# โโ HIGH YIELD AREAS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "HIGH-YIELD AREAS PER CLINICAL SUBJECT (FMGE Pattern)", fill='7D3C98')
add_spacer(doc)
hy_rows = [
["Medicine\n(33 Qs)",
"Drug of choice lists (must memorise), ECG patterns (MI, arrhythmias, blocks), Jones criteria for RF, SLE criteria, diabetic complications & management, thyroid function tests interpretation, nephrotic vs nephritic syndrome differences"],
["Surgery\n(32 Qs)",
"Hernia types & contents, Courvoisier's law, Murphy's sign, staging of cancers (TNM), wound healing phases, types of shock, blood transfusion reactions, pre-op/post-op complications, sterilisation methods"],
["OBG\n(30 Qs)",
"Bishops score, partogram interpretation, APGAR scoring, Obstetric conjugate vs True conjugate, placenta previa grading, Sheffield table (gestational age landmarks), contraceptive failure rates, PCOS criteria, Bethesda system for Pap smear"],
["PSM\n(30 Qs)",
"Sensitivity vs Specificity (formulas), vaccine cold chain & storage temperatures, National Health Program targets & goals, notifiable diseases, attributable risk vs relative risk, case fatality rate vs mortality rate, ASHA role"],
["Pediatrics\n(15 Qs)",
"Developmental milestones (motor, language, social) at key ages, vaccination schedule (India), WHO classification of PEM, fluid management in diarrhoea (ORS), neonatal jaundice thresholds, paediatric dose calculations"],
["ENT\n(15 Qs)",
"Safe vs unsafe CSOM (key differences), cholesteatoma features, Rinne & Weber test interpretation, otosclerosis (Schwartze sign), Trotter's triad, Killian's dehiscence, voice disorders (laryngeal pathologies)"],
["Ophthalmology\n(15 Qs)",
"Glaucoma types (open vs closed angle, drugs used), RAPD (afferent pupillary defect), Kayser-Fleischer ring, trachoma stages (WHO), retinoblastoma (leukocoria), corneal ulcer management, squint types (convergent vs divergent)"],
]
add_hy_table(doc, hy_rows)
add_spacer(doc)
# โโ CLINICAL STRATEGY TIPS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "CLINICAL PHASE STRATEGY โ How to Approach These Subjects", fill='C0392B')
add_spacer(doc)
tips = [
"MEDICINE: Build a 'Drug of Choice' master list as you go โ FMGE loves asking first-line treatment. Add to it every day.",
"SURGERY: For each condition, remember the TRIAD: Presentation โ Investigation of choice โ Treatment. This covers 90% of Qs.",
"OBG: Obstetrics and Gynecology have the most formula-based and value-based questions in FMGE. Memorise all normal values, Bishop score, APGAR, and timelines.",
"PSM: Biostatistics formulas MUST be at your fingertips. 2x2 tables for sensitivity/specificity. National program data is directly asked โ revise yearly.",
"Use CEREBELLUM image-based Qs heavily for Ophthalmology and ENT โ FMGE includes clinical images (fundus photos, ear drums, throat, X-rays).",
"For each disease, practice answering: 'What is the MOST LIKELY diagnosis?' and 'What is the NEXT BEST STEP?' โ these are the 2 most common FMGE question formats.",
"Pediatrics vaccine schedule is DIRECTLY asked in FMGE โ know the IAP immunisation schedule cold (age, route, dose, interval).",
"FMGE repeats clinical scenario questions from previous papers. After each subject, do at least 2 years' PYQs from that subject on Cerebellum.",
]
add_tips_table(doc, tips, accent='C0392B')
add_spacer(doc)
# โโ MILESTONES โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "END-OF-MONTH MILESTONES โ Check on Oct 31 & Nov 30", fill='E07B39')
add_spacer(doc)
add_colored_para(doc, "October 31 Targets", fill='FADBD8', text_color='C0392B', bold=True, size=10)
milestone_oct = [
["Medicine", "All 3 weeks done (CVS, Respiratory, Nephro, Neuro, Endo, GI, Rheum, Haem), accuracy > 60%", "[ ]"],
["Surgery", "GI, Thyroid, Breast, Vascular, Urology, Trauma complete, accuracy > 60%", "[ ]"],
["PYQs", "Medicine + Surgery PYQ sets completed on Cerebellum", "[ ]"],
["MCQs", "Total cumulative (all subjects): ~10,000+ MCQs solved", "[ ]"],
["Mock Tests", "4 Sunday mocks done, score trending above 140/300", "[ ]"],
["Drug List", "Personal 'Drug of Choice' master list updated for Medicine + Surgery", "[ ]"],
]
add_milestone_table(doc, milestone_oct, accent='C0392B')
add_spacer(doc)
add_colored_para(doc, "November 30 Targets", fill='E8DAEF', text_color='7D3C98', bold=True, size=10)
milestone_nov = [
["OBG", "Obstetrics + Gynecology + Contraception fully complete, accuracy > 60%", "[ ]"],
["PSM", "Epidemiology, Biostatistics, NHPs, Nutrition complete โ formulas memorised", "[ ]"],
["Pediatrics", "Growth milestones, vaccine schedule, common diseases complete", "[ ]"],
["ENT + Ophtho", "Both complete, image-based Qs practiced, accuracy > 60%", "[ ]"],
["MCQs", "Cumulative total (all subjects to date): ~17,000+ MCQs solved", "[ ]"],
["Mock Tests", "8 Sunday mocks done since Aug โ latest score consistently above 150/300", "[ ]"],
["Revision", "First GRAND REVISION of all subjects started in last week of November", "[ ]"],
]
add_milestone_table(doc, milestone_nov, accent='7D3C98')
add_spacer(doc)
# โโ WHAT'S NEXT โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_section_heading(doc, "WHAT COMES NEXT โ December to January 6 (Final Sprint)", fill='2E6DA4')
add_spacer(doc)
add_body(doc, "December 1โ15: Complete minor subjects (FMT, Derma, Psychiatry, Ortho, Anaes, Radio โ 35 Qs total)", bold=True)
add_body(doc, "December 16โ31: Grand Revision of ALL subjects. Full 300-Q mock tests daily. Target 160+ per mock.")
add_body(doc, "January 1โ6: Short notes only. No new topics. Sleep 8 hrs/night. Light revision from personal notes.")
add_body(doc, "January 7: EXAM DAY โ Attempt ALL 300 questions (no negative marking). Trust your preparation.")
add_spacer(doc)
# โโ CLOSING โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
add_title_para(doc,
'"The clinical subjects are the battle. Win them, and FMGE is yours."',
"FMGE Jan 7, 2027 | Target: 150+/300 | Phase 2: Own the clinicals!")
# โโ SAVE โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
out = "/home/daytona/workspace/fmge-schedule/FMGE_Schedule_Oct_Nov_2026.docx"
buf = io.BytesIO()
doc.save(buf)
buf.seek(0)
with open(out, 'wb') as f:
f.write(buf.read())
print(f"SUCCESS: {out} ({os.path.getsize(out):,} bytes)")
cd /home/daytona/workspace/fmge-schedule && python3 build_oct_nov.py 2>&1
python3 -c " import zipfile, xml.etree.ElementTree as ET z = zipfile.ZipFile('/home/daytona/workspace/fmge-schedule/FMGE_Schedule_Oct_Nov_2026.docx') xml = z.read('word/document.xml') ET.fromstring(xml) print('XML valid. Files:', len(z.namelist())) # Also verify Aug-Sep fixed file z2 = zipfile.ZipFile('/home/daytona/workspace/fmge-schedule/FMGE_Schedule_Aug_Sep_2026.docx') xml2 = z2.read('word/document.xml') ET.fromstring(xml2) print('Aug-Sep also valid. Files:', len(z2.namelist())) "
FMGE Schedule Aug Sep 2026
Word Document ยท DOCX
FMGE Schedule Oct Nov 2026
Word Document ยท DOCX
| Section | Details |
|---|---|
| Phase 2 Overview | Why this phase decides your result (170 Qs = 57% of paper) |
| Daily Schedule (Mon-Sat) | 8.5 hrs/day with 2 MCQ blocks + dedicated PYQ time + mistake analysis |
| Sunday Schedule | Full 300-Q mock + deep weak-topic revision |
| October Week Plan | Week 1-3: Medicine (CVS, Resp, Nephro, Neuro, Endo, GI, Rheum) + Week 4-5: Surgery |
| November Week Plan | Week 1-2: OBG + Week 3-4: PSM + Pediatrics + Week 5: ENT + Ophthalmology |
| High-Yield Areas | Subject-wise FMGE-specific must-know points for all 7 subjects |
| Clinical Strategy Tips | 8 tips specific to clinical subject MCQ approach |
| Oct 31 + Nov 30 Milestones | Checklist to self-assess progress |
| December-January Preview | Brief roadmap for the final sprint phase |