Hi I wanted to know how many dr. Marwag video total are there in 'prepladder app
Dr. Marwag PrepLadder total videos count
From medicine subject by Guyton for plab perspective as an indian intern in gmc silvassa what topics of medicine should I master Please get me full list of chapters or topics
PLAB 1 2 high yield medicine topics syllabus GMC 2025 2026
Dr Deepak Marwah PrepLadder medicine complete chapter list topics
https://www.iatrox.com/blog/high-yield-plab-1-topics
Your context: Indian MBBS intern at GMC Silvassa. PLAB is pitched at UK Foundation Year 2 (F2) level. The 2026 GMC MLA content map drives the exam blueprint. Topics below are sorted by PLAB weight, not Indian PG weight - some NEET PG favorites are lower priority here.
| Indian PG (NEET/AIIMS) focus | PLAB focus (shift your thinking) |
|---|---|
| Rare syndromes, eponyms | Common UK presentations at F2 level |
| Memorise all causes | Clinical decision-making and next best step |
| Investigation of choice (IOC) | NICE guidelines - drug of choice in UK |
| Doses in mg/kg | Safe prescribing, drug interactions |
| Pathology-heavy cardiology | Acute management algorithms |
| Theory-heavy neurology | ABCDE approach, when to escalate |
Also i m an indian mbbs intern preparing for plab uk 2027 both part 1 and 2 what practice modules or learning tools should i use..make it crisp and easy to learn please
best PLAB 1 2 preparation tools resources 2026 2027 Indian IMG PLABable Samson
| Tool | What It Does | Priority |
|---|---|---|
| PLABable (app + web) | 5000+ PLAB-style SBA questions, MLA-aligned, "Must Know" filter, mock exams | β #1 - Use daily |
| Samson Notes + 1700 Qs PDF | Compact revision notes + classic question set - free, widely used by IMGs | β Must have |
| MedRevisions | Topic notes + SBA questions + mocks, good for weak topics | Good supplement |
| iatroX / Quesmed | Adaptive Q-banks with analytics, identify weak areas | Optional add-on |
| NICE Guidelines (nice.org.uk) | UK drug choices, management protocols - non-negotiable for PLAB 1 | Reference |
| Dr. Marwah (PrepLadder) | Your conceptual base - watch lectures, then do PLABable Qs on that topic | Foundation |
| Tool | What It Does | Priority |
|---|---|---|
| Geeky Medics (app + website) | OSCE station walkthroughs, history taking, examinations | β #1 |
| PLAB 2 Academy | Video-based OSCE prep, communication skills practice | Highly recommended |
| NHS.uk + GMC Ethical Guidance | Capacity, consent, confidentiality, safeguarding - UK law | Must read |
| Telegram/WhatsApp PLAB groups | Peer practice for OSCE roleplay, daily station drills | Very useful |
| ABCDE Framework (practice daily) | Core skill for every acutely unwell station in PLAB 2 | Master this |
Watch Dr. Marwah lecture (concept)
β
Do PLABable questions on that topic (application)
β
Check NICE guidelines for UK-specific management
β
Review Samson Notes for rapid revision
β
PLAB 2: Geeky Medics OSCE station daily
Also with taht i m preparing for oet medicine so help me in preparation for that as I m vwry new with everything so help me what to learn,how to learn and all combine it with the 12 month plab and oet study scheduled tailored according to timeline and my internship ends by June 2027 so help me make timeline so that I can take oet in between and give plab 1 june and plab 2 in uk I hope you get what I mean
OET medicine exam dates 2026 2027 schedule registration
PLAB 1 exam dates 2027 GMC schedule registration
OET medicine preparation tips for Indian doctors reading writing listening speaking
| Exam | When | Where |
|---|---|---|
| OET | February or March 2027 | India (online/test centre) |
| PLAB 1 | May 2027 | India (international centre) |
| PLAB 2 | August/Sept 2027 | UK |
Important: From 2027, PLAB 1 February sitting will NOT run at international locations. The May 2027 sitting is your best bet to give it in India before flying to UK for PLAB 2.
| Sub-test | What It Tests | Duration |
|---|---|---|
| Reading | 3 parts - skim/scan medical texts | 60 min |
| Listening | Consultations, patient interviews | 40 min |
| Writing | Referral/discharge letter from case notes | 45 min |
| Speaking | 2 role-play consultations (patient scenarios) | 20 min |
| Resource | Use |
|---|---|
| Dr. Marwah (PrepLadder) | Concept building |
| PLABable | Daily Q-bank (primary) |
| Samson Notes | Compact revision |
| NICE Guidelines | UK-specific management |
| Resource | Use |
|---|---|
| Geeky Medics | OSCE stations |
| PLAB 2 Academy | Video-based OSCE prep |
| GMC Good Medical Practice | Ethics/Law |
| Partner practice (Telegram groups) | Role-play |
| Resource | Use |
|---|---|
| OET.com official material | Format + free samples |
| E2Language | All 4 sub-tests, writing feedback |
| OET official YouTube | Speaking role-plays |
| OET Telegram groups | Speaking partner practice |
Morning (30 min before hospital)
β PLABable: 10-15 questions
Evening (1-1.5 hrs after duty)
β 45 min: Dr. Marwah lecture OR Samson Notes
β 30 min: OET practice (rotate Reading/Listening/Writing/Speaking)
Weekend (3-4 hrs)
β Sat: Full PLABable topic session + mock
β Sun: OET full mock OR letter writing practice + review
Generate a printable 12-month PLAB/OET study tracker PDF
mkdir -p /tmp/workspace/plab-oet-tracker && ls /tmp/workspace/
~/plab-oet-tracker/generate_tracker.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer,
HRFlowable, PageBreak
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import KeepTogether
OUTPUT = "/tmp/workspace/plab-oet-tracker/PLAB_OET_Study_Tracker.pdf"
# ββ Colour palette ββββββββββββββββββββββββββββββββββββββββββββββ
C_NAVY = colors.HexColor("#1A3557")
C_TEAL = colors.HexColor("#1A7F8E")
C_MINT = colors.HexColor("#D6F0F0")
C_ORANGE = colors.HexColor("#E87722")
C_AMBER = colors.HexColor("#FFF3CD")
C_PURPLE = colors.HexColor("#6A3FA0")
C_LAVENDER= colors.HexColor("#EDE7F6")
C_GREEN = colors.HexColor("#2E7D52")
C_LTGREEN = colors.HexColor("#E8F5E9")
C_RED = colors.HexColor("#C0392B")
C_LTRED = colors.HexColor("#FDEDEC")
C_LGRAY = colors.HexColor("#F5F6FA")
C_MGRAY = colors.HexColor("#DEE2E6")
C_DKGRAY = colors.HexColor("#495057")
C_WHITE = colors.white
C_BLACK = colors.black
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=14*mm, rightMargin=14*mm,
topMargin=14*mm, bottomMargin=14*mm,
title="12-Month PLAB & OET Study Tracker",
author="Orris AI"
)
W, H = A4
styles = getSampleStyleSheet()
def sty(name="Normal", size=10, bold=False, color=C_BLACK,
align=TA_LEFT, leading=None, space_before=0, space_after=2):
return ParagraphStyle(
name,
parent=styles["Normal"],
fontSize=size,
fontName="Helvetica-Bold" if bold else "Helvetica",
textColor=color,
alignment=align,
leading=leading or size * 1.25,
spaceBefore=space_before,
spaceAfter=space_after,
)
# ββ Helper: checkbox row βββββββββββββββββββββββββββββββββββββββββ
def checkboxes(n=7):
return " ".join(["β"] * n)
# ββ Helper: section header βββββββββββββββββββββββββββββββββββββββ
def section_header(text, bg=C_NAVY, fg=C_WHITE, size=11):
p = Paragraph(text, sty(size=size, bold=True, color=fg, align=TA_CENTER))
t = Table([[p]], colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("ROUNDEDCORNERS", [4]),
]))
return t
# ββ Helper: two-col mini table βββββββββββββββββββββββββββββββββββ
def two_col(rows, col1=75*mm, col2=None, bg_header=C_TEAL, header=None):
col2 = col2 or (doc.width - col1)
data = []
if header:
data.append([
Paragraph(header[0], sty(size=8, bold=True, color=C_WHITE, align=TA_CENTER)),
Paragraph(header[1], sty(size=8, bold=True, color=C_WHITE, align=TA_CENTER)),
])
for r in rows:
data.append([
Paragraph(r[0], sty(size=8, color=C_DKGRAY)),
Paragraph(r[1], sty(size=8, color=C_DKGRAY, align=TA_CENTER)),
])
t = Table(data, colWidths=[col1, col2])
style = [
("GRID", (0,0), (-1,-1), 0.4, C_MGRAY),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING",(0,0),(-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING",(0,0), (-1,-1), 5),
]
if header:
style += [
("BACKGROUND", (0,0), (1,0), bg_header),
]
for i in range(1 if header else 0, len(data)):
bg = C_WHITE if i % 2 == (0 if not header else 1) else C_LGRAY
style.append(("BACKGROUND", (0,i), (-1,i), bg))
t.setStyle(TableStyle(style))
return t
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PAGE 1 β COVER / OVERVIEW
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story = []
# Cover banner
cover_data = [[
Paragraph("12-Month PLAB & OET", sty(size=26, bold=True, color=C_WHITE, align=TA_CENTER)),
],[
Paragraph("Study Tracker & Planner", sty(size=18, bold=False, color=C_MINT, align=TA_CENTER)),
],[
Paragraph("Indian MBBS Intern Β· GMC Silvassa Β· July 2026 β August 2027",
sty(size=10, color=colors.HexColor("#AED6F1"), align=TA_CENTER)),
]]
cover_tbl = Table(cover_data, colWidths=[doc.width])
cover_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_NAVY),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
]))
story.append(cover_tbl)
story.append(Spacer(1, 6*mm))
# Exam milestone strip
milestone_data = [
[Paragraph("π― OET", sty(size=10, bold=True, color=C_WHITE, align=TA_CENTER)),
Paragraph("π― PLAB 1", sty(size=10, bold=True, color=C_WHITE, align=TA_CENTER)),
Paragraph("π Internship Ends", sty(size=10, bold=True, color=C_WHITE, align=TA_CENTER)),
Paragraph("βοΈ PLAB 2 UK", sty(size=10, bold=True, color=C_WHITE, align=TA_CENTER))],
[Paragraph("Feb/Mar 2027", sty(size=9, color=C_AMBER, align=TA_CENTER)),
Paragraph("May 2027", sty(size=9, color=C_AMBER, align=TA_CENTER)),
Paragraph("June 2027", sty(size=9, color=C_AMBER, align=TA_CENTER)),
Paragraph("Aug/Sep 2027", sty(size=9, color=C_AMBER, align=TA_CENTER))],
]
mt = Table(milestone_data, colWidths=[doc.width/4]*4)
mt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), C_TEAL),
("BACKGROUND", (0,1), (-1,1), C_NAVY),
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#2C7FA8")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(mt)
story.append(Spacer(1, 6*mm))
# Phase overview table
story.append(section_header("π PHASE OVERVIEW"))
story.append(Spacer(1, 2*mm))
phase_rows = [
["Phase", "Months", "Focus", "Daily Time"],
["1 β Foundation", "Jul β Sep 2026", "Dr. Marwah lectures (CardioβNeuro) + OET format intro + PLABable 10-15 Qs/day", "1.5 hrs"],
["2 β Build + OET", "Oct β Dec 2026", "Complete Dr. Marwah + Samson Notes + OET mocks + Writing practice", "2 hrs"],
["3 β OET Crunch", "Jan β Mar 2027", "OET intensive (daily mocks, letter writing) β Give OET β PLAB 1 crunch", "3 hrs"],
["4 β PLAB 1 Crunch", "Apr β May 2027", "PLABable full mocks + NICE guidelines + Ethics/Law revision β Give PLAB 1", "3+ hrs"],
["5 β PLAB 2 + UK", "Jun β Aug 2027", "Full-time PLAB 2: Geeky Medics, OSCE roleplay, ABCDE β Travel UK β Give PLAB 2", "Full day"],
]
cw = [28*mm, 28*mm, 95*mm, 18*mm]
pt = Table(phase_rows, colWidths=cw, repeatRows=1)
pt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), C_TEAL),
("TEXTCOLOR", (0,0), (-1,0), C_WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8),
("GRID", (0,0), (-1,-1), 0.4, C_MGRAY),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (0,1), (-1,1), C_MINT),
("BACKGROUND", (0,2), (-1,2), C_LGRAY),
("BACKGROUND", (0,3), (-1,3), C_MINT),
("BACKGROUND", (0,4), (-1,4), C_LGRAY),
("BACKGROUND", (0,5), (-1,5), C_LAVENDER),
]))
story.append(pt)
story.append(Spacer(1, 5*mm))
# Personal info box
info_data = [
[Paragraph("Name:", sty(size=9, bold=True)),
Paragraph("_"*40, sty(size=9)),
Paragraph("Target OET Score:", sty(size=9, bold=True)),
Paragraph("Grade B in all 4 sub-tests", sty(size=9))],
[Paragraph("College:", sty(size=9, bold=True)),
Paragraph("GMC Silvassa ____________________", sty(size=9)),
Paragraph("PLAB 1 Target:", sty(size=9, bold=True)),
Paragraph("Pass (β₯ 122/180)", sty(size=9))],
[Paragraph("Start Date:", sty(size=9, bold=True)),
Paragraph("July 2026", sty(size=9)),
Paragraph("Motto:", sty(size=9, bold=True)),
Paragraph('"One day at a time, one topic at a time."', sty(size=9, color=C_TEAL))],
]
it = Table(info_data, colWidths=[25*mm, 60*mm, 38*mm, 46*mm])
it.setStyle(TableStyle([
("BOX", (0,0), (-1,-1), 1, C_TEAL),
("BACKGROUND", (0,0), (-1,-1), C_MINT),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(it)
story.append(PageBreak())
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PAGES 2-13 β ONE PAGE PER MONTH
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
month_data = [
{
"month": "July 2026", "phase": "Phase 1 β Foundation", "phase_color": C_TEAL,
"plab_topics": [
"Cardiology: ACS, Heart Failure, AF, Arrhythmias",
"Cardiology: Cardiomyopathy, Endocarditis, Pericarditis",
"Respiratory: Asthma, COPD β pathophysiology & management",
"Respiratory: Pneumonia, PE, Pneumothorax",
"PLABable: 10 Qs/day (topic-matched) β get familiar with format",
],
"oet_tasks": [
"Take OET free sample test on oet.com β benchmark yourself",
"Understand OET format: 4 sub-tests, Grade B target",
"Watch OET official YouTube intro videos",
"E2Language: Enrol and complete orientation module",
],
"weekly_goals": ["Complete Cardiology lectures (Dr. Marwah)", "Start Respiratory lectures",
"OET sample test done", "PLABable account created, 70 Qs done"],
"exam_note": None,
},
{
"month": "August 2026", "phase": "Phase 1 β Foundation", "phase_color": C_TEAL,
"plab_topics": [
"Gastroenterology: GI Bleed, IBD, Liver Cirrhosis, Pancreatitis",
"Hepatology: Jaundice workup, Hepatitis B & C serology",
"Endocrinology: DM Type 1 & 2, DKA, HHS, Hypoglycaemia",
"Endocrinology: Thyroid (hypo/hyper/storm), Cushing's, Addison's",
"PLABable: 15 Qs/day β include NICE guideline review on wrong Qs",
],
"oet_tasks": [
"E2Language: Complete Reading module (skimming + scanning techniques)",
"E2Language: Complete Listening module (Part A note-taking)",
"OET Reading: Practice 2 sample texts with timer",
"OET Listening: Practice 2 Part A consultations",
],
"weekly_goals": ["Gastro + Hepato lectures done", "Endocrinology lectures done",
"OET Reading module complete", "105 PLABable Qs done this month"],
"exam_note": None,
},
{
"month": "September 2026", "phase": "Phase 1 β Foundation", "phase_color": C_TEAL,
"plab_topics": [
"Neurology: Stroke, TIA, Epilepsy, Meningitis",
"Neurology: GBS, Myasthenia Gravis, MS, Parkinson's",
"Nephrology: AKI, CKD, Nephrotic vs Nephritic, Glomerulonephritis",
"Electrolytes: Hyperkalaemia, Hyponatraemia, acid-base disorders",
"PLABable: 20 Qs/day β start timed sessions (2 min/question)",
],
"oet_tasks": [
"E2Language: Complete Writing module β referral letter structure",
"OET Writing: Write 1st practice referral letter, self-review",
"OET Speaking: Watch 3 role-play videos (OET official YouTube)",
"Join OET Telegram/WhatsApp group for speaking practice partner",
],
"weekly_goals": ["Neurology lectures done", "Nephrology done",
"First OET referral letter written", "140 PLABable Qs this month"],
"exam_note": None,
},
{
"month": "October 2026", "phase": "Phase 2 β Build + OET", "phase_color": C_PURPLE,
"plab_topics": [
"Rheumatology: RA, SLE, Gout, AS, Vasculitis, Cryoglobulinemia",
"Haematology: Anaemia types, ITP/TTP/HUS, DIC, Myeloma",
"Haematology: Lymphoma, Leukaemia (CML/CLL/AML/ALL), Transfusion",
"Infectious Disease: HIV/AIDS, Opportunistic infections, ARTs",
"PLABable: 25 Qs/day β flag all wrong Qs for later review",
],
"oet_tasks": [
"OET Writing: 2 letters/week β get E2Language written feedback",
"OET Listening: Daily 30-min practice (Part B & C)",
"OET Speaking: 2 role-plays/week with practice partner",
"OET Full mock test #1 β note all weak areas",
],
"weekly_goals": ["Rheumatology done", "Haematology done",
"OET Mock #1 complete β score recorded", "175 PLABable Qs this month"],
"exam_note": None,
},
{
"month": "November 2026", "phase": "Phase 2 β Build + OET", "phase_color": C_PURPLE,
"plab_topics": [
"Psychiatry: Depression, Schizophrenia, Bipolar, Delirium vs Dementia",
"Ethics & Law: Mental Capacity Act, Consent, Confidentiality",
"Ethics & Law: Safeguarding, Gillick competence, Duty of Candour",
"Infectious Disease: TB, Malaria, Sepsis, Antimicrobial stewardship",
"Samson Notes: Begin reading β first 5 chapters",
"PLABable: 25 Qs/day β ethics & psychiatry focus",
],
"oet_tasks": [
"OET Writing: 2 letters/week β discharge + referral types",
"OET Speaking: 3 role-plays/week β focus on opening + closing",
"OET Full mock test #2 β compare with Mock #1",
"π REGISTER for OET β Book February or March 2027 slot",
],
"weekly_goals": ["Psychiatry + Ethics done", "OET registered β",
"Samson Notes started", "175+ PLABable Qs this month"],
"exam_note": "β οΈ BOOK OET EXAM THIS MONTH β slots fill fast!",
},
{
"month": "December 2026", "phase": "Phase 2 β Build + OET", "phase_color": C_PURPLE,
"plab_topics": [
"Revision: All Dr. Marwah lectures β rapid re-watch (1.5x speed)",
"Samson Notes: Complete reading β all chapters",
"PLABable: 30 Qs/day β rotate all subjects",
"NICE Guidelines: 1 guideline per day (DM, AF, Asthma, COPD, PE...)",
"PLABable mock exam #1 β full timed 180 Qs",
],
"oet_tasks": [
"OET: 3 full mock tests this month",
"OET Writing: Target consistent B grade on letters",
"OET Speaking: Daily role-play, focus on fluency not perfection",
"OET Listening: Drill weakest part (A/B/C)",
"OET Reading: Speed drills β finish 3-part paper in 60 min",
],
"weekly_goals": ["All subjects revised", "Samson Notes complete",
"PLABable Mock #1 done β score noted", "3 OET mocks done"],
"exam_note": None,
},
{
"month": "January 2027", "phase": "Phase 3 β OET Crunch + PLAB 1 Build", "phase_color": C_ORANGE,
"plab_topics": [
"PLABable: 40 Qs/day β timed, exam conditions",
"Samson Notes: 2nd read β focus on weak topics",
"NICE Guidelines: Cardio, Respiratory, Neuro, Endo daily",
"Ethics revision: GMC Good Medical Practice β all chapters",
"PLABable mock exam #2 β full timed",
],
"oet_tasks": [
"OET: Daily full sub-test practice (one each day, rotate)",
"OET Writing: 1 letter every 2 days β aim for B+ consistently",
"OET Speaking: 4+ role-plays/week with partner",
"OET Final Mock #4 and #5 β simulate exam conditions",
"Exam logistics: travel, ID, test centre confirmation",
],
"weekly_goals": ["PLABable Mock #2 done", "Ethics revision complete",
"OET: All sub-tests at B level in mocks", "OET exam logistics confirmed"],
"exam_note": "π
OET EXAM: February 2027 β FINAL COUNTDOWN",
},
{
"month": "February 2027", "phase": "Phase 3 β OET EXAM MONTH", "phase_color": C_RED,
"plab_topics": [
"Light PLAB 1 revision only β don't overload before OET",
"PLABable: 20 Qs/day (maintenance)",
"Post-OET: Full PLAB 1 intensity resumes immediately after exam",
"PLABable: 50 Qs/day after OET",
"Weak topic targeted revision (from PLABable analytics)",
],
"oet_tasks": [
"π’ OET EXAM (February sitting)",
"Day before: rest, review letter template only",
"Post exam: note which sub-tests felt weak",
"Results in ~16 days β check oet.com",
"If any sub-test below B: plan resit (April 2027 option)",
],
"weekly_goals": ["β
OET Exam given", "Result awaited",
"PLAB 1 intensity resumed", "50 PLABable Qs/day started"],
"exam_note": "π΄ OET EXAM THIS MONTH β Rest well, trust your prep!",
},
{
"month": "March 2027", "phase": "Phase 3β4 β PLAB 1 Crunch Begins", "phase_color": C_ORANGE,
"plab_topics": [
"PLABable: 50 Qs/day β full subject rotation",
"PLABable Mock #3 β full timed 180 Qs, analyse performance",
"Samson Notes: 3rd rapid revision pass",
"NICE: Gastro, Rheumatology, Psychiatry guidelines",
"Cardiology deep dive: ECG revision, ACS algorithms",
],
"oet_tasks": [
"OET result arrives β record score in tracker",
"If Grade B in all 4: β
OET COMPLETE",
"If any sub-test < B: Book April resit immediately",
"Maintain English: Read 1 BMJ/NICE article daily",
],
"weekly_goals": ["OET result received β recorded", "PLABable Mock #3 done",
"Samson Notes 3rd pass done", "1750+ total PLABable Qs done"],
"exam_note": "π¬ OET RESULTS ARRIVE β Record and plan next step",
},
{
"month": "April 2027", "phase": "Phase 4 β PLAB 1 Final Crunch", "phase_color": C_RED,
"plab_topics": [
"PLABable: 50 Qs/day + full mock every Sunday",
"PLABable Mock #4 and #5 β timed 180 Qs each",
"Targeted revision: all topics where accuracy < 60% on PLABable",
"Acute Medicine: Sepsis-6, Anaphylaxis, DKA, Hyperkalaemia β protocols",
"Ethics: Mental Capacity Act, consent, confidentiality β final pass",
],
"oet_tasks": [
"OET resit (if needed) β April sitting",
"OET complete: focus 100% on PLAB 1",
"Maintain reading 1 clinical article/day",
],
"weekly_goals": ["2 full PLAB mocks done", "All weak topics flagged + revised",
"Accuracy > 70% on PLABable", "Ethics/Law revision complete"],
"exam_note": "β οΈ PLAB 1 in 4-5 weeks β Exam-mode ON",
},
{
"month": "May 2027", "phase": "Phase 4 β PLAB 1 EXAM MONTH", "phase_color": C_RED,
"plab_topics": [
"Week 1-2: Final PLABable revision β Must Know filter only",
"Week 3: Samson Notes final rapid pass β 1 chapter/hr",
"Week 4 (exam week): Light revision only, no new topics",
"π’ PLAB 1 EXAM β International centre (India)",
"Post exam: Begin PLAB 2 preparation immediately",
],
"oet_tasks": [
"OET: Complete β
(or resit booked)",
"Post PLAB 1: Start Geeky Medics OSCE orientation",
"Watch 5 PLAB 2 station videos on YouTube",
],
"weekly_goals": ["Final Samson Notes pass done", "β
PLAB 1 GIVEN",
"Geeky Medics account created", "PLAB 2 Academy enrolled"],
"exam_note": "π΄ PLAB 1 EXAM THIS MONTH β You've got this!",
},
{
"month": "June 2027", "phase": "Phase 5 β PLAB 2 Prep (Full-time after Internship)", "phase_color": C_GREEN,
"plab_topics": [
"π INTERNSHIP ENDS β Full-time PLAB 2 prep begins",
"PLAB 1 result arrives β apply for PLAB 2 date in UK immediately",
"Geeky Medics: History taking stations β all systems",
"Geeky Medics: Clinical examination stations β all systems",
"ABCDE approach: Practice daily until automatic",
],
"oet_tasks": [
"OET: β
Complete",
"Maintain English β read 1 NHS patient leaflet daily",
"Communication stations use OET speaking skills β leverage this!",
],
"weekly_goals": ["PLAB 1 result received β PLAB 2 date booked",
"UK travel + accommodation planned",
"All history taking stations started on Geeky Medics",
"ABCDE framework memorised"],
"exam_note": "π INTERNSHIP ENDS + PLAB 2 FULL-TIME PREP BEGINS",
},
]
# Additional months for PLAB 2 (July + August)
extra_months = [
{
"month": "July 2027", "phase": "Phase 5 β PLAB 2 Intensive", "phase_color": C_GREEN,
"plab_topics": [
"Geeky Medics: ALL OSCE stations β history, examination, data interpretation",
"PLAB 2 Academy: Communication skills β breaking bad news, consent",
"Ethics stations: Capacity, safeguarding, confidentiality β roleplay daily",
"Prescribing safety stations: drug interactions, safe prescribing",
"Partner roleplay: 2-3 stations daily (WhatsApp/Telegram groups)",
],
"oet_tasks": [
"OET: β
Complete β no further action needed",
],
"weekly_goals": ["All Geeky Medics stations done",
"20+ ethics roleplay scenarios practiced",
"Breaking bad news β SPIKES framework mastered",
"UK travel booked, visa/GMC docs ready"],
"exam_note": "βοΈ TRAVEL TO UK THIS MONTH FOR PLAB 2",
},
{
"month": "August 2027", "phase": "Phase 5 β PLAB 2 EXAM", "phase_color": C_GREEN,
"plab_topics": [
"Week 1-2: Final station practice in UK β find practice partners",
"Attend any PLAB 2 preparation courses/workshops in UK if possible",
"Week 3 (exam week): Light review, rest well, confidence building",
"π’ PLAB 2 EXAM β UK OSCE centre",
"Post exam: Apply for GMC registration immediately after pass",
],
"oet_tasks": [
"OET: β
Complete",
"GMC registration: Submit OET score, PLAB 1 + PLAB 2 results",
],
"weekly_goals": ["UK OSCE practice done", "β
PLAB 2 GIVEN",
"GMC registration application submitted", "π¬π§ UK Medical Career Begins!"],
"exam_note": "π΄ PLAB 2 EXAM IN UK β The finish line is HERE!",
},
]
all_months = month_data + extra_months
for m in all_months:
story.append(section_header(
f" {m['month']} Β· {m['phase']}",
bg=m["phase_color"], fg=C_WHITE, size=11
))
story.append(Spacer(1, 3*mm))
# Exam note banner
if m.get("exam_note"):
note_data = [[Paragraph(m["exam_note"], sty(size=9, bold=True, color=C_WHITE, align=TA_CENTER))]]
nt = Table(note_data, colWidths=[doc.width])
nt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_RED),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("ROUNDEDCORNERS", [3]),
]))
story.append(nt)
story.append(Spacer(1, 2*mm))
# Two columns: PLAB tasks | OET tasks
half = doc.width / 2 - 2*mm
# PLAB column
plab_rows = [[Paragraph("π PLAB 1 / PLAB 2 Tasks", sty(size=9, bold=True, color=C_WHITE, align=TA_CENTER))]]
for task in m["plab_topics"]:
plab_rows.append([Paragraph(f"β {task}", sty(size=8, color=C_DKGRAY))])
plab_col = Table(plab_rows, colWidths=[half])
plab_col.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), C_NAVY),
("BACKGROUND", (0,1), (-1,-1), C_LGRAY),
("GRID", (0,0), (-1,-1), 0.3, C_MGRAY),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
# OET column
oet_rows = [[Paragraph("π£οΈ OET Tasks", sty(size=9, bold=True, color=C_WHITE, align=TA_CENTER))]]
for task in m["oet_tasks"]:
oet_rows.append([Paragraph(f"β {task}", sty(size=8, color=C_DKGRAY))])
# Pad to match PLAB rows
while len(oet_rows) < len(plab_rows):
oet_rows.append([Paragraph("", sty(size=8))])
oet_col = Table(oet_rows, colWidths=[half])
oet_col.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), C_TEAL),
("BACKGROUND", (0,1), (-1,-1), C_MINT),
("GRID", (0,0), (-1,-1), 0.3, C_MGRAY),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
two_col_tbl = Table([[plab_col, oet_col]], colWidths=[half+2*mm, half+2*mm])
two_col_tbl.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
]))
story.append(two_col_tbl)
story.append(Spacer(1, 3*mm))
# Weekly goals
wg_rows = [[Paragraph("β
Monthly Goals (Tick When Done)", sty(size=9, bold=True, color=C_WHITE, align=TA_CENTER))]]
goal_cells = []
for g in m["weekly_goals"]:
goal_cells.append(Paragraph(f"β {g}", sty(size=8, color=C_DKGRAY)))
# layout 2 per row
goal_rows_data = []
for i in range(0, len(goal_cells), 2):
row = [goal_cells[i]]
row.append(goal_cells[i+1] if i+1 < len(goal_cells) else Paragraph("", sty(size=8)))
goal_rows_data.append(row)
wg_rows += goal_rows_data
wg_tbl_inner = Table(goal_rows_data, colWidths=[doc.width/2]*2)
wg_tbl_inner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_AMBER),
("GRID", (0,0), (-1,-1), 0.3, C_MGRAY),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
header_row = Table(
[[Paragraph("β
Monthly Goals (Tick When Done)", sty(size=9, bold=True, color=C_WHITE, align=TA_CENTER))]],
colWidths=[doc.width]
)
header_row.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_ORANGE),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
]))
story.append(header_row)
story.append(wg_tbl_inner)
story.append(Spacer(1, 3*mm))
# Notes + Score tracker
notes_score = [
[
Paragraph("π Notes / Reflections:", sty(size=8, bold=True, color=C_DKGRAY)),
Paragraph("π Score Tracker:", sty(size=8, bold=True, color=C_DKGRAY)),
],
[
Paragraph(
"_"*55 + "<br/>" + "_"*55 + "<br/>" + "_"*55,
sty(size=8, color=C_DKGRAY)
),
Table([
[Paragraph("PLABable Mock Score:", sty(size=7)), Paragraph("___ / 180", sty(size=7))],
[Paragraph("PLABable Accuracy %:", sty(size=7)), Paragraph("____ %", sty(size=7))],
[Paragraph("OET Sub-test Scores:", sty(size=7)), Paragraph("R__ L__ W__ S__", sty(size=7))],
[Paragraph("Total Qs Done (month):", sty(size=7)), Paragraph("______", sty(size=7))],
], colWidths=[45*mm, 35*mm], style=[
("GRID", (0,0), (-1,-1), 0.3, C_MGRAY),
("BACKGROUND", (0,0), (-1,-1), C_LGRAY),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 3),
("FONTSIZE", (0,0), (-1,-1), 7),
]),
],
]
ns_tbl = Table(notes_score, colWidths=[doc.width*0.55, doc.width*0.45])
ns_tbl.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
("BOX", (0,0), (-1,-1), 0.5, C_MGRAY),
("BACKGROUND", (0,0), (-1,-1), C_LGRAY),
]))
story.append(ns_tbl)
story.append(PageBreak())
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# FINAL PAGE β TOOLKIT REFERENCE + QUICK LINKS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("π§° COMPLETE STUDY TOOLKIT REFERENCE", bg=C_NAVY))
story.append(Spacer(1, 3*mm))
toolkit = [
["#", "Resource", "Type", "Use For", "Priority"],
["1", "PLABable (app + web)", "Q-Bank", "PLAB 1 daily questions, mocks, Must Know filter", "βββ"],
["2", "Samson Notes + 1700 Qs PDF", "Notes/Qs", "PLAB 1 compact revision, free PDF", "βββ"],
["3", "Dr. Marwah β PrepLadder", "Video", "Clinical Medicine concept building", "βββ"],
["4", "NICE Guidelines (nice.org.uk)", "Reference", "UK drug & management protocols", "βββ"],
["5", "E2Language", "OET Course", "All 4 OET sub-tests + written feedback", "βββ"],
["6", "OET.com Official Material", "OET", "Free sample tests, format guides", "ββ"],
["7", "Geeky Medics (app + web)", "PLAB 2", "OSCE stations, history, examinations", "βββ"],
["8", "PLAB 2 Academy", "PLAB 2", "Video OSCE prep, communication skills", "ββ"],
["9", "GMC Good Medical Practice", "Ethics", "Capacity, consent, confidentiality, law", "βββ"],
["10","MedRevisions / iatroX", "Q-Bank", "PLAB 1 supplement, adaptive analytics", "β"],
["11","OET/PLAB Telegram Groups", "Community", "Speaking partner, peer revision, tips", "ββ"],
["12","BMJ Best Practice / Uptodate", "Reference", "Clinical evidence, management algorithms", "ββ"],
]
tk_cw = [8*mm, 42*mm, 22*mm, 72*mm, 18*mm]
tk_tbl = Table(toolkit, colWidths=tk_cw, repeatRows=1)
tk_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), C_TEAL),
("TEXTCOLOR", (0,0), (-1,0), C_WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8),
("GRID", (0,0), (-1,-1), 0.4, C_MGRAY),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
for i in range(1, len(toolkit)):
bg = C_LGRAY if i % 2 == 0 else C_WHITE
tk_tbl.setStyle(TableStyle([("BACKGROUND", (0,i), (-1,i), bg)]))
story.append(tk_tbl)
story.append(Spacer(1, 5*mm))
# OET Sub-test reference
story.append(section_header("π OET QUICK REFERENCE Β· What Each Sub-test Involves", bg=C_TEAL))
story.append(Spacer(1, 2*mm))
oet_ref = [
["Sub-test", "Duration", "Format", "Indian Doctor Difficulty", "Key Tip"],
["Reading", "60 min", "3 parts β skim/scan medical texts", "Medium", "Skimming + scanning practice daily"],
["Listening","40 min", "Part A: consult notes | B: short extracts | C: presentations", "Medium", "Note-taking speed is key in Part A"],
["Writing", "45 min", "Referral or discharge letter from case notes", "HIGH", "Use fixed template; practice weekly"],
["Speaking", "~20 min","2 role-play consultations (patient actor)", "HIGH", "Partner practice; open/close well"],
]
oet_cw = [22*mm, 18*mm, 58*mm, 32*mm, 39*mm]
ot = Table(oet_ref, colWidths=oet_cw, repeatRows=1)
ot.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), C_TEAL),
("TEXTCOLOR", (0,0), (-1,0), C_WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8),
("GRID", (0,0), (-1,-1), 0.4, C_MGRAY),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("BACKGROUND", (0,1), (-1,1), C_LGRAY),
("BACKGROUND", (0,3), (-1,3), C_LGRAY),
("BACKGROUND", (0,4), (-1,4), C_LTRED),
("BACKGROUND", (0,2), (-1,2), C_WHITE),
]))
story.append(ot)
story.append(Spacer(1, 5*mm))
# Daily routine reminder
story.append(section_header("β° DAILY ROUTINE TEMPLATE (Internship Days)", bg=C_PURPLE))
story.append(Spacer(1, 2*mm))
routine = [
["Time", "Activity", "Duration"],
["Morning (before hospital)", "PLABable: 10-15 questions (topic-matched to current lecture)", "30 min"],
["Evening (after duty) β Part 1", "Dr. Marwah lecture OR Samson Notes revision", "45 min"],
["Evening β Part 2", "OET practice (rotate: Reading β Listening β Writing β Speaking)", "30 min"],
["Saturday", "PLABable full topic session + timed mock (40-50 Qs)", "2-3 hrs"],
["Sunday", "OET full mock OR letter writing + review + speaking roleplay", "2-3 hrs"],
["Post-internship (Jun 2027+)", "Full-time PLAB 2: Geeky Medics + OSCE roleplay + ethics", "6-8 hrs"],
]
rt = Table(routine, colWidths=[45*mm, 100*mm, 24*mm], repeatRows=1)
rt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), C_PURPLE),
("TEXTCOLOR", (0,0), (-1,0), C_WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8),
("GRID", (0,0), (-1,-1), 0.4, C_MGRAY),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
for i in range(1, len(routine)):
bg = C_LAVENDER if i % 2 == 0 else C_WHITE
rt.setStyle(TableStyle([("BACKGROUND", (0,i), (-1,i), bg)]))
story.append(rt)
story.append(Spacer(1, 4*mm))
# Footer
footer_data = [[Paragraph(
"Generated by Orris AI Β· Tailored for: Indian MBBS Intern, GMC Silvassa Β· PLAB 1: May 2027 Β· PLAB 2: Aug/Sep 2027 Β· OET: Feb/Mar 2027",
sty(size=7, color=C_WHITE, align=TA_CENTER)
)]]
ft = Table(footer_data, colWidths=[doc.width])
ft.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_NAVY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(ft)
# Build
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace/plab-oet-tracker && python generate_tracker.py 2>&1
ls -lh /tmp/workspace/plab-oet-tracker/PLAB_OET_Study_Tracker.pdf
PLAB OET Study Tracker
PDF Document Β· PDF
| Page | Content |
|---|---|
| Page 1 | Cover + Exam milestone strip + Phase overview table + Personal info box |
| Pages 2-13 | One full page per month (Jul 2026 - Jun 2027) |
| Pages 14-15 | July + August 2027 (PLAB 2 intensive + exam) |
| Last page | Full toolkit reference + OET sub-test guide + Daily routine template |