Hey
Help me rule out this week timetable based on topics
Psm and fmt revison week and it is 1sta ugust...so high yield based on ut
Strategy: Heavy topics get morning slots (peak focus). Revision/MCQs in evening. Day 7 = full mock revision.
| Slot | Topic | Focus |
|---|---|---|
| Morning | Epidemiology | Study designs, Bias, RCT, Cohort, Case-control, Odds ratio, RR |
| Afternoon | Screening & Levels of Prevention | Wilson's criteria, sensitivity/specificity, PPV/NPV |
| Evening | MCQs + quick notes | Epidemiology formulas |
| Slot | Topic | Focus |
|---|---|---|
| Morning | Demography & Vital Statistics | Rates vs ratios, MMR, IMR, NMR, fertility rates, census |
| Afternoon | Nutrition | PEM, vitamins, RDA, ICDS, mid-day meal, national programs |
| Evening | Environment & Water | Water purification, chlorination, Imhoff tank, sewage |
| Slot | Topic | Focus |
|---|---|---|
| Morning | National Health Programs | NHM, RNTCP/NTEP, NVBDCP, RCH, UIP |
| Afternoon | Health Planning & Administration | Bhore committee, Alma Ata, PHC functions, Sub-centre norms |
| Evening | FMT - Start: Death | Manner vs cause vs mechanism, Somatic/molecular death, Rigor, Livor, Decomposition |
| Slot | Topic | Focus |
|---|---|---|
| Morning | Wounds & Injuries | Incised, lacerated, contused, puncture, defence wounds, firearm wounds |
| Afternoon | Asphyxial Deaths | Hanging, strangulation, drowning - signs and differentiation |
| Evening | Sexual Offences & POCSO | Rape, examination, hymen, age estimation relevance |
| Slot | Topic | Focus |
|---|---|---|
| Morning | Toxicology - Corrosives & Irritants | Acid/alkali injuries, DDT, Organophosphorus, atropine treatment |
| Afternoon | Toxicology - Narcotics, Alcohol | Ethanol metabolism, drunkenness, opium, cannabis, tolerance |
| Evening | Medical Jurisprudence | MCI/NMC, IPC sections (299, 300, 302, 319-323, 375), consent |
| Slot | Topic | Focus |
|---|---|---|
| Morning | PSM Weak Areas | Biostatistics (mean/median/SD, normal distribution, tests), Occupational health |
| Afternoon | FMT Weak Areas | Age estimation (bone, teeth), Identification, DNA fingerprinting |
| Evening | Previous Year Questions | Solve PYQs for both subjects |
| Slot | Topic | Focus |
|---|---|---|
| Morning | PSM Full Rapid Revision | Flash through all notes/mnemonics |
| Afternoon | FMT Full Rapid Revision | Flash through all notes/mnemonics |
| Evening | Mock Test (50 MCQs each) | Timed practice, identify gaps |
Create a PDF timetable with daily goals I can print
ls -la /home/daytona/workspace/ 2>/dev/null && mkdir -p /home/daytona/workspace/psm-fmt-timetable
~/psm-fmt-timetable/generate_timetable.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph,
Spacer, HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.pdfbase import pdfmetrics
output_path = "/home/daytona/workspace/psm-fmt-timetable/PSM_FMT_Revision_Timetable.pdf"
doc = SimpleDocTemplate(
output_path,
pagesize=A4,
rightMargin=1.5*cm,
leftMargin=1.5*cm,
topMargin=1.5*cm,
bottomMargin=1.5*cm
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
'TitleStyle',
parent=styles['Title'],
fontSize=18,
textColor=colors.HexColor('#1a3c5e'),
spaceAfter=4,
alignment=TA_CENTER,
fontName='Helvetica-Bold'
)
subtitle_style = ParagraphStyle(
'SubtitleStyle',
parent=styles['Normal'],
fontSize=10,
textColor=colors.HexColor('#555555'),
spaceAfter=2,
alignment=TA_CENTER,
fontName='Helvetica'
)
day_header_style = ParagraphStyle(
'DayHeader',
parent=styles['Normal'],
fontSize=11,
textColor=colors.white,
fontName='Helvetica-Bold',
alignment=TA_LEFT
)
slot_style = ParagraphStyle(
'SlotStyle',
parent=styles['Normal'],
fontSize=8.5,
textColor=colors.HexColor('#1a1a1a'),
fontName='Helvetica-Bold',
leading=12
)
topic_style = ParagraphStyle(
'TopicStyle',
parent=styles['Normal'],
fontSize=8.5,
textColor=colors.HexColor('#1a3c5e'),
fontName='Helvetica-Bold',
leading=12
)
focus_style = ParagraphStyle(
'FocusStyle',
parent=styles['Normal'],
fontSize=7.5,
textColor=colors.HexColor('#333333'),
fontName='Helvetica',
leading=11
)
goal_style = ParagraphStyle(
'GoalStyle',
parent=styles['Normal'],
fontSize=8,
textColor=colors.HexColor('#006400'),
fontName='Helvetica-Bold',
leading=11
)
section_title_style = ParagraphStyle(
'SectionTitle',
parent=styles['Normal'],
fontSize=10,
textColor=colors.HexColor('#1a3c5e'),
fontName='Helvetica-Bold',
spaceAfter=4,
spaceBefore=8
)
# Color palette
PSM_COLOR = colors.HexColor('#1a5276') # deep blue for PSM
FMT_COLOR = colors.HexColor('#922b21') # deep red for FMT
MIX_COLOR = colors.HexColor('#1e5f2a') # dark green for mixed
MOCK_COLOR = colors.HexColor('#4a235a') # purple for mock day
LIGHT_PSM = colors.HexColor('#d6eaf8')
LIGHT_FMT = colors.HexColor('#fadbd8')
LIGHT_MIX = colors.HexColor('#d5f5e3')
LIGHT_MOCK = colors.HexColor('#e8daef')
ROW_ALT = colors.HexColor('#f8f9fa')
ROW_WHITE = colors.white
# βββββββββββββββββββββββββββββββββββββββββββββ
# TIMETABLE DATA
# βββββββββββββββββββββββββββββββββββββββββββββ
days = [
{
"date": "Day 1 - Friday, 1st August",
"theme": "PSM HEAVY",
"header_color": PSM_COLOR,
"light_color": LIGHT_PSM,
"daily_goal": "Master epidemiology study designs, association measures & screening parameters.",
"slots": [
("π
Morning", "Epidemiology",
"Study designs (RCT, Cohort, Case-control, Cross-sectional)\nOdds Ratio, Relative Risk, Attributable Risk\nBias types, Confounding, Effect modification"),
("π€ Afternoon", "Screening & Levels of Prevention",
"Wilson's criteria for screening\nSensitivity, Specificity, PPV, NPV - calculations\nPrimary / Secondary / Tertiary prevention examples"),
("π Evening", "MCQ Drill + Quick Notes",
"30 MCQs on epidemiology & screening\nWrite 1-page formula sheet for all rates/ratios"),
]
},
{
"date": "Day 2 - Saturday, 2nd August",
"theme": "PSM - DEMOGRAPHY + NUTRITION",
"header_color": PSM_COLOR,
"light_color": LIGHT_PSM,
"daily_goal": "Know all vital statistics definitions + values, and national nutrition programs cold.",
"slots": [
("π
Morning", "Demography & Vital Statistics",
"IMR, NMR, PMR, MMR - definitions, formula, India values\nFertility rates (GFR, TFR, NRR)\nCensus 2011 key data, demographic cycle"),
("π€ Afternoon", "Nutrition",
"PEM - Kwashiorkor vs Marasmus, Gomez/IAP classification\nVitamins: A, D, B12, C deficiency diseases + RDA\nICDS scheme, Mid-Day Meal, POSHAN Abhiyan"),
("π Evening", "Environment & Water",
"Water purification methods, chlorination (breakpoint)\nIMHOFF tank, oxidation pond, sewage treatment\nNoise, air, radiation standards"),
]
},
{
"date": "Day 3 - Sunday, 3rd August",
"theme": "PSM PROGRAMS + FMT START",
"header_color": MIX_COLOR,
"light_color": LIGHT_MIX,
"daily_goal": "Revise all national health programs + begin FMT with death & decomposition.",
"slots": [
("π
Morning", "National Health Programs",
"NHM, RNTCP/NTEP (DOTS, categories)\nNVBDCP (Malaria, Filaria, Kala-azar, Dengue)\nUIP vaccine schedule, cold chain, RCH"),
("π€ Afternoon", "Health Planning & Administration",
"Bhore / Mudaliar / Alma-Ata / Srivastava committees\nPHC - population, staff, functions\nSub-centre norms, ASHA, ANM roles"),
("π Evening (FMT)", "Death & Postmortem Changes",
"Somatic vs molecular death; brain death criteria\nRigor mortis - timings, exceptions\nLivor mortis - differentiation from bruise\nDecomposition stages, Adipocere, Mummification"),
]
},
{
"date": "Day 4 - Monday, 4th August",
"theme": "FMT HEAVY",
"header_color": FMT_COLOR,
"light_color": LIGHT_FMT,
"daily_goal": "Confidently differentiate wound types, asphyxia signs & medico-legal aspects of sexual offences.",
"slots": [
("π
Morning", "Wounds & Injuries",
"Incised / Lacerated / Contused / Puncture wounds - features\nFirearm wounds: entry vs exit, range estimation\nDefence wounds, Patterned injuries, Age of bruise"),
("π€ Afternoon", "Asphyxial Deaths",
"Hanging vs Strangulation - signs, ligature marks\nThrottle, Burking, Smothering\nDrowning - wet vs dry, diatom test, Cafe-au-lait spots"),
("π Evening", "Sexual Offences & POCSO",
"Rape - IPC Sec 375/376, examination protocol\nHymen types, relevance in medico-legal cases\nAge estimation - Gustafson's method, ossification centres\nPOCSO Act key provisions"),
]
},
{
"date": "Day 5 - Tuesday, 5th August",
"theme": "FMT - TOXICOLOGY + JURISPRUDENCE",
"header_color": FMT_COLOR,
"light_color": LIGHT_FMT,
"daily_goal": "Know OP poisoning management, alcohol metabolism, and key IPC sections for MCQs.",
"slots": [
("π
Morning", "Toxicology: Corrosives & Pesticides",
"Acid (H2SO4, HCl, HNO3) vs Alkali injuries - features\nOrganophosphorus: mechanism (ChE inhibition), SLUDGE/DUMBELS\nAtropine + PAM treatment protocol\nDDT, Paraquat, Aluminium phosphide poisoning"),
("π€ Afternoon", "Toxicology: Narcotics & Alcohol",
"Ethanol: absorption, metabolism, Widmark formula\nDrunkenness stages, blood alcohol levels\nOpium / Morphine / Heroin - signs, Naloxone\nCannabis, Cocaine, LSD - features"),
("π Evening", "Medical Jurisprudence & IPC",
"IPC 299/300 - culpable homicide vs murder\nIPC 319-323 (hurt), 375 (rape), 304A (negligence)\nConsent types, age of consent\nNMC Act, professional misconduct, infamous conduct"),
]
},
{
"date": "Day 6 - Wednesday, 6th August",
"theme": "MIXED REVISION + PYQs",
"header_color": MIX_COLOR,
"light_color": LIGHT_MIX,
"daily_goal": "Plug weak areas in PSM stats & FMT identification; solve minimum 60 PYQs.",
"slots": [
("π
Morning (PSM)", "Biostatistics & Occupational Health",
"Mean, Median, Mode; SD, SE, variance\nNormal distribution, skewness\nStatistical tests: t-test, chi-square, ANOVA (indications)\nSilicosis, Byssinosis, Asbestosis, Miner's lung - occupational diseases"),
("π€ Afternoon (FMT)", "Identification & Forensic Pathology",
"Age estimation: teeth (eruption table), Gustafson's 6 criteria\nDNA fingerprinting, blood grouping (medico-legal use)\nFirearms: types, parts, classification\nExhumation, Inquest (Sec 174 CrPC vs Sec 176 CrPC)"),
("π Evening", "Previous Year Questions",
"Solve 30 PYQs PSM + 30 PYQs FMT\nMark weak topics for Day 7 rapid revision\nReview all mnemonics and formula sheet"),
]
},
{
"date": "Day 7 - Thursday, 7th August",
"theme": "FULL MOCK + RAPID REVISION",
"header_color": MOCK_COLOR,
"light_color": LIGHT_MOCK,
"daily_goal": "Simulate exam conditions. Identify last-minute gaps. Consolidate all high-yield notes.",
"slots": [
("π
Morning", "PSM Rapid Revision",
"Flash through all notes: Epidemiology formulas, National programs, Vital stats values\nRevise mnemonics, committee names, PHC norms\nQuick read of 1-page formula sheet"),
("π€ Afternoon", "FMT Rapid Revision",
"Flash through: Rigor/livor timings, Wound types, IPC sections\nOP poisoning steps, Alcohol levels, Gustafson's criteria\nAll medico-legal definitions"),
("π Evening", "Mock Test (EXAM SIMULATION)",
"50 MCQs PSM - timed (45 mins)\n50 MCQs FMT - timed (45 mins)\nScore, analyse, note mistakes\nSleep early - exam prep done!"),
]
},
]
# βββββββββββββββββββββββββββββββββββββββββββββ
# HIGH YIELD BOX DATA
# βββββββββββββββββββββββββββββββββββββββββββββ
hyt_psm = [
"Epidemiological study designs + OR, RR, AR formulas",
"IMR, MMR, TFR, NRR - definitions + current India values",
"Wilson's screening criteria; Sensitivity/Specificity/PPV/NPV",
"UIP Vaccine schedule + cold chain (2-8Β°C, -20Β°C)",
"PHC - population 30,000 + 6 sub-centres; Sub-centre 5,000",
"RNTCP/NTEP - DOTS categories, drug regimens",
"PEM classifications (Gomez / IAP / Waterlow)",
"Water quality: E. coli 0/100ml, Chlorine residual 0.5 mg/L",
"Bhore committee 1946 - short/long term recommendations",
"Biostatistics - Type I/II error, p-value, confidence interval",
]
hyt_fmt = [
"Rigor mortis: starts 2-6h, complete 12h, passes 36-48h",
"Livor mortis: appears 1-2h, fixed 6-12h",
"Hanging vs Strangulation - ligature mark direction",
"OP poisoning: SLUDGE/DUMBELS + Atropine + PAM doses",
"IPC 299 (CHN) vs 300 (Murder) - exceptions to murder",
"IPC 375 - Rape definition + 376 punishments",
"Gustafson's 6 criteria for dental age estimation",
"Diatom test for drowning (gold standard)",
"Alcohol: 30mg% = driving limit India; 80mg% = presumption",
"DNA fingerprinting: RFLP, STR - medico-legal use",
]
# βββββββββββββββββββββββββββββββββββββββββββββ
# BUILD PDF
# βββββββββββββββββββββββββββββββββββββββββββββ
elements = []
# Title block
elements.append(Spacer(1, 0.3*cm))
elements.append(Paragraph("PSM + FMT REVISION TIMETABLE", title_style))
elements.append(Paragraph("1st August β 7th August 2026 | High-Yield UT Exam Preparation", subtitle_style))
elements.append(Paragraph("MBBS | Preventive & Social Medicine + Forensic Medicine & Toxicology", subtitle_style))
elements.append(Spacer(1, 0.3*cm))
elements.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor('#1a3c5e')))
elements.append(Spacer(1, 0.4*cm))
# LEGEND
legend_data = [
[
Paragraph("<font color='#1a5276'>β </font> PSM Focus Day", focus_style),
Paragraph("<font color='#922b21'>β </font> FMT Focus Day", focus_style),
Paragraph("<font color='#1e5f2a'>β </font> Mixed Day", focus_style),
Paragraph("<font color='#4a235a'>β </font> Mock/Revision Day", focus_style),
]
]
legend_table = Table(legend_data, colWidths=[4.2*cm, 4.2*cm, 4.2*cm, 4.2*cm])
legend_table.setStyle(TableStyle([
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('BACKGROUND', (0,0), (0,0), LIGHT_PSM),
('BACKGROUND', (1,0), (1,0), LIGHT_FMT),
('BACKGROUND', (2,0), (2,0), LIGHT_MIX),
('BACKGROUND', (3,0), (3,0), LIGHT_MOCK),
('BOX', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')),
('INNERGRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
]))
elements.append(legend_table)
elements.append(Spacer(1, 0.5*cm))
# EACH DAY
for day in days:
# Day header
header_para = Paragraph(
f"<font color='white'><b> {day['date']} | {day['theme']}</b></font>",
day_header_style
)
header_table = Table([[header_para]], colWidths=[17*cm])
header_table.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), day['header_color']),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 8),
('ROUNDEDCORNERS', [4, 4, 0, 0]),
]))
elements.append(header_table)
# Daily goal row
goal_row = Table(
[[Paragraph(f"π― Daily Goal: {day['daily_goal']}", goal_style)]],
colWidths=[17*cm]
)
goal_row.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#eafaf1')),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 8),
('BOX', (0,0), (-1,-1), 0.5, colors.HexColor('#abebc6')),
]))
elements.append(goal_row)
# Slots table
col_widths = [3*cm, 4.5*cm, 9.5*cm]
table_data = [
[
Paragraph("<b>Slot</b>", slot_style),
Paragraph("<b>Topic</b>", slot_style),
Paragraph("<b>Focus Points</b>", slot_style),
]
]
for i, (slot, topic, focus) in enumerate(day['slots']):
bg = day['light_color'] if i % 2 == 0 else ROW_WHITE
table_data.append([
Paragraph(slot, slot_style),
Paragraph(topic, topic_style),
Paragraph(focus.replace('\n', '<br/>'), focus_style),
])
t = Table(table_data, colWidths=col_widths)
t.setStyle(TableStyle([
# Header
('BACKGROUND', (0,0), (-1,0), colors.HexColor('#2e4057')),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 8.5),
# Alternating rows
('BACKGROUND', (0,1), (-1,1), day['light_color']),
('BACKGROUND', (0,2), (-1,2), ROW_WHITE),
('BACKGROUND', (0,3), (-1,3), day['light_color']),
# Grid
('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
]))
elements.append(t)
elements.append(Spacer(1, 0.5*cm))
# βββββββββββββββββββββββββββββββββββββββββββββ
# HIGH YIELD SECTION
# βββββββββββββββββββββββββββββββββββββββββββββ
elements.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor('#1a3c5e')))
elements.append(Spacer(1, 0.3*cm))
elements.append(Paragraph("β TOP HIGH-YIELD TOPICS β DON'T SKIP THESE!", section_title_style))
elements.append(Spacer(1, 0.2*cm))
# Two-column HYT table
hyt_rows = []
for i in range(max(len(hyt_psm), len(hyt_fmt))):
left = Paragraph(f"β {hyt_psm[i]}", focus_style) if i < len(hyt_psm) else Paragraph("", focus_style)
right = Paragraph(f"β {hyt_fmt[i]}", focus_style) if i < len(hyt_fmt) else Paragraph("", focus_style)
hyt_rows.append([left, right])
hyt_header = [
Paragraph("<b>PSM HIGH-YIELD</b>", ParagraphStyle('HH', parent=styles['Normal'], fontSize=9, textColor=colors.white, fontName='Helvetica-Bold')),
Paragraph("<b>FMT HIGH-YIELD</b>", ParagraphStyle('HH', parent=styles['Normal'], fontSize=9, textColor=colors.white, fontName='Helvetica-Bold')),
]
hyt_table_data = [hyt_header] + hyt_rows
hyt_table = Table(hyt_table_data, colWidths=[8.5*cm, 8.5*cm])
hyt_style = [
('BACKGROUND', (0,0), (0,0), PSM_COLOR),
('BACKGROUND', (1,0), (1,0), FMT_COLOR),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
('FONTSIZE', (0,0), (-1,0), 9),
('ALIGN', (0,0), (-1,0), 'CENTER'),
]
for i in range(1, len(hyt_table_data)):
bg = LIGHT_PSM if i % 2 == 1 else ROW_WHITE
hyt_style.append(('BACKGROUND', (0,i), (0,i), bg))
bg2 = LIGHT_FMT if i % 2 == 1 else ROW_WHITE
hyt_style.append(('BACKGROUND', (1,i), (1,i), bg2))
hyt_table.setStyle(TableStyle(hyt_style))
elements.append(hyt_table)
elements.append(Spacer(1, 0.4*cm))
# Footer
elements.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#cccccc')))
footer_para = Paragraph(
"Generated for UT Exam Revision | PSM + FMT | August 2026 | Best of luck! π",
ParagraphStyle('Footer', parent=styles['Normal'], fontSize=8, textColor=colors.HexColor('#888888'),
alignment=TA_CENTER, spaceBefore=6)
)
elements.append(footer_para)
# BUILD
doc.build(elements)
print(f"PDF created: {output_path}")
cd /home/daytona/workspace/psm-fmt-timetable && python generate_timetable.py
ls -lh /home/daytona/workspace/psm-fmt-timetable/PSM_FMT_Revision_Timetable.pdf
PSM FMT Revision Timetable
PDF Document Β· PDF
Sorry...but l thing is l have exams from 1st August and from today l want revision schedule...and today l have started health care delivery
~/psm-fmt-timetable/generate_18day.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph,
Spacer, HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
output_path = "/home/daytona/workspace/psm-fmt-timetable/PSM_FMT_18Day_Revision_Schedule.pdf"
doc = SimpleDocTemplate(
output_path,
pagesize=A4,
rightMargin=1.4*cm,
leftMargin=1.4*cm,
topMargin=1.4*cm,
bottomMargin=1.4*cm
)
styles = getSampleStyleSheet()
def S(name, parent='Normal', **kwargs):
return ParagraphStyle(name, parent=styles[parent], **kwargs)
title_s = S('T', 'Title', fontSize=17, textColor=colors.HexColor('#1a3c5e'), alignment=TA_CENTER, fontName='Helvetica-Bold', spaceAfter=3)
sub_s = S('Sub', fontSize=9, textColor=colors.HexColor('#555'), alignment=TA_CENTER, fontName='Helvetica', spaceAfter=2)
day_hdr_s = S('DH', fontSize=10, textColor=colors.white, fontName='Helvetica-Bold')
goal_s = S('G', fontSize=8, textColor=colors.HexColor('#145a32'), fontName='Helvetica-Bold', leading=11)
slot_s = S('SL', fontSize=8, textColor=colors.HexColor('#1a1a1a'), fontName='Helvetica-Bold', leading=11)
topic_s = S('TP', fontSize=8, textColor=colors.HexColor('#1a3c5e'), fontName='Helvetica-Bold', leading=11)
focus_s = S('F', fontSize=7.5, textColor=colors.HexColor('#2c3e50'), fontName='Helvetica', leading=10.5)
hy_s = S('HY', fontSize=7.5, textColor=colors.HexColor('#2c3e50'), fontName='Helvetica', leading=10.5)
sec_s = S('SEC', fontSize=11, textColor=colors.HexColor('#1a3c5e'), fontName='Helvetica-Bold', spaceBefore=8, spaceAfter=4)
note_s = S('N', fontSize=7.5, textColor=colors.HexColor('#7d6608'), fontName='Helvetica-Oblique', leading=10)
# Colors
C_PSM = colors.HexColor('#1a5276')
C_FMT = colors.HexColor('#7b241c')
C_MIX = colors.HexColor('#1e5f2a')
C_REV = colors.HexColor('#4a235a')
C_MOCK = colors.HexColor('#b7770d')
LC_PSM = colors.HexColor('#d6eaf8')
LC_FMT = colors.HexColor('#fadbd8')
LC_MIX = colors.HexColor('#d5f5e3')
LC_REV = colors.HexColor('#e8daef')
LC_MOCK = colors.HexColor('#fef9e7')
W = 17*cm
COL = [2.8*cm, 4.2*cm, 10*cm]
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 18-DAY SCHEDULE (14 Jul β 31 Jul)
# Structure: PSM Days 1-10 (complete syllabus)
# FMT Days 11-17 (complete syllabus)
# Day 18 = Grand revision + mock
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
schedule = [
# ββββββββββββββ PSM BLOCK ββββββββββββββ
{
"day": 1, "date": "Tuesday, 14th July",
"theme": "PSM β Health Care Delivery (TODAY'S START)",
"hc": C_PSM, "lc": LC_PSM,
"goal": "Complete Health Care Delivery + Health System in India. Mark all national committees for quick recall.",
"slots": [
("π
Morning\n(In progress)", "Health Care Delivery",
"Concepts: Health, disease, wellbeing (WHO def)\nLevels of health care (Primary / Secondary / Tertiary)\nReferral system, Healthcare financing in India\nNational Health Policy 2017 key points"),
("π€ Afternoon", "Health System in India",
"Subcentre, PHC, CHC β population norms & staff\nDistrict hospital functions\nPrivate sector role, PPP models\nAsha, ANM, MPW β roles and responsibilities"),
("π Evening", "Committees & Revision",
"Bhore (1946), Mudaliar (1962), Srivastava (1975), Alma Ata (1978)\nHankart & Bajaj committees\n20 MCQs on Health Care Delivery\nWrite 1 summary page"),
]
},
{
"day": 2, "date": "Wednesday, 15th July",
"theme": "PSM β Epidemiology I",
"hc": C_PSM, "lc": LC_PSM,
"goal": "Master study designs + measures of disease frequency and association. These are guaranteed MCQ topics.",
"slots": [
("π
Morning", "Epidemiology Basics",
"Definition, natural history of disease, iceberg phenomenon\nDescriptive epidemiology: Person, Place, Time\nSources of data: vital statistics, surveys, disease notification"),
("π€ Afternoon", "Study Designs",
"Case-control vs Cohort vs RCT vs Cross-sectional\nOdds Ratio, Relative Risk, Attributable Risk β formulas + examples\nPAR (Population Attributable Risk)\nBias: selection, information, confounding β how to control"),
("π Evening", "Practice",
"Construct 2x2 tables and calculate OR, RR\n25 MCQs on epidemiology\nRevise NNT, NNH formulas"),
]
},
{
"day": 3, "date": "Thursday, 16th July",
"theme": "PSM β Epidemiology II + Screening",
"hc": C_PSM, "lc": LC_PSM,
"goal": "Fully understand screening criteria and statistical parameters β frequently asked as calculation MCQs.",
"slots": [
("π
Morning", "Screening",
"Wilson & Jungner criteria (10 points)\nMass vs selective vs multiphasic screening\nSensitivity, Specificity, PPV, NPV β definitions + formulas\nLikelihood ratio, ROC curve concept"),
("π€ Afternoon", "Outbreak Investigation + Surveillance",
"Steps of outbreak investigation (WHO 10 steps)\nEpidemic curves: point source vs propagated\nActive vs passive surveillance\nNotifiable diseases in India"),
("π Evening", "Biostatistics I",
"Mean, Median, Mode β when to use which\nStandard Deviation vs Standard Error\nNormal distribution, skewness, kurtosis\n20 MCQs on screening + biostatistics"),
]
},
{
"day": 4, "date": "Friday, 17th July",
"theme": "PSM β Biostatistics + Research Methods",
"hc": C_PSM, "lc": LC_PSM,
"goal": "Crack biostatistics β statistical tests, sampling, and study design are high-yield for theory + MCQ.",
"slots": [
("π
Morning", "Biostatistics II",
"Hypothesis testing: null vs alternative\nType I error (Ξ±) vs Type II error (Ξ²), p-value, CI\nStatistical tests: t-test, chi-square, ANOVA β indications\nKaplan-Meier, Log-rank test (basic)"),
("π€ Afternoon", "Sampling & Research Methods",
"Probability: SRS, Systematic, Stratified, Cluster\nNon-probability: Convenience, Purposive, Snowball\nSample size calculation concept\nClinical trials: phase IβIV, blinding, randomisation"),
("π Evening", "Revision + MCQs",
"Revise Days 2β4 epidemiology + biostats\n30 MCQs (mixed epidemiology)\nPrepare mnemonic card for study designs"),
]
},
{
"day": 5, "date": "Saturday, 18th July",
"theme": "PSM β Demography & Vital Statistics",
"hc": C_PSM, "lc": LC_PSM,
"goal": "Know every rate and ratio cold β their formulas, differences, and current India values.",
"slots": [
("π
Morning", "Fertility & Mortality Rates",
"CBR, CDR, ASMR, ASFR, GFR, TFR, NRR, GRR\nIMR, NMR, PNMR, U5MR, MMR β definitions + formula\nIndia values 2020β24 (IMR ~27, MMR ~97, TFR ~2.0)\nDemographic cycle (phases IβIV)"),
("π€ Afternoon", "Census & Population",
"Census 2011: population, growth rate, sex ratio, literacy\nSample Registration System (SRS)\nCivil registration system\nPopulation pyramid types"),
("π Evening", "Family Planning",
"National Family Planning program history\nContraceptive methods: OCP, IUCD, MTP Act\nTerminal methods, spacing methods\n25 MCQs on demography"),
]
},
{
"day": 6, "date": "Sunday, 19th July",
"theme": "PSM β Nutrition",
"hc": C_PSM, "lc": LC_PSM,
"goal": "PEM classifications, vitamin deficiencies, and national nutrition schemes are always in exam papers.",
"slots": [
("π
Morning", "Protein Energy Malnutrition",
"Kwashiorkor vs Marasmus β clinical features, differences\nGomez classification, IAP classification, Waterlow\nSAM vs MAM management (RUTF, F75/F100)\nMid-Upper Arm Circumference (MUAC) cutoffs"),
("π€ Afternoon", "Vitamins & Minerals",
"Vitamin A: deficiency stages, Bitot's spots, Xerophthalmia, dose\nVitamin D: rickets, osteomalacia, RDA\nIron deficiency anaemia: stages, Hb cutoffs\nIodine, Zinc, B12, C, B1, B2, B3 β deficiency diseases + food sources"),
("π Evening", "Nutrition Programs",
"ICDS β objective, beneficiaries, services ('6 services')\nPoshan Abhiyan / Mission Poshan 2.0\nMid-Day Meal scheme\nNational Iodine Deficiency Disorders Control Programme\n25 MCQs on nutrition"),
]
},
{
"day": 7, "date": "Monday, 20th July",
"theme": "PSM β Communicable Diseases I",
"hc": C_PSM, "lc": LC_PSM,
"goal": "Respiratory and vaccine-preventable diseases: modes of transmission, incubation periods, control measures.",
"slots": [
("π
Morning", "Respiratory Infections",
"Tuberculosis: NTEP/RNTCP β DOTS, categories, regimens (2HRZE/4HR)\nDrug resistance: MDR, XDR, pre-XDR definitions\nCOVID-19 epidemiology (brief)\nInfluenza: types, pandemic vs epidemic"),
("π€ Afternoon", "Vaccine-Preventable Diseases",
"Measles, Mumps, Rubella, Polio, Diphtheria\nIncubation periods + communicable periods\nSmallpox eradication timeline\nUIP vaccine schedule (complete) β age, route, dose, site"),
("π Evening", "Cold Chain & Immunisation",
"Cold chain equipment: ILR, deep freezer, ice-lined refrigerator\nStorage temperatures: OPV -20Β°C, others 2β8Β°C\nVaccine vial monitor (VVM)\n25 MCQs on communicable diseases"),
]
},
{
"day": 8, "date": "Tuesday, 21st July",
"theme": "PSM β Communicable Diseases II (Vector-borne + Others)",
"hc": C_PSM, "lc": LC_PSM,
"goal": "Vector-borne diseases and their control are classic long-answer + MCQ topics.",
"slots": [
("π
Morning", "Vector-borne Diseases",
"Malaria: lifecycle, species, drug treatment (ACT), Rapid Diagnostic Test\nDengue: serotypes, warning signs, NS1, DHF vs DSS\nFilariasis: MDA (DEC + Albendazole), Night Blood Survey\nKala-azar: Rk39 test, SSG treatment\nJapanese Encephalitis: vector, vaccine"),
("π€ Afternoon", "Other Communicable Diseases",
"HIV/AIDS: ICTC, PPTCT, ART eligibility, window period\nLeprosy: NLEP, types, MDT regimen (PB vs MB)\nCholera: El-Tor biotype, ORS formula, ring vaccination\nHepatitis A, B, C, E β transmission, prevention"),
("π Evening", "NVBDCP + Revision",
"NVBDCP programmes and targets\nRevise all vector names and control methods\n30 MCQs on vector-borne diseases"),
]
},
{
"day": 9, "date": "Wednesday, 22nd July",
"theme": "PSM β Environment Health + Occupational Health",
"hc": C_PSM, "lc": LC_PSM,
"goal": "Water quality standards, purification methods, and occupational lung diseases are high-yield.",
"slots": [
("π
Morning", "Water & Sanitation",
"WHO water quality standards (E. coli: 0/100ml)\nWater purification: sedimentation, coagulation, filtration, chlorination\nBreakpoint chlorination, Horrock's test\nSewage treatment: Imhoff tank, oxidation pond, trickling filter\nLatrine types: water seal, septic tank"),
("π€ Afternoon", "Air & Environment",
"Air pollutants: PM2.5, PM10, CO, NOx, SOx β health effects\nNoise pollution: WHO standards, NIHL\nRadiation: ionising vs non-ionising\nGlobal warming, ozone depletion, acid rain"),
("π Evening", "Occupational Health",
"Silicosis, Asbestosis, Byssinosis, Anthracosis β causative dust\nBerylliosis, Siderosis\nESI Act, Factories Act β provisions\nESI benefits, Workmen's Compensation Act\n25 MCQs on environment + occupational"),
]
},
{
"day": 10, "date": "Thursday, 23rd July",
"theme": "PSM β National Health Programs + PSM Revision",
"hc": C_PSM, "lc": LC_PSM,
"goal": "Memorise program names, target groups, and key interventions. Final PSM revision day.",
"slots": [
("π
Morning", "National Health Programs",
"NHM: NRHM + NUHM, components, JSY, JSSK\nNPCDCS: diabetes, CVD, cancer, stroke\nNational Mental Health Programme\nNational Programme for Control of Blindness\nNational Programme for Elderly"),
("π€ Afternoon", "RCH + Child Health Programs",
"RCH II: components, ANC visits (minimum 4)\nNavjaat Shishu Suraksha Karyakram (NSSK)\nRashtriya Bal Swasthya Karyakram (RBSK)\nSAM treatment protocol, Vitamin A supplementation\nKangaroo Mother Care"),
("π Evening", "PSM Grand Revision",
"Quick flash through ALL PSM topics (Days 1β10)\nRevise all formula sheets and mnemonics\nSolve 40 mixed PSM PYQs\nIdentify weak topics to revisit on Day 17"),
]
},
# ββββββββββββββ FMT BLOCK ββββββββββββββ
{
"day": 11, "date": "Friday, 24th July",
"theme": "FMT β Introduction + Death & Decomposition",
"hc": C_FMT, "lc": LC_FMT,
"goal": "Understand the signs of death, postmortem changes with timings, and their medico-legal significance.",
"slots": [
("π
Morning", "FMT Introduction & Forensic Pathology",
"Scope of forensic medicine, types of autopsies\nManner vs Mechanism vs Cause of death\nBrain death criteria (Harvard criteria)\nSomatic vs Molecular death"),
("π€ Afternoon", "Postmortem Changes",
"Cooling of body: Henssge nomogram, Newton's law\nRigor mortis: starts 2β6h, complete 12h, passes 36β48h; exceptions\nLivor mortis (hypostasis): 1β2h, fixed 6β12h; vs bruise differentiation\nDecomposition: stages, putrefaction, Adipocere, Mummification"),
("π Evening", "Inquest & Exhumation",
"Sec 174 CrPC (Police inquest) vs Sec 176 (Magistrate inquest)\nCertification of death, MCCD form\nExhumation: procedure, medico-legal aspects\n20 MCQs on death & decomposition"),
]
},
{
"day": 12, "date": "Saturday, 25th July",
"theme": "FMT β Wounds & Injuries",
"hc": C_FMT, "lc": LC_FMT,
"goal": "Differentiate wound types accurately β a favourite for both MCQs and short answers.",
"slots": [
("π
Morning", "Mechanical Injuries",
"Incised wound: features, defence wounds, hesitation cuts\nContused (lacerated) wound: features, bridging fibers\nPunctured wound: entry vs exit features\nChop wound, abrasion types (scratch, pressure, impact, friction)"),
("π€ Afternoon", "Firearm Wounds",
"Types of firearms: rifled vs smooth bore\nEntry vs Exit wound features\nContact / Close / Intermediate / Distant range β features\nBlackening, tattooing, singing, scorching zones\nSpent bullet, ricochet, bullet embolism"),
("π Evening", "Age of Injuries + Head Injuries",
"Age of bruise: colour changes (yellow = old, black = recent)\nSubdural, Extradural, Subarachnoid haemorrhage β differences\nCoup vs Contre-coup injury\nLacerations of brain\n25 MCQs on wounds"),
]
},
{
"day": 13, "date": "Sunday, 26th July",
"theme": "FMT β Asphyxia",
"hc": C_FMT, "lc": LC_FMT,
"goal": "Hanging vs strangulation vs drowning differences β a perennial long answer question.",
"slots": [
("π
Morning", "Hanging & Strangulation",
"Hanging: typical vs atypical, judicial hanging\nLigature mark: oblique, above thyroid, non-continuous in hanging\nStrangulation: ligature vs manual (throttling)\nLigature mark: horizontal, below thyroid, continuous in strangulation\nPetechiae, fracture of hyoid"),
("π€ Afternoon", "Drowning & Suffocation",
"Drowning: wet vs dry drowning\nFresh vs saltwater drowning β lung changes\nDiatom test (best method), gettler test\nCafe-au-lait spots, washerwoman's hands, cutis anserina\nSmothering, Burking, Overlaying, Traumatic asphyxia"),
("π Evening", "Revision + MCQs",
"Draw comparison table: Hanging vs Strangulation vs Drowning\nRevise all asphyxia signs\n25 MCQs on asphyxia"),
]
},
{
"day": 14, "date": "Monday, 27th July",
"theme": "FMT β Sexual Offences + Identification",
"hc": C_FMT, "lc": LC_FMT,
"goal": "Know rape examination protocol, IPC sections, and all identification methods for exam questions.",
"slots": [
("π
Morning", "Sexual Offences",
"Rape: IPC Sec 375 definition, Sec 376 punishment\nPOCSO Act β key age provisions, mandatory reporting\nExamination of victim: consent, DNA evidence, two-finger test controversy\nHymen types and medico-legal importance\nFalse allegations, recent vs old cases"),
("π€ Afternoon", "Identification",
"Primary (fingerprints, DNA, dental) vs Secondary identifiers\nGustafson's 6 criteria for dental age: Attrition, Periodontosis, Secondary dentine, Cementum apposition, Root resorption, Transparency\nDNA fingerprinting: RFLP, STR, Y-STR, mt-DNA uses\nOssification centres for age estimation (key ones)\nBlood grouping: ABO, Rh, Bombay phenotype"),
("π Evening", "MCQs + Notes",
"Revise IPC sections table (rape, hurt, murder, negligence)\n25 MCQs on sexual offences + identification"),
]
},
{
"day": 15, "date": "Tuesday, 28th July",
"theme": "FMT β Toxicology I (Corrosives + Pesticides)",
"hc": C_FMT, "lc": LC_FMT,
"goal": "OP poisoning management and acid/alkali injuries are the most asked toxicology topics in UT.",
"slots": [
("π
Morning", "Corrosive Poisons",
"Mineral acids: H2SO4, HCl, HNO3 β specific features\nAlkali (NaOH, KOH): saponification, collar of Billroth\nOxalic acid: calcium oxalate crystals in urine\nCarbolic acid (Phenol): port-wine coloured urine, pulmonary oedema"),
("π€ Afternoon", "Organophosphorus & Other Pesticides",
"OP mechanism: irreversible AChE inhibition\nMuscarinic (SLUDGE/DUMBELS) + Nicotinic + CNS features\nAtropine dose + PAM (pralidoxime) β timing rule\nParaquat: delayed pulmonary fibrosis\nAluminium phosphide: phosphine gas, bread smell\nDDT: stored in fat, tremors"),
("π Evening", "Heavy Metals + Snake Bite",
"Lead: Burton's line, basophilic stippling, treatment (EDTA)\nArsenic: Mees lines, garlic odour, Aldrich-Mees\nMercury: Pink disease, Mad Hatter, Minamata\nSnake bite: haemotoxic vs neurotoxic, ASV\n25 MCQs on toxicology I"),
]
},
{
"day": 16, "date": "Wednesday, 29th July",
"theme": "FMT β Toxicology II + Medical Jurisprudence",
"hc": C_FMT, "lc": LC_FMT,
"goal": "Alcohol levels, drug of abuse features, and IPC sections must be memorised for short notes.",
"slots": [
("π
Morning", "Alcohol & Narcotics",
"Ethanol: absorption, metabolism (ADH), Widmark formula\nBAC levels: 30 mg% = India driving limit, 80 mg% = legal presumption, 400 mg% = fatal\nAcute intoxication stages, hangover\nOpium / Morphine / Heroin: features, naloxone antidote\nCannabis (bhang, ganja, charas) β features, no antidote\nCocaine, Amphetamine, LSD β features"),
("π€ Afternoon", "Medical Jurisprudence",
"IPC 299 (CHN) vs IPC 300 (Murder) β exceptions\nIPC 302 punishment, IPC 304 (CHN punish), 304A (medical negligence)\nIPC 319β323 (hurt, grievous hurt)\nConsent: informed, implied, emergency; age of consent (18 yrs)\nConfidentiality exceptions: Tarasoff rule concept\nNMC Act β professional misconduct, infamous conduct"),
("π Evening", "Special Situations in FMT",
"Dowry death: IPC 304B, Sec 113B Evidence Act\nInfanticide: live birth vs stillbirth tests (hydrostatic test)\nMedical negligence: Bolam test, Res ipsa loquitur\n25 MCQs on toxicology II + jurisprudence"),
]
},
{
"day": 17, "date": "Thursday, 30th July",
"theme": "FULL REVISION DAY β PSM + FMT",
"hc": C_REV, "lc": LC_REV,
"goal": "Rapid flash through all 16 days. Re-read weak topics marked during the schedule. No new topics today.",
"slots": [
("π
Morning", "PSM Rapid Revision",
"Epidemiology formulas sheet\nAll national health program key facts\nVital statistics values (IMR, MMR, TFR)\nPHC/subcentre norms, committee names\nVaccine cold chain temperatures\nNutrition: PEM classifications, vitamin deficiencies"),
("π€ Afternoon", "FMT Rapid Revision",
"Death changes: rigor/livor timings\nWound type differentials (comparison table)\nHanging vs Strangulation vs Drowning table\nOP poisoning: SLUDGE + management steps\nIPC sections summary table\nAlcohol BAC levels + Gustafson's criteria"),
("π Evening", "Weak Topic Re-read + MCQ Drill",
"Re-read all marked weak topics from Days 1β16\nSolve 50 mixed MCQs (PSM 25 + FMT 25)\nPrepare short notes for likely long-answer questions\nOrganise all formula/mnemonic sheets"),
]
},
{
"day": 18, "date": "Friday, 31st July",
"theme": "GRAND MOCK + FINAL PREP (Eve of Exam)",
"hc": C_MOCK, "lc": LC_MOCK,
"goal": "Simulate full exam. Spend evening consolidating, NOT reading new content. Sleep by 10 PM.",
"slots": [
("π
Morning", "Mock Exam β PSM",
"10 MCQs + 2 Short notes + 1 Long answer (timed: 1.5 hrs)\nSuggested long answer: Epidemiological study designs / PHC\nSuggested short notes: MMR, Cold chain, Screening criteria"),
("π€ Afternoon", "Mock Exam β FMT",
"10 MCQs + 2 Short notes + 1 Long answer (timed: 1.5 hrs)\nSuggested long answer: Hanging vs Strangulation / OP Poisoning\nSuggested short notes: Rigor mortis, Gustafson's criteria"),
("π Evening", "Last-Hour Revision",
"Check answers β note errors only, do not re-read entire topic\nFlash through formula sheet + IPC sections table\nPrepare stationery, hall ticket, ID proof\nπ Sleep by 10 PM β rest is preparation too!"),
]
},
]
# ββββββββββββββββββββββββββββββββββββββββββββββββββ
# HIGH YIELD TABLES
# ββββββββββββββββββββββββββββββββββββββββββββββββββ
hyt_psm = [
("Epidemiology study designs", "OR, RR, AR formulas + 2Γ2 table"),
("Screening", "Wilson's 10 criteria + Sensitivity/Specificity/PPV/NPV"),
("IMR / MMR / TFR", "Formula + India current values"),
("PHC norms", "Pop 30,000; Sub-centre 5,000; CHC 80,000β1.2L"),
("UIP vaccine schedule", "Complete schedule by age + cold chain temps"),
("NTEP/RNTCP", "DOTS categories, drug regimens (2HRZE/4HR)"),
("PEM classification", "Gomez / IAP / Waterlow + SAM vs MAM"),
("National programs", "JSY, ICDS, NSSK, RBSK β beneficiaries & components"),
("Water standards", "E. coli 0/100ml; Residual Cl 0.5 mg/L"),
("Biostatistics", "Type I/II error, p-value, chi-square vs t-test indications"),
]
hyt_fmt = [
("Rigor mortis", "Starts 2β6h | Complete 12h | Resolves 36β48h"),
("Livor mortis", "Appears 1β2h | Fixed at 6β12h | vs bruise differences"),
("Hanging vs Strangulation", "Ligature direction, continuity, hyoid fracture"),
("Drowning", "Diatom test | Wet vs dry | Cafe-au-lait spots"),
("OP poisoning", "SLUDGE + Atropine (titrate) + PAM (within 24β48h)"),
("IPC 299 vs 300", "CHN vs Murder + 5 exceptions to murder"),
("Alcohol BAC levels", "30 mg% driving | 80 mg% legal | 400 mg% lethal"),
("Gustafson's 6 criteria", "APSRCT β Attrition, Periodontosis, Secondary dentine..."),
("IPC 375 / 376", "Rape definition + POCSO age provisions"),
("DNA fingerprinting", "RFLP, STR, Y-STR β which for what case"),
]
# ββββββββββββββββββββββββββββββββββββββββββββββββββ
# BUILD
# ββββββββββββββββββββββββββββββββββββββββββββββββββ
elements = []
# ββ COVER / TITLE ββ
elements.append(Spacer(1, 0.3*cm))
elements.append(Paragraph("PSM + FMT COMPLETE REVISION SCHEDULE", title_s))
elements.append(Paragraph("14th July β 31st July 2026 | 18 Days | Exam from 1st August", sub_s))
elements.append(Paragraph("Mixed strategy: Full syllabus coverage + Extra focus on high-yield topics", sub_s))
elements.append(Spacer(1, 0.3*cm))
elements.append(HRFlowable(width="100%", thickness=2, color=C_PSM))
elements.append(Spacer(1, 0.3*cm))
# ββ LEGEND ββ
leg_data = [[
Paragraph("<b><font color='#1a5276'>β PSM Days (1β10)</font></b>", focus_s),
Paragraph("<b><font color='#7b241c'>β FMT Days (11β16)</font></b>", focus_s),
Paragraph("<b><font color='#4a235a'>β Revision Day (17)</font></b>", focus_s),
Paragraph("<b><font color='#b7770d'>β Grand Mock Day (18)</font></b>", focus_s),
]]
leg = Table(leg_data, colWidths=[4.25*cm]*4)
leg.setStyle(TableStyle([
('ALIGN', (0,0),(-1,-1),'CENTER'),
('VALIGN',(0,0),(-1,-1),'MIDDLE'),
('BACKGROUND',(0,0),(0,0),LC_PSM),
('BACKGROUND',(1,0),(1,0),LC_FMT),
('BACKGROUND',(2,0),(2,0),LC_REV),
('BACKGROUND',(3,0),(3,0),LC_MOCK),
('BOX',(0,0),(-1,-1),0.5,colors.HexColor('#cccccc')),
('INNERGRID',(0,0),(-1,-1),0.5,colors.HexColor('#cccccc')),
('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5),
]))
elements.append(leg)
elements.append(Spacer(1, 0.4*cm))
# ββ OVERVIEW CALENDAR ββ
elements.append(Paragraph("π
18-DAY OVERVIEW CALENDAR", sec_s))
cal_header = [
Paragraph("<b>Day</b>", slot_s),
Paragraph("<b>Date</b>", slot_s),
Paragraph("<b>Focus</b>", slot_s),
]
cal_data = [cal_header]
for d in schedule:
theme_short = d['theme'].replace("PSM β ","").replace("FMT β ","")
cal_data.append([
Paragraph(f"<b>Day {d['day']}</b>", slot_s),
Paragraph(d['date'].split(',')[0]+',\n'+d['date'].split(',')[1] if ',' in d['date'] else d['date'], focus_s),
Paragraph(d['theme'], focus_s),
])
cal = Table(cal_data, colWidths=[1.5*cm, 3.5*cm, 12*cm])
cal_style = [
('BACKGROUND',(0,0),(-1,0),colors.HexColor('#2e4057')),
('TEXTCOLOR',(0,0),(-1,0),colors.white),
('FONTNAME',(0,0),(-1,0),'Helvetica-Bold'),
('GRID',(0,0),(-1,-1),0.5,colors.HexColor('#cccccc')),
('VALIGN',(0,0),(-1,-1),'TOP'),
('TOPPADDING',(0,0),(-1,-1),4),('BOTTOMPADDING',(0,0),(-1,-1),4),
('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),
('ALIGN',(0,0),(0,-1),'CENTER'),
]
for i,d in enumerate(schedule,1):
bg = d['lc'] if i%2==1 else colors.white
cal_style.append(('BACKGROUND',(0,i),(-1,i),bg))
cal.setStyle(TableStyle(cal_style))
elements.append(cal)
elements.append(Spacer(1,0.4*cm))
elements.append(HRFlowable(width="100%", thickness=1.5, color=colors.HexColor('#cccccc')))
elements.append(Spacer(1,0.3*cm))
# ββ DAILY SCHEDULE PAGES ββ
elements.append(Paragraph("π DAILY DETAILED SCHEDULE", sec_s))
for d in schedule:
# Day header
hdr = Paragraph(f"<font color='white'><b> DAY {d['day']} | {d['date']} | {d['theme']}</b></font>", day_hdr_s)
hdr_t = Table([[hdr]], colWidths=[W])
hdr_t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,-1),d['hc']),
('TOPPADDING',(0,0),(-1,-1),6),('BOTTOMPADDING',(0,0),(-1,-1),6),
('LEFTPADDING',(0,0),(-1,-1),8),
]))
# Goal
goal_t = Table([[Paragraph(f"π― DAILY GOAL: {d['goal']}", goal_s)]], colWidths=[W])
goal_t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,-1),colors.HexColor('#eafaf1')),
('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5),
('LEFTPADDING',(0,0),(-1,-1),8),
('BOX',(0,0),(-1,-1),0.5,colors.HexColor('#a9dfbf')),
]))
# Slots
rows = [[
Paragraph("<b>Slot</b>", slot_s),
Paragraph("<b>Topic</b>", slot_s),
Paragraph("<b>Focus Points</b>", slot_s),
]]
for i,(sl,tp,fp) in enumerate(d['slots']):
bg = d['lc'] if i%2==0 else colors.white
rows.append([
Paragraph(sl.replace('\n','<br/>'), slot_s),
Paragraph(tp, topic_s),
Paragraph(fp.replace('\n','<br/>'), focus_s),
])
slots_t = Table(rows, colWidths=COL)
slots_t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,0),colors.HexColor('#2e4057')),
('TEXTCOLOR',(0,0),(-1,0),colors.white),
('FONTNAME',(0,0),(-1,0),'Helvetica-Bold'),
('BACKGROUND',(0,1),(-1,1),d['lc']),
('BACKGROUND',(0,2),(-1,2),colors.white),
('BACKGROUND',(0,3),(-1,3),d['lc']),
('GRID',(0,0),(-1,-1),0.5,colors.HexColor('#cccccc')),
('VALIGN',(0,0),(-1,-1),'TOP'),
('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),6),
('LEFTPADDING',(0,0),(-1,-1),6),('RIGHTPADDING',(0,0),(-1,-1),6),
]))
elements.append(KeepTogether([hdr_t, goal_t, slots_t, Spacer(1,0.45*cm)]))
# ββ HIGH YIELD SECTION ββ
elements.append(HRFlowable(width="100%", thickness=2, color=C_PSM))
elements.append(Spacer(1,0.3*cm))
elements.append(Paragraph("β HIGH-YIELD MASTER LIST β MUST KNOW COLD", sec_s))
hy_hdr = [
Paragraph("<b>PSM TOPIC</b>", slot_s),
Paragraph("<b>WHAT TO KNOW</b>", slot_s),
Paragraph("<b>FMT TOPIC</b>", slot_s),
Paragraph("<b>WHAT TO KNOW</b>", slot_s),
]
hy_rows = [hy_hdr]
for i in range(len(hyt_psm)):
p_topic, p_what = hyt_psm[i]
f_topic, f_what = hyt_fmt[i]
bg = LC_PSM if i%2==0 else colors.white
bg2 = LC_FMT if i%2==0 else colors.white
hy_rows.append([
Paragraph(p_topic, topic_s),
Paragraph(p_what, focus_s),
Paragraph(f_topic, topic_s),
Paragraph(f_what, focus_s),
])
hy_t = Table(hy_rows, colWidths=[3.2*cm, 5.1*cm, 3.2*cm, 5.5*cm])
hy_ts = [
('BACKGROUND',(0,0),(1,0),C_PSM),
('BACKGROUND',(2,0),(3,0),C_FMT),
('TEXTCOLOR',(0,0),(-1,0),colors.white),
('FONTNAME',(0,0),(-1,0),'Helvetica-Bold'),
('GRID',(0,0),(-1,-1),0.5,colors.HexColor('#cccccc')),
('VALIGN',(0,0),(-1,-1),'TOP'),
('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5),
('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),
('ALIGN',(0,0),(-1,0),'CENTER'),
]
for i in range(1, len(hy_rows)):
hy_ts.append(('BACKGROUND',(0,i),(1,i), LC_PSM if i%2==1 else colors.white))
hy_ts.append(('BACKGROUND',(2,i),(3,i), LC_FMT if i%2==1 else colors.white))
hy_t.setStyle(TableStyle(hy_ts))
elements.append(hy_t)
elements.append(Spacer(1,0.4*cm))
# ββ TIPS BOX ββ
tips = [
"π Study in 90-minute focused blocks with 15-min breaks (Pomodoro extended)",
"π After each topic: write 5 key points from memory before checking notes",
"π Evening MCQs are mandatory β passive reading without testing = low retention",
"π Use comparison tables for Hanging/Strangulation, OR/RR, Kwashiorkor/Marasmus",
"π Last 3 days (16β18): No new topics. Only revision + mock tests",
"π Day 17 evening: Prepare a 1-page cheat sheet of all formulas + IPC sections",
]
tips_data = [[Paragraph(t, note_s)] for t in tips]
tips_data.insert(0, [Paragraph("<b>π‘ STUDY STRATEGY TIPS</b>", goal_s)])
tips_t = Table(tips_data, colWidths=[W])
tips_t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,0),colors.HexColor('#fef9e7')),
('BACKGROUND',(0,1),(-1,-1),colors.HexColor('#fffde7')),
('BOX',(0,0),(-1,-1),1,colors.HexColor('#f0c040')),
('INNERGRID',(0,0),(-1,-1),0.3,colors.HexColor('#f8e08e')),
('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5),
('LEFTPADDING',(0,0),(-1,-1),8),('RIGHTPADDING',(0,0),(-1,-1),8),
]))
elements.append(tips_t)
elements.append(Spacer(1,0.3*cm))
# ββ FOOTER ββ
elements.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#cccccc')))
elements.append(Paragraph(
"PSM + FMT | 18-Day Revision Schedule | Exam 1st August 2026 | You've got this! π",
S('Foot', fontSize=8, textColor=colors.HexColor('#888'), alignment=TA_CENTER, spaceBefore=5)
))
doc.build(elements)
print(f"β
PDF created: {output_path}")
cd /home/daytona/workspace/psm-fmt-timetable && python generate_18day.py
ls -lh /home/daytona/workspace/psm-fmt-timetable/PSM_FMT_18Day_Revision_Schedule.pdf
PSM FMT 18Day Revision Schedule
PDF Document Β· PDF
I am used to study both subjects oeach day to avoid stress
~/psm-fmt-timetable/generate_mixed.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph,
Spacer, HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
output_path = "/home/daytona/workspace/psm-fmt-timetable/PSM_FMT_Mixed_18Day_Schedule.pdf"
doc = SimpleDocTemplate(
output_path, pagesize=A4,
rightMargin=1.3*cm, leftMargin=1.3*cm,
topMargin=1.3*cm, bottomMargin=1.3*cm
)
styles = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, parent=styles['Normal'], **kw)
title_s = S('T', fontSize=16, textColor=colors.HexColor('#1a3c5e'), alignment=TA_CENTER, fontName='Helvetica-Bold', spaceAfter=3)
sub_s = S('SB', fontSize=9, textColor=colors.HexColor('#555'), alignment=TA_CENTER, fontName='Helvetica', spaceAfter=2)
dh_s = S('DH', fontSize=10, textColor=colors.white, fontName='Helvetica-Bold')
goal_s = S('G', fontSize=8, textColor=colors.HexColor('#145a32'), fontName='Helvetica-Bold', leading=11)
slot_s = S('SL', fontSize=8, textColor=colors.HexColor('#1a1a1a'), fontName='Helvetica-Bold', leading=11)
psm_s = S('PS', fontSize=8, textColor=colors.HexColor('#1a5276'), fontName='Helvetica-Bold', leading=11)
fmt_s = S('FM', fontSize=8, textColor=colors.HexColor('#7b241c'), fontName='Helvetica-Bold', leading=11)
focus_s = S('F', fontSize=7.5,textColor=colors.HexColor('#2c3e50'), fontName='Helvetica', leading=10.5)
sec_s = S('SE', fontSize=11, textColor=colors.HexColor('#1a3c5e'), fontName='Helvetica-Bold', spaceBefore=6, spaceAfter=4)
note_s = S('N', fontSize=7.5,textColor=colors.HexColor('#7d6608'), fontName='Helvetica-Oblique', leading=10)
foot_s = S('FT', fontSize=8, textColor=colors.HexColor('#888'), alignment=TA_CENTER, spaceBefore=5)
cal_s = S('CA', fontSize=7.5,textColor=colors.HexColor('#2c3e50'), fontName='Helvetica', leading=10)
C_HDR = colors.HexColor('#1a3c5e') # unified header (dark navy)
C_MOK = colors.HexColor('#b7770d') # mock day
LC_PSM = colors.HexColor('#d6eaf8')
LC_FMT = colors.HexColor('#fadbd8')
LC_MOK = colors.HexColor('#fef9e7')
LC_REV = colors.HexColor('#e8daef')
W = 17.4*cm
COL = [2.6*cm, 1.5*cm, 4.8*cm, 8.5*cm] # Slot | Sub | Topic | Focus
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 18-DAY MIXED SCHEDULE (14 Jul β 31 Jul)
# Each day: Morning = PSM topic, Afternoon = FMT topic,
# Evening = MCQs / revision of the day's topics
# Last 2 days = full revision + mock
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
schedule = [
{
"day":1,"date":"Tue, 14 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Health Care Delivery (PSM) + Death & Postmortem changes (FMT). Strong start β both are scoring topics.",
"rows":[
("π
Morning","PSM","Health Care Delivery",
"Concepts of health/disease (WHO def) | Levels of care (primary/secondary/tertiary)\nReferral system | NHP 2017 key points | ASHA, ANM, MPW roles\nSubcentre (5,000 pop) | PHC (30,000) | CHC (80,000β1.2L) β staff & functions"),
("π€ Afternoon","FMT","Death & Postmortem Changes",
"Manner vs Cause vs Mechanism of death | Brain death criteria\nRigor mortis: starts 2β6h, complete 12h, resolves 36β48h; exceptions (cold, hot)\nLivor mortis: appears 1β2h, fixed 6β12h; differentiate from bruise\nDecomposition stages | Adipocere | Mummification | Cadaveric spasm"),
("π Evening","MCQs","Revision + Drill",
"20 MCQs: 10 Health Care Delivery + 10 Death changes\nWrite summary: PHC norms table + Rigor timings\nMark weak points for Day 17 revision"),
]
},
{
"day":2,"date":"Wed, 15 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Epidemiology study designs (PSM) + Wounds & Injuries (FMT). Two guaranteed exam topics.",
"rows":[
("π
Morning","PSM","Epidemiology I β Study Designs",
"Descriptive (case report, cross-sectional) | Analytical (case-control, cohort)\nExperimental: RCT β blinding, randomisation, phases IβIV\nOdds Ratio, Relative Risk, Attributable Risk β 2Γ2 table practice\nBias: selection, information, confounding β how to control"),
("π€ Afternoon","FMT","Wounds & Injuries",
"Incised wound: sharp edge, bleeds freely, regular margins, no bridging\nLacerated/contused: blunt force, irregular, bridging fibres present\nPunctured wound: entry > exit feature (except gunshot)\nAbrasion types: scratch, pressure, friction, impact\nChop wound | Defence wounds | Age of bruise (colour sequence)"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: study designs + wounds\nDraw 2Γ2 table and calculate OR + RR from scratch\nMnemonics: study design hierarchy"),
]
},
{
"day":3,"date":"Thu, 16 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Epidemiology measures + screening (PSM) + Firearm wounds (FMT).",
"rows":[
("π
Morning","PSM","Epidemiology II + Screening",
"OR vs RR vs AR vs PAR β formulas + interpretation\nWilson & Jungner 10 criteria for screening\nSensitivity, Specificity, PPV, NPV β formulas + effect of prevalence on PPV\nLikelihood ratio (+ve and βve) | ROC curve concept | NNT, NNH"),
("π€ Afternoon","FMT","Firearm Wounds",
"Rifled vs smooth-bore firearms | Types: pistol, rifle, shotgun\nEntry wound: inverted, smaller, firm margins | Exit: everted, larger, ragged\nContact range: muzzle contusion, cruciform tear, blackening inside wound\nClose: blackening (fouling) | Intermediate: tattooing/stippling | Distant: wound only\nRicochet bullet | Bullet embolism | Spent bullet features"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: screening + firearm wounds\nPractice: calculate PPV at different prevalence values\nTable: contact vs close vs intermediate vs distant range features"),
]
},
{
"day":4,"date":"Fri, 17 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Biostatistics (PSM) + Asphyxial deaths (FMT). Both are perennial exam favourites.",
"rows":[
("π
Morning","PSM","Biostatistics",
"Mean, Median, Mode β when to use each | Normal distribution, skewness\nSD vs SE | Confidence interval (95% CI = mean Β± 1.96 SE)\nHypothesis: null vs alternative | Type I (Ξ±) error vs Type II (Ξ²) error | p-value\nTests: t-test (continuous), chi-square (categorical), ANOVA (>2 groups)\nSampling: SRS, systematic, stratified, cluster, convenience"),
("π€ Afternoon","FMT","Asphyxial Deaths β Hanging & Strangulation",
"Hanging: oblique ligature mark, above thyroid, non-continuous, dribbling of saliva\nJudicial hanging: fracture-dislocation C2βC3 (hangman's fracture)\nLigature strangulation: horizontal mark, below thyroid, continuous\nThrottling (manual): finger-nail marks, fracture of hyoid/thyroid cartilage\nPetechial haemorrhages in conjunctiva, face | Tardieu's spots"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: biostatistics + asphyxia\nWrite comparison table: Hanging vs Ligature strangulation vs Throttling\nRevise p-value + Type I/II error concept"),
]
},
{
"day":5,"date":"Sat, 18 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Demography & Vital Statistics (PSM) + Drowning & Suffocation (FMT).",
"rows":[
("π
Morning","PSM","Demography & Vital Statistics",
"CBR, CDR | IMR (deaths <1yr/1000 LB) | NMR, PNMR, U5MR, MMR β formulas\nIndia 2024 values: IMR ~27, MMR ~97, TFR ~2.0, Literacy 74%\nGFR, TFR, NRR, GRR | Demographic cycle phases IβIV\nCensus 2011: 1.21B, sex ratio 940, decadal growth 17.7%\nSRS β purpose and methodology | Civil Registration System"),
("π€ Afternoon","FMT","Drowning & Suffocation",
"Drowning: wet (90%) vs dry (10%) β laryngospasm\nFresh water: hypotonic β haemolysis, βK+, βNa+ | Salt water: hypertonic β pulmonary oedema\nDiatom test: gold standard (hydrofluoric acid digestion)\nCafe-au-lait spots | Washerwoman's hands | Cutis anserina | Emphysema aquosum\nSmothering | Burking (smothering + compression) | Overlaying | Traumatic asphyxia"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: vital statistics + drowning\nMemorise India vital stats values (must-know for theory)\nDrowning: fresh vs salt water β comparison table"),
]
},
{
"day":6,"date":"Sun, 19 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Nutrition (PSM) + Sexual Offences & POCSO (FMT). Both are high-scoring in UT.",
"rows":[
("π
Morning","PSM","Nutrition",
"Kwashiorkor vs Marasmus β clinical features comparison table\nGomez classification (% expected weight) | IAP classification | Waterlow (stunting/wasting)\nSAM vs MAM β MUAC cutoffs (<11.5cm = SAM) | RUTF, F75, F100 protocol\nVitamin A: Bitot's spots, xerophthalmia stages (XN, X1A, X1B, X2, X3A/B) | Dose\nVitamin D: rickets signs | Iodine: goitre, cretinism | Iron: stages of deficiency"),
("π€ Afternoon","FMT","Sexual Offences & POCSO",
"Rape: IPC Sec 375 definition (7 circumstances) | Sec 376 punishment\nExamination: consent, two-doctor rule, DNA swab protocol, two-finger test controversy\nHymen: types (annular, fimbriated, cribriform, imperforate) | medico-legal significance\nPOCSO Act 2012: <18 yrs | Mandatory reporting | Sec 19 (duty to report)\nAge estimation relevance: Gustafson's 6 criteria | Ossification centres (key ones)"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: nutrition + sexual offences\nWrite: Kwashiorkor vs Marasmus table from memory\nRevise Gustafson's 6 criteria mnemonic: A-P-S-R-C-T"),
]
},
{
"day":7,"date":"Mon, 20 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Communicable diseases I β respiratory & vaccine-preventable (PSM) + Identification (FMT).",
"rows":[
("π
Morning","PSM","Communicable Diseases I",
"TB/NTEP: DOTS, categories (Cat I/II/III), 2HRZE/4HR regimen, MDR/XDR definitions\nUIP vaccine schedule: complete table (BCG, OPV, Hep B, DPT, MMR, Td) β age, route, site, dose\nCold chain: ILR (2β8Β°C), deep freezer (β20Β°C), VVM types\nMeasles, Polio (types, eradication), Diphtheria β incubation + control"),
("π€ Afternoon","FMT","Identification",
"Primary identifiers: fingerprints (Galton's ridge patterns), DNA, dental records\nGustafson's 6 criteria: Attrition, Periodontosis, Secondary dentine, Root resorption, Cementum apposition, Transparency of root\nDNA fingerprinting: RFLP, STR (autosomal), Y-STR (paternity), mtDNA (maternity)\nOssification centres for age estimation: key bones + timings\nBlood grouping: ABO, Rh, Bombay phenotype (Oh) β medico-legal uses"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: vaccines + identification\nWrite UIP schedule from memory\nMnemonic for Gustafson's criteria: APSRCT"),
]
},
{
"day":8,"date":"Tue, 21 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Vector-borne diseases (PSM) + Toxicology I β Corrosives & Pesticides (FMT).",
"rows":[
("π
Morning","PSM","Communicable Diseases II β Vector-borne",
"Malaria: Anopheles vector | P. falciparum (fatal) | ACT regimen | RDT\nDengue: Aedes aegypti | 4 serotypes | NS1 antigen | DHF vs DSS warning signs\nFilariasis: Culex | MDA (DEC + Albendazole) | Night Blood Survey\nKala-azar: sand fly | Rk39 test | Miltefosine treatment\nJE: Culex tritaeniorhynchus | vaccine\nLeprosy: NLEP | MDT (PB 6 months / MB 12 months)"),
("π€ Afternoon","FMT","Toxicology I β Corrosives & Pesticides",
"H2SO4 (vitriol): black leathery eschar, no penetration into stomach wall early\nHCl: grayish-white, pungent odour | HNO3: yellow (xanthoprotein reaction)\nAlkali: saponification, collar of Billroth (mucosa), slippery feel\nOP mechanism: irreversible AChE inhibition | SLUDGE/DUMBELS features\nAtropine: 2β4 mg IV, repeat till full atropinisation | PAM (pralidoxime): within 24β48h\nParaquat: delayed pulmonary fibrosis | AlPO4 (Aluminium phosphide): phosphine gas, bread smell"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: vector-borne + corrosives/pesticides\nOP poisoning management steps from memory\nVector-disease-drug table: all 5 diseases"),
]
},
{
"day":9,"date":"Wed, 22 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Environment & Water (PSM) + Toxicology II β Heavy metals & alcohol (FMT).",
"rows":[
("π
Morning","PSM","Environmental Health",
"Water quality: E. coli 0/100 mL | Residual chlorine 0.5 mg/L | Turbidity <1 NTU\nPurification: sedimentation β coagulation (alum) β filtration β chlorination\nBreakpoint chlorination | Horrocks test (field test for chlorine)\nSewage: Imhoff tank, oxidation pond, trickling filter, activated sludge\nLatrine types: water seal, septic tank, bore hole, ECOSAN\nNoise: >85 dB = NIHL | Air pollutants: PM2.5 (cardiovascular), CO (hemoglobin binding)"),
("π€ Afternoon","FMT","Toxicology II β Heavy Metals & Alcohol",
"Lead: Burton's line (gums), basophilic stippling (RBC), wrist drop, EDTA chelation\nArsenic: Mees lines (nails), garlic odour, rain-drop pigmentation, Marsh test\nMercury: Pink disease (acrodynia), Mad Hatter (CNS), Minamata disease\nEthanol: metabolism via ADH β acetaldehyde β acetate\nWidmark formula: BAC = A / (r Γ W) | India driving limit: 30 mg% | Fatal: ~400 mg%\nStages of drunkenness: subclinical (10β50 mg%) β excitement β confusion β stupor β coma"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: environment + toxicology II\nWrite Widmark formula + BAC level stages from memory\nHeavy metal antidote table: Lead=EDTA, Arsenic=BAL, Mercury=BAL"),
]
},
{
"day":10,"date":"Thu, 23 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Occupational health (PSM) + Toxicology III β Narcotics & Jurisprudence (FMT).",
"rows":[
("π
Morning","PSM","Occupational Health",
"Pneumoconiosis: Silicosis (quartz dust), Asbestosis (mesothelioma risk), Byssinosis (cotton), Anthracosis (coal)\nBerylliosis, Siderosis (iron), Stannosis (tin)\nESI Act: 6 benefits (medical, sickness, maternity, disablement, dependant, funeral)\nFactories Act: working hours, age restrictions, welfare provisions\nWorkmen's Compensation Act | Occupational exposure limits (TLV, PEL, STEL)"),
("π€ Afternoon","FMT","Toxicology III β Narcotics & Medical Jurisprudence",
"Opium/Morphine/Heroin: miosis, respiratory depression, naloxone antidote\nCannabis: cannabis psychosis, no specific antidote, conjunctival congestion\nCocaine: local anaesthetic, euphoria, nasal septum perforation\nAmphetamine: sympathomimetic | LSD: hallucinogen, chromosomal damage\nIPC 299 (CHN) vs 300 (Murder) β 5 exceptions to murder rule\nIPC 302 (murder punishment) | 304A (medical negligence) | 304B (dowry death)\nIPC 319β323 (hurt, grievous hurt) | Consent: informed, implied, emergency"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: occupational health + narcotics/jurisprudence\nIPC sections table: write all from memory\nDrug of abuse features: quick-recall table"),
]
},
{
"day":11,"date":"Fri, 24 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"National Health Programs (PSM) + Head injuries & special FMT topics (FMT).",
"rows":[
("π
Morning","PSM","National Health Programs I",
"NHM: NRHM + NUHM components | JSY cash incentives (rural/urban/SC/ST)\nJSSK: free services for pregnant women & sick neonates\nRCH II: 4 ANC visits, TT, iron-folic acid, institutional delivery\nNTEP (TB) | NVBDCP targets | National Programme for Control of Blindness\nNational Mental Health Programme | NPCDCS (diabetes, CVD, cancer)"),
("π€ Afternoon","FMT","Head Injuries & Special Topics",
"Extradural haemorrhage: middle meningeal artery, lucid interval, lens-shaped on CT\nSubdural haemorrhage: bridging veins, crescent-shaped, elderly/alcoholics\nSubarachnoid haemorrhage: Berry aneurysm, 'thunderclap' headache\nCoup vs Contre-coup injury | Diffuse axonal injury\nInfanticide: live birth tests β hydrostatic test (lung float), Breslau's test, stomach float\nExhumation: procedure, fresh vs exhumed body differences\nInquest: Sec 174 CrPC (police) vs Sec 176 CrPC (magistrate)"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: national programs + head injuries\nHaemorrhage types β location, source, CT appearance table\nJSY cash amounts: BPL rural Rs.1400, urban Rs.1000"),
]
},
{
"day":12,"date":"Sat, 25 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Maternal & Child Health + Family Planning (PSM) + Medico-legal special topics (FMT).",
"rows":[
("π
Morning","PSM","MCH & Family Planning",
"ANC: minimum 4 visits, content at each visit | NSSK (Navjaat Shishu Suraksha Karyakram)\nRBSK: 30 health conditions screened, DEIC management\nKangaroo Mother Care | IMNCI protocol\nContraceptives: OCP (mechanism, failure rate) | IUCD types (CuT 380A, LNG-IUS)\nMTP Act 1971 (amendment 2021): up to 20 weeks, 24 weeks in special cases\nTerminal methods: tubectomy (Pomeroy's), vasectomy (NSV)"),
("π€ Afternoon","FMT","Medico-legal Special Topics",
"Medical negligence: Bolam test, Res ipsa loquitur, contributory negligence\nConsumer Protection Act: applicability to medical services (Supreme Court 1995)\nInformed consent: elements, exceptions, documentation\nProfessional misconduct (NMC): infamous conduct categories\nDowry death: Sec 304B IPC + Sec 113B Evidence Act\nSexual harassment: POSH Act | Workplace violence against doctors"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: MCH/FP + medico-legal topics\nMTP Act amendments β gestational limits + conditions\nMedical negligence landmark cases: Jacob Mathew 2005"),
]
},
{
"day":13,"date":"Sun, 26 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"HIV/AIDS + Other communicable diseases (PSM) + Thermal & chemical burns (FMT).",
"rows":[
("π
Morning","PSM","HIV/AIDS & Other Communicable Diseases",
"HIV: window period (22 days PCR / 45 days antibody) | ICTC/PPTCT services\nART eligibility: CD4 <200 (old) β all regardless of CD4 (current treat-all policy)\nFirst line ART: TDF + 3TC + DTG\nCholera: El-Tor biotype, rice water stools, ORS formula (glucose 20g, NaCl 3.5g per L)\nHepatitis A/E: faeco-oral | Hep B: blood/sexual/perinatal | Hep C: blood-borne\nNational AIDS Control Programme (NACP) β current phase"),
("π€ Afternoon","FMT","Burns & Thermal Injuries",
"Rule of 9 (Wallace's rule): head 9%, each arm 9%, each leg 18%, trunk 36%, perineum 1%\nDepth: superficial (1st degree) | partial thickness (2nd) | full thickness (3rd)\nAntemortem vs postmortem burns β vital reaction, soot in airways\nPugilistic attitude (heat stiffening) | Heat stroke vs heat exhaustion\nElectrical burns: entry (small, charred) vs exit (larger) marks\nLightning: Lichtenberg figures (ferning pattern), keraunoparalysis"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: HIV/communicable + burns\nBSA calculation from burns using Rule of 9\nAntemortem vs postmortem burns β comparison table"),
]
},
{
"day":14,"date":"Mon, 27 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Research methods + Outbreak investigation (PSM) + Toxicology review & antidotes (FMT).",
"rows":[
("π
Morning","PSM","Research Methods & Outbreak Investigation",
"Clinical trial phases IβIV | RCT: allocation concealment, CONSORT\nSystematic review vs meta-analysis | Forest plot, funnel plot, heterogeneity (IΒ²)\nSteps of outbreak investigation (10 steps): verify diagnosis β case definition β case count β hypothesis β test hypothesis β control\nEpidemic curves: point source (narrow bell), propagated (multiple peaks)\nSurveillance: active vs passive | IDSP: P, L, S forms"),
("π€ Afternoon","FMT","Toxicology Review β Antidotes & Special Poisons",
"Antidote table: OP β Atropine + PAM | Opioids β Naloxone | CO β O2\nLead β EDTA | Arsenic/Mercury β BAL (Dimercaprol) | Cyanide β dicobalt edetate\nCarbolic acid (phenol): port-wine urine, pulmonary oedema, no emesis\nStrychnine: opisthotonus, 'Risus sardonicus', convulsions, conscious patient\nSnake bite: haemotoxic (Russell's viper) vs neurotoxic (krait, cobra) | ASV dosing\nMushroom (Amanita): muscarine β atropine antidote"),
("π Evening","MCQs","Revision + Drill",
"25 MCQs: research methods + antidotes\nWrite antidote table from memory\nMeta-analysis concepts: Forest plot interpretation"),
]
},
{
"day":15,"date":"Tue, 28 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Health programs + PSM wrap-up (PSM) + FMT rapid full review (FMT).",
"rows":[
("π
Morning","PSM","Health Planning & Administration + Wrap-up",
"Five-Year Plans: 1st (1951) β current NITI Aayog | Health sector priorities\nAlma-Ata 1978: PHC as strategy | Jakarta, Ottawa charters\nNational Health Mission targets | Ayushman Bharat (PMJAY) β Rs.5 lakh cover\nHPE (Health Promotion): Ottawa 5 action areas\nPSM weak topics rapid re-read based on marked areas"),
("π€ Afternoon","FMT","FMT Comprehensive Review",
"Rapid fire: Death changes β Wounds β Asphyxia β Sexual offences β Identification\nAll IPC sections: 299, 300, 302, 304A, 304B, 319β323, 375, 376\nAll toxicology antidotes + key features\nAll alcohol BAC levels\nGustafson's 6 criteria + DNA fingerprinting uses"),
("π Evening","PYQs","Previous Year Questions",
"Solve 15 PSM PYQs (long answers + short notes)\nSolve 15 FMT PYQs (long answers + short notes)\nModel answers for: Study designs | Hanging vs Strangulation | OP poisoning"),
]
},
{
"day":16,"date":"Wed, 29 Jul","hc":C_HDR,"lc":colors.HexColor('#eaf4fb'),
"goal":"Full-day PYQ practice + targeted weak topic revision for both subjects.",
"rows":[
("π
Morning","PSM","PSM PYQ + Weak Topics",
"Solve 20 MCQs on weakest PSM chapter (from marked notes)\nWrite model answer: Epidemiological study designs (8-mark answer)\nWrite short note: MMR in India / Cold chain / Wilson's screening criteria"),
("π€ Afternoon","FMT","FMT PYQ + Weak Topics",
"Solve 20 MCQs on weakest FMT chapter (from marked notes)\nWrite model answer: Hanging vs Strangulation (8-mark answer)\nWrite short note: Rigor mortis / Gustafson's criteria / OP poisoning management"),
("π Evening","Revision","Consolidation",
"Re-read all comparison tables made over 16 days\nPrepare 1-page cheat sheet: formulas + IPC sections + vital stats values\nOrganise all summary notes for Day 17 flash revision"),
]
},
{
"day":17,"date":"Thu, 30 Jul","hc":colors.HexColor('#4a235a'),"lc":LC_REV,
"goal":"FULL RAPID REVISION DAY β Flash through all topics. No new content. Use only your summary sheets.",
"rows":[
("π
Morning","PSM","PSM Flash Revision",
"Epidemiology: formulas sheet | Study designs hierarchy\nVital stats: all rates, India values | PHC/Subcentre norms\nVaccine schedule + cold chain temps | National programs key facts\nNutrition: PEM table, vitamin deficiencies | Biostatistics: test indications"),
("π€ Afternoon","FMT","FMT Flash Revision",
"Death: rigor + livor timings (memorise exactly)\nWounds: incised vs lacerated vs puncture β 3 differences each\nHanging vs strangulation vs throttling β comparison table\nOP: SLUDGE + atropine + PAM rule | Alcohol: BAC level stages\nIPC sections table | Gustafson's 6 criteria | DNA tests uses"),
("π Evening","MCQs","50-Question Mixed Mock",
"25 PSM MCQs + 25 FMT MCQs β timed (40 minutes)\nScore and analyse errors\nNote 3 most common mistake areas β re-read those tonight ONLY"),
]
},
{
"day":18,"date":"Fri, 31 Jul","hc":C_MOK,"lc":LC_MOK,
"goal":"EXAM EVE β Mock exam in morning. Light revision in afternoon. Rest in evening. Sleep by 10 PM.",
"rows":[
("π
Morning","PSM","PSM Mock Exam (Timed)",
"10 MCQs + 1 Long answer (30 marks) + 2 Short notes (10 marks each) β 1.5 hrs\nSuggested LA: Epidemiological study designs OR Primary Health Care\nSuggested SN: MMR in India | Sensitivity & Specificity"),
("π€ Afternoon","FMT","FMT Mock Exam (Timed)",
"10 MCQs + 1 Long answer (30 marks) + 2 Short notes (10 marks each) β 1.5 hrs\nSuggested LA: Hanging vs Strangulation OR OP Poisoning management\nSuggested SN: Rigor mortis | Gustafson's 6 criteria"),
("π Evening","REST","Final Prep & Sleep",
"Check mock answers β note errors ONLY (don't re-read full topics)\nFlash the 1-page cheat sheet (formulas + IPC sections) ONCE\nPrepare: Hall ticket, ID proof, stationery, water bottle\nπ SLEEP BY 10 PM β rest is the final preparation"),
]
},
]
# βββββββββββββββββββββββββββββββββββ
# BUILD PDF
# βββββββββββββββββββββββββββββββββββ
elements = []
# Title
elements.append(Spacer(1, 0.2*cm))
elements.append(Paragraph("PSM + FMT | 18-DAY MIXED REVISION SCHEDULE", title_s))
elements.append(Paragraph("14th July β 31st July 2026 | Exam begins 1st August | Both subjects studied EVERY day", sub_s))
elements.append(Paragraph("Full syllabus coverage with high-yield focus | 3 slots/day: PSM Morning | FMT Afternoon | MCQs Evening", sub_s))
elements.append(Spacer(1, 0.3*cm))
elements.append(HRFlowable(width="100%", thickness=2, color=C_HDR))
elements.append(Spacer(1, 0.3*cm))
# Strategy note
strat = Table([[Paragraph(
"π Strategy: PSM covers topics progressively Days 1β15 | FMT covers topics progressively Days 1β14 | "
"Days 15β16 = PYQ practice | Day 17 = Full rapid revision | Day 18 = Mock exam + rest", note_s
)]], colWidths=[W])
strat.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,-1),colors.HexColor('#fef9e7')),
('BOX',(0,0),(-1,-1),1,colors.HexColor('#f0c040')),
('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5),
('LEFTPADDING',(0,0),(-1,-1),8),
]))
elements.append(strat)
elements.append(Spacer(1, 0.4*cm))
# ββ OVERVIEW CALENDAR ββ
elements.append(Paragraph("π
18-DAY AT-A-GLANCE CALENDAR", sec_s))
cal_hdr = [
Paragraph("<b>Day</b>", slot_s),
Paragraph("<b>Date</b>", slot_s),
Paragraph("<b>PSM Topic (Morning)</b>", psm_s),
Paragraph("<b>FMT Topic (Afternoon)</b>", fmt_s),
]
cal_rows = [cal_hdr]
for d in schedule:
psm_topic = d['rows'][0][2] if len(d['rows']) > 0 else "-"
fmt_topic = d['rows'][1][2] if len(d['rows']) > 1 else "-"
cal_rows.append([
Paragraph(f"<b>{d['day']}</b>", cal_s),
Paragraph(d['date'], cal_s),
Paragraph(psm_topic, cal_s),
Paragraph(fmt_topic, cal_s),
])
cal = Table(cal_rows, colWidths=[1.2*cm, 2.5*cm, 6.8*cm, 6.9*cm])
cal_ts = [
('BACKGROUND',(0,0),(-1,0),colors.HexColor('#2e4057')),
('TEXTCOLOR',(0,0),(-1,0),colors.white),
('FONTNAME',(0,0),(-1,0),'Helvetica-Bold'),
('GRID',(0,0),(-1,-1),0.5,colors.HexColor('#cccccc')),
('VALIGN',(0,0),(-1,-1),'TOP'),
('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3),
('LEFTPADDING',(0,0),(-1,-1),4),('RIGHTPADDING',(0,0),(-1,-1),4),
('ALIGN',(0,0),(0,-1),'CENTER'),
('FONTSIZE',(0,0),(-1,0),8),
]
for i,d in enumerate(schedule,1):
cal_ts.append(('BACKGROUND',(2,i),(2,i), LC_PSM if i%2==1 else colors.HexColor('#eaf4fb')))
cal_ts.append(('BACKGROUND',(3,i),(3,i), LC_FMT if i%2==1 else colors.HexColor('#fff5f5')))
if d['day'] == 17:
cal_ts.append(('BACKGROUND',(0,i),(-1,i), LC_REV))
if d['day'] == 18:
cal_ts.append(('BACKGROUND',(0,i),(-1,i), LC_MOK))
cal.setStyle(TableStyle(cal_ts))
elements.append(cal)
elements.append(Spacer(1,0.4*cm))
elements.append(HRFlowable(width="100%", thickness=1.5, color=colors.HexColor('#bbbbbb')))
elements.append(Spacer(1,0.3*cm))
# ββ DAILY DETAIL ββ
elements.append(Paragraph("π DAILY DETAILED SCHEDULE", sec_s))
for d in schedule:
# Header
hdr = Paragraph(f"<font color='white'><b> DAY {d['day']} | {d['date']} | Both PSM + FMT</b></font>", dh_s)
hdr_t = Table([[hdr]], colWidths=[W])
hdr_t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,-1),d['hc']),
('TOPPADDING',(0,0),(-1,-1),6),('BOTTOMPADDING',(0,0),(-1,-1),6),
('LEFTPADDING',(0,0),(-1,-1),8),
]))
# Goal
goal_t = Table([[Paragraph(f"π― {d['goal']}", goal_s)]], colWidths=[W])
goal_t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,-1),colors.HexColor('#eafaf1')),
('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5),
('LEFTPADDING',(0,0),(-1,-1),8),
('BOX',(0,0),(-1,-1),0.5,colors.HexColor('#a9dfbf')),
]))
# Slot rows
rows = [[
Paragraph("<b>Slot</b>", slot_s),
Paragraph("<b>Subj</b>", slot_s),
Paragraph("<b>Topic</b>", slot_s),
Paragraph("<b>Focus Points</b>", slot_s),
]]
for i, (sl, subj, tp, fp) in enumerate(d['rows']):
subj_style = psm_s if subj == "PSM" else (fmt_s if subj == "FMT" else slot_s)
if subj == "PSM":
row_bg = LC_PSM
elif subj == "FMT":
row_bg = LC_FMT
elif subj in ("MCQs","PYQs"):
row_bg = colors.HexColor('#f0f0f0')
else:
row_bg = d['lc']
rows.append([
Paragraph(sl.replace('\n','<br/>'), slot_s),
Paragraph(f"<b>{subj}</b>", subj_style),
Paragraph(tp, subj_style),
Paragraph(fp.replace('\n','<br/>'), focus_s),
])
slots_t = Table(rows, colWidths=COL)
slots_ts = [
('BACKGROUND',(0,0),(-1,0),colors.HexColor('#2e4057')),
('TEXTCOLOR',(0,0),(-1,0),colors.white),
('FONTNAME',(0,0),(-1,0),'Helvetica-Bold'),
('GRID',(0,0),(-1,-1),0.5,colors.HexColor('#cccccc')),
('VALIGN',(0,0),(-1,-1),'TOP'),
('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),6),
('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),
('ALIGN',(1,0),(1,-1),'CENTER'),
]
for i, (sl, subj, tp, fp) in enumerate(d['rows'], 1):
if subj == "PSM":
bg = LC_PSM
elif subj == "FMT":
bg = LC_FMT
else:
bg = colors.HexColor('#f0f0f0')
slots_ts.append(('BACKGROUND',(0,i),(-1,i), bg))
slots_t.setStyle(TableStyle(slots_ts))
elements.append(KeepTogether([hdr_t, goal_t, slots_t, Spacer(1, 0.45*cm)]))
# ββ HIGH YIELD ββ
elements.append(HRFlowable(width="100%", thickness=2, color=C_HDR))
elements.append(Spacer(1,0.3*cm))
elements.append(Paragraph("β HIGH-YIELD MASTER LIST β BOTH SUBJECTS", sec_s))
hyt_psm = [
("Epidemiology study designs","OR, RR, AR formulas + 2Γ2 table construction"),
("Screening","Wilson's 10 criteria | Sensitivity/Specificity/PPV/NPV formulas"),
("IMR / MMR / TFR","Formulas + India 2024 values (IMR 27, MMR 97, TFR 2.0)"),
("PHC norms","Population 30,000 | Sub-centre 5,000 | CHC 80,000β1.2 lakh"),
("UIP vaccine schedule","Full age-wise schedule + cold chain temperatures"),
("NTEP","DOTS categories | 2HRZE/4HR regimen | MDR/XDR definitions"),
("PEM classification","Gomez / IAP / Waterlow | SAM vs MAM | MUAC cutoffs"),
("ICDS programme","6 services | Beneficiaries | Age group 0β6 years"),
("Water quality standards","E. coli 0/100 mL | Residual Cl 0.5 mg/L | pH 6.5β8.5"),
("Biostatistics","Type I/II error | p-value | t-test vs chi-square indications"),
]
hyt_fmt = [
("Rigor mortis","Starts 2β6h | Complete 12h | Resolves 36β48h | Exceptions"),
("Livor mortis","Appears 1β2h | Fixed 6β12h | How to differentiate from bruise"),
("Hanging vs Strangulation","Ligature direction, continuity, hyoid, petechiae"),
("Drowning","Diatom test (gold standard) | Wet vs dry | Fresh vs salt water"),
("OP poisoning","SLUDGE + Atropine (full atropinisation) + PAM within 24β48h"),
("IPC 299 vs 300","CHN vs Murder + all 5 exceptions to murder"),
("Alcohol BAC levels","30 mg%=drive limit | 80 mg%=legal presumption | 400 mg%=lethal"),
("Gustafson's 6 criteria","APSRCT: Attrition, Periodontosis, Secondary dentine, Root resorption, Cementum, Transparency"),
("IPC 375 / 376 + POCSO","Rape definition | POCSO age (<18) | Sec 19 mandatory reporting"),
("DNA fingerprinting","RFLP, STR, Y-STR, mtDNA β which test for which scenario"),
]
hy_hdr = [
Paragraph("<b>PSM TOPIC</b>", slot_s),
Paragraph("<b>KEY POINT</b>", slot_s),
Paragraph("<b>FMT TOPIC</b>", slot_s),
Paragraph("<b>KEY POINT</b>", slot_s),
]
hy_rows = [hy_hdr]
for i,(pt,pw),(ft,fw) in zip(range(len(hyt_psm)), hyt_psm, hyt_fmt):
hy_rows.append([
Paragraph(pt, psm_s), Paragraph(pw, focus_s),
Paragraph(ft, fmt_s), Paragraph(fw, focus_s),
])
hy_t = Table(hy_rows, colWidths=[3.0*cm, 5.7*cm, 3.0*cm, 5.7*cm])
hy_ts = [
('BACKGROUND',(0,0),(1,0),colors.HexColor('#1a5276')),
('BACKGROUND',(2,0),(3,0),colors.HexColor('#7b241c')),
('TEXTCOLOR',(0,0),(-1,0),colors.white),
('FONTNAME',(0,0),(-1,0),'Helvetica-Bold'),
('GRID',(0,0),(-1,-1),0.5,colors.HexColor('#cccccc')),
('VALIGN',(0,0),(-1,-1),'TOP'),
('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5),
('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),
('ALIGN',(0,0),(-1,0),'CENTER'),
]
for i in range(1,len(hy_rows)):
hy_ts.append(('BACKGROUND',(0,i),(1,i), LC_PSM if i%2==1 else colors.HexColor('#eaf4fb')))
hy_ts.append(('BACKGROUND',(2,i),(3,i), LC_FMT if i%2==1 else colors.HexColor('#fff5f5')))
hy_t.setStyle(TableStyle(hy_ts))
elements.append(hy_t)
elements.append(Spacer(1,0.4*cm))
# Tips
tips = [
"π Every morning = PSM | Every afternoon = FMT | Every evening = MCQ drill (non-negotiable)",
"π After studying each slot: close notes and write 5 key points from memory β highest retention method",
"π Mark weak topics in red as you go; revisit them on Days 15β16",
"π Days 17β18: ZERO new topics. Only revision, mock tests, and rest",
"π Day 18 evening: Prepare stationery + hall ticket the night before. Sleep by 10 PM",
"π Use comparison tables (Hanging/Strangulation, OR/RR, Kwashiorkor/Marasmus) β they save exam time",
]
tips_d = [[Paragraph("<b>π‘ STUDY STRATEGY REMINDERS</b>", goal_s)]] + [[Paragraph(t, note_s)] for t in tips]
tips_t = Table(tips_d, colWidths=[W])
tips_t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,0),colors.HexColor('#fef9e7')),
('BACKGROUND',(0,1),(-1,-1),colors.HexColor('#fffde7')),
('BOX',(0,0),(-1,-1),1,colors.HexColor('#f0c040')),
('INNERGRID',(0,0),(-1,-1),0.3,colors.HexColor('#f8e08e')),
('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5),
('LEFTPADDING',(0,0),(-1,-1),8),
]))
elements.append(tips_t)
elements.append(Spacer(1,0.3*cm))
elements.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#cccccc')))
elements.append(Paragraph(
"PSM + FMT | Mixed 18-Day Revision | Exam 1st August 2026 | Consistent effort beats cramming. You've got this! π",
foot_s
))
doc.build(elements)
print(f"β
PDF ready: {output_path}")
cd /home/daytona/workspace/psm-fmt-timetable && python generate_mixed.py
ls -lh /home/daytona/workspace/psm-fmt-timetable/PSM_FMT_Mixed_18Day_Schedule.pdf
PSM FMT Mixed 18Day Schedule
PDF Document Β· PDF
| Slot | Subject | What |
|---|---|---|
| π Morning | PSM (blue) | New PSM topic with full focus points |
| π€ Afternoon | FMT (red) | New FMT topic with full focus points |
| π Evening | MCQs | 25 MCQs covering that day's two topics |