Totally I have 5 subjects: Anatomy, physiology, materia medica, organon of medicine and psychology, homoeopathic pharmacy. coming 27th july to 31th july i have periodic assessment.
| Date | Day | Suggested Hours | Morning (2-3 hrs) | Afternoon (2-3 hrs) | Evening (1-2 hrs) |
|---|---|---|---|---|---|
| Jul 15 | Wed | 5-6 hrs | Anatomy - Musculoskeletal / Gross Anatomy topics | Physiology - Cell physiology & Blood | Quick notes review |
| Jul 16 | Thu | 5-6 hrs | Anatomy - Neuroanatomy & Head-Neck | Physiology - Cardiovascular & Respiratory | Short self-test |
| Jul 17 | Fri | 5-6 hrs | Materia Medica - Polychrest remedies (Sulphur, Calc Carb, Lycopodium) | Materia Medica - Pulsatilla, Sepia, Natrum Mur | Write keynotes of 5 remedies |
| Jul 18 | Sat | 7-8 hrs | Materia Medica - Arsenicum, Nux Vomica, Phosphorus, Belladonna | Organon of Medicine - Aphorisms 1-50 (Philosophy & Health/Disease) | Organon - write key aphorisms |
| Jul 19 | Sun | 7-8 hrs | Organon - Aphorisms 51-130 (Medicines, Proving, Potency) | Psychology - Miasms, mental generals, case-taking | Quick recap notes |
| Jul 20 | Mon | 5-6 hrs | Homoeopathic Pharmacy - Drug sources, preparation, potentization | Homoeopathic Pharmacy - Scales of potency, storage, pharmacopoeia | Self-quiz on pharmacy |
| Date | Day | Suggested Hours | Morning (2-3 hrs) | Afternoon (2-3 hrs) | Evening (1-2 hrs) |
|---|---|---|---|---|---|
| Jul 21 | Tue | 6-7 hrs | Anatomy - Revision of diagrams & labeling | Physiology - Nervous system & Endocrine | Write 5 short answers |
| Jul 22 | Wed | 6-7 hrs | Materia Medica - Comparative Materia Medica (remedy differentiation) | Organon - Chronic diseases, Miasms (Aph. 131-209) | Remedy keynotes revision |
| Jul 23 | Thu | 6-7 hrs | Organon - Second prescription, Obstacles to cure, Aph. 210-285 | Psychology - Psychological models, role of mind in disease | Short note writing practice |
| Jul 24 | Fri | 6-7 hrs | Homoeopathic Pharmacy - Full revision + Tinctures, Triturations, Succussion | All subjects - Flip through notes, flag weak points | Prepare question list |
| Date | Day | Suggested Hours | Focus |
|---|---|---|---|
| Jul 25 | Sat | 7-8 hrs | Morning: Anatomy + Physiology rapid revision from notes. Afternoon: Materia Medica - 20 remedy keynote recall. Evening: Organon important aphorisms re-read |
| Jul 26 | Sun | 6-7 hrs | Morning: Homoeopathic Pharmacy full mock self-test. Afternoon: Psychology + Organon revision. Evening: Light read of all subjects - NO heavy studying, sleep well! |
| Date | Day | Assessment | Morning Prep (2 hrs max) |
|---|---|---|---|
| Jul 27 | Sun | Anatomy | Quick diagram review, mnemonics for structures |
| Jul 28 | Mon | Physiology | Key values (normal ranges), flowcharts |
| Jul 29 | Tue | Materia Medica | Keynotes & characteristic symptoms of top remedies |
| Jul 30 | Wed | Organon & Psychology | Key aphorisms, definitions, psychological concepts |
| Jul 31 | Thu | Homoeopathic Pharmacy | Potency scales, preparation methods, important terms |
1.30 hrs and evening 2 hrs only how to handle
| Date | Day | Afternoon (1.5 hrs) | Evening (2 hrs) |
|---|---|---|---|
| Jul 15 | Wed | Anatomy - Gross anatomy key topics, important bones & muscles | Physiology - Blood, CVS basics - read + short notes |
| Jul 16 | Thu | Anatomy - Neuroanatomy basics + Head & Neck overview | Physiology - Respiratory + Nervous system basics |
| Jul 17 | Fri | Materia Medica - Sulphur, Calc Carb, Lycopodium keynotes | Materia Medica - Pulsatilla, Natrum Mur, Sepia keynotes |
| Jul 18 | Sat | Materia Medica - Arsenicum, Nux Vomica, Phosphorus keynotes | Organon - Aphorisms 1-70 (health, disease, vital force) |
| Jul 19 | Sun | Organon - Aphorisms 71-150 (medicines, proving, similimum) | Psychology - Miasms, mental generals, case-taking basics |
| Jul 20 | Mon | Homoeopathic Pharmacy - Drug sources, preparation, potentization | Homoeopathic Pharmacy - Potency scales, dispensing, storage |
| Date | Day | Afternoon (1.5 hrs) | Evening (2 hrs) |
|---|---|---|---|
| Jul 21 | Tue | Anatomy - Revise notes, draw 2-3 key diagrams | Physiology - Endocrine + Digestion - flowcharts |
| Jul 22 | Wed | Materia Medica - Remedy comparison (differentiation between similar remedies) | Organon - Aphorisms 151-210 (chronic diseases, miasms) |
| Jul 23 | Thu | Organon - Aph 211-285 + Obstacles to cure | Psychology - Mind-body connection, psychological symptoms in remedies |
| Jul 24 | Fri | Homoeopathic Pharmacy - Full revision in notes form | All subjects - Go through written notes, mark weak spots |
| Date | Day | Afternoon (1.5 hrs) | Evening (2 hrs) |
|---|---|---|---|
| Jul 25 | Sat | Anatomy + Physiology - rapid note recall | Materia Medica - recall 15 remedy keynotes from memory |
| Jul 26 | Sun | Organon key aphorisms + Pharmacy revision | Light revision of Psychology - sleep by 10 PM |
| Date | Exam | Afternoon (1.5 hrs) | Evening (1 hr only - then rest) |
|---|---|---|---|
| Jul 27 | Anatomy | Diagrams + key structures | Read short notes once |
| Jul 28 | Physiology | Normal values + flowcharts | Read short notes once |
| Jul 29 | Materia Medica | Top 10 remedy keynotes | Characteristic symptoms recall |
| Jul 30 | Organon & Psychology | Key aphorisms + definitions | Psych concepts once |
| Jul 31 | Pharmacy | Potency scales + preparation table | Key terms once |
| Rule | What to do |
|---|---|
| No warm-up time | Keep your notes/book ready before you sit down - start studying within 2 minutes |
| First 10 min | Recall what you studied yesterday (mental recap, no book) |
| Use short notes only | Never read full textbook chapters - read your own short notes or make them as you go |
| 1 topic = 1 page | Summarize every topic in 1 page max. This becomes your revision material |
| Evening ends with writing | Last 15 min of every evening - write 5 points you remember from today without looking |
| No phone during study slots | 3.5 hrs is short - even 15 min of distraction wastes nearly half an afternoon slot |
Generate a printable 1-page study sheet per subject 5.30am
mkdir -p /tmp/workspace/study-sheets && ls /tmp/workspace/study-sheets
| Time | Activity | | --------------------- | ----------------------------------------------- | | **5:00 AM** | Wake up ๐ | | **5:00โ5:30 AM** | Freshen up, brush, get ready | | **5:30โ6:30 AM** | Morning study ๐ | | **6:30 AM** | Prayer | | **6:45โ7:15 AM** | Breakfast ๐ | | **7:15โ8:15 AM** | Revise or prepare for college | | **8:15 AM** | Leave for college ๐ | | **9:00 AM โ 4:00 PM** | College classes, practicals, seminars | | **4:00โ5:00 PM** | Remedial classes (when scheduled) / Return home | | **5:30โ6:00 PM** | Tea and short rest | | **6:00โ7:00 PM** | Self-study / Assignments | | **7:00 PM** | Dinner ๐ฝ๏ธ | | **7:30โ10:00 PM** | Study (Anatomy, Physiology, BHMS subjects) | | **10:00โ10:30 PM** | Wind down and sleep ๐ด | this is my daily route
cat << 'PYEOF' > /tmp/workspace/study-sheets/generate_sheets.py from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import cm from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, HRFlowable from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_CENTER, TA_LEFT from reportlab.platypus import KeepTogether from pypdf import PdfWriter, PdfReader import os OUTPUT_DIR = "/tmp/workspace/study-sheets" # โโ colour palette per subject โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ PALETTES = { "anatomy": {"header": colors.HexColor("#1A3C5E"), "sub": colors.HexColor("#2E6DA4"), "light": colors.HexColor("#D6E8F7"), "accent": colors.HexColor("#F0F7FF")}, "physiology": {"header": colors.HexColor("#145A32"), "sub": colors.HexColor("#1E8449"), "light": colors.HexColor("#D5F5E3"), "accent": colors.HexColor("#EAFAF1")}, "materia": {"header": colors.HexColor("#6E2C00"), "sub": colors.HexColor("#BA4A00"), "light": colors.HexColor("#FDEBD0"), "accent": colors.HexColor("#FEF9E7")}, "organon": {"header": colors.HexColor("#4A235A"), "sub": colors.HexColor("#7D3C98"), "light": colors.HexColor("#E8DAEF"), "accent": colors.HexColor("#F9F0FF")}, "pharmacy": {"header": colors.HexColor("#154360"), "sub": colors.HexColor("#1A5276"), "light": colors.HexColor("#D6EAF8"), "accent": colors.HexColor("#EBF5FB")}, } def build_styles(pal): base = getSampleStyleSheet() styles = {} styles["title"] = ParagraphStyle("title", fontSize=18, fontName="Helvetica-Bold", textColor=colors.white, alignment=TA_CENTER, spaceAfter=2, leading=22) styles["subtitle"] = ParagraphStyle("subtitle", fontSize=9, fontName="Helvetica", textColor=colors.HexColor("#CCDDEE"), alignment=TA_CENTER, spaceAfter=4) styles["section"] = ParagraphStyle("section", fontSize=10, fontName="Helvetica-Bold", textColor=colors.white, spaceAfter=2, spaceBefore=4) styles["body"] = ParagraphStyle("body", fontSize=8, fontName="Helvetica", textColor=colors.HexColor("#1A1A1A"), spaceAfter=1, leading=11) styles["bold"] = ParagraphStyle("bold", fontSize=8, fontName="Helvetica-Bold", textColor=colors.HexColor("#1A1A1A"), spaceAfter=1, leading=11) styles["tip"] = ParagraphStyle("tip", fontSize=7.5, fontName="Helvetica-Oblique", textColor=colors.HexColor("#555555"), spaceAfter=1, leading=10) return styles def header_table(title, subtitle, pal): data = [[Paragraph(title, build_styles(pal)["title"])], [Paragraph(subtitle, build_styles(pal)["subtitle"])]] t = Table(data, colWidths=[19*cm]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), pal["header"]), ("TOPPADDING", (0,0),(-1,-1), 10), ("BOTTOMPADDING", (0,0),(-1,-1), 6), ("LEFTPADDING", (0,0),(-1,-1), 12), ("RIGHTPADDING", (0,0),(-1,-1), 12), ("ROUNDEDCORNERS", [6]), ])) return t def section_box(heading, rows, pal, col_widths=None): """heading row + data rows in a styled table.""" s = build_styles(pal) head_row = [Paragraph(f"โธ {heading}", s["section"])] if col_widths is None: col_widths = [19*cm] # heading spans all cols n_cols = len(col_widths) table_data = [[Paragraph(f"โธ {heading}", s["section"])] + [""]*(n_cols-1)] for r in rows: if isinstance(r, str): table_data.append([Paragraph(r, s["body"])] + [""]*(n_cols-1)) else: table_data.append([Paragraph(str(c), s["body"]) for c in r]) ts = TableStyle([ ("BACKGROUND", (0,0), (-1,0), pal["sub"]), ("BACKGROUND", (0,1), (-1,-1), pal["accent"]), ("SPAN", (0,0), (-1,0)), ("TOPPADDING", (0,0),(-1,-1), 4), ("BOTTOMPADDING", (0,0),(-1,-1), 3), ("LEFTPADDING", (0,0),(-1,-1), 7), ("RIGHTPADDING", (0,0),(-1,-1), 7), ("ROWBACKGROUNDS",(0,1),(-1,-1), [pal["accent"], pal["light"]]), ("GRID", (0,1),(-1,-1), 0.3, colors.HexColor("#BBBBBB")), ("LINEBELOW", (0,0),(-1,0), 1, pal["header"]), ]) t = Table(table_data, colWidths=col_widths) t.setStyle(ts) return t def timetable_box(pal): s = build_styles(pal) rows = [ [Paragraph("<b>Time Slot</b>", s["bold"]), Paragraph("<b>Study Focus</b>", s["bold"]), Paragraph("<b>Duration</b>", s["bold"])], ["5:30โ6:30 AM", "Tough subject / New concepts", "1 hr"], ["7:15โ8:15 AM", "Revision of yesterday's notes", "1 hr"], ["6:00โ7:00 PM", "Assignments / Self-study", "1 hr"], ["7:30โ10:00 PM", "Main study (BHMS subjects)", "2.5 hrs"], ] table_data = [] for i, r in enumerate(rows): if i == 0: table_data.append(r) else: table_data.append([Paragraph(r[0], s["bold"]), Paragraph(r[1], s["body"]), Paragraph(r[2], s["body"])]) t = Table(table_data, colWidths=[5*cm, 10*cm, 4*cm]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0),(-1,0), pal["sub"]), ("TEXTCOLOR", (0,0),(-1,0), colors.white), ("ROWBACKGROUNDS",(0,1),(-1,-1), [pal["accent"], pal["light"]]), ("GRID", (0,0),(-1,-1), 0.3, colors.HexColor("#BBBBBB")), ("TOPPADDING", (0,0),(-1,-1), 4), ("BOTTOMPADDING", (0,0),(-1,-1), 3), ("LEFTPADDING", (0,0),(-1,-1), 6), ])) return t # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # SUBJECT DATA # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ SUBJECTS = {} # 1. ANATOMY SUBJECTS["anatomy"] = { "title": "ANATOMY", "subtitle": "BHMS Periodic Assessment โ High-Yield Quick Reference Sheet", "pal": PALETTES["anatomy"], "sections": [ ("KEY SYSTEMS TO REVISE", [ "Musculoskeletal System โ Bones, joints, muscles, nerve supply", "Neuroanatomy โ Brain lobes, spinal cord, cranial nerves (IโXII)", "Cardiovascular โ Heart chambers, valves, coronary arteries", "Respiratory โ Lungs, bronchial tree, diaphragm (C3,4,5)", "Abdomen & Pelvis โ GI tract layers, liver, kidney positions", "Head & Neck โ Triangles of neck, parotid, facial nerve branches", ], None), ("CRANIAL NERVES โ QUICK MEMORY", [ ["CN I", "Olfactory", "Smell"], ["CN II", "Optic", "Vision"], ["CN III","Oculomotor", "Eye movement (most)"], ["CN V", "Trigeminal", "Face sensation, mastication"], ["CN VII","Facial", "Facial expression, taste (ant 2/3)"], ["CN X", "Vagus", "Parasympathetic thorax/abdomen"], ["CN XII","Hypoglossal","Tongue movement"], ], [2.5*cm, 5*cm, 11.5*cm]), ("IMPORTANT LANDMARKS & LEVELS", [ ["Structure", "Vertebral Level"], ["Sternal angle", "T4/T5 โ carina, aortic arch"], ["Transpyloric plane", "L1 โ pylorus, hilum of kidney"], ["Umbilicus", "L3/L4"], ["Bifurcation of aorta","L4"], ], [7*cm, 12*cm]), ("EXAM TIPS", [ "โ Draw diagrams โ brachial plexus, cardiac cycle, renal segment", "โ Learn nerve injuries: Saturday night palsy (radial), Waiter's tip (upper brachial plexus)", "โ Know muscle attachments for upper & lower limb (origin โ insertion โ action)", ], None), ] } # 2. PHYSIOLOGY SUBJECTS["physiology"] = { "title": "PHYSIOLOGY", "subtitle": "BHMS Periodic Assessment โ High-Yield Quick Reference Sheet", "pal": PALETTES["physiology"], "sections": [ ("BLOOD & HAEMATOLOGY", [ ["Parameter", "Normal Value"], ["RBC", "M: 4.5โ5.5 ร 10โถ/ยตL | F: 4.0โ5.0 ร 10โถ/ยตL"], ["Haemoglobin", "M: 13โ17 g/dL | F: 12โ15 g/dL"], ["WBC", "4,000โ11,000/ยตL"], ["Platelets", "1.5โ4.0 lakh/ยตL"], ["ESR (Westergren)","M: 0โ15 mm/hr | F: 0โ20 mm/hr"], ["Blood pH", "7.35โ7.45"], ], [5*cm, 14*cm]), ("CARDIOVASCULAR SYSTEM", [ "Cardiac output = HR ร Stroke Volume (Normal: ~5 L/min)", "Normal HR: 60โ100 bpm | BP: 120/80 mmHg", "SA Node โ AV Node โ Bundle of His โ Purkinje fibres", "Frank-Starling Law: โ preload โ โ stroke volume", "ECG: P wave = atrial depolarisation | QRS = ventricular depolarisation | T = repolarisation", ], None), ("RESPIRATORY SYSTEM", [ ["Volume/Capacity", "Value", "Meaning"], ["Tidal Volume", "500 mL", "Normal breath"], ["IRV", "3000 mL", "Max extra inspiration"], ["ERV", "1100 mL", "Max extra expiration"], ["Residual Volume", "1200 mL", "Air remaining after max expiration"], ["Vital Capacity", "4600 mL", "TV + IRV + ERV"], ["Total Lung Cap", "5800 mL", "VC + RV"], ], [5*cm, 4*cm, 10*cm]), ("NERVOUS & ENDOCRINE HIGHLIGHTS", [ "Resting membrane potential: โ70 mV (neuron)", "Synapse neurotransmitters: ACh (NMJ), Dopamine (reward), Serotonin (mood)", "Insulin: ฮฒ-cells of islets of Langerhans โ lowers blood glucose", "Cortisol (glucocorticoid): stress response, anti-inflammatory", "ADH (vasopressin): water reabsorption in collecting duct", ], None), ("EXAM TIPS", [ "โ Draw flowcharts: cardiac cycle, nerve impulse, hormonal feedback loops", "โ Memorise all normal values โ frequently asked in MCQs", ], None), ] } # 3. MATERIA MEDICA SUBJECTS["materia"] = { "title": "MATERIA MEDICA", "subtitle": "BHMS Periodic Assessment โ High-Yield Remedy Keynotes Sheet", "pal": PALETTES["materia"], "sections": [ ("POLYCHREST REMEDY KEYNOTES", [ ["Remedy", "Miasm", "Key Characteristics"], ["Sulphur", "Psora", "Dirty, lazy, burning sensation, worse heat, aggr 11 AM hunger"], ["Calc Carb", "Psora", "Fat, fair, flabby, cold sweaty head, sour sweat, desire eggs"], ["Lycopodium", "Psora", "Cowardly, flatulence, right-sided, 4โ8 PM aggr, desire sweets"], ["Pulsatilla", "Psora", "Mild, weeping, changeable symptoms, thirstless, better open air"], ["Natrum Mur", "Psora", "Reserved grief, desire salt, headache like hammers, worse consolation"], ["Sepia", "Psora", "Indifferent to loved ones, bearing-down sensation, worse cold"], ["Arsenicum Alb", "Syphilis","Anxiety, restlessness, midnight aggr, burning relieved by heat"], ["Nux Vomica", "Sycosis","Irritable, sedentary, oversensitive, worse morning, craves stimulants"], ["Phosphorus", "Tubercular","Tall thin, haemorrhagic, fear of dark/alone, desire cold drinks"], ["Belladonna", "Syphilis","Sudden violent onset, red hot dry, throbbing, photophobia"], ], [3.5*cm, 3*cm, 12.5*cm]), ("COMPARISON: WEEPING REMEDIES", [ "Pulsatilla โ weeps easily, better consolation, changeable mood", "Ignatia โ hysterical weeping, grief, contradictory symptoms, sighing", "Natrum Mur โ weeps alone, worse consolation, suppressed grief", ], None), ("EXAM TIPS โ MATERIA MEDICA", [ "โ Learn PQRS for each remedy: Peculiar, Queer, Rare, Strange symptoms", "โ Know modalities: What makes it WORSE (aggravates) and BETTER (ameliorates)", "โ Miasm classification: Psora, Sycosis, Syphilis, Tubercular (Pseudo-psora)", "โ Compare similar remedies โ examiners love differentiation questions", ], None), ] } # 4. ORGANON + PSYCHOLOGY SUBJECTS["organon"] = { "title": "ORGANON OF MEDICINE & PSYCHOLOGY", "subtitle": "BHMS Periodic Assessment โ Key Aphorisms & Concepts Sheet", "pal": PALETTES["organon"], "sections": [ ("KEY APHORISMS โ ORGANON (6th Edition)", [ ["Aph.", "Topic", "Core Idea"], ["1", "Physician's Duty", "To restore sick to health โ rapidly, gently, permanently"], ["9", "Vital Force", "Governs body in health; when deranged โ disease"], ["11", "Disease", "Dynamic derangement of vital force, expressed as symptoms"], ["22", "Law of Similars", "Similia similibus curentur โ like cures like"], ["27", "Curative Power", "Only law of similars can effect true cure"], ["63-65","Primary & Secondary Action", "Drug primary action โ vital force reaction (secondary)"], ["96-99","Provings", "Symptoms produced on healthy provers = medicinal picture"], ["145", "Totality of Symptoms", "Sum of all symptoms = true picture of disease"], ["153", "Characteristic Symptoms","Peculiar, uncommon symptoms guide remedy selection"], ["246", "Repetition of Dose", "Repeat dose when improvement stops"], ["269", "Potentisation", "Mechanical process releases latent medicinal power"], ["285", "Posology", "Minimum dose โ smallest quantity to act curatively"], ], [1.5*cm, 5*cm, 12.5*cm]), ("HERING'S LAW OF CURE", [ "1. From above downwards", "2. From within outwards (centre to periphery)", "3. From more vital to less vital organ", "4. In reverse order of appearance of symptoms", ], None), ("PSYCHOLOGY โ KEY CONCEPTS", [ ["Concept", "Key Points"], ["Miasms & Mind", "Psora โ anxiety/fear | Sycosis โ fixed ideas | Syphilis โ destructive"], ["Case Taking", "Mental generals > Physical generals > Particulars (Kent's hierarchy)"], ["Disposition", "Emotional state, will, intellect โ highest individualising symptoms"], ["Psychosomatic", "Mind influences body โ grief โ physical illness (Hahnemann concept)"], ["Second Prescription","Based on Hering's law direction โ never change if improving"], ], [4.5*cm, 14.5*cm]), ("EXAM TIPS", [ "โ Know the aphorism number + concept โ examiners often ask 'which aphorism states...'", "โ Understand the logic: Vital Force โ Derangement โ Symptoms โ Similimum โ Cure", "โ Hering's Law is frequently asked โ memorise all 4 directions", ], None), ] } # 5. HOMOEOPATHIC PHARMACY SUBJECTS["pharmacy"] = { "title": "HOMOEOPATHIC PHARMACY", "subtitle": "BHMS Periodic Assessment โ Preparation, Potency & Dispensing Sheet", "pal": PALETTES["pharmacy"], "sections": [ ("SOURCES OF HOMOEOPATHIC DRUGS", [ ["Source", "Examples"], ["Vegetable", "Aconite, Belladonna, Nux Vomica, Pulsatilla, Chamomilla"], ["Animal", "Apis Mel (honeybee), Lachesis (snake), Sepia (cuttlefish ink)"], ["Mineral", "Sulphur, Calc Carb, Arsenicum, Natrum Mur, Phosphorus"], ["Nosodes", "Psorinum (scabies), Medorrhinum (gonorrhoea), Tuberculinum"], ["Sarcodes", "Thyroidinum, Insulinum, Fel Tauri (ox bile)"], ], [3.5*cm, 15.5*cm]), ("SCALES OF POTENCY", [ ["Scale", "Dilution Ratio", "Notation", "Range"], ["Decimal (X/D)", "1:10", "6X, 30X", "Low potency"], ["Centesimal (C/CH)", "1:100", "6C, 30C, 200C, 1M", "Most common"], ["LM / Q Potency", "1:50,000", "LM1, LM2โฆ", "Gentle, rapid cure"], ["Millesimal (M)", "1:1000", "1M, 10M, CM","High potency"], ], [4.5*cm, 4*cm, 4.5*cm, 6*cm]), ("PREPARATION METHODS", [ "Tincture (ร): Fresh plant + alcohol โ Mother Tincture (undiluted)", "Trituration: Insoluble substances ground with lactose (1:10 or 1:100) up to 3C, then dissolved", "Succussion: Vigorous shaking at each potency step โ releases medicinal energy", "Potentisation = Dilution + Succussion (or trituration for insoluble drugs)", "Korsakovian method: Single vial reused; Hahnemannian: Fresh vial at each step", ], None), ("DISPENSING & STORAGE", [ ["Form", "Vehicle", "Notes"], ["Pills/Globules","Lactose/Sucrose","Most common; size 10, 20, 40"], ["Liquid drops", "Alcohol", "Direct or diluted in water"], ["Trituration tabs","Lactose", "For 1Xโ3X potencies"], ["Stored in", "Amber bottles","Away from heat, light, strong smell, camphor"], ], [4*cm, 5*cm, 10*cm]), ("EXAM TIPS", [ "โ Know dilution ratios for all 3 scales by heart โ MCQ favourite", "โ Difference: Nosode (disease product) vs Sarcode (healthy tissue/secretion)", "โ Antidotes: Camphor antidotes most remedies โ avoid during treatment", "โ Drug sources: Be able to classify any remedy into its source category", ], None), ] } # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # BUILD EACH PDF # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ def build_subject_pdf(key, data): filepath = os.path.join(OUTPUT_DIR, f"{key}_study_sheet.pdf") pal = data["pal"] doc = SimpleDocTemplate( filepath, pagesize=A4, leftMargin=1*cm, rightMargin=1*cm, topMargin=1*cm, bottomMargin=1*cm ) s = build_styles(pal) story = [] # Header story.append(header_table(data["title"], data["subtitle"], pal)) story.append(Spacer(1, 0.25*cm)) # Daily study slots reminder (compact) tt = timetable_box(pal) story.append(tt) story.append(Spacer(1, 0.2*cm)) # Content sections for (heading, rows, col_widths) in data["sections"]: if col_widths: story.append(section_box(heading, rows, pal, col_widths)) else: story.append(section_box(heading, rows, pal, [19*cm])) story.append(Spacer(1, 0.2*cm)) # Footer footer_data = [[Paragraph( "๐ Assessment: Jul 27โ31, 2026 | Study Slots: 5:30 AM โข 7:15 AM โข 6:00 PM โข 7:30 PM | Total: 5.5 hrs/day", ParagraphStyle("footer", fontSize=7, fontName="Helvetica", textColor=colors.HexColor("#666666"), alignment=TA_CENTER) )]] ft = Table(footer_data, colWidths=[19*cm]) ft.setStyle(TableStyle([ ("BACKGROUND", (0,0),(-1,-1), colors.HexColor("#F0F0F0")), ("TOPPADDING", (0,0),(-1,-1), 4), ("BOTTOMPADDING",(0,0),(-1,-1), 4), ("LINEABOVE", (0,0),(-1,0), 0.5, colors.HexColor("#AAAAAA")), ])) story.append(ft) doc.build(story) return filepath files = [] for key, data in SUBJECTS.items(): fp = build_subject_pdf(key, data) files.append(fp) print(f"Generated: {fp}") # โโ Merge all into one combined PDF โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ writer = PdfWriter() for fp in files: reader = PdfReader(fp) for page in reader.pages: writer.add_page(page) combined_path = os.path.join(OUTPUT_DIR, "BHMS_All_Study_Sheets.pdf") with open(combined_path, "wb") as f: writer.write(f) print(f"\nCombined PDF: {combined_path}") PYEOF python /tmp/workspace/study-sheets/generate_sheets.py
~/study-sheets/generate_sheets.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from pypdf import PdfWriter, PdfReader
import os
OUTPUT_DIR = "/tmp/workspace/study-sheets"
PALETTES = {
"anatomy": {"header": colors.HexColor("#1A3C5E"), "sub": colors.HexColor("#2E6DA4"), "light": colors.HexColor("#D6E8F7"), "accent": colors.HexColor("#F0F7FF")},
"physiology": {"header": colors.HexColor("#145A32"), "sub": colors.HexColor("#1E8449"), "light": colors.HexColor("#D5F5E3"), "accent": colors.HexColor("#EAFAF1")},
"materia": {"header": colors.HexColor("#6E2C00"), "sub": colors.HexColor("#BA4A00"), "light": colors.HexColor("#FDEBD0"), "accent": colors.HexColor("#FEF9E7")},
"organon": {"header": colors.HexColor("#4A235A"), "sub": colors.HexColor("#7D3C98"), "light": colors.HexColor("#E8DAEF"), "accent": colors.HexColor("#F9F0FF")},
"pharmacy": {"header": colors.HexColor("#154360"), "sub": colors.HexColor("#1A5276"), "light": colors.HexColor("#D6EAF8"), "accent": colors.HexColor("#EBF5FB")},
}
def build_styles(pal):
styles = {}
styles["title"] = ParagraphStyle("title", fontSize=18, fontName="Helvetica-Bold",
textColor=colors.white, alignment=TA_CENTER, spaceAfter=2, leading=22)
styles["subtitle"] = ParagraphStyle("subtitle", fontSize=8.5, fontName="Helvetica",
textColor=colors.HexColor("#CCDDEE"), alignment=TA_CENTER, spaceAfter=4)
styles["section"] = ParagraphStyle("section", fontSize=9.5, fontName="Helvetica-Bold",
textColor=colors.white, spaceAfter=2, spaceBefore=2)
styles["body"] = ParagraphStyle("body", fontSize=7.8, fontName="Helvetica",
textColor=colors.HexColor("#1A1A1A"), spaceAfter=1, leading=10.5)
styles["bold"] = ParagraphStyle("bold", fontSize=7.8, fontName="Helvetica-Bold",
textColor=colors.HexColor("#1A1A1A"), spaceAfter=1, leading=10.5)
styles["tip"] = ParagraphStyle("tip", fontSize=7.5, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#444444"), spaceAfter=1, leading=10)
styles["footer"] = ParagraphStyle("footer", fontSize=7, fontName="Helvetica",
textColor=colors.HexColor("#666666"), alignment=TA_CENTER)
return styles
def header_table(title, subtitle, pal):
s = build_styles(pal)
data = [[Paragraph(title, s["title"])], [Paragraph(subtitle, s["subtitle"])]]
t = Table(data, colWidths=[19*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), pal["header"]),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
return t
def section_box(heading, rows, pal, col_widths=None):
s = build_styles(pal)
if col_widths is None:
col_widths = [19*cm]
n_cols = len(col_widths)
table_data = [[Paragraph(f"\u25b8 {heading}", s["section"])] + [""] * (n_cols - 1)]
for r in rows:
if isinstance(r, str):
table_data.append([Paragraph(r, s["body"])] + [""] * (n_cols - 1))
else:
cells = []
for c in r:
cells.append(Paragraph(str(c), s["body"]))
while len(cells) < n_cols:
cells.append(Paragraph("", s["body"]))
table_data.append(cells)
ts = TableStyle([
("BACKGROUND", (0,0), (-1,0), pal["sub"]),
("SPAN", (0,0), (-1,0)),
("ROWBACKGROUNDS",(0,1), (-1,-1), [pal["accent"], pal["light"]]),
("GRID", (0,1), (-1,-1), 0.3, colors.HexColor("#BBBBBB")),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("LINEBELOW", (0,0), (-1,0), 1, pal["header"]),
])
t = Table(table_data, colWidths=col_widths)
t.setStyle(ts)
return t
def timetable_box(pal):
s = build_styles(pal)
rows = [
[Paragraph("<b>Time Slot</b>", s["bold"]), Paragraph("<b>Study Focus</b>", s["bold"]), Paragraph("<b>Duration</b>", s["bold"])],
[Paragraph("5:30-6:30 AM", s["bold"]), Paragraph("Tough subject / New concepts", s["body"]), Paragraph("1 hr", s["body"])],
[Paragraph("7:15-8:15 AM", s["bold"]), Paragraph("Revision of yesterday's notes", s["body"]), Paragraph("1 hr", s["body"])],
[Paragraph("6:00-7:00 PM", s["bold"]), Paragraph("Self-study / Assignments", s["body"]), Paragraph("1 hr", s["body"])],
[Paragraph("7:30-10:00 PM", s["bold"]), Paragraph("Main study (BHMS subjects)", s["body"]), Paragraph("2.5 hrs", s["body"])],
]
t = Table(rows, colWidths=[4.5*cm, 11*cm, 3.5*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), pal["sub"]),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("ROWBACKGROUNDS",(0,1), (-1,-1), [pal["accent"], pal["light"]]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#BBBBBB")),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
return t
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SUBJECT DATA
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
SUBJECTS = {}
SUBJECTS["anatomy"] = {
"title": "ANATOMY",
"subtitle": "BHMS Periodic Assessment | High-Yield Quick Reference Sheet | Jul 27-31, 2026",
"pal": PALETTES["anatomy"],
"sections": [
("KEY SYSTEMS TO REVISE", [
"Musculoskeletal: Bones, joints, muscles, nerve & blood supply of limbs",
"Neuroanatomy: Brain lobes, spinal cord tracts, cranial nerves I-XII",
"Cardiovascular: Heart chambers, valves, coronary arteries, conducting system",
"Respiratory: Lungs, bronchial tree, pleura, diaphragm (nerve supply C3,4,5 - phrenic)",
"Abdomen: Layers of GI wall, liver segments, kidney position (T12-L3), ureter course",
"Head & Neck: Triangles of neck, parotid gland, facial nerve branches (TEFMC mnemonic)",
], None),
("CRANIAL NERVES - QUICK REFERENCE", [
["CN", "Name", "Type", "Function"],
["I", "Olfactory", "Sensory", "Smell"],
["II", "Optic", "Sensory", "Vision"],
["III", "Oculomotor", "Motor", "Eye movement (SR, IR, MR, IO), pupil constriction"],
["V", "Trigeminal", "Both", "Facial sensation (V1/V2/V3), mastication (V3)"],
["VII", "Facial", "Both", "Facial expression, taste anterior 2/3 tongue"],
["VIII","Vestibulocochlear","Sensory","Hearing & balance"],
["X", "Vagus", "Both", "Parasympathetic thorax & abdomen, phonation"],
["XII", "Hypoglossal", "Motor", "Tongue movement (deviation to side of lesion)"],
], [1.2*cm, 4*cm, 2.8*cm, 11*cm]),
("VERTEBRAL LEVELS - HIGH YIELD", [
["Structure", "Level", "Clinical note"],
["Sternal angle (Louis)", "T4/T5", "Carina, aortic arch, SVC/IVC junction"],
["Transpyloric plane", "L1", "Pylorus, hilum of kidneys, fundus of GB"],
["Umbilicus", "L3/L4", "Bifurcation of abdominal aorta ~ L4"],
["Iliac crest", "L4", "Surface landmark for lumbar puncture (L3-L4)"],
], [5.5*cm, 3*cm, 10.5*cm]),
("IMPORTANT NERVE INJURIES", [
"Radial nerve (Saturday night palsy): Wrist drop - cannot extend wrist",
"Ulnar nerve (medial epicondyle): Claw hand, loss of little & ring finger sensation",
"Median nerve (carpal tunnel): Ape hand, loss of thumb opposition, LOAF muscles",
"Upper brachial plexus (C5-C6): Waiter's tip / Erb's palsy - arm hangs internally rotated",
"Lower brachial plexus (C8-T1): Klumpke's palsy - claw hand + Horner syndrome",
], None),
("EXAM TIPS", [
"* Draw diagrams: brachial plexus, heart valves, renal segments - examiners love visuals",
"* Know muscle: Origin > Insertion > Action > Nerve supply (format for every answer)",
"* Vertebral levels are MCQ gold - memorise the table above perfectly",
], None),
]
}
SUBJECTS["physiology"] = {
"title": "PHYSIOLOGY",
"subtitle": "BHMS Periodic Assessment | High-Yield Quick Reference Sheet | Jul 27-31, 2026",
"pal": PALETTES["physiology"],
"sections": [
("HAEMATOLOGY - NORMAL VALUES", [
["Parameter", "Male", "Female"],
["RBC count", "4.5-5.5 x10^6/uL", "4.0-5.0 x10^6/uL"],
["Haemoglobin", "13-17 g/dL", "12-15 g/dL"],
["Haematocrit (PCV)", "40-54%", "36-47%"],
["WBC (Leucocytes)", "4000-11000/uL", "Same"],
["Platelets", "1.5-4.0 lakh/uL", "Same"],
["ESR (Westergren)", "0-15 mm/hr", "0-20 mm/hr"],
["Blood pH", "7.35-7.45", "Same"],
], [5.5*cm, 6.75*cm, 6.75*cm]),
("CARDIOVASCULAR SYSTEM", [
"Cardiac Output = HR x Stroke Volume (Normal: ~5 L/min at rest)",
"Normal HR: 60-100 bpm | Normal BP: 120/80 mmHg | PR interval: 0.12-0.20 sec",
"Conducting system: SA Node (pacemaker 70/min) -> AV Node -> Bundle of His -> Purkinje",
"Frank-Starling Law: Increased preload -> increased stretch -> increased stroke volume",
"ECG: P wave = atrial depolarisation | QRS = ventricular depolarisation | T = repolarisation",
"Korotkoff sounds: Phase I = systolic BP | Phase V (disappearance) = diastolic BP",
], None),
("RESPIRATORY VOLUMES & CAPACITIES", [
["Volume / Capacity", "Value", "What it means"],
["Tidal Volume (TV)", "500 mL", "Air in normal quiet breath"],
["IRV", "3000 mL", "Max extra air inspired after normal inspiration"],
["ERV", "1100 mL", "Max extra air expired after normal expiration"],
["Residual Volume", "1200 mL", "Air remaining after maximum expiration"],
["Vital Capacity", "4600 mL", "TV + IRV + ERV (max breath in + out)"],
["Total Lung Cap", "5800 mL", "Vital Capacity + Residual Volume"],
["FRC", "2300 mL", "ERV + RV (air at end of normal expiration)"],
], [5*cm, 3.5*cm, 10.5*cm]),
("NERVOUS SYSTEM HIGHLIGHTS", [
"Resting Membrane Potential: -70 mV (neuron) | Action potential threshold: -55 mV",
"Key neurotransmitters: ACh (NMJ, parasympathetic) | Dopamine (reward, movement)",
"Noradrenaline (sympathetic) | Serotonin (mood, sleep) | GABA (inhibitory)",
"Sympathetic (fight/flight): T1-L2 | Parasympathetic (rest/digest): Craniosacral",
], None),
("ENDOCRINE - HIGH YIELD HORMONES", [
["Hormone", "Gland", "Main Action"],
["Insulin", "Pancreas beta", "Lowers blood glucose; promotes glycogen storage"],
["Glucagon", "Pancreas alpha","Raises blood glucose; promotes glycogenolysis"],
["Cortisol", "Adrenal cortex","Stress response, anti-inflammatory, raises glucose"],
["ADH", "Post. pituitary","Water reabsorption in collecting duct"],
["Aldosterone","Adrenal cortex","Na+ retention, K+ excretion in renal tubule"],
["T3/T4", "Thyroid", "Increase BMR, growth, heat production"],
], [3*cm, 4.5*cm, 11.5*cm]),
("EXAM TIPS", [
"* Draw flowcharts for: cardiac cycle, nerve impulse, hormonal feedback loops",
"* Normal lab values are MCQ favourites - memorise all values in the tables above",
"* Know differences: Sympathetic vs Parasympathetic effects on heart/lung/GI",
], None),
]
}
SUBJECTS["materia"] = {
"title": "MATERIA MEDICA",
"subtitle": "BHMS Periodic Assessment | High-Yield Remedy Keynotes | Jul 27-31, 2026",
"pal": PALETTES["materia"],
"sections": [
("POLYCHREST REMEDIES - KEYNOTES", [
["Remedy", "Constitution / Type", "Key Symptoms & Modalities"],
["Sulphur", "Dirty, lean/fat, lazy", "Burning everywhere; worse heat, 11 AM hunger, bathing; better cold"],
["Calc Carb", "Fat, fair, flabby child/adult", "Cold sweaty head; sour sweat/stool; desire eggs; fear of disease"],
["Lycopodium", "Intellectual coward", "Right-sided; 4-8 PM aggravation; flatulence; desire sweets/hot drinks"],
["Pulsatilla", "Mild, yielding, weeping", "Thirstless; changeable symptoms; better open air, worse heat & rich food"],
["Natrum Mur", "Reserved, suppressed grief", "Desire salt; worse at sea, worse consolation; headache like hammers"],
["Sepia", "Indifferent, worn out mother", "Bearing-down sensation; worse cold, standing; better vigorous exercise"],
["Arsenicum Alb", "Anxious, restless, fastidious", "Burning relieved by heat; midnight (12-2 AM) aggravation; fear of death"],
["Nux Vomica", "Irritable, sedentary, type-A", "Oversensitive to everything; worse morning, cold, stimulants; craves spicy"],
["Phosphorus", "Tall, thin, open, artistic", "Haemorrhagic tendency; fear of dark/alone; desire cold drinks (vomited warm)"],
["Belladonna", "Plethoric, red, hot", "Sudden violent onset; red-hot-dry-throbbing; photophobia; high fever"],
["Ignatia", "Sensitive, idealistic", "Grief & disappointed love; contradictory symptoms; sighing; hysteria"],
], [3*cm, 4.5*cm, 11.5*cm]),
("REMEDY COMPARISONS (Differentiation)", [
["Theme", "Remedy 1", "Remedy 2", "Key Difference"],
["Weeping", "Pulsatilla", "Natrum Mur", "Puls: better consolation | Nat-m: WORSE consolation"],
["Grief", "Ignatia", "Natrum Mur", "Ign: acute/hysterical | Nat-m: chronic/suppressed"],
["Burning", "Arsenicum", "Sulphur", "Ars: burning RELIEVED by heat | Sul: burning WORSE heat"],
["Right-sided", "Lycopodium", "Belladonna", "Lyc: chronic/slow | Bell: acute/sudden/violent"],
], [3*cm, 3.5*cm, 3.5*cm, 9*cm]),
("MIASM CLASSIFICATION", [
["Miasm", "Founder remedy", "Character", "Key remedies"],
["Psora", "Psorinum", "Functional, deficiency, itch", "Sulphur, Calc Carb, Lycopodium, Pulsatilla"],
["Sycosis", "Medorrhinum", "Excess, overgrowth, secretion", "Nux Vomica, Thuja, Natrum Sulph"],
["Syphilis", "Syphilinum", "Destructive, ulceration", "Arsenicum, Mercurius, Nitric Acid"],
["Tubercular","Tuberculinum", "Wandering, changing, weakly", "Phosphorus, Calc Phos, Natrum Mur"],
], [2.5*cm, 3.5*cm, 5*cm, 8*cm]),
("EXAM TIPS - MATERIA MEDICA", [
"* PQRS symptoms: Peculiar, Queer, Rare, Strange - these individualise and guide prescription",
"* Know MODALITIES for each remedy: Aggravations (< worse) and Ameliorations (> better)",
"* Remedy relationships: Complementary, Antidotes, Follows well - frequently asked",
"* Miasm of each remedy is a common short-answer / MCQ question",
], None),
]
}
SUBJECTS["organon"] = {
"title": "ORGANON OF MEDICINE & PSYCHOLOGY",
"subtitle": "BHMS Periodic Assessment | Key Aphorisms & Concepts | Jul 27-31, 2026",
"pal": PALETTES["organon"],
"sections": [
("KEY APHORISMS - ORGANON 6th EDITION (Hahnemann)", [
["Aph", "Topic", "Core Statement"],
["1", "Physician's Duty", "Restore the sick to health - rapidly, gently, permanently"],
["2", "Highest Ideal", "Rapid, gentle, permanent restoration; removal of whole disease"],
["9", "Vital Force", "Spirit-like vital force governs body; when deranged = disease"],
["11", "Nature of Disease", "Disease = dynamic derangement of vital force expressed as symptoms"],
["22", "Law of Cure", "Medicines cure only by their power to produce similar symptoms"],
["26", "Law of Similars", "Similia similibus curentur - a stronger similar disease extinguishes weaker"],
["27", "Curative Power", "Only the law of similars can effect a true and lasting cure"],
["63-65","Primary & Secondary", "Drug produces primary action; vital force responds with secondary (opposite)"],
["96-99","Drug Provings", "Symptoms on healthy provers = true medicinal picture"],
["145", "Totality of Symptoms", "Sum total of all symptoms = true picture of the disease"],
["153", "Characteristic Symptoms", "Peculiar, uncommon, singular symptoms most important for remedy selection"],
["246", "Repetition of Dose", "Repeat dose when improvement stops; do not repeat while improving"],
["269", "Potentisation", "Mechanical process (trituration/succussion) releases latent medicinal power"],
["285", "Minimum Dose", "Smallest quantity capable of producing gentle cure - avoid unnecessary aggravation"],
], [1.5*cm, 4.5*cm, 13*cm]),
("HERING'S LAW OF CURE (Direction of Cure)", [
"1. From ABOVE downwards (head to foot)",
"2. From WITHIN outwards (vital organs to skin/extremities)",
"3. From MORE vital to LESS vital organ",
"4. In REVERSE ORDER of appearance (last symptom to disappear first)",
], None),
("KENT'S HIERARCHY OF SYMPTOMS", [
["Rank", "Category", "Examples"],
["1st", "Mental Generals", "Will, intellect, emotional state - MOST important"],
["2nd", "Physical Generals", "Thermal reaction, sleep, appetite, thirst, perspiration"],
["3rd", "Particulars", "Symptoms of individual organs - LEAST weight"],
], [2*cm, 5*cm, 12*cm]),
("PSYCHOLOGY - KEY CONCEPTS", [
["Concept", "Key Points"],
["Miasms & Mind", "Psora: anxiety/fear | Sycosis: fixed ideas, suspicion | Syphilis: destructive impulses"],
["Will & Understanding","Hahnemann: disease first affects the Will, then Understanding"],
["Case Taking", "Mental symptoms > Physical generals > Particulars (Kent's hierarchy)"],
["Psychosomatic link", "Mind affects body: grief, fear, anger can suppress physical symptoms"],
["Obstacles to Cure", "Bad diet, grief, sedentary lifestyle, unhealthy environment (Aph 252-256)"],
], [4*cm, 15*cm]),
("EXAM TIPS - ORGANON", [
"* Know aphorism NUMBER + concept - examiners ask 'Which aphorism states...'",
"* Understand logical flow: Vital Force -> Derangement -> Symptoms -> Similimum -> Cure",
"* Hering's Law - all 4 directions must be memorised, frequently asked in short answers",
"* Second prescription: Never change remedy if patient is improving per Hering's directions",
], None),
]
}
SUBJECTS["pharmacy"] = {
"title": "HOMOEOPATHIC PHARMACY",
"subtitle": "BHMS Periodic Assessment | Preparation, Potency & Dispensing | Jul 27-31, 2026",
"pal": PALETTES["pharmacy"],
"sections": [
("SOURCES OF HOMOEOPATHIC DRUGS", [
["Source", "Examples", "Notes"],
["Vegetable", "Aconite, Belladonna, Nux Vom, Pulsatilla, Chamomilla", "Largest source group"],
["Animal", "Apis Mel (honeybee), Lachesis (snake venom), Sepia (cuttlefish)", "Potentised whole animal or secretion"],
["Mineral", "Sulphur, Calc Carb, Arsenicum, Natrum Mur, Phosphorus","Elements & compounds"],
["Nosode", "Psorinum (scabies), Medorrhinum (gonorrhoea), Tuberculinum","Made from disease products"],
["Sarcode", "Thyroidinum, Insulinum, Fel Tauri (ox bile)", "Made from healthy tissue/secretions"],
["Imponderabilia","X-ray, Sol (sunlight), Electricitas", "Physical forces potentised"],
], [3*cm, 8.5*cm, 7.5*cm]),
("SCALES OF POTENCY", [
["Scale", "Dilution Ratio", "Symbol", "Common Potencies"],
["Decimal (X or D)", "1:10", "6X, 12X, 30X", "Low potency, frequent dose"],
["Centesimal (C or CH)", "1:100", "6C, 30C, 200C, 1M","Most widely used scale"],
["LM / Q Potency", "1:50,000", "LM1, LM2, LM3...", "Gentlest; daily repetition possible"],
["Millesimal (M/CM/MM)", "Higher", "1M, 10M, 50M, CM", "High potency, rare repetition"],
], [4.5*cm, 3.5*cm, 4.5*cm, 6.5*cm]),
("PREPARATION METHODS", [
"Mother Tincture (O): Fresh plant material + purified alcohol - base for all potencies",
"Trituration: Insoluble substances (eg Calc Carb, Sulphur) ground with lactose up to 3C, then dissolve",
"Potentisation = Dilution + Succussion (liquid) OR Dilution + Trituration (solid)",
"Succussion: Vigorous shaking against a firm elastic surface - releases latent medicinal energy",
"Hahnemannian method: New vial at each potency step (most accurate)",
"Korsakovian method: Same vial emptied & refilled - rapid, used for high potencies",
], None),
("VEHICLES / DISPENSING FORMS", [
["Form", "Vehicle", "Use / Notes"],
["Globules/Pills", "Sucrose/Lactose", "Sizes: 10, 20, 40 (smaller = more surface area for drug)"],
["Liquid drops", "Alcohol + water", "Dissolved potency; direct or diluted in distilled water"],
["Trituration tabs","Lactose", "For low potencies (1X, 2X, 3X)"],
["Ointment", "Vaseline/lanolin", "External use only; Calendula, Hypericum ointments"],
], [3.5*cm, 4*cm, 11.5*cm]),
("STORAGE & ANTIDOTES", [
"Store in: Amber/dark glass bottles | Away from heat, light, moisture, strong odours",
"Camphor antidotes MOST homoeopathic remedies - patient must avoid camphor, menthol, eucalyptus",
"Avoid: Coffee, tobacco, mint, strong perfumes during treatment (may antidote remedy)",
"Shelf life: Potentised medicines have indefinite shelf life if stored correctly",
], None),
("EXAM TIPS - PHARMACY", [
"* Dilution ratios MUST be memorised: X=1:10, C=1:100, LM=1:50000 - direct MCQ",
"* Nosode vs Sarcode distinction - very commonly tested short question",
"* Hahnemannian vs Korsakovian - know the difference clearly",
"* Drug sources: Be able to classify ANY given remedy into its source category",
], None),
]
}
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# BUILD PDF PER SUBJECT
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def build_subject_pdf(key, data):
filepath = os.path.join(OUTPUT_DIR, f"{key}_study_sheet.pdf")
pal = data["pal"]
s = build_styles(pal)
doc = SimpleDocTemplate(
filepath, pagesize=A4,
leftMargin=1*cm, rightMargin=1*cm,
topMargin=0.8*cm, bottomMargin=0.8*cm
)
story = []
story.append(header_table(data["title"], data["subtitle"], pal))
story.append(Spacer(1, 0.2*cm))
story.append(timetable_box(pal))
story.append(Spacer(1, 0.18*cm))
for (heading, rows, col_widths) in data["sections"]:
story.append(section_box(heading, rows, pal, col_widths))
story.append(Spacer(1, 0.15*cm))
footer_data = [[Paragraph(
"Assessment: Jul 27-31, 2026 | Study Slots: 5:30 AM | 7:15 AM | 6:00 PM | 7:30 PM | Total: 5.5 hrs/day | BHMS Year 1",
s["footer"]
)]]
ft = Table(footer_data, colWidths=[19*cm])
ft.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#F0F0F0")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LINEABOVE", (0,0), (-1,0), 0.5, colors.HexColor("#AAAAAA")),
]))
story.append(ft)
doc.build(story)
return filepath
files = []
order = ["anatomy", "physiology", "materia", "organon", "pharmacy"]
for key in order:
fp = build_subject_pdf(key, SUBJECTS[key])
files.append(fp)
print(f"Generated: {fp}")
# Merge all into one PDF
writer = PdfWriter()
for fp in files:
reader = PdfReader(fp)
for page in reader.pages:
writer.add_page(page)
combined = os.path.join(OUTPUT_DIR, "BHMS_All_5_Study_Sheets.pdf")
with open(combined, "wb") as f:
writer.write(f)
print(f"\nCombined PDF ready: {combined}")
python /tmp/workspace/study-sheets/generate_sheets.py