hi can you guide me to prepare for fmge exam January 7 th

Asking for Preferences

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?

Searching the Web

FMGE January 2027 exam syllabus pattern subject wise weightage

Great - you have about 6 months (July 2026 to January 7, 2027), you're starting fresh, and you can put in 8+ hours a day. That's actually a very solid position. Here's your complete FMGE preparation roadmap:

FMGE January 7, 2027 - Complete Preparation Guide

Exam at a Glance

  • 300 MCQs | 300 minutes (5 hours) | Split into Part A & Part B (150 Qs each)
  • No negative marking - attempt every question
  • Passing mark: 150/300 (50%)
  • Computer-based test, English only

Subject-Wise Marks Distribution (Official Blueprint)

SubjectQuestions
Medicine33
General Surgery32
OBG30
PSM / Community Medicine30
Anatomy17
Physiology17
Biochemistry17
Pediatrics15
Ophthalmology15
ENT15
Pathology13
Microbiology13
Pharmacology13
Forensic Medicine10
Dermatology5
Psychiatry5
Anesthesia5
Orthopedics5
Radiodiagnosis5
Radiotherapy5
Key insight: Medicine + Surgery + OBG + PSM alone = 125 questions (42%) of the paper. These are your non-negotiable priority subjects.

6-Month Phase-Wise Study Plan

Phase 1: Foundation (July 1 - August 31 - 2 months)

Build conceptual clarity in high-yield preclinical + clinical basics.
Daily schedule (8+ hours):
  • Morning (4 hrs): New subject theory - video lectures (Dr. Bhatia / Marrow / PrepLadder)
  • Afternoon (2 hrs): MCQ practice (subject-specific - at least 50 Qs/day)
  • Evening (2 hrs): Revision of previous day's topic + notes making
Subject order to follow:
  1. Anatomy (17 Qs - do Upper Limb, Lower Limb, Neuroanatomy, embryology)
  2. Physiology (17 Qs - CVS, Respiratory, Renal, Neurophysiology)
  3. Biochemistry (17 Qs - enzymes, metabolism, vitamins, molecular biology)
  4. Pathology (13 Qs - general pathology, systemic pathology)
  5. Pharmacology (13 Qs - general pharmacology + high-yield drug classes)
  6. Microbiology (13 Qs - bacteriology, virology, parasitology)

Phase 2: Clinical Core (September 1 - October 31 - 2 months)

The big four clinical subjects that decide pass/fail.
Daily schedule:
  • Morning (4 hrs): Clinical subject theory + standard textbook/notes
  • Afternoon (3 hrs): MCQ bank solving (Marrow / DAMS / Across)
  • Evening (1.5 hrs): Revision + mistake analysis
Subject order:
  1. Medicine (33 Qs) - CVS, Respiratory, GI, Nephrology, Neurology, Endocrine, Rheumatology, Infectious diseases
  2. OBG (30 Qs) - Obstetrics (Normal + Abnormal), Gynecology, family planning, recent guidelines
  3. PSM / Community Medicine (30 Qs) - Epidemiology, Biostatistics, National Health Programs, vaccines, nutrition
  4. Surgery (32 Qs) - GI surgery, Thyroid, Breast, Vascular, Trauma, Urology basics
  5. Pediatrics (15 Qs) - Growth/Development, Neonatology, Respiratory, GI, Vaccines
  6. Ophthalmology (15 Qs) - Glaucoma, Retina, Cornea, Squint, Uveitis
  7. ENT (15 Qs) - Ear anatomy/diseases, Sinusitis, Larynx, Deafness

Phase 3: Revision + Minor Subjects (November 1 - December 15 - 1.5 months)

First 3 weeks (Nov 1-21): Minor subjects
  • Forensic Medicine (10 Qs)
  • Dermatology (5 Qs)
  • Psychiatry (5 Qs)
  • Anesthesia (5 Qs)
  • Ortho (5 Qs)
  • Radiodiagnosis (5 Qs)
  • Radiotherapy (5 Qs)
Next 3 weeks (Nov 22 - Dec 15): First Grand Revision
  • Revise ALL subjects systematically using short notes
  • Solve previous year question (PYQ) papers - last 10 years minimum
  • 100 MCQs per day mandatory

Phase 4: Grand Test Series + Final Revision (December 16 - January 6)

  • Full-length mock tests daily (DAMS / Marrow / PrepLadder grand tests)
  • Analyze every wrong answer - understand WHY you got it wrong
  • Revise only from your short notes - no new topics
  • Target: 150+ in every mock before exam day
  • Sleep 7-8 hours from Dec 25 onwards - rest is part of preparation

Best Resources for Each Subject

SubjectRecommended Book/Source
AnatomyBD Chaurasia (key chapters) + Across
PhysiologyGanong / AK Jain Rapid Review
BiochemistryVasudevan + PrepLadder notes
PathologyHarsh Mohan or Robins Review
PharmacologyKD Tripathi key drug tables
MicrobiologyAnanthnarayan or Rachna Chaurasia
MedicineHarrison's Review MCQ / API Medicine
SurgeryBailey & Love MCQ / SRB Surgery
OBGDutta Obstetrics + Shaw's Gynecology
PSMPark's Textbook of PSM (essential)
PediatricsOP Ghai / Meharban Singh
FMTReddy's FMT
For MCQ practice: Marrow, PrepLadder, DAMS, or Across (pick ONE platform and stick to it)

Weekly Targets

WeekTarget
Each week in Phase 1 & 2Complete 1 subject theory + 300 MCQs solved
Each week in Phase 3700+ MCQs solved, 2 subjects fully revised
Each week in Phase 42 full mock tests, analyze 100% of mistakes

Key Tips for FMGE Success

  1. PYQs are gold - solve last 10 years' papers topic-wise. FMGE repeats questions frequently.
  2. No negative marking - never leave a question blank. Even a guess gives you a 25% chance.
  3. Diagrams and images - FMGE asks image-based questions (X-rays, histology, clinical photos). Practice image recognition.
  4. PSM and OBG - these 60 questions are highly scorable and formula/fact-based. Don't neglect them.
  5. Short notes - make one-page summaries for each subject as you go. You'll use these in the final month.
  6. Test yourself weekly - don't just read. Solve MCQs after every topic, not at the end.

Milestones to Track Your Progress

  • End of Phase 1 (Aug 31): Comfortable with all preclinical subjects, 2000+ MCQs solved
  • End of Phase 2 (Oct 31): All clinical subjects covered, 5000+ MCQs solved
  • End of Phase 3 (Dec 15): All subjects revised once, PYQs done, mock test scores crossing 130+
  • Exam week: Mock scores consistently above 150, short notes revision only
You have a strong 6-month window and 8+ hours a day - that is more than enough to clear FMGE comfortably if you stay consistent. The biggest differentiator is daily MCQ practice and regular revision - theory reading alone won't work.
Would you like me to break down any specific subject in more detail, or create a day-by-day schedule for a specific month?

iam prepping from august and doin cerebellum

Reading File
Finding Sources
Finding Sources
Reading File
Reading File
Finding Sources
Reading File
Finding Sources
Loading Image
Finding Sources

e

i meant cerebellum app iam using to study and prepping from august

Got it! You're using the Cerebellum app and starting prep from August - that gives you about 5 months (Aug 1 to Jan 7). That's a solid timeline.
Here's how to make the best use of Cerebellum for FMGE:

FMGE Prep with Cerebellum App - 5 Month Plan

About Cerebellum for FMGE

Cerebellum is well-suited for FMGE because it focuses on:
  • High-yield MCQ banks with explanations
  • Spaced repetition (so you retain what you study)
  • Subject-wise and topic-wise filtering
  • Previous year question (PYQ) practice

Month-by-Month Plan (Aug - Jan)

Month 1 - August: Preclinical Subjects

Daily: 8+ hrs | Target: 80-100 Qs/day on Cerebellum
WeekSubjectCerebellum Focus
Week 1AnatomyNeuroanatomy, Upper & Lower Limb, Embryology
Week 2PhysiologyCVS, Respiratory, Renal, Neuro
Week 3BiochemistryMetabolism, Enzymes, Vitamins, Mol. Bio
Week 4PharmacologyGeneral pharmacology + high-yield drug classes
  • Use Cerebellum's topic-wise mode first (not random)
  • After finishing each topic, switch to subject-wise timed test

Month 2 - September: Para-clinical + Minor Clinical

Daily: 100 Qs/day
WeekSubject
Week 1Pathology (General + Systemic)
Week 2Microbiology (Bacteriology, Virology, Parasitology)
Week 3Forensic Medicine + Dermatology + Psychiatry
Week 4Ophthalmology (15 Qs in exam - don't underestimate)

Month 3 - October: Big 4 Clinical Subjects (Most Important Month)

Daily: 120 Qs/day | These 4 subjects = 125/300 questions
WeekSubjectKey Areas
Week 1Medicine (33 Qs)CVS, Respiratory, Nephrology, Neurology, Endocrine
Week 2Surgery (32 Qs)GI, Thyroid, Breast, Trauma, Urology
Week 3OBG (30 Qs)Normal/Abnormal Obstetrics, Gynecology, Contraception
Week 4PSM (30 Qs)Epidemiology, Biostatistics, National Programs, Vaccines
  • PSM tip: Cerebellum's PSM section is excellent - do every single question in it. PSM is fully scorable.

Month 4 - November: ENT + Pediatrics + Grand Revision Round 1

WeekTask
Week 1ENT (15 Qs) + Pediatrics (15 Qs) + Ortho/Anaes/Radio (20 Qs)
Week 2-4First full revision of ALL subjects on Cerebellum
  • Use Cerebellum's "Incorrect Questions" filter - revise only what you got wrong
  • Use spaced repetition reminders - don't skip them
  • Target: 150+ Qs/day in revision mode

Month 5 - December to Jan 6: Mock Tests + Final Revision

This month decides your result
WeekTask
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-6Very light revision, sleep well, no new topics

Tips for Using Cerebellum Effectively

  1. Don't just read explanations - mark difficult Qs for re-attempt in 3 days
  2. Use the PYQ filter - FMGE repeats questions, PYQs are gold
  3. Timed tests matter - 300 Qs in 300 minutes = 1 min/question. Practice speed
  4. Track your subject-wise score in the app - anything below 60% needs extra attention
  5. Do at least 5,000-6,000 total questions before exam day - volume matters in FMGE

Subject Priority (by exam weight)

PrioritySubjectsQs in Exam
๐Ÿ”ด Must aceMedicine, Surgery, OBG, PSM125
๐ŸŸ  High yieldAnatomy, Physiology, Biochem, ENT, Ophtho, Peds96
๐ŸŸก Don't skipPatho, Micro, Pharma, FMT49
๐ŸŸข BonusDerma, Psych, Ortho, Anaes, Radio, RT30

Starting in August with 5 months and 8+ hours/day using Cerebellum is a very realistic plan to clear FMGE. Stick to the schedule, keep daily MCQ targets, and do NOT skip revision months.
Want me to break down any specific subject's high-yield topics for FMGE?

Generate a daily study schedule template for August-September

Reading File
Running Command

ls /home/daytona/workspace/ 2>/dev/null && echo "EXISTS" || mkdir -p /home/daytona/workspace/fmge-schedule && echo "CREATED"

Writing File

~/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);
});
Running Command

cd /home/daytona/workspace/fmge-schedule && node create_schedule.js 2>&1

Running Command

python3 /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/workspace/fmge-schedule/FMGE_Study_Schedule_Aug_Sep.docx 2>&1

Running Command

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])"

Your schedule document is ready! Download it here:

FMGE Study Schedule Aug Sep

Word Document ยท DOCX


Here's what's inside the document:

What's Included

SectionContent
Daily Schedule (Mon-Sat)Hour-by-hour timetable from 5 AM to 10:30 PM with 8.5 hrs active study
Sunday ScheduleWeekly mock test + revision + PYQ day
August Week-by-Week PlanAnatomy (Wk 1-2) โ†’ Physiology (Wk 3-4) โ†’ Biochemistry start (Wk 5)
September Week-by-Week PlanBiochemistry complete โ†’ Pharmacology โ†’ Microbiology
MCQ TargetsDaily, weekly, and monthly targets (2,500+ Aug / 5,000+ cumulative)
High-Yield AreasPer-subject FMGE focus topics
Cerebellum App Tips8 specific tips to maximize the app
End-of-Month MilestonesCheckpoints for Aug 31 and Sep 30

Key Daily Targets Built Into the Schedule

  • 5:30 AM - Morning flashcard revision (Cerebellum incorrect Qs)
  • 6:00โ€“11:30 AM - Two theory study sessions (5 hrs)
  • 11:30 AM - First MCQ block on Cerebellum (60-80 Qs)
  • 1:30โ€“4:00 PM - Third study/revision session
  • 4:30โ€“6:30 PM - Second MCQ block (50-60 Qs)
  • 6:30 PM - Mistake analysis
  • 8:00โ€“9:30 PM - Same-day topic revision
  • Total: ~110-140 MCQs/day
Want me to create a similar schedule for October-November (the clinical subjects phase) as well?

Create a daily schedule template for October-November (clinical subjects)

the downloaded document is showing error

Let me fix the document. First let me diagnose the issue.
Running Command

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) "

Running Command

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]) "

The XML is valid. The issue is likely that the 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.
Running Command

python3 -c "import docx; print('python-docx OK', docx.__version__)"

Running Command

pip install --user python-docx -q && python3 -c "import docx; print('OK', docx.__version__)"

Writing File

~/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}")
Running Command

cd /home/daytona/workspace/fmge-schedule && python3 build_schedule.py 2>&1

Running Command

# 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

Running Command

# 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

The fix is to save via an in-memory buffer. Let me update the script and rebuild:
Editing File

~/fmge-schedule/build_schedule.py

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

cd /home/daytona/workspace/fmge-schedule && python3 build_schedule.py 2>&1

Running Command

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())) "

The fixed Aug-Sep document is ready. Now let me build the Oct-Nov clinical schedule in one shot using the same working approach:
Writing File

~/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)")
Running Command

cd /home/daytona/workspace/fmge-schedule && python3 build_oct_nov.py 2>&1

Running Command

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())) "

Both documents are ready and validated. Download them here:
Fixed Aug-Sep schedule (rebuilt with no errors):

FMGE Schedule Aug Sep 2026

Word Document ยท DOCX

New Oct-Nov Clinical Schedule:

FMGE Schedule Oct Nov 2026

Word Document ยท DOCX


What's in the Oct-Nov document:

SectionDetails
Phase 2 OverviewWhy 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 ScheduleFull 300-Q mock + deep weak-topic revision
October Week PlanWeek 1-3: Medicine (CVS, Resp, Nephro, Neuro, Endo, GI, Rheum) + Week 4-5: Surgery
November Week PlanWeek 1-2: OBG + Week 3-4: PSM + Pediatrics + Week 5: ENT + Ophthalmology
High-Yield AreasSubject-wise FMGE-specific must-know points for all 7 subjects
Clinical Strategy Tips8 tips specific to clinical subject MCQ approach
Oct 31 + Nov 30 MilestonesChecklist to self-assess progress
December-January PreviewBrief roadmap for the final sprint phase

Key change vs Aug-Sep schedule:

The Oct-Nov schedule has a dedicated PYQ block (5:30โ€“7:00 PM) added daily because clinical subjects have heavy PYQ repetition in FMGE, and a separate mistake analysis block after each MCQ session for deeper learning.
This is a shared conversation. Sign in to Orris to start your own chat.