Give a guide for prepaying my fmge exam
FMGE exam 2026 preparation guide syllabus pattern passing tips
FMGE Foreign Medical Graduate Examination best books strategy 2025 2026
https://www.doctutorials.com/fmge/fmge-exam-preparation-tips
| Feature | Details |
|---|---|
| Conducted by | National Board of Examinations (NBE) |
| Frequency | Twice a year (June & December) |
| Mode | Online - Computer Based Test (CBT) |
| Total Questions | 300 MCQs |
| Duration | 2 parts x 2.5 hours (break in between) |
| Passing Marks | 150 / 300 (50%) |
| Negative Marking | None |
| Language | English only |
| Subject | Questions |
|---|---|
| Anatomy | 17 |
| Physiology | 17 |
| Biochemistry | 17 |
| Pathology | 13 |
| Microbiology | 13 |
| Pharmacology | 13 |
| Forensic Medicine | 10 |
| Subject | Questions |
|---|---|
| Medicine | 33 |
| General Surgery | 32 |
| Obstetrics & Gynaecology | 30 |
| Community Medicine (PSM) | 30 |
| Pediatrics | 15 |
| Ophthalmology | 15 |
| ENT | 15 |
| Psychiatry | 5 |
| Dermatology & STD | 5 |
| Anaesthesiology | 5 |
| Orthopaedics | 5 |
| Radiodiagnosis | 5 |
| Subject | Recommended Resource |
|---|---|
| Anatomy | BD Chaurasia (theory) + Across (MCQs) |
| Physiology | Ganong or AK Jain (theory) + MCQ bank |
| Biochemistry | Lippincott or Harper (selected chapters) |
| Pathology | Robbins (core chapters) or Harsh Mohan |
| Microbiology | Ananthanarayan or Arora MCQs |
| Pharmacology | KD Tripathi (core) + MCQ bank |
| Medicine | Davidson's (reference) + Mudit Khanna MCQs |
| Surgery | Bailey & Love (reference) + Surgery MCQ books |
| OBG | Dutta Obstetrics + Dutta Gynecology |
| PSM | Park's Textbook of PSM |
| Pediatrics | OP Ghai or Nelson (key chapters) |
| FMGE Integrated | FMGE Solutions (latest edition) - all-in-one MCQ resource |
| Week | Activity |
|---|---|
| Weeks 1-4 | Sectional mocks (subject by subject) |
| Weeks 5-6 | Half-length mocks (150 Qs in 150 min) |
| Weeks 7-8 | Full-length mocks (300 Qs) weekly |
| Final week | Light revision only, no new topics |
Create a detailed FMGE study schedule document you can print out
mkdir -p /home/daytona/workspace/fmge-schedule && ls /home/daytona/workspace/fmg…
~/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");
});
cd /home/daytona/workspace/fmge-schedule && node generate.js 2>&1
~/fmge-schedule/generate.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/fmge-schedule/generate.js'
cd /home/daytona/workspace/fmge-schedule && node -e "const d = require('docx'); …
cd /home/daytona/workspace/fmge-schedule && node -e "const {PageNumberElement} =…
~/fmge-schedule/generate.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/fmge-schedule/generate.js'
~/fmge-schedule/generate.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/fmge-schedule/generate.js'
cd /home/daytona/workspace/fmge-schedule && node generate.js 2>&1
python3 /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/works…
ls -lh /home/daytona/workspace/fmge-schedule/FMGE_Study_Schedule.docx && python3…
FMGE Study Schedule
Word Document · DOCX
| Section | Contents |
|---|---|
| Title Page | Exam highlights banner with key stats |
| 1. Exam Overview | Full pattern table - marks, duration, format |
| 2. Subject Distribution | All 19 subjects with question counts and priority ratings |
| 3. 6-Month Phases | Phase 1-4 breakdown with monthly goals |
| 4. Weekly Template | Day-by-day study session planner (Mon-Sun) |
| 5. Subject Strategy | Every subject with tailored exam tips |
| 6. Recommended Books | Theory + MCQ resources per subject |
| 7. Mock Test Schedule | Final 2-month countdown plan |
| 8. Exam Day Checklist | Timings, what to bring, exam strategy |
| 9. Habit Tracker | Printable weekly tick-box tracker |
| 10. Key Tips Summary | MCQ strategy, revision, and wellness |