Give a guide for prepaying my fmge exam

Searching the Web

FMGE exam 2026 preparation guide syllabus pattern passing tips

Searching the Web

FMGE Foreign Medical Graduate Examination best books strategy 2025 2026

Reading Web Page

https://www.doctutorials.com/fmge/fmge-exam-preparation-tips

Here is a complete guide to preparing for the FMGE (Foreign Medical Graduate Examination):

FMGE Preparation Guide (2026)

What is FMGE?

The Foreign Medical Graduate Examination is a licensing exam conducted by the National Board of Examinations (NBE) for Indian citizens who completed their MBBS abroad. You must pass it to practice medicine in India.

Exam Pattern at a Glance

FeatureDetails
Conducted byNational Board of Examinations (NBE)
FrequencyTwice a year (June & December)
ModeOnline - Computer Based Test (CBT)
Total Questions300 MCQs
Duration2 parts x 2.5 hours (break in between)
Passing Marks150 / 300 (50%)
Negative MarkingNone
LanguageEnglish only

Subject-wise Marks Distribution

Pre-Clinical & Para-Clinical (100 marks)

SubjectQuestions
Anatomy17
Physiology17
Biochemistry17
Pathology13
Microbiology13
Pharmacology13
Forensic Medicine10

Clinical Subjects (200 marks)

SubjectQuestions
Medicine33
General Surgery32
Obstetrics & Gynaecology30
Community Medicine (PSM)30
Pediatrics15
Ophthalmology15
ENT15
Psychiatry5
Dermatology & STD5
Anaesthesiology5
Orthopaedics5
Radiodiagnosis5

Study Timeline (6-12 Month Plan)

Target 800-1000 total study hours - roughly 4-6 hours/day.

Phase 1 - Foundation (Months 1-3)

  • Read through all pre-clinical subjects (Anatomy, Physiology, Biochemistry)
  • Use standard textbooks or video lectures for concept clarity
  • Start making short notes from day one

Phase 2 - Clinical Build-up (Months 3-5)

  • Cover all clinical subjects in order of weightage: Medicine > Surgery > OBG > PSM > Pediatrics > Ophthalmology > ENT
  • Begin solving subject-wise MCQs as you finish each topic

Phase 3 - Revision + Practice (Month 5-6 onward)

  • Full-syllabus revision (target 3-4 rounds minimum)
  • Attempt 1 full mock test per week
  • Analyze weak areas after each mock

High-Yield Subjects (prioritize these)

  1. Community Medicine (PSM) - Very predictable, high scoring, lots of factual recall
  2. Medicine - Highest weightage (33 marks); focus on hypertension, diabetes, infections, CVS
  3. OBG - 30 marks; focus on antenatal care, labour, contraception
  4. General Surgery - 32 marks; shock, trauma, common surgical conditions
  5. Pathology - Strong conceptual base needed for multiple subjects
  6. Pharmacology - Frequently tested, manageable with focused revision
  7. Pediatrics - Vaccinations, growth milestones, neonatal emergencies

Recommended Books & Resources

SubjectRecommended Resource
AnatomyBD Chaurasia (theory) + Across (MCQs)
PhysiologyGanong or AK Jain (theory) + MCQ bank
BiochemistryLippincott or Harper (selected chapters)
PathologyRobbins (core chapters) or Harsh Mohan
MicrobiologyAnanthanarayan or Arora MCQs
PharmacologyKD Tripathi (core) + MCQ bank
MedicineDavidson's (reference) + Mudit Khanna MCQs
SurgeryBailey & Love (reference) + Surgery MCQ books
OBGDutta Obstetrics + Dutta Gynecology
PSMPark's Textbook of PSM
PediatricsOP Ghai or Nelson (key chapters)
FMGE IntegratedFMGE Solutions (latest edition) - all-in-one MCQ resource

Subject-wise Strategy Tips

  • Anatomy - Focus on nerve supply, blood supply, and clinically relevant anatomy. Skip overly minute details.
  • Physiology - Understand mechanisms, don't just memorize. Renal, CVS, and endocrine physiology are favorites.
  • Medicine - Read clinical vignettes carefully. Know drug of choice (DOC) for common conditions.
  • PSM - Memorize all statistics (MMR, IMR, vaccine schedules, normal values). Very direct questions.
  • OBG - Know definitions and cut-offs (e.g., prolonged labour, Bishop score). Diagrams help.
  • Surgery - Learn pre/post-operative management. Focus on emergency presentations.
  • Pharmacology - Know mechanisms and side effects. DOC questions are common.

MCQ Practice Strategy

Since FMGE has no negative marking:
  • Attempt every question - never leave any blank
  • Practice at least 50-100 MCQs daily from the start
  • Solve previous year questions (PYQs) from at least the last 10 years - many questions repeat with slight modifications
  • Use a question bank that mirrors actual exam difficulty (DAMS, DigiNerve, Marrow, PrepLadder are popular)
  • After each test, review wrong answers immediately

Mock Test Schedule (Last 2 Months)

WeekActivity
Weeks 1-4Sectional mocks (subject by subject)
Weeks 5-6Half-length mocks (150 Qs in 150 min)
Weeks 7-8Full-length mocks (300 Qs) weekly
Final weekLight revision only, no new topics

Practical Tips

  • No negative marking = no fear - If you don't know, pick the most clinically logical answer
  • Revise 3-4 times minimum - One reading is never enough for retention
  • Avoid too many books - Depth over breadth; master 1 resource per subject
  • Join a test series - Forces you to simulate real exam conditions
  • Short notes are gold - Make 1-page summaries per chapter for last-week revision
  • Sleep 7-8 hours - Sleep consolidates memory; skipping it backfires badly
  • Track your weak areas - Keep an error log and revisit it weekly

On Exam Day

  • Part A starts at 9:00 AM, Part B at 2:00 PM (arrive early for biometrics)
  • Flag difficult questions and come back to them
  • Don't spend more than 1 minute per question
  • Attempt all 300 questions before time ends

Key Takeaway

The FMGE passing bar is 50% with no negative marking - it is very achievable with a structured plan. The biggest mistakes candidates make are: starting too late, using too many resources, and not doing enough MCQ practice. Pick your resources early, stick to them, and revise relentlessly.
Good luck with your prep!

Create a detailed FMGE study schedule document you can print out

Reading File
Reading File
Running Command

mkdir -p /home/daytona/workspace/fmge-schedule && ls /home/daytona/workspace/fmg…

Writing File

~/fmge-schedule/generate.js

const {
  Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
  HeadingLevel, AlignmentType, WidthType, BorderStyle, ShadingType,
  VerticalAlign, PageNumber, Header, Footer, LevelFormat, PageBreak,
  TabStopType, TabStopPosition
} = require('docx');
const fs = require('fs');

// ─── Colour palette ────────────────────────────────────────────────────────
const C = {
  darkBlue:  "1B3A6B",
  midBlue:   "2C5F9E",
  lightBlue: "D6E4F7",
  teal:      "0E7C7B",
  lightTeal: "D0EFEE",
  amber:     "F4A228",
  lightAmber:"FEF3DC",
  green:     "1A7F4B",
  lightGreen:"D4EFE2",
  red:       "C0392B",
  lightRed:  "FADBD8",
  white:     "FFFFFF",
  offWhite:  "F8FAFC",
  grey:      "7F8C8D",
  darkGrey:  "2C3E50",
  lightGrey: "ECF0F1",
};

// ─── Helpers ───────────────────────────────────────────────────────────────
function noBorder() {
  return { style: BorderStyle.NONE, size: 0, color: "FFFFFF" };
}
function thinBorder(color = "CCCCCC") {
  return { style: BorderStyle.SINGLE, size: 4, color };
}
function thickBorder(color) {
  return { style: BorderStyle.SINGLE, size: 12, color };
}

function hCell(text, bg, textColor = "FFFFFF", bold = true, width) {
  const cellProps = {
    shading: { type: ShadingType.SOLID, fill: bg },
    verticalAlign: VerticalAlign.CENTER,
    borders: { top: noBorder(), bottom: noBorder(), left: noBorder(), right: noBorder() },
  };
  if (width) cellProps.width = { size: width, type: WidthType.DXA };
  return new TableCell({
    ...cellProps,
    children: [new Paragraph({
      alignment: AlignmentType.CENTER,
      spacing: { before: 60, after: 60 },
      children: [new TextRun({ text, bold, color: textColor, size: 20, font: "Arial" })],
    })],
  });
}

function dCell(text, bg = C.white, textColor = C.darkGrey, bold = false, width, align = AlignmentType.LEFT) {
  const cellProps = {
    shading: { type: ShadingType.SOLID, fill: bg },
    verticalAlign: VerticalAlign.CENTER,
    borders: { top: thinBorder(), bottom: thinBorder(), left: thinBorder(), right: thinBorder() },
  };
  if (width) cellProps.width = { size: width, type: WidthType.DXA };
  return new TableCell({
    ...cellProps,
    children: [new Paragraph({
      alignment: align,
      spacing: { before: 60, after: 60 },
      children: [new TextRun({ text, bold, color: textColor, size: 18, font: "Arial" })],
    })],
  });
}

function sectionHeading(text, color = C.darkBlue) {
  return new Paragraph({
    spacing: { before: 300, after: 120 },
    children: [new TextRun({ text, bold: true, color, size: 28, font: "Arial" })],
    border: { bottom: { style: BorderStyle.SINGLE, size: 8, color } },
  });
}

function subHeading(text, color = C.midBlue) {
  return new Paragraph({
    spacing: { before: 200, after: 80 },
    children: [new TextRun({ text, bold: true, color, size: 22, font: "Arial" })],
  });
}

function bodyText(text, bold = false, color = C.darkGrey) {
  return new Paragraph({
    spacing: { before: 60, after: 60 },
    children: [new TextRun({ text, bold, color, size: 20, font: "Arial" })],
  });
}

function bullet(text, color = C.darkGrey) {
  return new Paragraph({
    numbering: { reference: "bullets", level: 0 },
    spacing: { before: 40, after: 40 },
    children: [new TextRun({ text, color, size: 19, font: "Arial" })],
  });
}

function colorBox(text, bg, textColor = C.darkGrey) {
  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [new TableRow({ children: [
      new TableCell({
        shading: { type: ShadingType.SOLID, fill: bg },
        borders: { top: noBorder(), bottom: noBorder(), left: thickBorder(C.teal), right: noBorder() },
        children: [new Paragraph({
          spacing: { before: 80, after: 80 },
          children: [new TextRun({ text, color: textColor, size: 19, font: "Arial" })],
        })],
      })
    ]})],
  });
}

function pageBreak() {
  return new Paragraph({ children: [new PageBreak()] });
}

function spacer(lines = 1) {
  return new Paragraph({ spacing: { before: 0, after: lines * 120 }, children: [new TextRun("")] });
}

// ─── Title block ──────────────────────────────────────────────────────────
function titleBlock() {
  return [
    new Table({
      width: { size: 100, type: WidthType.PERCENTAGE },
      rows: [new TableRow({ children: [
        new TableCell({
          shading: { type: ShadingType.SOLID, fill: C.darkBlue },
          borders: { top: noBorder(), bottom: noBorder(), left: noBorder(), right: noBorder() },
          children: [
            new Paragraph({
              alignment: AlignmentType.CENTER,
              spacing: { before: 160, after: 60 },
              children: [new TextRun({ text: "FMGE", bold: true, color: C.amber, size: 56, font: "Arial" })],
            }),
            new Paragraph({
              alignment: AlignmentType.CENTER,
              spacing: { before: 0, after: 60 },
              children: [new TextRun({ text: "Foreign Medical Graduate Examination", bold: true, color: C.white, size: 28, font: "Arial" })],
            }),
            new Paragraph({
              alignment: AlignmentType.CENTER,
              spacing: { before: 0, after: 160 },
              children: [new TextRun({ text: "Complete 6-Month Study Schedule & Preparation Guide", color: "AECBF0", size: 22, font: "Arial" })],
            }),
          ],
        })
      ]})],
    }),
    spacer(1),
    // Quick stats row
    new Table({
      width: { size: 100, type: WidthType.PERCENTAGE },
      rows: [new TableRow({ children: [
        hCell("300 MCQs", C.midBlue, C.white, true, 2200),
        hCell("No Negative Marking", C.teal, C.white, true, 2800),
        hCell("50% to Pass", C.green, C.white, true, 2200),
        hCell("Twice a Year", C.amber, C.darkGrey, true, 2200),
      ]})],
    }),
    spacer(1),
  ];
}

// ─── Exam Pattern Table ────────────────────────────────────────────────────
function examPatternTable() {
  const rows = [
    ["Conducted by", "National Board of Examinations (NBE)"],
    ["Frequency", "Twice a year - June & December"],
    ["Mode", "Online Computer-Based Test (CBT)"],
    ["Total Questions", "300 Multiple Choice Questions (MCQs)"],
    ["Duration", "2 parts x 2.5 hours (with break in between)"],
    ["Passing Marks", "150 / 300 (50%)"],
    ["Negative Marking", "NONE - attempt every question"],
    ["Language", "English only"],
  ];
  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({ children: [
        hCell("Feature", C.darkBlue, C.white, true, 3600),
        hCell("Details", C.darkBlue, C.white, true, 5800),
      ]}),
      ...rows.map((r, i) => new TableRow({ children: [
        dCell(r[0], i % 2 === 0 ? C.lightBlue : C.white, C.darkBlue, true, 3600),
        dCell(r[1], i % 2 === 0 ? C.offWhite : C.white, C.darkGrey, false, 5800),
      ]})),
    ],
  });
}

// ─── Subject Distribution Table ────────────────────────────────────────────
function subjectTable() {
  const preClinical = [
    ["Anatomy", "17", C.lightBlue],
    ["Physiology", "17", C.lightBlue],
    ["Biochemistry", "17", C.lightBlue],
    ["Pathology", "13", C.lightBlue],
    ["Microbiology", "13", C.lightBlue],
    ["Pharmacology", "13", C.lightBlue],
    ["Forensic Medicine", "10", C.lightBlue],
  ];
  const clinical = [
    ["General Medicine", "33", C.lightGreen],
    ["General Surgery", "32", C.lightGreen],
    ["Obstetrics & Gynaecology", "30", C.lightGreen],
    ["Community Medicine (PSM)", "30", C.lightGreen],
    ["Pediatrics", "15", C.lightGreen],
    ["Ophthalmology", "15", C.lightGreen],
    ["ENT", "15", C.lightGreen],
    ["Psychiatry", "5", C.lightGreen],
    ["Dermatology & STD", "5", C.lightGreen],
    ["Anaesthesiology", "5", C.lightGreen],
    ["Orthopaedics", "5", C.lightGreen],
    ["Radiodiagnosis", "5", C.lightGreen],
  ];

  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({ children: [
        hCell("Subject", C.darkBlue, C.white, true, 5400),
        hCell("Questions", C.darkBlue, C.white, true, 2000),
        hCell("Priority", C.darkBlue, C.white, true, 2000),
      ]}),
      new TableRow({ children: [
        hCell("PRE-CLINICAL & PARA-CLINICAL  (100 marks)", C.midBlue, C.white, true),
        hCell("", C.midBlue, C.white, true),
        hCell("", C.midBlue, C.white, true),
      ]}),
      ...preClinical.map(r => new TableRow({ children: [
        dCell("  " + r[0], r[2], C.darkGrey, false, 5400),
        dCell(r[1], r[2], C.darkBlue, true, 2000, AlignmentType.CENTER),
        dCell(r[0] === "Pathology" || r[0] === "Pharmacology" ? "HIGH" : "MEDIUM", r[2], r[0] === "Pathology" || r[0] === "Pharmacology" ? C.green : C.teal, true, 2000, AlignmentType.CENTER),
      ]})),
      new TableRow({ children: [
        hCell("CLINICAL SUBJECTS  (200 marks)", C.teal, C.white, true),
        hCell("", C.teal, C.white, true),
        hCell("", C.teal, C.white, true),
      ]}),
      ...clinical.map(r => new TableRow({ children: [
        dCell("  " + r[0], r[2], C.darkGrey, false, 5400),
        dCell(r[1], r[2], C.darkBlue, true, 2000, AlignmentType.CENTER),
        dCell(parseInt(r[1]) >= 30 ? "VERY HIGH" : parseInt(r[1]) >= 15 ? "HIGH" : "MEDIUM",
              r[2],
              parseInt(r[1]) >= 30 ? C.red : parseInt(r[1]) >= 15 ? C.green : C.teal,
              true, 2000, AlignmentType.CENTER),
      ]})),
      new TableRow({ children: [
        hCell("TOTAL", C.darkBlue, C.amber, true, 5400),
        hCell("300", C.darkBlue, C.amber, true, 2000),
        hCell("", C.darkBlue, C.white, true, 2000),
      ]}),
    ],
  });
}

// ─── 6-Month Phase Plan ─────────────────────────────────────────────────────
function phasePlanTable() {
  const phases = [
    ["Phase 1", "Months 1-2", "Foundation", C.lightBlue, C.midBlue,
     "Anatomy, Physiology, Biochemistry, Forensic Medicine. Build core concepts. Make chapter notes. 100 MCQs/day (subject-wise)."],
    ["Phase 2", "Months 3-4", "Para-clinical + Core Clinical", C.lightGreen, C.green,
     "Pathology, Microbiology, Pharmacology. Start Medicine, Surgery basics. 150 MCQs/day. First full-syllabus revision starts Month 4."],
    ["Phase 3", "Month 5", "Clinical Completion", C.lightTeal, C.teal,
     "OBG, Community Medicine, Pediatrics, Ophthalmology, ENT, allied subjects. 200 MCQs/day. Start sectional mock tests."],
    ["Phase 4", "Month 6", "Revision + Mock Tests", C.lightAmber, C.amber,
     "2nd and 3rd full revision. Weekly full-length mock (300 Qs). Error log review. Short notes only. No new topics after Week 2."],
  ];

  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({ children: [
        hCell("Phase", C.darkBlue, C.white, true, 1200),
        hCell("Timeline", C.darkBlue, C.white, true, 1600),
        hCell("Focus", C.darkBlue, C.white, true, 1800),
        hCell("Details", C.darkBlue, C.white, true, 4800),
      ]}),
      ...phases.map(p => new TableRow({ children: [
        dCell(p[0], p[3], p[4], true, 1200, AlignmentType.CENTER),
        dCell(p[1], p[3], C.darkGrey, false, 1600, AlignmentType.CENTER),
        dCell(p[2], p[3], p[4], true, 1800),
        dCell(p[5], p[3], C.darkGrey, false, 4800),
      ]})),
    ],
  });
}

// ─── Weekly schedule table ──────────────────────────────────────────────────
function weeklyScheduleTable() {
  const days = [
    ["Monday",    "Morning (2h)", "Afternoon (2h)", "Evening (1.5h)"],
    ["Tuesday",   "Morning (2h)", "Afternoon (2h)", "Evening (1.5h)"],
    ["Wednesday", "Morning (2h)", "Afternoon (2h)", "Evening (1.5h)"],
    ["Thursday",  "Morning (2h)", "Afternoon (2h)", "Evening (1.5h)"],
    ["Friday",    "Morning (2h)", "Afternoon (2h)", "Evening (1.5h)"],
    ["Saturday",  "Morning (3h) - Weak areas", "Afternoon (2h) - Sectional test", "Evening (1h) - Review"],
    ["Sunday",    "Morning (2h) - Full revision", "Afternoon: REST", "Evening (1h) - Weekly recap"],
  ];

  const activities = [
    ["New topic lecture/reading", "MCQ practice (50-70 Qs)", "Short notes + revision"],
    ["New topic lecture/reading", "MCQ practice (50-70 Qs)", "Short notes + revision"],
    ["New topic lecture/reading", "MCQ practice (50-70 Qs)", "Short notes + revision"],
    ["New topic lecture/reading", "MCQ practice (50-70 Qs)", "Short notes + revision"],
    ["Weekly wrap-up of new topics", "Previous Year Questions (PYQs)", "Flashcard/note review"],
    ["Weak area deep dive", "Timed sectional test (100 Qs)", "Error log analysis"],
    ["Full topic revision cycle", "REST - no screens", "Plan next week"],
  ];

  const rowBg = ["F0F4FF", "E8F8F0", "F0F4FF", "E8F8F0", "F0F4FF", "FEF9E7", "FDEBD0"];

  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({ children: [
        hCell("Day", C.darkBlue, C.white, true, 1500),
        hCell("Morning Session", C.darkBlue, C.white, true, 2500),
        hCell("Afternoon Session", C.darkBlue, C.white, true, 2500),
        hCell("Evening Session", C.darkBlue, C.white, true, 2900),
      ]}),
      ...days.map((d, i) => new TableRow({ children: [
        dCell(d[0], rowBg[i], C.darkBlue, true, 1500),
        dCell(activities[i][0], rowBg[i], C.darkGrey, false, 2500),
        dCell(activities[i][1], rowBg[i], C.darkGrey, false, 2500),
        dCell(activities[i][2], rowBg[i], C.darkGrey, false, 2900),
      ]})),
    ],
  });
}

// ─── Subject strategy table ─────────────────────────────────────────────────
function subjectStrategyTable() {
  const strats = [
    ["Community Medicine (PSM)", "30", "VERY HIGH", "Memorize all statistics: MMR, IMR, NMR, vaccine schedules, normal values. Very direct questions. Park's PSM is the standard reference.", C.lightGreen],
    ["General Medicine", "33", "VERY HIGH", "Hypertension, diabetes, infections, CVS, respiratory. Know drug of choice (DOC) for common conditions. Clinical vignettes are common.", C.lightGreen],
    ["General Surgery", "32", "VERY HIGH", "Surgical principles, shock, trauma, pre/post-operative care, appendectomy, hernias, burns. Know emergency presentations.", C.lightGreen],
    ["Obstetrics & Gynaecology", "30", "VERY HIGH", "Antenatal care, labour stages, Bishop score, contraception, postpartum care, common gynaecological disorders.", C.lightGreen],
    ["Pathology", "13", "HIGH", "Core for all subjects. Focus on mechanisms, histopathology findings, and tumour markers. Robbins key chapters.", C.lightBlue],
    ["Pharmacology", "13", "HIGH", "Drug mechanisms, side effects, DOC questions. KD Tripathi core chapters + MCQ bank. Repeated PYQs.", C.lightBlue],
    ["Pediatrics", "15", "HIGH", "Growth milestones, vaccination schedule, neonatal emergencies, common childhood diseases, pediatric doses.", C.lightBlue],
    ["Ophthalmology", "15", "HIGH", "Glaucoma, cataract, retinal diseases, uveitis, ocular emergencies. Master anatomical diagrams.", C.lightBlue],
    ["ENT", "15", "HIGH", "Otitis media, sinusitis, CSOM, larynx disorders, hearing loss types. Short but high-yield.", C.lightBlue],
    ["Anatomy", "17", "MEDIUM", "Nerve supply, blood supply, clinically relevant anatomy, surface anatomy. Skip minute details.", C.lightGrey],
    ["Physiology", "17", "MEDIUM", "Understand mechanisms - do not memorize blindly. Renal, CVS, endocrine physiology are exam favorites.", C.lightGrey],
    ["Biochemistry", "17", "MEDIUM", "Selected chapters only: enzymes, metabolism, vitamins, hormones. Lippincott or Harper.", C.lightGrey],
    ["Microbiology", "13", "MEDIUM", "Identification features, culture media, common infections. Arora MCQs for practice.", C.lightGrey],
    ["Forensic Medicine", "10", "MEDIUM", "MLC, wounds, poisons, legal aspects. Reliable scoring - do not skip.", C.lightGrey],
    ["Allied subjects (Psych/Derma/Anaes/Ortho/Radiology)", "25", "MEDIUM", "5 questions each. High-yield facts only. Revise PYQs specifically for these.", C.lightAmber],
  ];

  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({ children: [
        hCell("Subject", C.darkBlue, C.white, true, 2800),
        hCell("Qs", C.darkBlue, C.white, true, 600),
        hCell("Priority", C.darkBlue, C.white, true, 1000),
        hCell("Strategy", C.darkBlue, C.white, true, 5000),
      ]}),
      ...strats.map(s => new TableRow({ children: [
        dCell(s[0], s[4], C.darkBlue, true, 2800),
        dCell(s[1], s[4], C.darkGrey, true, 600, AlignmentType.CENTER),
        dCell(s[2], s[4],
          s[2] === "VERY HIGH" ? C.red : s[2] === "HIGH" ? C.green : C.teal,
          true, 1000, AlignmentType.CENTER),
        dCell(s[3], s[4], C.darkGrey, false, 5000),
      ]})),
    ],
  });
}

// ─── Books table ────────────────────────────────────────────────────────────
function booksTable() {
  const books = [
    ["Anatomy", "BD Chaurasia (theory)", "Across / FMGE Solutions MCQs"],
    ["Physiology", "AK Jain / Ganong (selected)", "Physiology MCQ bank"],
    ["Biochemistry", "Lippincott / Harper (selected chapters)", "Biochem MCQ bank"],
    ["Pathology", "Robbins (core) / Harsh Mohan", "Pathology MCQs"],
    ["Microbiology", "Ananthanarayan", "Arora MCQs"],
    ["Pharmacology", "KD Tripathi (core)", "Pharmacology MCQ bank"],
    ["General Medicine", "Davidson's (reference)", "Mudit Khanna MCQ Internal Medicine"],
    ["General Surgery", "Bailey & Love (reference)", "Surgery MCQ books"],
    ["OBG", "Dutta Obstetrics + Dutta Gynecology", "OBG MCQ bank"],
    ["Community Medicine", "Park's Textbook of PSM", "PSM MCQs"],
    ["Pediatrics", "OP Ghai / Nelson (key chapters)", "Pediatrics MCQ bank"],
    ["Integrated FMGE", "FMGE Solutions (latest edition)", "DigiNerve / Marrow / PrepLadder"],
  ];

  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({ children: [
        hCell("Subject", C.darkBlue, C.white, true, 2200),
        hCell("Theory / Reference", C.midBlue, C.white, true, 3600),
        hCell("MCQ / Practice", C.teal, C.white, true, 3600),
      ]}),
      ...books.map((b, i) => new TableRow({ children: [
        dCell(b[0], i % 2 === 0 ? C.lightBlue : C.white, C.darkBlue, true, 2200),
        dCell(b[1], i % 2 === 0 ? C.offWhite : C.white, C.darkGrey, false, 3600),
        dCell(b[2], i % 2 === 0 ? C.offWhite : C.white, C.darkGrey, false, 3600),
      ]})),
    ],
  });
}

// ─── Mock test schedule ─────────────────────────────────────────────────────
function mockScheduleTable() {
  const weeks = [
    ["Weeks 1-4 (Month 5)", "Sectional Mocks", "1 per week per major subject", "Identify weak areas per subject", C.lightBlue],
    ["Weeks 5-6 (Month 6 start)", "Half-Length Mocks", "150 Qs in 150 min", "Build stamina and time management", C.lightGreen],
    ["Weeks 7-8 (Month 6 mid)", "Full-Length Mocks", "300 Qs, full 5 hours", "Simulate real exam day conditions", C.lightAmber],
    ["Final Week", "Light Revision Only", "Revise short notes only", "NO new topics. Focus on confidence.", C.lightRed],
  ];

  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({ children: [
        hCell("Period", C.darkBlue, C.white, true, 2200),
        hCell("Test Type", C.darkBlue, C.white, true, 1800),
        hCell("Format", C.darkBlue, C.white, true, 2000),
        hCell("Goal", C.darkBlue, C.white, true, 3400),
      ]}),
      ...weeks.map(w => new TableRow({ children: [
        dCell(w[0], w[4], C.darkBlue, true, 2200),
        dCell(w[1], w[4], C.darkGrey, true, 1800),
        dCell(w[2], w[4], C.darkGrey, false, 2000),
        dCell(w[3], w[4], C.darkGrey, false, 3400),
      ]})),
    ],
  });
}

// ─── Exam Day Checklist ──────────────────────────────────────────────────────
function examDayTable() {
  const items = [
    ["Admit Card", "Printed copy + digital backup on phone", C.lightGreen],
    ["ID Proof", "Govt-issued photo ID (Aadhaar / Passport)", C.lightGreen],
    ["Arrival Time", "Part A - arrive by 7:00 AM. Part B - 12:00 PM", C.lightBlue],
    ["Entry Closes", "Part A - 8:30 AM. Part B - 1:30 PM. DO NOT be late.", C.lightRed],
    ["Exam Starts", "Part A - 9:00 AM. Part B - 2:00 PM", C.lightBlue],
    ["Exam Ends", "Part A - 11:30 AM. Part B - 4:30 PM", C.lightBlue],
    ["Strategy", "Flag hard questions. Never leave blank. 1 min per question max.", C.lightAmber],
    ["Items to bring", "Water bottle, snack for break, extra pen (optional)", C.lightGreen],
    ["Items NOT to bring", "Electronic devices, notes, study materials inside exam hall", C.lightRed],
  ];

  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({ children: [
        hCell("Item", C.darkBlue, C.white, true, 2200),
        hCell("Details", C.darkBlue, C.white, true, 7200),
      ]}),
      ...items.map(it => new TableRow({ children: [
        dCell(it[0], it[2], C.darkBlue, true, 2200),
        dCell(it[1], it[2], C.darkGrey, false, 7200),
      ]})),
    ],
  });
}

// ─── Daily Habit Tracker ──────────────────────────────────────────────────────
function habitTrackerTable() {
  const habits = [
    "Study 4-6 hours (minimum 4)",
    "Solve 50+ MCQs",
    "Write / review short notes",
    "Review yesterday's error log",
    "7-8 hours sleep",
    "Eat properly + hydrate",
    "No social media during study blocks",
  ];
  const days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];

  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({ children: [
        hCell("Daily Habit", C.darkBlue, C.white, true, 4000),
        ...days.map(d => hCell(d, C.midBlue, C.white, true, 600)),
      ]}),
      ...habits.map((h, i) => new TableRow({ children: [
        dCell(h, i % 2 === 0 ? C.offWhite : C.white, C.darkGrey, false, 4000),
        ...days.map(() => dCell("", i % 2 === 0 ? C.offWhite : C.white, C.white, false, 600)),
      ]})),
    ],
  });
}

// ─── Main build ──────────────────────────────────────────────────────────────
const doc = new Document({
  numbering: {
    config: [
      {
        reference: "bullets",
        levels: [{
          level: 0, format: LevelFormat.BULLET, text: "\u2022",
          alignment: AlignmentType.LEFT,
          style: { paragraph: { indent: { left: 720, hanging: 360 } } },
        }],
      },
    ],
  },
  styles: {
    default: { document: { run: { font: "Arial", size: 20, color: C.darkGrey } } },
  },
  sections: [{
    properties: {
      page: {
        margin: { top: 720, bottom: 720, left: 900, right: 900 },
      },
    },
    headers: {
      default: new Header({
        children: [new Table({
          width: { size: 100, type: WidthType.PERCENTAGE },
          rows: [new TableRow({ children: [
            new TableCell({
              shading: { type: ShadingType.SOLID, fill: C.darkBlue },
              borders: { top: noBorder(), bottom: noBorder(), left: noBorder(), right: noBorder() },
              children: [new Paragraph({
                spacing: { before: 40, after: 40 },
                children: [new TextRun({ text: "  FMGE Study Schedule", bold: true, color: C.white, size: 18, font: "Arial" })],
              })],
            }),
            new TableCell({
              shading: { type: ShadingType.SOLID, fill: C.darkBlue },
              borders: { top: noBorder(), bottom: noBorder(), left: noBorder(), right: noBorder() },
              children: [new Paragraph({
                alignment: AlignmentType.RIGHT,
                spacing: { before: 40, after: 40 },
                children: [new TextRun({ text: "National Board of Examinations (NBE)  ", color: "AECBF0", size: 18, font: "Arial" })],
              })],
            }),
          ]})],
        })],
      }),
    },
    footers: {
      default: new Footer({
        children: [new Paragraph({
          alignment: AlignmentType.CENTER,
          spacing: { before: 40, after: 40 },
          children: [
            new TextRun({ text: "Pass mark: 150/300  |  No negative marking - attempt ALL questions  |  Page ", color: C.grey, size: 16, font: "Arial" }),
            new PageNumber({ current: true }),
          ],
        })],
      }),
    },
    children: [
      // ── Page 1: Title + Exam Overview ──
      ...titleBlock(),
      spacer(1),

      sectionHeading("1. EXAM OVERVIEW"),
      examPatternTable(),
      spacer(1),

      colorBox("KEY INSIGHT: The passing bar is only 50% with zero negative marking. This means strategic preparation - not perfection - wins the exam. Attempt every single question.", C.lightTeal, C.darkGrey),
      spacer(1),

      pageBreak(),

      // ── Page 2: Subject Distribution ──
      sectionHeading("2. SUBJECT & MARKS DISTRIBUTION"),
      subjectTable(),
      spacer(1),

      pageBreak(),

      // ── Page 3: 6-Month Plan ──
      sectionHeading("3. 6-MONTH PREPARATION PHASES"),
      phasePlanTable(),
      spacer(1),

      colorBox("STUDY HOURS TARGET: 800-1,000 total hours over 6 months = 4-6 hours/day. Prioritize consistency over marathon sessions.", C.lightAmber, C.darkGrey),
      spacer(1),

      sectionHeading("4. WEEKLY STUDY TEMPLATE"),
      subHeading("Daily breakdown for a typical prep week (adapt for your phase):"),
      weeklyScheduleTable(),
      spacer(1),

      pageBreak(),

      // ── Page 4: Subject Strategy ──
      sectionHeading("5. SUBJECT-WISE STRATEGY"),
      subjectStrategyTable(),
      spacer(1),

      pageBreak(),

      // ── Page 5: Resources + Mock Test Plan ──
      sectionHeading("6. RECOMMENDED BOOKS & RESOURCES"),
      booksTable(),
      spacer(1),

      colorBox("GOLDEN RULE: Use ONE standard resource per subject and revise it 3-4 times. Depth always beats breadth in FMGE.", C.lightBlue, C.darkGrey),
      spacer(1),

      sectionHeading("7. MOCK TEST SCHEDULE (Final 2 Months)"),
      mockScheduleTable(),
      spacer(1),

      pageBreak(),

      // ── Page 6: Exam Day + Habits ──
      sectionHeading("8. EXAM DAY CHECKLIST"),
      examDayTable(),
      spacer(1),

      sectionHeading("9. WEEKLY HABIT TRACKER (Print & Tick Daily)"),
      subHeading("Tick each box at end of day. Consistent green weeks = exam success."),
      habitTrackerTable(),
      spacer(1),

      sectionHeading("10. KEY TIPS SUMMARY"),
      bodyText("MCQ Strategy", true, C.darkBlue),
      bullet("No negative marking - NEVER leave a question blank"),
      bullet("Spend max 1 minute per question; flag and return to hard ones"),
      bullet("Solve 10 years of PYQs - many questions repeat with slight changes"),
      bullet("Practice 50-100 MCQs every single day from Month 1"),
      spacer(0.5),
      bodyText("Revision Strategy", true, C.darkBlue),
      bullet("Minimum 3-4 full revisions of all subjects before exam"),
      bullet("Make 1-page summary notes per chapter for final week revision"),
      bullet("Keep an error log - review wrong answers every week"),
      bullet("Do NOT add new resources after Month 4 - stick to your material"),
      spacer(0.5),
      bodyText("Wellness", true, C.darkBlue),
      bullet("Sleep 7-8 hours - sleep consolidates medical memory"),
      bullet("Eat properly and stay hydrated during heavy study days"),
      bullet("Light exercise improves focus and retention"),
      bullet("Take Sunday afternoon completely off to prevent burnout"),
      spacer(1),

      colorBox("FINAL REMINDER: 150 out of 300 is all you need. Be strategic. Revise relentlessly. Attempt everything. You've got this.", C.lightGreen, C.darkGrey),
    ],
  }],
});

Packer.toBuffer(doc).then(buf => {
  fs.writeFileSync("/home/daytona/workspace/fmge-schedule/FMGE_Study_Schedule.docx", buf);
  console.log("Done");
});
Running Command

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

Editing File

~/fmge-schedule/generate.js

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

cd /home/daytona/workspace/fmge-schedule && node -e "const d = require('docx'); …

Running Command

cd /home/daytona/workspace/fmge-schedule && node -e "const {PageNumberElement} =…

Editing File

~/fmge-schedule/generate.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/fmge-schedule/generate.js'
Editing File

~/fmge-schedule/generate.js

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

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

Running Command

python3 /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/works…

Running Command

ls -lh /home/daytona/workspace/fmge-schedule/FMGE_Study_Schedule.docx && python3…

Your printable FMGE study schedule document is ready!

FMGE Study Schedule

Word Document · DOCX


Here's what's inside the document (6 pages, fully color-coded and print-ready):
SectionContents
Title PageExam highlights banner with key stats
1. Exam OverviewFull pattern table - marks, duration, format
2. Subject DistributionAll 19 subjects with question counts and priority ratings
3. 6-Month PhasesPhase 1-4 breakdown with monthly goals
4. Weekly TemplateDay-by-day study session planner (Mon-Sun)
5. Subject StrategyEvery subject with tailored exam tips
6. Recommended BooksTheory + MCQ resources per subject
7. Mock Test ScheduleFinal 2-month countdown plan
8. Exam Day ChecklistTimings, what to bring, exam strategy
9. Habit TrackerPrintable weekly tick-box tracker
10. Key Tips SummaryMCQ strategy, revision, and wellness
To print: open in Word or Google Docs, then File > Print. Works best on A4 at 100% scale.
This is a shared conversation. Sign in to Orris to start your own chat.