https://orris.care/shared/chat/6688ac6f-e61d-4e0c-b859-247b6088bc71
https://orris.care/shared/chat/6688ac6f-e61d-4e0c-b859-247b6…
| Week | System |
|---|---|
| Week 1 (July 13-19) | Blood, Heart & Upper Limb |
| (Continues...) | GIT, Respiratory, Neuro, etc. |
| Subject | Primary Book | MCQs |
|---|---|---|
| Anatomy | BD Chaurasia (Vol 1, 2, 3) | Across / Vishram Singh |
| Physiology | AK Jain or Sembulingam | Across |
| Biochemistry | Satyanarayan or Vasudevan | Across / SPARSH |
So now can you create me the pdf i was asking at the end in the given link chat??
https://orris.care/shared/chat/6688ac6f-e61d-4e0c-b859-247b6…
https://orris.care/shared/chat/6688ac6f-e61d-4e0c-b859-247b6…
mkdir -p /home/daytona/workspace/mbbs-plan && ls /home/daytona/workspace/
~/mbbs-plan/generate_plan.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table,
TableStyle, HRFlowable, PageBreak, KeepTogether)
from reportlab.platypus import ListFlowable, ListItem
OUTPUT = "/home/daytona/workspace/mbbs-plan/KNRUHS_30Day_StudyPlan.pdf"
# ── COLOURS ──────────────────────────────────────────────────────────────────
C_DARK = colors.HexColor('#1a1a2e') # deep navy
C_PRIMARY = colors.HexColor('#16213e') # dark blue
C_ACCENT = colors.HexColor('#e94560') # red accent
C_GOLD = colors.HexColor('#f5a623') # gold / star colour
C_GREEN = colors.HexColor('#27ae60') # green for physio
C_BLUE = colors.HexColor('#2980b9') # blue for anatomy
C_PURPLE = colors.HexColor('#8e44ad') # purple for biochem
C_LIGHT = colors.HexColor('#f0f4f8') # light bg
C_WHITE = colors.white
C_GRAY = colors.HexColor('#7f8c8d')
C_ROW1 = colors.HexColor('#eaf4fb')
C_ROW2 = colors.HexColor('#fef9f0')
C_ROW_ALT = colors.HexColor('#f9f9f9')
W, H = A4
MARGIN = 15*mm
# ── STYLES ────────────────────────────────────────────────────────────────────
def sty(name, size, bold=False, color=C_DARK, align=TA_LEFT, leading=None, italic=False):
fn = 'Helvetica'
if bold and italic: fn = 'Helvetica-BoldOblique'
elif bold: fn = 'Helvetica-Bold'
elif italic: fn = 'Helvetica-Oblique'
return ParagraphStyle(name, fontSize=size, fontName=fn, textColor=color,
alignment=align, leading=leading or size*1.4,
spaceAfter=2)
S_TITLE = sty('title', 22, True, C_WHITE, TA_CENTER, 28)
S_SUB = sty('sub', 11, False, C_LIGHT, TA_CENTER, 16)
S_H1 = sty('h1', 14, True, C_WHITE, TA_CENTER, 20)
S_H2 = sty('h2', 12, True, C_DARK, TA_LEFT, 17)
S_H3 = sty('h3', 10, True, C_PRIMARY, TA_LEFT, 14)
S_BODY = sty('body', 9, False, C_DARK, TA_LEFT, 13)
S_SMALL = sty('small', 8, False, C_GRAY, TA_LEFT, 11)
S_BOLD = sty('bold', 9, True, C_DARK, TA_LEFT, 13)
S_CENTER = sty('ctr', 9, False, C_DARK, TA_CENTER, 13)
S_BCENTER = sty('bctr', 9, True, C_DARK, TA_CENTER, 13)
S_FOOTER = sty('ftr', 8, True, C_GRAY, TA_CENTER, 11)
S_STAR = sty('star', 9, True, C_GOLD, TA_CENTER, 13)
S_RED = sty('red', 9, True, C_ACCENT, TA_LEFT, 13)
S_GREEN = sty('grn', 9, True, C_GREEN, TA_LEFT, 13)
S_BLUE = sty('blu', 9, True, C_BLUE, TA_LEFT, 13)
S_PURPLE = sty('pur', 9, True, C_PURPLE, TA_LEFT, 13)
# ── HELPERS ───────────────────────────────────────────────────────────────────
def banner(text, bg=C_PRIMARY, fg=C_WHITE, size=13, pad=6*mm):
data = [[Paragraph(text, sty('bn', size, True, fg, TA_CENTER, size*1.5))]]
t = Table(data, colWidths=[W - 2*MARGIN])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), bg),
('TOPPADDING', (0,0), (-1,-1), pad*0.5),
('BOTTOMPADDING', (0,0), (-1,-1), pad*0.5),
('LEFTPADDING', (0,0), (-1,-1), 8),
('RIGHTPADDING', (0,0), (-1,-1), 8),
('ROUNDEDCORNERS', [4]),
]))
return t
def small_banner(text, bg=C_ACCENT):
data = [[Paragraph(text, sty('sbn', 10, True, C_WHITE, TA_CENTER))]]
t = Table(data, colWidths=[W - 2*MARGIN])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), bg),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 8),
('RIGHTPADDING', (0,0), (-1,-1), 8),
]))
return t
def hr(color=C_ACCENT, thickness=1):
return HRFlowable(width='100%', thickness=thickness, color=color, spaceAfter=3)
def sp(h=4):
return Spacer(1, h*mm)
def make_table(headers, rows, col_widths, header_bg=C_PRIMARY, row_colors=None):
data = [[Paragraph(str(h), sty('th', 9, True, C_WHITE, TA_CENTER)) for h in headers]]
for i, row in enumerate(rows):
styled = []
for j, cell in enumerate(row):
align = TA_LEFT if j == 0 else TA_LEFT
styled.append(Paragraph(str(cell), sty(f'td{i}{j}', 8.5, False, C_DARK, align)))
data.append(styled)
t = Table(data, colWidths=col_widths, repeatRows=1)
style = [
('BACKGROUND', (0,0), (-1,0), header_bg),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_ROW_ALT, C_WHITE]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#d0d0d0')),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING', (0,0), (-1,-1), 5),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]
t.setStyle(TableStyle(style))
return t
# ── DOCUMENT ──────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(OUTPUT, pagesize=A4,
leftMargin=MARGIN, rightMargin=MARGIN,
topMargin=MARGIN, bottomMargin=MARGIN)
story = []
# ═══════════════════════════════════════════════════════════════════════════════
# PAGE 1 – COVER
# ═══════════════════════════════════════════════════════════════════════════════
cover_data = [[Paragraph(
'<br/><br/>🩺 KNRUHS FIRST MBBS PROF<br/><font size=26><b>30-DAY MASTER PLAN</b></font><br/><br/>',
sty('cv', 18, True, C_WHITE, TA_CENTER, 30))]]
cover = Table(cover_data, colWidths=[W - 2*MARGIN])
cover.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), C_PRIMARY),
('TOPPADDING', (0,0), (-1,-1), 18),
('BOTTOMPADDING', (0,0), (-1,-1), 18),
('LEFTPADDING', (0,0), (-1,-1), 10),
('RIGHTPADDING', (0,0), (-1,-1), 10),
]))
story.append(cover)
story.append(sp(4))
# Info strip
info_data = [[
Paragraph('<b>Student:</b> KNRUHS 2025-26 Batch', S_BODY),
Paragraph('<b>College:</b> Prathima Medical College, Karimnagar', S_BODY),
Paragraph('<b>Exam Date:</b> August 12, 2026', S_RED),
Paragraph('<b>Target:</b> 150+/300 (60+ per paper)', S_BOLD),
]]
info_t = Table(info_data, colWidths=[(W-2*MARGIN)/4]*4)
info_t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), C_LIGHT),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#c0c0c0')),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
]))
story.append(info_t)
story.append(sp(5))
# Phase overview
story.append(banner('📋 PHASE OVERVIEW', C_DARK))
story.append(sp(2))
phase_headers = ['Phase', 'Days', 'Dates', 'Focus']
phase_rows = [
['Phase 1 – Anatomy Blitz', 'Day 1–18', 'July 13–30', 'Heavy Anatomy + light Physio/Bio daily'],
['Phase 2 – Physio + Bio', 'Day 19–26', 'July 31–Aug 7', 'Consolidate stronger subjects'],
['Phase 3 – Final Revision', 'Day 27–30', 'Aug 8–11', 'PYQs + MCQs + All subjects rapid revision'],
['EXAM DAY', 'Day 31', 'Aug 12', '🎯 First MBBS Professional Examination'],
]
story.append(make_table(phase_headers, phase_rows,
[(W-2*MARGIN)*f for f in [0.18, 0.12, 0.18, 0.52]], C_DARK))
story.append(sp(5))
# Score strategy
story.append(banner('🎯 SCORE STRATEGY – How to Get 60+ Per Paper', C_ACCENT))
story.append(sp(2))
score_headers = ['Question Type', 'Marks Each', 'How Many', 'Target Score', 'Strategy']
score_rows = [
['LAQ (Long Answer)', '15 marks', '1-2 Qs', '10-12/15 each', 'Write with headings, diagrams, clinical notes'],
['SAQ (Short Answer)', '5 marks', '4-5 Qs', '3.5-4/5 each', 'Structured answer, 3-4 points per SAQ'],
['VSAQ / MCQ', '2-3 marks', '10+ Qs', '2/3 each', 'These are GIFT marks – attempt ALL'],
]
story.append(make_table(score_headers, score_rows,
[(W-2*MARGIN)*f for f in [0.20, 0.13, 0.12, 0.15, 0.40]], C_ACCENT))
story.append(sp(3))
calc_data = [
[Paragraph('<b>Running Total Calculation</b>', sty('rch', 9, True, C_WHITE, TA_CENTER)),
Paragraph('', S_BODY)],
[Paragraph('Both LAQs → avg 11/15 each', S_BODY), Paragraph('= 22 marks', S_BOLD)],
[Paragraph('4 SAQs → avg 3.5/5 each', S_BODY), Paragraph('= 14 marks', S_BOLD)],
[Paragraph('8 VSAQs → avg 2/3 each', S_BODY), Paragraph('= 16 marks', S_BOLD)],
[Paragraph('TOTAL', sty('tot', 10, True, C_ACCENT, TA_LEFT)), Paragraph('= 52 marks minimum ✅', sty('totv', 10, True, C_GREEN, TA_LEFT))],
[Paragraph('With good LAQs (12/15) + all SAQs', S_SMALL), Paragraph('= 60-65 marks 🎯', sty('goal', 9, True, C_GOLD, TA_LEFT))],
]
ct = Table(calc_data, colWidths=[(W-2*MARGIN)*0.65, (W-2*MARGIN)*0.35])
ct.setStyle(TableStyle([
('BACKGROUND', (0,0), (1,0), C_PRIMARY),
('SPAN', (0,0), (1,0)),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_LIGHT, C_WHITE]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#c0c0c0')),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 8),
('RIGHTPADDING', (0,0), (-1,-1), 8),
]))
story.append(ct)
story.append(sp(5))
# Exam structure
story.append(banner('📝 KNRUHS EXAM STRUCTURE (Each Subject)', C_PRIMARY))
story.append(sp(2))
struct_data = [
['Component', 'Marks', 'Details'],
['Theory Paper I', '100', 'Gross Anatomy (Limbs + Thorax) / General Physio + CVS + Blood / Metabolism'],
['Theory Paper II', '100', 'Gross Anatomy (H&N + Abdomen) + Neuro + Histo / Neurophysio + GIT + Repro / Cell Bio'],
['Practical + Viva', '100', 'Dissection spotting, histology slides, models, clinical correlations'],
['TOTAL per Subject', '300', 'Need 150 (50%) to pass | Target: 180+ overall'],
]
es = Table([[Paragraph(str(c), sty('eh', 9, True, C_WHITE if r==0 else C_DARK, TA_LEFT)) for c in row]
for r, row in enumerate(struct_data)],
colWidths=[(W-2*MARGIN)*f for f in [0.22, 0.10, 0.68]])
es.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), C_PRIMARY),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_LIGHT, C_WHITE, C_ROW2, C_ROW1]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#c0c0c0')),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
]))
story.append(es)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# PAGE 2 – DAILY TIME TABLE + BOOKS
# ═══════════════════════════════════════════════════════════════════════════════
story.append(banner('⏰ DAILY TIME BUDGET', C_DARK))
story.append(sp(3))
time_headers = ['Time Slot', 'Activity', 'Subject Colour']
time_rows = [
['6:00 – 9:00 AM', 'Anatomy (3 hrs) – hardest subject, fresh brain first', '🔵 ANATOMY'],
['9:30 – 11:30 AM', 'Anatomy continued OR Histology / Embryology (2 hrs)', '🔵 ANATOMY'],
['12:00 – 1:30 PM', 'Physiology (1.5 hrs)', '🟢 PHYSIOLOGY'],
['2:30 – 4:30 PM', 'Biochemistry (2 hrs)', '🟣 BIOCHEMISTRY'],
['5:00 – 6:00 PM', 'MCQs OR PYQ writing practice (1 hr)', '⭐ MCQ/PYQ'],
['8:00 – 9:30 PM', 'Quick review of the day\'s topics (1.5 hrs)', '📖 REVISION'],
]
story.append(make_table(time_headers, time_rows,
[(W-2*MARGIN)*f for f in [0.22, 0.55, 0.23]], C_DARK))
story.append(sp(5))
story.append(banner('📚 BOOKS TO USE (Keep it simple – 30 days is tight!)', C_PRIMARY))
story.append(sp(3))
book_headers = ['Subject', 'Primary Textbook', 'MCQ Book', 'QBank (TM)']
book_rows = [
['🔵 Anatomy', 'BD Chaurasia Vol 1, 2, 3', 'Across / Vishram Singh MCQs', 'TM Anatomy QBank (⭐⭐⭐⭐⭐ first)'],
['🟢 Physiology', 'AK Jain OR Sembulingam', 'Across Physiology', 'TM Physiology QBank'],
['🟣 Biochemistry', 'Satyanarayan OR Vasudevan', 'Across / SPARSH', 'TM Biochemistry QBank'],
]
story.append(make_table(book_headers, book_rows,
[(W-2*MARGIN)*f for f in [0.17, 0.28, 0.27, 0.28]], C_PRIMARY))
story.append(sp(3))
story.append(Paragraph('💡 TM QBank year codes: AP = Andhra Pradesh, TS = Telangana State, I = Intermediate/Supplementary exam. These ARE your exact KNRUHS previous year questions.', S_SMALL))
story.append(sp(5))
story.append(banner('🔗 INTEGRATED STUDY METHOD – How Each Day Works', C_ACCENT))
story.append(sp(3))
how_data = [
[Paragraph('Step', sty('sh', 9, True, C_WHITE, TA_CENTER)),
Paragraph('What you do', sty('sh', 9, True, C_WHITE, TA_CENTER)),
Paragraph('Example (Blood day)', sty('sh', 9, True, C_WHITE, TA_CENTER))],
[Paragraph('1. Anatomy', S_BLUE),
Paragraph('Read structure / location / histology of the system', S_BODY),
Paragraph('Bone marrow sites, spleen histology, sites of haemopoiesis', S_BODY)],
[Paragraph('2. Physiology', S_GREEN),
Paragraph('Understand HOW the system works', S_BODY),
Paragraph('Haemopoiesis process, RBC life cycle, blood groups ABO/Rh', S_BODY)],
[Paragraph('3. Biochemistry', S_PURPLE),
Paragraph('Understand the molecules / pathways behind it', S_BODY),
Paragraph('Hb structure, porphyrin synthesis, O2 dissociation curve', S_BODY)],
[Paragraph('4. Link it!', sty('lnk', 9, True, C_GOLD, TA_LEFT)),
Paragraph('Ask: how does Anatomy → Physiology → Biochemistry connect?', S_BODY),
Paragraph('Where RBCs made (Anatomy) → how they carry O2 (Physio) → Hb structure (Bio)', S_BODY)],
]
ht = Table(how_data, colWidths=[(W-2*MARGIN)*f for f in [0.13, 0.37, 0.50]])
ht.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), C_ACCENT),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_LIGHT, C_WHITE, C_ROW2, C_ROW1]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#c0c0c0')),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
story.append(ht)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# PAGE 3 – 30-DAY INTEGRATED SCHEDULE
# ═══════════════════════════════════════════════════════════════════════════════
story.append(banner('📅 30-DAY INTEGRATED SCHEDULE', C_DARK))
story.append(sp(2))
story.append(Paragraph('Each day: Anatomy + Physiology + Biochemistry of the SAME SYSTEM studied together', S_SMALL))
story.append(sp(3))
# Week 1
story.append(small_banner('🔴 WEEK 1 (July 13–19) – Blood, Heart & Upper Limb', C_ACCENT))
story.append(sp(2))
w1_headers = ['Day / Date', 'System', 'Anatomy Topics', 'Physiology Topics', 'Biochemistry Topics', '✓']
w1_rows = [
['Day 1\nJul 13', 'BLOOD',
'Bone marrow structure, sites of haemopoiesis, spleen histology',
'Composition of blood, plasma proteins, haemopoiesis, RBC life cycle, blood groups',
'Hb structure & synthesis (porphyrin), types of Hb, O2 dissociation curve', '□'],
['Day 2\nJul 14', 'HEART I',
'Heart – ext. features, chambers (RA interior + development), blood supply, coronary arteries',
'Cardiac cycle, heart sounds, cardiac output, Starling\'s law',
'Cardiac muscle energy metabolism, creatine phosphate, troponin & CK-MB', '□'],
['Day 3\nJul 15', 'HEART II\n+ ECG',
'Conducting system (SA/AV node, Bundle of His, Purkinje), arch of aorta + branches',
'ECG – waves, intervals, axis; action potential of cardiac muscle vs pacemaker',
'Ion channels, Na⁺/K⁺ ATPase, role of Ca²⁺ & K⁺ in cardiac function', '□'],
['Day 4\nJul 16', 'UPPER LIMB I\n(Brachial Plexus)',
'Brachial plexus – formation, roots, trunks, cords, branches; Median/Radial/Ulnar nerves',
'Nerve conduction – AP, RMP, saltatory conduction, nerve fiber classification A/B/C',
'Myelin sheath composition (lipids, proteins), acetylcholine synthesis', '□'],
['Day 5\nJul 17', 'UPPER LIMB II\n(Muscles/Joints)',
'Rotator cuff muscles, shoulder joint, cubital fossa, carpal tunnel, palm – spaces',
'Skeletal muscle structure, sliding filament theory, NMJ, muscle contraction',
'ATP in muscle contraction, creatine phosphate, lactic acid cycle', '□'],
['Day 6\nJul 18', 'UPPER LIMB III\n(Vessels)',
'Axillary artery + branches, axillary lymph nodes, cubital fossa vessels, radial pulse',
'Blood pressure regulation, pulse, peripheral resistance, Poiseuille\'s law',
'Lipoproteins (LDL/HDL), cholesterol metabolism – basics', '□'],
['Day 7\nJul 19', 'REVISION\nWeek 1',
'Review all UL nerve injury signs + heart anatomy diagrams',
'PYQ MCQs: Blood + CVS basics',
'PYQ MCQs: Hb + Cardiac biomarkers', '□'],
]
story.append(make_table(w1_headers, w1_rows,
[(W-2*MARGIN)*f for f in [0.10, 0.11, 0.22, 0.22, 0.27, 0.08]], C_ACCENT))
story.append(sp(4))
# Week 2
story.append(small_banner('🟠 WEEK 2 (July 20–26) – Lower Limb, Thorax & Respiration', colors.HexColor('#e67e22')))
story.append(sp(2))
w2_rows = [
['Day 8\nJul 20', 'LOWER LIMB I\n(Nerve/Vessel)',
'Femoral nerve, sciatic nerve, popliteal fossa, great saphenous vein, femoral triangle',
'Nerve conduction review, reflexes (knee jerk – L3/L4, ankle jerk – S1)',
'Review neurotransmitter synthesis – GABA, dopamine, serotonin basics', '□'],
['Day 9\nJul 21', 'LOWER LIMB II\n(Joints)',
'Hip joint, knee joint (cruciate ligaments, menisci), arches of foot, ankle joint',
'Proprioception, stretch reflex arc, muscle spindle, Golgi tendon organ',
'Collagen structure & synthesis (Vitamin C link), cartilage biochemistry', '□'],
['Day 10\nJul 22', 'THORAX I\n(Lungs)',
'Pleura, lung lobes/fissures, bronchopulmonary segments, hilum contents',
'Lung volumes & capacities (TV, IRV, ERV, RV, TLC, FVC), spirometry',
'Surfactant (DPPC) – structure and function, respiratory distress syndrome', '□'],
['Day 11\nJul 23', 'THORAX II\n(Mediastinum)',
'Mediastinum divisions, superior mediastinum contents, thoracic duct, trachea bifurcation',
'Gas exchange (O2/CO2 diffusion), ventilation-perfusion ratio, hypoxia types',
'CO2 transport (carbonic anhydrase, bicarbonate buffer), acid-base basics', '□'],
['Day 12\nJul 24', 'THORAX III\n(Diaphragm)',
'Diaphragm – openings, attachments, nerve supply, development (defects)',
'Regulation of breathing – central/peripheral chemoreceptors, Hering-Breuer reflex',
'Acid-base balance – pH regulation, buffer systems, Henderson-Hasselbalch', '□'],
['Day 13\nJul 25', 'LOWER LIMB III\n(Gluteal/LL)',
'Gluteal region – piriformis, superior/inferior gluteal nerve, short lateral rotators',
'CNS motor pathways – corticospinal tract, UMN vs LMN lesion signs',
'Lipid metabolism – beta-oxidation, ketone bodies overview', '□'],
['Day 14\nJul 26', 'REVISION\nWeek 2',
'Lower limb diagrams + thorax cross-sections',
'PYQ MCQs: Respiratory physiology',
'PYQ MCQs: Acid-base + buffer systems', '□'],
]
story.append(make_table(w1_headers, w1_rows=w2_rows if False else w2_rows,
col_widths=[(W-2*MARGIN)*f for f in [0.10, 0.11, 0.22, 0.22, 0.27, 0.08]],
header_bg=colors.HexColor('#e67e22')) if False else
make_table(w1_headers, w2_rows,
[(W-2*MARGIN)*f for f in [0.10, 0.11, 0.22, 0.22, 0.27, 0.08]], colors.HexColor('#e67e22')))
story.append(PageBreak())
# Week 3
story.append(small_banner('🟡 WEEK 3 (July 27 – Aug 2) – Head & Neck + GIT + Neuro', colors.HexColor('#f39c12')))
story.append(sp(2))
w3_rows = [
['Day 15\nJul 27', 'HEAD & NECK I',
'Triangles of neck, thyroid gland (anatomy + blood supply), parathyroid',
'Thyroid hormones – synthesis, regulation, effects on BMR; Parathyroid – Ca²⁺ regulation',
'Thyroid hormone biosynthesis (iodine metabolism), calcitonin vs PTH', '□'],
['Day 16\nJul 28', 'HEAD & NECK II\n(Cranial Nerves)',
'Facial nerve – nuclei, course, branches, lesions (UMN/LMN); Trigeminal nerve',
'Cranial nerve reflexes – corneal, gag; taste pathway; special senses overview',
'Neurotransmitters – catecholamine synthesis (dopamine, noradrenaline, adrenaline)', '□'],
['Day 17\nJul 29', 'ABDOMEN I\n(GIT)',
'Stomach – parts, interior, blood supply, lymphatics; Duodenum; Liver – lobes, porta hepatis',
'GIT motility – swallowing, peristalsis, gastric emptying, mass movement',
'Digestion – salivary amylase, pepsin, pancreatic enzymes; bile salt enterohepatic circulation', '□'],
['Day 18\nJul 30', 'ABDOMEN II\n(Liver/Pancreas)',
'Pancreas – parts, relations, ducts; Spleen – blood supply; Portal circulation',
'GIT secretions – gastric acid (parietal cell), pancreatic juice, bile; Liver functions',
'Bilirubin metabolism (jaundice types!), liver function tests, glycogen synthesis/breakdown', '□'],
['Day 19\nJul 31', 'NEUROANATOMY I',
'Spinal cord – tracts (spinothalamic, corticospinal, DCML), cross-sections at levels',
'Sensory pathways – pain (fast/slow), touch, proprioception, dermatomes',
'Amino acid neurotransmitters – GABA (synthesis), glutamate; signal transduction basics', '□'],
['Day 20\nAug 1', 'NEUROANATOMY II',
'Internal capsule – parts, blood supply, fibres; Cerebral cortex – areas (Brodmann)',
'Motor cortex, UMN tract, basal ganglia functions, cerebellum functions',
'Catecholamine metabolism, MAO inhibitors, Parkinson\'s disease biochemistry', '□'],
['Day 21\nAug 2', 'REVISION\nWeek 3',
'H&N + Abdominal diagrams + spinal cord cross-sections',
'PYQ MCQs: GIT + Neurophysiology',
'PYQ MCQs: Bilirubin + Liver enzymes + Neurotransmitters', '□'],
]
story.append(make_table(w1_headers, w3_rows,
[(W-2*MARGIN)*f for f in [0.10, 0.11, 0.22, 0.22, 0.27, 0.08]], colors.HexColor('#f39c12')))
story.append(sp(4))
# Week 4
story.append(small_banner('🟢 WEEK 4 (Aug 3–9) – Endocrine, Renal, Repro + Histology + Consolidation', C_GREEN))
story.append(sp(2))
w4_rows = [
['Day 22\nAug 3', 'ENDOCRINE\n+ RENAL',
'Kidneys – gross anatomy, nephron histology, juxtaglomerular apparatus',
'Renal physiology – GFR, tubular reabsorption/secretion, urine concentration, RAAS',
'Renal handling of glucose, urea cycle, creatinine clearance', '□'],
['Day 23\nAug 4', 'REPRODUCTIVE\n+ PELVIC',
'Uterus – parts, blood supply, supports (ligaments); Ovary + Testes gross anatomy',
'Menstrual cycle (hormonal), spermatogenesis, oogenesis, fertilization',
'Steroid hormone synthesis (cholesterol → progesterone → estrogen → testosterone)', '□'],
['Day 24\nAug 5', 'HISTOLOGY\nDAY',
'Epithelium types; Liver histology; Kidney histology; Uterus histology; Lung histology; Thyroid/Parathyroid histology',
'Review organ physiology alongside slides (kidney tubules = reabsorption!)',
'Review cell organelle biochemistry – mitochondria (OxPhos), ER (protein synthesis)', '□'],
['Day 25\nAug 6', 'EMBRYOLOGY\n+ GENETICS',
'Pharyngeal arches & pouches (derivatives); Heart development (septa, congenital anomalies); Neural tube defects',
'Fetal circulation + changes at birth; Placental functions',
'DNA replication, transcription, translation; mutations; PCR basics', '□'],
['Day 26\nAug 7', 'PHYSIO\nCONSOLIDATION',
'Quick anatomy revision: UL + LL nerve injuries (tabulate)',
'CNS – cerebellum, basal ganglia, pain pathways, tracts; NMJ + muscle contraction',
'Vitamins overview (fat-soluble A/D/E/K + water-soluble B complex, C) – deficiency diseases', '□'],
['Day 27\nAug 8', 'BIO\nCONSOLIDATION',
'Quick anatomy: Heart + Lung + Abdomen diagrams – redraw from memory',
'Endocrine + Reproductive physiology revision; CVS + Blood refresh',
'Carbohydrate metabolism (glycolysis, TCA, gluconeogenesis, glycogen); Key enzymes', '□'],
['Day 28\nAug 9', 'ANATOMY\nFINAL REVISION',
'Write 5 LAQs from memory (brachial plexus, heart, facial nerve, liver, spinal cord)',
'PYQ writing: 2 Physio LAQs from memory',
'PYQ writing: 2 Bio LAQs from memory', '□'],
]
story.append(make_table(w1_headers, w4_rows,
[(W-2*MARGIN)*f for f in [0.10, 0.11, 0.22, 0.22, 0.27, 0.08]], C_GREEN))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# PAGE 4 – FINAL SPRINT + PRIORITY TOPICS
# ═══════════════════════════════════════════════════════════════════════════════
story.append(banner('🚀 FINAL 3-DAY SPRINT (Aug 10–12)', C_ACCENT))
story.append(sp(2))
sprint_headers = ['Day', 'Morning', 'Afternoon', 'Evening']
sprint_rows = [
['Day 29\n(Aug 10)\nAll Subjects',
'Anatomy PYQs – write 5 LAQs from memory\n(Brachial plexus, Heart, Facial nerve, Liver, Spinal cord)',
'Physiology PYQs + MCQ practice\n(CNS, CVS, Blood, Respiration)',
'Biochemistry PYQs + MCQ practice\n(Hb, Bilirubin, Hb, Enzymes, Vitamins)'],
['Day 30\n(Aug 11)\nRapid Skim',
'Skim ALL short notes + VSAQ lists\nReview all anatomy diagrams once',
'Physiology MCQ drill + important definitions\nBio: Review all metabolic pathways overview',
'Light review only – no new topics\nEarly sleep by 10 PM 🌙'],
['Day 31\n(Aug 12)\nEXAM DAY',
'Wake up fresh. Light breakfast.\nQuick 30-min diagram review only.',
'🎯 EXAMINATION\nAttempt VSAQs FIRST (gift marks)\nThen LAQs with full structure',
'Trust your preparation.\nYou\'ve done the work. 💪'],
]
story.append(make_table(sprint_headers, sprint_rows,
[(W-2*MARGIN)*f for f in [0.14, 0.30, 0.28, 0.28]], C_ACCENT))
story.append(sp(5))
# Priority topics – Anatomy
story.append(banner('⭐ PRIORITY TOPICS – ANATOMY (KNRUHS High-Yield)', C_BLUE))
story.append(sp(2))
anat_data = [
[Paragraph('<b>Paper I Topics</b>', sty('ap1', 9, True, C_WHITE, TA_CENTER)),
Paragraph('<b>Priority</b>', sty('ap1', 9, True, C_WHITE, TA_CENTER)),
Paragraph('<b>Paper II Topics</b>', sty('ap1', 9, True, C_WHITE, TA_CENTER)),
Paragraph('<b>Priority</b>', sty('ap1', 9, True, C_WHITE, TA_CENTER))],
[Paragraph('Brachial plexus – full description', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Facial nerve – course, branches, lesions', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Median nerve – course, injury signs', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Internal capsule – fibres, blood supply', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Radial nerve – course, injury signs', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Spinal cord – tracts, cross-sections', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Ulnar nerve – course, injury signs', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Liver – lobes, porta hepatis, surfaces', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Heart – chambers, blood supply', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Stomach – parts, blood supply, relations', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Conducting system of heart', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Thyroid gland – anatomy + blood supply', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Lung – hilum, bronchopulmonary segments', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR),
Paragraph('Cerebral cortex – sulci, gyri, areas', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR)],
[Paragraph('Axillary lymph nodes', S_BODY), Paragraph('⭐⭐⭐', S_STAR),
Paragraph('Triangles of neck', S_BODY), Paragraph('⭐⭐⭐', S_STAR)],
[Paragraph('Shoulder joint + rotator cuff', S_BODY), Paragraph('⭐⭐⭐', S_STAR),
Paragraph('Portal circulation', S_BODY), Paragraph('⭐⭐⭐', S_STAR)],
[Paragraph('Carpal tunnel syndrome', S_BODY), Paragraph('⭐⭐⭐', S_STAR),
Paragraph('Cerebellum – connections, nuclei', S_BODY), Paragraph('⭐⭐⭐', S_STAR)],
]
at = Table(anat_data, colWidths=[(W-2*MARGIN)*f for f in [0.37, 0.12, 0.37, 0.14]])
at.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), C_BLUE),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_LIGHT, C_WHITE]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#c0c0c0')),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING', (0,0), (-1,-1), 5),
]))
story.append(at)
story.append(sp(4))
# Priority topics – Physio
story.append(banner('⭐ PRIORITY TOPICS – PHYSIOLOGY (KNRUHS High-Yield)', C_GREEN))
story.append(sp(2))
physio_data = [
[Paragraph('<b>Paper I Topics (CVS, Blood, Respiration)</b>', sty('pp1', 9, True, C_WHITE, TA_CENTER)),
Paragraph('<b>Priority</b>', sty('pp1', 9, True, C_WHITE, TA_CENTER)),
Paragraph('<b>Paper II Topics (CNS, GIT, Repro, Endo)</b>', sty('pp1', 9, True, C_WHITE, TA_CENTER)),
Paragraph('<b>Priority</b>', sty('pp1', 9, True, C_WHITE, TA_CENTER))],
[Paragraph('Cardiac cycle + heart sounds', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Cerebellum – functions, connections', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('ECG – normal + interpretation', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Basal ganglia – functions, Parkinson\'s', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Blood groups (ABO + Rh system)', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Pain – fast/slow, gate control theory', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Haemoglobin – types, O2 dissociation', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('NMJ – structure + transmission + drugs', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Lung volumes & spirometry', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Muscle contraction – sliding filament', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR)],
[Paragraph('Cardiac output – Starling\'s law', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR),
Paragraph('GFR + tubular functions (renal)', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR)],
[Paragraph('Action potential – nerve + cardiac', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR),
Paragraph('Thyroid hormone synthesis + regulation', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR)],
[Paragraph('Haemopoiesis', S_BODY), Paragraph('⭐⭐⭐', S_STAR),
Paragraph('Menstrual cycle', S_BODY), Paragraph('⭐⭐⭐', S_STAR)],
]
pt = Table(physio_data, colWidths=[(W-2*MARGIN)*f for f in [0.37, 0.12, 0.37, 0.14]])
pt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), C_GREEN),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_LIGHT, C_WHITE]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#c0c0c0')),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING', (0,0), (-1,-1), 5),
]))
story.append(pt)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# PAGE 5 – BIOCHEMISTRY PRIORITY + ANATOMY TIPS + TRACKER
# ═══════════════════════════════════════════════════════════════════════════════
story.append(banner('⭐ PRIORITY TOPICS – BIOCHEMISTRY (KNRUHS High-Yield)', C_PURPLE))
story.append(sp(2))
bio_data = [
[Paragraph('<b>Paper I Topics (Metabolism, Hb, Enzymes)</b>', sty('bp1', 9, True, C_WHITE, TA_CENTER)),
Paragraph('<b>Priority</b>', sty('bp1', 9, True, C_WHITE, TA_CENTER)),
Paragraph('<b>Paper II Topics (Cell Bio, Vitamins, Hormones)</b>', sty('bp1', 9, True, C_WHITE, TA_CENTER)),
Paragraph('<b>Priority</b>', sty('bp1', 9, True, C_WHITE, TA_CENTER))],
[Paragraph('Hb structure, types, O2 dissociation curve', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('DNA replication, transcription, translation', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Glycolysis – steps, enzymes, energy yield', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Vitamins – deficiency diseases (ALL)', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('TCA cycle – steps, enzymes, yield', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Bilirubin metabolism + types of jaundice', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR)],
[Paragraph('Oxidative phosphorylation + ETC', S_BODY), Paragraph('⭐⭐⭐⭐⭐', S_STAR),
Paragraph('Steroid hormone synthesis from cholesterol', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR)],
[Paragraph('Porphyrin synthesis + porphyrias', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR),
Paragraph('Enzymes – classification, Km, Vmax, inhibition', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR)],
[Paragraph('Gluconeogenesis – substrates, steps', S_BODY), Paragraph('⭐⭐⭐⭐', S_STAR),
Paragraph('Plasma proteins – types, functions', S_BODY), Paragraph('⭐⭐⭐', S_STAR)],
[Paragraph('Beta-oxidation of fatty acids', S_BODY), Paragraph('⭐⭐⭐', S_STAR),
Paragraph('Urea cycle – steps, enzyme defects', S_BODY), Paragraph('⭐⭐⭐', S_STAR)],
[Paragraph('Glycogen synthesis & breakdown', S_BODY), Paragraph('⭐⭐⭐', S_STAR),
Paragraph('Immunoglobulins – structure & types', S_BODY), Paragraph('⭐⭐⭐', S_STAR)],
]
bt = Table(bio_data, colWidths=[(W-2*MARGIN)*f for f in [0.37, 0.12, 0.37, 0.14]])
bt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), C_PURPLE),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_LIGHT, C_WHITE]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#c0c0c0')),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING', (0,0), (-1,-1), 5),
]))
story.append(bt)
story.append(sp(5))
# Anatomy key tips
story.append(banner('💡 KEY TIPS FOR ANATOMY SPECIFICALLY', C_DARK))
story.append(sp(2))
tips_data = [
[Paragraph('📌 Tip', sty('tph', 9, True, C_WHITE, TA_CENTER)),
Paragraph('What to do', sty('tph', 9, True, C_WHITE, TA_CENTER))],
[Paragraph('DRAW, don\'t just read', S_RED),
Paragraph('Brachial plexus, heart chambers, facial nerve branches – draw them at least 3 times each', S_BODY)],
[Paragraph('Use nerve injury mnemonics', S_BOLD),
Paragraph('"Wrist drop" = Radial; "Claw hand" = Ulnar; "Ape hand" = Median. Test yourself daily.', S_BODY)],
[Paragraph('Histology slides', S_BOLD),
Paragraph('Draw labeled diagrams for liver, kidney, lung, uterus, thyroid. Practicals test these directly.', S_BODY)],
[Paragraph('Clinical correlations', S_GREEN),
Paragraph('Always note the clinical sign next to each topic (e.g. Saturday night palsy → radial nerve). KNRUHS loves these.', S_BODY)],
[Paragraph('Write practice LAQs', S_BLUE),
Paragraph('Write at least one full LAQ per day under timed conditions (10-12 min). Format: Introduction → Description → Blood supply → Nerve supply → Clinical.', S_BODY)],
[Paragraph('PYQ strategy', S_PURPLE),
Paragraph('TM QBank ⭐⭐⭐⭐⭐ topics = do these FIRST. ⭐⭐⭐ = second priority. ⭐ = only if time.', S_BODY)],
]
tt = Table(tips_data, colWidths=[(W-2*MARGIN)*0.28, (W-2*MARGIN)*0.72])
tt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), C_DARK),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_LIGHT, C_WHITE]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#c0c0c0')),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
story.append(tt)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# PAGE 6 – DAILY TRACKER CHECKLIST
# ═══════════════════════════════════════════════════════════════════════════════
story.append(banner('✅ DAILY PROGRESS TRACKER – Print & Tick Each Day!', C_DARK))
story.append(sp(3))
tracker_headers = ['Day', 'Date', 'System / Focus', 'Anatomy\nDone?', 'Physio\nDone?', 'Bio\nDone?', 'MCQs\nDone?', 'PYQ\nDone?', 'Review\nDone?']
tracker_rows = []
schedule = [
('1','Jul 13','Blood'),('2','Jul 14','Heart I'),('3','Jul 15','Heart II + ECG'),
('4','Jul 16','Brachial Plexus'),('5','Jul 17','Upper Limb – Muscles/Joints'),
('6','Jul 18','Upper Limb – Vessels'),('7','Jul 19','Revision – Week 1'),
('8','Jul 20','Lower Limb – Nerves/Vessels'),('9','Jul 21','Lower Limb – Joints'),
('10','Jul 22','Thorax – Lungs'),('11','Jul 23','Thorax – Mediastinum'),
('12','Jul 24','Thorax – Diaphragm'),('13','Jul 25','Lower Limb – Gluteal'),
('14','Jul 26','Revision – Week 2'),('15','Jul 27','Head & Neck I'),
('16','Jul 28','Head & Neck II (CN)'),('17','Jul 29','Abdomen I – GIT'),
('18','Jul 30','Abdomen II – Liver/Pancreas'),('19','Jul 31','Neuroanatomy I'),
('20','Aug 1','Neuroanatomy II'),('21','Aug 2','Revision – Week 3'),
('22','Aug 3','Endocrine + Renal'),('23','Aug 4','Reproductive + Pelvic'),
('24','Aug 5','Histology Day'),('25','Aug 6','Embryology + Genetics'),
('26','Aug 7','Physio Consolidation'),('27','Aug 8','Bio Consolidation'),
('28','Aug 9','Anatomy Final Revision'),
('29','Aug 10','All Subjects – PYQ Sprint'),
('30','Aug 11','Rapid Skim – All Subjects'),
('31','Aug 12','🎯 EXAM DAY'),
]
for d, date, focus in schedule:
tracker_rows.append([d, date, focus, '□', '□', '□', '□', '□', '□'])
tracker_t = Table(
[[Paragraph(str(h), sty('trh', 8, True, C_WHITE, TA_CENTER)) for h in tracker_headers]] +
[[Paragraph(str(c), sty(f'trc{r}{col}', 7.5, False, C_DARK, TA_CENTER)) for col, c in enumerate(row)]
for r, row in enumerate(tracker_rows)],
colWidths=[(W-2*MARGIN)*f for f in [0.05, 0.09, 0.28, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09]],
repeatRows=1
)
ts = [
('BACKGROUND', (0,0), (-1,0), C_DARK),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#c0c0c0')),
('TOPPADDING', (0,0), (-1,-1), 2),
('BOTTOMPADDING', (0,0), (-1,-1), 2),
('LEFTPADDING', (0,0), (-1,-1), 3),
('RIGHTPADDING', (0,0), (-1,-1), 3),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_LIGHT, C_WHITE]),
('FONTSIZE', (0,0), (-1,-1), 7.5),
]
# Highlight revision days
for i, (d, _, focus) in enumerate(schedule):
if 'Revision' in focus or 'Sprint' in focus or 'Rapid' in focus:
ts.append(('BACKGROUND', (0, i+1), (-1, i+1), colors.HexColor('#fff3cd')))
if 'EXAM' in focus:
ts.append(('BACKGROUND', (0, i+1), (-1, i+1), colors.HexColor('#ffd6d6')))
ts.append(('FONTNAME', (0, i+1), (-1, i+1), 'Helvetica-Bold'))
tracker_t.setStyle(TableStyle(ts))
story.append(tracker_t)
story.append(sp(4))
# Footer motivation
story.append(hr(C_ACCENT, 1.5))
story.append(sp(2))
story.append(Paragraph(
'You have 30 days, 3 subjects, and everything you need to pass with distinction.',
sty('mot1', 10, True, C_DARK, TA_CENTER)
))
story.append(Paragraph(
'Study the system. Trust the process. The marks will follow.',
sty('mot2', 9, False, C_GRAY, TA_CENTER)
))
story.append(sp(2))
story.append(Paragraph(
'— Good luck! You\'ve got this 💪 | Orris AI | KNRUHS First MBBS Prof, August 2026',
S_FOOTER
))
# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story)
print("PDF generated successfully!")
print(f"Saved to: {OUTPUT}")
cd /home/daytona/workspace/mbbs-plan && python generate_plan.py 2>&1
ls -lh /home/daytona/workspace/mbbs-plan/KNRUHS_30Day_StudyPlan.pdf
KNRUHS 30Day StudyPlan
PDF Document · PDF
| Page | Content |
|---|---|
| Page 1 | Cover + Phase Overview + Score Strategy (how to get 60+) + KNRUHS Exam Structure |
| Page 2 | Daily Time Budget + Books Table + Integrated Study Method (how each day works) |
| Page 3 | Full 30-day schedule - Week 1 (Blood, Heart, UL) + Week 2 (LL, Thorax) + Week 3 (H&N, GIT, Neuro) |
| Page 4 | Week 4 + Final 3-Day Sprint (Aug 10-12) + ⭐ Anatomy Priority Topics (Paper I & II) |
| Page 5 | ⭐ Physiology Priority Topics + ⭐ Biochemistry Priority Topics + Key Anatomy Tips |
| Page 6 | Printable Daily Tracker - tick off Anatomy/Physio/Bio/MCQ/PYQ/Review for all 31 days |
I think you didn't see the link chat completely, coz it shows many variations than the conversation, you looked at the beginning only it seems ,please see till end
https://orris.care/shared/chat/6688ac6f-e61d-4e0c-b859-247b6…
Then if i keep the whole thing as video can you see it??
analyse_media but I'd likely miss details, especially tables, code blocks, and formatted content