Analysis and evaluation of symptoms as per Kent.
Kent analysis evaluation symptoms homeopathy repertory hierarchy
https://www.homeobook.com/analysis-evaluation-of-symptoms-in…
https://www.similia.io/blog/kent-repertory-guide-structure-o…
| Grade | Type |
|---|---|
| 1st Grade (Highest) | Symptoms of the Will - love, hate, desires, aversions, passions |
| 2nd Grade | Emotions - fear, grief, jealousy, anxiety |
| 3rd Grade | Intellect/Understanding - confusion, delusions, concentration |
| 4th Grade (Lowest) | Memory - forgetfulness |
| Grade | Type |
|---|---|
| 1st Grade | Sexual sphere, menstrual generals (most intimate physical functions) |
| 2nd Grade | Appetite, thirst, desires, aversions (food, drinks) |
| 3rd Grade | Symptoms affecting the entire physical body - weather, temperature, climate, bathing, time aggravations/ameliorations |
GENERALS
└── Mental Generals
├── Will (1st) → highest priority
├── Emotions (2nd)
├── Intellect (3rd)
└── Memory (4th)
└── Physical Generals
├── Sexual/Menstrual (1st)
├── Appetite/Desires/Aversions (2nd)
└── Body-wide modalities: weather, climate, etc. (3rd)
COMMONS (disease-level, low priority unless peculiar)
PARTICULARS (organ/part-level, used for final differentiation)
| Notation | Grade | Meaning |
|---|---|---|
| CAPITALS / Bold | Grade 3 | Most strongly confirmed - extensive clinical + proving evidence |
| Italics | Grade 2 | Good confirmation, less extensive |
| Roman/Plain | Grade 1 | Noted association, least certain |
| Feature | Kentian | Boenninghausen | Hahnemannian (Aph. 153) |
|---|---|---|---|
| Priority | Mental generals (Will first) | Group of symptoms | Characteristic/peculiar symptoms |
| Symptom vs. Remedy grading | Both graded | Only remedies graded | Not formalized |
| Modalities | High importance | Highest importance (transferable) | Important |
| Particulars | Used last | Separated and recombined | Used as characteristic if peculiar |
Create a comprehensive reference PDF on Kent's symptom evaluation scheme
mkdir -p /tmp/workspace/kent-pdf && ls /tmp/workspace/kent-pdf/
~/kent-pdf/generate_kent_pdf.py
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm, mm
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.pdfgen import canvas as rl_canvas
OUTPUT = "/tmp/workspace/kent-pdf/Kent_Symptom_Evaluation_Reference.pdf"
# ──────────────────────────────────────────────
# COLOUR PALETTE
# ──────────────────────────────────────────────
DARK_GREEN = colors.HexColor("#1B5E20")
MED_GREEN = colors.HexColor("#2E7D32")
LIGHT_GREEN = colors.HexColor("#C8E6C9")
ACCENT_GREEN = colors.HexColor("#4CAF50")
PALE_GREEN = colors.HexColor("#E8F5E9")
GOLD = colors.HexColor("#F9A825")
DARK_GOLD = colors.HexColor("#E65100")
WHITE = colors.white
NEAR_BLACK = colors.HexColor("#1A1A1A")
LIGHT_GREY = colors.HexColor("#F5F5F5")
MID_GREY = colors.HexColor("#BDBDBD")
DARK_GREY = colors.HexColor("#424242")
PAGE_W, PAGE_H = A4
MARGIN = 2 * cm
# ──────────────────────────────────────────────
# HEADER / FOOTER CANVAS
# ──────────────────────────────────────────────
class KentDocTemplate(BaseDocTemplate):
def __init__(self, filename, **kwargs):
super().__init__(filename, **kwargs)
frame = Frame(
MARGIN, MARGIN + 1.2*cm,
PAGE_W - 2*MARGIN, PAGE_H - 2*MARGIN - 2.2*cm,
id="main"
)
template = PageTemplate(id="main", frames=[frame], onPage=self._draw_page)
self.addPageTemplates([template])
def _draw_page(self, canv, doc):
canv.saveState()
# Top header bar
canv.setFillColor(DARK_GREEN)
canv.rect(0, PAGE_H - 1.4*cm, PAGE_W, 1.4*cm, fill=1, stroke=0)
canv.setFont("Helvetica-Bold", 9)
canv.setFillColor(WHITE)
canv.drawString(MARGIN, PAGE_H - 0.9*cm,
"KENT'S ANALYSIS & EVALUATION OF SYMPTOMS | Homeopathic Reference")
canv.drawRightString(PAGE_W - MARGIN, PAGE_H - 0.9*cm, "Classical Homeopathy")
# Bottom footer bar
canv.setFillColor(DARK_GREEN)
canv.rect(0, 0, PAGE_W, 1.0*cm, fill=1, stroke=0)
canv.setFont("Helvetica", 7.5)
canv.setFillColor(WHITE)
canv.drawString(MARGIN, 0.35*cm, "J.T. Kent (1849–1916) | Repertory of the Homeopathic Materia Medica")
canv.drawRightString(PAGE_W - MARGIN, 0.35*cm, f"Page {doc.page}")
canv.restoreState()
# ──────────────────────────────────────────────
# STYLES
# ──────────────────────────────────────────────
def make_styles():
base = getSampleStyleSheet()
styles = {}
styles["cover_title"] = ParagraphStyle(
"cover_title", fontSize=28, leading=34,
textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER
)
styles["cover_sub"] = ParagraphStyle(
"cover_sub", fontSize=13, leading=18,
textColor=LIGHT_GREEN, fontName="Helvetica", alignment=TA_CENTER
)
styles["cover_author"] = ParagraphStyle(
"cover_author", fontSize=11, leading=16,
textColor=GOLD, fontName="Helvetica-Bold", alignment=TA_CENTER
)
styles["section_header"] = ParagraphStyle(
"section_header", fontSize=15, leading=20,
textColor=WHITE, fontName="Helvetica-Bold",
spaceAfter=6, spaceBefore=10
)
styles["subsection"] = ParagraphStyle(
"subsection", fontSize=12, leading=16,
textColor=DARK_GREEN, fontName="Helvetica-Bold",
spaceAfter=4, spaceBefore=8,
borderPad=4
)
styles["body"] = ParagraphStyle(
"body", fontSize=10, leading=15,
textColor=NEAR_BLACK, fontName="Helvetica",
spaceAfter=5, spaceBefore=2, alignment=TA_JUSTIFY
)
styles["body_bold"] = ParagraphStyle(
"body_bold", fontSize=10, leading=15,
textColor=NEAR_BLACK, fontName="Helvetica-Bold",
spaceAfter=3, spaceBefore=2
)
styles["quote"] = ParagraphStyle(
"quote", fontSize=10.5, leading=16,
textColor=DARK_GREEN, fontName="Helvetica-Oblique",
leftIndent=20, rightIndent=20,
spaceAfter=8, spaceBefore=6, alignment=TA_JUSTIFY
)
styles["bullet"] = ParagraphStyle(
"bullet", fontSize=10, leading=15,
textColor=NEAR_BLACK, fontName="Helvetica",
leftIndent=16, bulletIndent=4,
spaceAfter=3, spaceBefore=1
)
styles["note"] = ParagraphStyle(
"note", fontSize=9, leading=13,
textColor=DARK_GREY, fontName="Helvetica-Oblique",
leftIndent=10, spaceAfter=4
)
styles["table_header"] = ParagraphStyle(
"table_header", fontSize=9.5, leading=13,
textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER
)
styles["table_cell"] = ParagraphStyle(
"table_cell", fontSize=9, leading=13,
textColor=NEAR_BLACK, fontName="Helvetica", alignment=TA_LEFT
)
styles["table_cell_bold"] = ParagraphStyle(
"table_cell_bold", fontSize=9, leading=13,
textColor=NEAR_BLACK, fontName="Helvetica-Bold", alignment=TA_LEFT
)
styles["toc_item"] = ParagraphStyle(
"toc_item", fontSize=10.5, leading=16,
textColor=DARK_GREEN, fontName="Helvetica",
leftIndent=10
)
styles["page_title"] = ParagraphStyle(
"page_title", fontSize=18, leading=24,
textColor=DARK_GREEN, fontName="Helvetica-Bold",
spaceAfter=6, spaceBefore=4, alignment=TA_LEFT
)
styles["footer_note"] = ParagraphStyle(
"footer_note", fontSize=8.5, leading=12,
textColor=DARK_GREY, fontName="Helvetica-Oblique",
alignment=TA_CENTER
)
return styles
# ──────────────────────────────────────────────
# HELPER BUILDERS
# ──────────────────────────────────────────────
def section_bar(title, styles):
"""Dark green bar with white section title."""
tbl = Table([[Paragraph(title, styles["section_header"])]],
colWidths=[PAGE_W - 2*MARGIN])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_GREEN),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
return tbl
def info_box(text, styles, bg=PALE_GREEN, border=ACCENT_GREEN):
tbl = Table([[Paragraph(text, styles["body"])]],
colWidths=[PAGE_W - 2*MARGIN])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LINEAFTER", (0,0), (0,-1), 3, border),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
return tbl
def quote_box(text, styles):
tbl = Table([[Paragraph(f'"{text}"', styles["quote"])]],
colWidths=[PAGE_W - 2*MARGIN])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#F1F8E9")),
("LINEBEFORE", (0,0), (0,-1), 4, MED_GREEN),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 16),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
return tbl
def styled_table(data, col_widths, styles, header_rows=1):
"""Generic styled table with green header."""
tbl = Table(data, colWidths=col_widths, repeatRows=header_rows)
ts = [
("BACKGROUND", (0,0), (-1, header_rows-1), DARK_GREEN),
("TEXTCOLOR", (0,0), (-1, header_rows-1), WHITE),
("FONTNAME", (0,0), (-1, header_rows-1), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9),
("ALIGN", (0,0), (-1,-1), "LEFT"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 7),
("RIGHTPADDING", (0,0), (-1,-1), 7),
("GRID", (0,0), (-1,-1), 0.4, MID_GREY),
("ROWBACKGROUNDS",(0, header_rows), (-1,-1), [WHITE, LIGHT_GREY]),
]
tbl.setStyle(TableStyle(ts))
return tbl
# ──────────────────────────────────────────────
# COVER PAGE
# ──────────────────────────────────────────────
def build_cover(canv, doc):
"""Full-page decorative cover - called via onFirstPage."""
canv.saveState()
w, h = A4
# Deep green background
canv.setFillColor(DARK_GREEN)
canv.rect(0, 0, w, h, fill=1, stroke=0)
# Gold accent strip top
canv.setFillColor(GOLD)
canv.rect(0, h - 0.6*cm, w, 0.6*cm, fill=1, stroke=0)
canv.setFillColor(DARK_GOLD)
canv.rect(0, h - 1.0*cm, w, 0.4*cm, fill=1, stroke=0)
# Gold accent strip bottom
canv.setFillColor(GOLD)
canv.rect(0, 0, w, 0.6*cm, fill=1, stroke=0)
canv.setFillColor(DARK_GOLD)
canv.rect(0, 0.6*cm, w, 0.4*cm, fill=1, stroke=0)
# Decorative circle
canv.setFillColor(MED_GREEN)
canv.circle(w/2, h*0.62, 5.5*cm, fill=1, stroke=0)
canv.setFillColor(DARK_GREEN)
canv.circle(w/2, h*0.62, 4.8*cm, fill=1, stroke=0)
canv.setFillColor(ACCENT_GREEN)
canv.circle(w/2, h*0.62, 4.0*cm, fill=1, stroke=0)
canv.setFillColor(DARK_GREEN)
canv.circle(w/2, h*0.62, 3.4*cm, fill=1, stroke=0)
# Monogram / symbol in circle
canv.setFont("Helvetica-Bold", 52)
canv.setFillColor(LIGHT_GREEN)
canv.drawCentredString(w/2, h*0.62 - 0.7*cm, "JTK")
# Title
canv.setFont("Helvetica-Bold", 30)
canv.setFillColor(WHITE)
canv.drawCentredString(w/2, h*0.42, "Analysis & Evaluation")
canv.setFont("Helvetica-Bold", 26)
canv.drawCentredString(w/2, h*0.36, "of Symptoms")
# Subtitle
canv.setFont("Helvetica", 14)
canv.setFillColor(LIGHT_GREEN)
canv.drawCentredString(w/2, h*0.30, "as per Kent's Classical Homeopathy")
# Thin rule
canv.setStrokeColor(GOLD)
canv.setLineWidth(1.5)
canv.line(MARGIN*2, h*0.27, w - MARGIN*2, h*0.27)
# Author info
canv.setFont("Helvetica-Bold", 12)
canv.setFillColor(GOLD)
canv.drawCentredString(w/2, h*0.23, "James Tyler Kent (1849 – 1916)")
canv.setFont("Helvetica", 10)
canv.setFillColor(LIGHT_GREEN)
canv.drawCentredString(w/2, h*0.20, "Repertory of the Homeopathic Materia Medica")
# Tagline
canv.setFont("Helvetica-Oblique", 9.5)
canv.setFillColor(MID_GREY)
canv.drawCentredString(w/2, h*0.10,
"A Comprehensive Reference for Homeopathic Students & Practitioners")
# Date
canv.setFont("Helvetica", 9)
canv.setFillColor(MID_GREY)
canv.drawCentredString(w/2, h*0.07, "July 2026")
canv.restoreState()
# ──────────────────────────────────────────────
# BUILD DOCUMENT ELEMENTS
# ──────────────────────────────────────────────
def build_elements(styles):
E = []
SP = Spacer(1, 0.3*cm)
SP_LG = Spacer(1, 0.6*cm)
# ── COVER placeholder (cover drawn by onFirstPage) ──
# We add a blank page for the cover
E.append(Spacer(1, PAGE_H)) # will be the cover page frame
E.append(PageBreak())
# ══════════════════════════════════════════════
# PAGE 2 — TABLE OF CONTENTS
# ══════════════════════════════════════════════
E.append(Paragraph("Table of Contents", styles["page_title"]))
E.append(HRFlowable(width="100%", thickness=2, color=DARK_GREEN))
E.append(SP)
toc_data = [
("1.", "Introduction to Kent's Symptom Evaluation", "3"),
("2.", "Classification of Symptoms", "4"),
("3.", "Mental Generals – Detailed Hierarchy", "5"),
("4.", "Physical Generals – Detailed Hierarchy", "6"),
("5.", "Common Symptoms", "7"),
("6.", "Particular Symptoms", "7"),
("7.", "Kent's Key Principles of Evaluation", "8"),
("8.", "Grading of Remedies in Kent's Repertory", "9"),
("9.", "Structure of Kent's Repertory (37 Chapters)", "10"),
("10.", "Comparison: Kent vs Boenninghausen vs Hahnemann", "11"),
("11.", "Step-by-Step Kentian Case Analysis", "12"),
("12.", "Important Rules & Maxims", "13"),
("13.", "Quick Reference Summary Chart", "14"),
]
for num, topic, pg in toc_data:
row = f'<b>{num}</b> {topic}<font color="#BDBDBD">{"." * (55 - len(topic))}</font><b>{pg}</b>'
E.append(Paragraph(row, styles["toc_item"]))
E.append(Spacer(1, 0.15*cm))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 1 — INTRODUCTION
# ══════════════════════════════════════════════
E.append(section_bar("1. Introduction to Kent's Symptom Evaluation", styles))
E.append(SP)
E.append(Paragraph("Background", styles["subsection"]))
E.append(Paragraph(
"James Tyler Kent (1849–1916) was the foremost systematizer of classical homeopathic case "
"analysis. Building on Hahnemann's Organon (particularly Aphorism 153), Kent introduced a "
"structured, hierarchical method for analyzing and evaluating symptoms – moving from the "
"deepest (innermost) aspects of the patient toward the most superficial – in order to "
"identify the <i>similimum</i> (the most similar remedy).",
styles["body"]
))
E.append(SP)
E.append(quote_box(
"The physician's high and only mission is to restore the sick to health, to cure, as it is "
"termed. — Hahnemann, Organon §1, as applied by Kent to symptom hierarchy.",
styles
))
E.append(SP)
E.append(Paragraph("Philosophical Foundation", styles["subsection"]))
E.append(Paragraph(
"Kent's approach is rooted in Emanuel Swedenborg's philosophy of influx and degrees of "
"existence. The 'will' (the affective/emotional plane) represents the innermost and highest "
"level of the human being. The 'understanding' (intellect) is secondary. The physical body "
"is the outermost. This philosophical hierarchy directly dictates the order of symptom "
"importance in Kent's scheme: mental-emotional symptoms > physical generals > particulars.",
styles["body"]
))
E.append(SP)
E.append(info_box(
"<b>Core Principle:</b> Evaluation of symptoms means grading or ranking different kinds of "
"symptoms in order of priority, to match the characteristic totality of the natural disease "
"condition with the drug disease in the Materia Medica.",
styles
))
E.append(SP)
E.append(Paragraph("Why Proper Evaluation Matters", styles["subsection"]))
E.append(Paragraph(
"Proper evaluation of symptoms is the most important step after case-taking in homeopathy. "
"Without correct evaluation, even a thoroughly taken case will lead to an incorrect remedy "
"selection. Kent emphasized that the value of each symptom must be assessed on several "
"criteria before repertorization.", styles["body"]
))
E.append(Paragraph("Criteria for assessing symptom value include:", styles["body_bold"]))
bullets = [
"Intensity and depth of penetration into the organism",
"Peculiarity and rarity (uncommon > common symptoms)",
"Whether the symptom belongs to the whole person (general) or a part (particular)",
"Presence and nature of modalities (aggravation/amelioration factors)",
"Causal relationship to the disease (etiology)",
"Spontaneity – symptoms volunteered by the patient are more reliable",
]
for b in bullets:
E.append(Paragraph(f"• {b}", styles["bullet"]))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 2 — CLASSIFICATION
# ══════════════════════════════════════════════
E.append(section_bar("2. Classification of Symptoms (Kent's Scheme)", styles))
E.append(SP)
E.append(Paragraph(
"Kent divided all symptoms into three main categories arranged in a strict hierarchy of "
"importance. This classification forms the backbone of Kentian repertorization.",
styles["body"]
))
E.append(SP)
class_data = [
[Paragraph("Category", styles["table_header"]),
Paragraph("Definition", styles["table_header"]),
Paragraph("Priority", styles["table_header"]),
Paragraph("Example", styles["table_header"])],
[Paragraph("1. GENERALS\n(Mental & Physical)", styles["table_cell_bold"]),
Paragraph("Symptoms that belong to the whole person – the patient says 'I feel', 'I want', 'I am'", styles["table_cell"]),
Paragraph("HIGHEST", styles["table_cell_bold"]),
Paragraph("'I am worse in cold air'; 'I crave salt'; 'I fear being alone'", styles["table_cell"])],
[Paragraph("2. COMMONS", styles["table_cell_bold"]),
Paragraph("Symptoms common to a disease or shared by many patients with same condition", styles["table_cell"]),
Paragraph("LOW (unless peculiar)", styles["table_cell"]),
Paragraph("Fever in malaria; diarrhoea in cholera; cough in bronchitis", styles["table_cell"])],
[Paragraph("3. PARTICULARS", styles["table_cell_bold"]),
Paragraph("Symptoms relating to a specific part, organ, or system of the body", styles["table_cell"]),
Paragraph("LOWEST (used for final differentiation)", styles["table_cell"]),
Paragraph("'Headache in right temporal region'; 'burning in left knee on walking'", styles["table_cell"])],
]
E.append(styled_table(class_data, [4*cm, 6.5*cm, 3*cm, 4.5*cm], styles))
E.append(SP)
E.append(info_box(
"<b>Important:</b> Common symptoms become important only when they carry peculiar, "
"rare, or unusual modalities. Particular symptoms gain higher rank when they are "
"modified by mental or physical generals (e.g., 'stomach pain after anger').",
styles
))
E.append(SP)
# Visual hierarchy pyramid (using nested table)
E.append(Paragraph("Hierarchy Pyramid (Most → Least Important)", styles["subsection"]))
pyramid_data = [
[Paragraph("WILL / AFFECTIONS (1st Grade Mental General)", styles["table_cell_bold"])],
[Paragraph("EMOTIONS (2nd Grade Mental General)", styles["table_cell"])],
[Paragraph("INTELLECT / UNDERSTANDING (3rd Grade Mental General)", styles["table_cell"])],
[Paragraph("MEMORY (4th Grade Mental General)", styles["table_cell"])],
[Paragraph("SEXUAL / MENSTRUAL GENERALS (1st Grade Physical General)", styles["table_cell"])],
[Paragraph("APPETITE, DESIRES, AVERSIONS (2nd Grade Physical General)", styles["table_cell"])],
[Paragraph("WEATHER, CLIMATE, THERMAL MODALITIES (3rd Grade Physical General)", styles["table_cell"])],
[Paragraph("PARTICULARS WITH GENERALS AS MODIFIERS", styles["table_cell"])],
[Paragraph("COMMON PARTICULARS (lowest rank)", styles["table_cell"])],
]
bg_colors = [
DARK_GREEN, MED_GREEN, ACCENT_GREEN, colors.HexColor("#66BB6A"),
colors.HexColor("#FFA726"), colors.HexColor("#FFB74D"), colors.HexColor("#FFCC80"),
LIGHT_GREY, MID_GREY
]
text_colors = [WHITE, WHITE, WHITE, WHITE, NEAR_BLACK, NEAR_BLACK, NEAR_BLACK, NEAR_BLACK, NEAR_BLACK]
pyr_tbl = Table(pyramid_data, colWidths=[PAGE_W - 2*MARGIN])
ts = [("VALIGN",(0,0),(-1,-1),"MIDDLE"),
("TOPPADDING",(0,0),(-1,-1),6),
("BOTTOMPADDING",(0,0),(-1,-1),6),
("LEFTPADDING",(0,0),(-1,-1),12),
("GRID",(0,0),(-1,-1),0.3, MID_GREY),
]
for i, (bg, tc) in enumerate(zip(bg_colors, text_colors)):
ts.append(("BACKGROUND", (0,i), (-1,i), bg))
ts.append(("TEXTCOLOR", (0,i), (-1,i), tc))
pyr_tbl.setStyle(TableStyle(ts))
E.append(pyr_tbl)
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 3 — MENTAL GENERALS
# ══════════════════════════════════════════════
E.append(section_bar("3. Mental Generals – Detailed Hierarchy", styles))
E.append(SP)
E.append(quote_box(
"All symptoms of will and affections including desires and aversions are the most important "
"as they relate to the innermost of the man. Of less value are those relating to the "
"intellect, while those of memory are to be ranked lowest. — J.T. Kent",
styles
))
E.append(SP)
mental_data = [
[Paragraph("Grade", styles["table_header"]),
Paragraph("Level", styles["table_header"]),
Paragraph("Type of Symptom", styles["table_header"]),
Paragraph("Clinical Examples", styles["table_header"]),
Paragraph("Repertory Chapter", styles["table_header"])],
[Paragraph("1st\n(HIGHEST)", styles["table_cell_bold"]),
Paragraph("WILL", styles["table_cell_bold"]),
Paragraph("Desires, aversions, loves, hates, passions, impulses, instincts", styles["table_cell"]),
Paragraph("Craving for salt; aversion to company; impulse to kill; religious mania", styles["table_cell"]),
Paragraph("Mind chapter\n(top rubrics)", styles["table_cell"])],
[Paragraph("2nd", styles["table_cell_bold"]),
Paragraph("EMOTIONS", styles["table_cell_bold"]),
Paragraph("Feelings – fear, grief, anxiety, jealousy, anger, sadness, excitability", styles["table_cell"]),
Paragraph("Fear of dark; grief from disappointed love; jealousy; weeping easily", styles["table_cell"]),
Paragraph("Mind chapter", styles["table_cell"])],
[Paragraph("3rd", styles["table_cell_bold"]),
Paragraph("INTELLECT / UNDERSTANDING", styles["table_cell_bold"]),
Paragraph("Reasoning, comprehension, delusions, illusions, perception disorders", styles["table_cell"]),
Paragraph("Delusion – he is being watched; confusion of identity; mental slowness", styles["table_cell"]),
Paragraph("Mind chapter", styles["table_cell"])],
[Paragraph("4th\n(LOWEST)", styles["table_cell_bold"]),
Paragraph("MEMORY", styles["table_cell_bold"]),
Paragraph("Forgetfulness, difficulty recalling words, names, recent events", styles["table_cell"]),
Paragraph("Forgets names; loses train of thought; cannot remember what just read", styles["table_cell"]),
Paragraph("Mind chapter", styles["table_cell"])],
]
E.append(styled_table(mental_data, [2*cm, 2.5*cm, 5*cm, 4.5*cm, 3*cm], styles))
E.append(SP)
E.append(Paragraph("Key Notes on Mental Generals", styles["subsection"]))
notes = [
"<b>Spontaneous mental symptoms</b> (those offered by the patient unprompted) are of greater value than those obtained by questioning.",
"<b>Intensity and exclusivity</b> matter – a patient intensely and exclusively preoccupied with a particular fear or desire ranks that symptom higher.",
"<b>Fixed vs. variable</b> – A fixed, persistent mental symptom is more characteristic than a transient one.",
"<b>Low-grade mental symptoms</b> (e.g., simple forgetfulness) may be outweighed by a very characteristic physical general symptom.",
"Mental symptoms that are <b>causally linked</b> to physical ailments (e.g., 'headache from emotional excitement') are particularly valuable.",
"In Kent's Repertory, the <b>Mind chapter</b> comes first (Chapter 1), reflecting the highest priority given to mental symptoms.",
]
for n in notes:
E.append(Paragraph(f"• {n}", styles["bullet"]))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 4 — PHYSICAL GENERALS
# ══════════════════════════════════════════════
E.append(section_bar("4. Physical Generals – Detailed Hierarchy", styles))
E.append(SP)
E.append(Paragraph(
"Physical generals are symptoms that the entire physical organism expresses. "
"The patient uses 'I' language: 'I am worse in cold', 'I crave sweets', 'I sleep on my abdomen'. "
"They are ranked below mental generals but above particulars.",
styles["body"]
))
E.append(SP)
phys_data = [
[Paragraph("Grade", styles["table_header"]),
Paragraph("Category", styles["table_header"]),
Paragraph("Symptom Types", styles["table_header"]),
Paragraph("Examples", styles["table_header"])],
[Paragraph("1st\n(HIGHEST)", styles["table_cell_bold"]),
Paragraph("Sexual &\nMenstrual Generals", styles["table_cell_bold"]),
Paragraph("Sexual drive, libido, general character of menses (not local symptoms)", styles["table_cell"]),
Paragraph("Increased sexual desire; menses that exhaust the whole person; absence of desire", styles["table_cell"])],
[Paragraph("2nd", styles["table_cell_bold"]),
Paragraph("Appetite, Desires\n& Aversions", styles["table_cell_bold"]),
Paragraph("General food/drink desires, aversions, thirst (pathological states)", styles["table_cell"]),
Paragraph("Craving salt, fat, sweets; aversion to meat; extreme thirst; thirstlessness in fever", styles["table_cell"])],
[Paragraph("3rd\n(LOWEST)", styles["table_cell_bold"]),
Paragraph("Whole-body\nModalities", styles["table_cell_bold"]),
Paragraph("Factors affecting the ENTIRE body – thermal state, weather, climate, bathing, time, position, motion", styles["table_cell"]),
Paragraph("Worse cold/damp weather; better warm applications; aggravation 10 AM; worse washing; chilly patient; hot patient", styles["table_cell"])],
]
E.append(styled_table(phys_data, [2*cm, 3.5*cm, 5*cm, 6*cm], styles))
E.append(SP)
E.append(Paragraph("Important Subcategories of Physical Generals", styles["subsection"]))
phys_sub = [
("Thermal State", "Whether the patient is a chilly or hot patient overall – one of the most important eliminating generals (e.g., Pulsatilla = hot; Arsenicum = chilly)"),
("Sleep Position & Character", "Sleeping on abdomen, must sleep on back, sleeplessness from specific cause – general sleep symptoms"),
("General Time Aggravation", "Aggravation at specific times of day affecting the whole person (e.g., 10–11 AM – Natrum mur, Stannum)"),
("Perspiration (general)", "Profuse general perspiration, offensive sweat, absence of sweat – as a general phenomenon"),
("Position & Motion", "General amelioration/aggravation from motion, rest, lying, standing"),
("Menstrual Character", "Menses affecting the whole person (weakness, exhaustion, emotional changes around menses)"),
("Reaction to Bathing", "General aggravation or amelioration from bathing (e.g., Sulphur aversion to bathing)"),
]
for cat, desc in phys_sub:
E.append(Paragraph(f"<b>• {cat}:</b> {desc}", styles["bullet"]))
E.append(SP)
E.append(info_box(
"<b>Eliminating Generals:</b> Certain strong physical generals (like thermal modality) can be used as "
"'eliminators' – remedies that do not fit this general are entirely excluded from consideration, "
"regardless of how well they match other symptoms.",
styles
))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 5 & 6 — COMMONS & PARTICULARS
# ══════════════════════════════════════════════
E.append(section_bar("5. Common Symptoms", styles))
E.append(SP)
E.append(Paragraph(
"Common symptoms are those that are <b>characteristic of the disease itself</b>, shared by most or "
"all patients with that pathological condition. They are generally of lower prescribing value "
"because they do not distinguish one patient from another.",
styles["body"]
))
E.append(SP)
E.append(Paragraph("When do Common Symptoms become Important?", styles["subsection"]))
common_upgrade = [
"When they have <b>peculiar, rare, or unusual modalities</b> not typically seen in the disease",
"When they are <b>exceptionally intense</b> or occur in unusual circumstances",
"When they help differentiate between a small group of closely related remedies",
"When they appear in combination with other characteristic symptoms forming a unique totality",
]
for c in common_upgrade:
E.append(Paragraph(f"• {c}", styles["bullet"]))
E.append(SP)
common_examples = [
[Paragraph("Disease", styles["table_header"]),
Paragraph("Common Symptom (Low Value)", styles["table_header"]),
Paragraph("Peculiar Modality (Higher Value)", styles["table_header"])],
[Paragraph("Fever", styles["table_cell"]),
Paragraph("High temperature, chills", styles["table_cell"]),
Paragraph("Fever with intense thirst for large quantities of cold water (Bryonia)", styles["table_cell"])],
[Paragraph("Diarrhoea", styles["table_cell"]),
Paragraph("Loose stools, cramping", styles["table_cell"]),
Paragraph("Painless, watery diarrhoea at 5 AM driving out of bed (Sulphur)", styles["table_cell"])],
[Paragraph("Headache", styles["table_cell"]),
Paragraph("Pain in head", styles["table_cell"]),
Paragraph("Headache better by cold applications in a hot patient (Phosphorus)", styles["table_cell"])],
]
E.append(styled_table(common_examples, [3.5*cm, 5.5*cm, 8*cm], styles))
E.append(SP_LG)
E.append(section_bar("6. Particular Symptoms", styles))
E.append(SP)
E.append(Paragraph(
"Particular symptoms belong to a specific part or organ. They are the most numerous type of "
"symptoms in any case, but also the least important in isolation. They are used <b>after generals "
"have already narrowed the field</b> to a small group of remedies, for final differentiation.",
styles["body"]
))
E.append(SP)
E.append(Paragraph("Elevation of Particular Symptoms", styles["subsection"]))
elev_data = [
[Paragraph("Situation", styles["table_header"]),
Paragraph("Effect on Value", styles["table_header"]),
Paragraph("Example", styles["table_header"])],
[Paragraph("Particular modified by Mental General", styles["table_cell_bold"]),
Paragraph("Significantly elevated – becomes near-general in value", styles["table_cell"]),
Paragraph("'Stomach pain after anger/vexation' > plain 'stomach pain'", styles["table_cell"])],
[Paragraph("Particular modified by Physical General", styles["table_cell_bold"]),
Paragraph("Elevated above common particular", styles["table_cell"]),
Paragraph("'Headache worse in cold air' (general thermal modality applied to particular)", styles["table_cell"])],
[Paragraph("Peculiar sensation in a particular", styles["table_cell_bold"]),
Paragraph("High value if sensation is strange/rare", styles["table_cell"]),
Paragraph("'As if a nail driven into the temple' (Coffea, Ignatia)", styles["table_cell"])],
[Paragraph("Plain, unmodified particular", styles["table_cell_bold"]),
Paragraph("Lowest value – used for final differentiation only", styles["table_cell"]),
Paragraph("'Itching of left knee' without further qualification", styles["table_cell"])],
]
E.append(styled_table(elev_data, [4.5*cm, 4.5*cm, 7*cm], styles))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 7 — KEY PRINCIPLES
# ══════════════════════════════════════════════
E.append(section_bar("7. Kent's Key Principles of Evaluation", styles))
E.append(SP)
principles = [
("Principle 1: Minimum Symptoms, Maximum Importance",
"Take the minimum number of symptoms of maximum importance. Avoid including every possible symptom – "
"select only the most characteristic, strange, rare, and peculiar symptoms for repertorization. "
"Using too many rubrics dilutes the result and may lead away from the correct remedy."),
("Principle 2: Mental Generals Override Physical Generals",
"A clear, characteristic mental general always outweighs a physical general symptom. The innermost "
"(will/affections) always takes precedence over the outermost (physical parts)."),
("Principle 3: Modalities Elevate Any Symptom",
"Any symptom – whether particular or common – is elevated in value when it carries a clear, "
"definite modality (aggravation or amelioration factor). Modalities are the practical language "
"of the Materia Medica and make symptoms prescribable."),
("Principle 4: Physical Generals Modified by Mentals – Highest Grade",
"When a physical general symptom is itself modified by a mental general, it achieves the highest "
"grade of physical symptoms. Example: 'Appetite wanting after vexation' – the physical general "
"(appetite) is causally linked to a mental (vexation), making it extremely valuable."),
("Principle 5: Causation / Etiology",
"The causative factor is of great importance. "
"• <b>Predisposing causes</b> (e.g., grief years ago triggered illness) → highest value in CHRONIC prescribing. "
"• <b>Precipitating causes</b> (e.g., getting wet triggered acute illness) → highest value in ACUTE prescribing. "
"Never-well-since (NWS) symptoms always take priority."),
("Principle 6: Totality, Not Symptom Summation",
"The goal is the characteristic totality – not the sum of all symptoms, but the unique pattern "
"that distinguishes this patient from all others with the same disease. Totality includes the "
"essence of the patient's mental state, physical constitution, and peculiar symptoms."),
("Principle 7: Generals Confirm, Particulars Differentiate",
"After repertorization, the generals confirm which remedy family is indicated. Particulars then "
"differentiate among closely related remedies. Never begin with particulars when generals are available."),
("Principle 8: Peculiar, Rare, Uncommon Symptoms Take Priority",
"Per Hahnemann's Aphorism 153 (as interpreted by Kent): the more striking, singular, uncommon, "
"and peculiar a symptom, the more important it is for remedy selection. Common, undefined symptoms "
"add little value."),
]
for title, body in principles:
box_data = [
[Paragraph(title, styles["body_bold"])],
[Paragraph(body, styles["body"])],
]
box = Table(box_data, colWidths=[PAGE_W - 2*MARGIN])
box.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), PALE_GREEN),
("BACKGROUND", (0,1), (-1,1), WHITE),
("LINEAFTER", (0,0), (0,-1), 3, DARK_GREEN),
("LINEBEFORE", (0,0), (0,-1), 3, DARK_GREEN),
("LINEABOVE", (0,0), (-1,0), 1, DARK_GREEN),
("LINEBELOW", (0,-1),(-1,-1),0.5, MID_GREY),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
]))
E.append(box)
E.append(Spacer(1, 0.25*cm))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 8 — GRADING OF REMEDIES
# ══════════════════════════════════════════════
E.append(section_bar("8. Grading of Remedies in Kent's Repertory", styles))
E.append(SP)
E.append(Paragraph(
"After case analysis and symptom evaluation, symptoms are matched against Kent's Repertory. "
"Kent used a three-tier grading system to indicate how strongly a remedy is associated with "
"a particular symptom or rubric. In Kent's method, <b>both symptoms and remedies are graded</b> "
"(unlike Boenninghausen, where only remedies are graded).",
styles["body"]
))
E.append(SP)
grade_data = [
[Paragraph("Grade", styles["table_header"]),
Paragraph("Notation in Repertory", styles["table_header"]),
Paragraph("Numerical Value", styles["table_header"]),
Paragraph("Meaning", styles["table_header"]),
Paragraph("Clinical Weight", styles["table_header"])],
[Paragraph("Grade 3\n(Highest)", styles["table_cell_bold"]),
Paragraph("CAPITALS / BOLD", styles["table_cell_bold"]),
Paragraph("3 marks", styles["table_cell"]),
Paragraph("Confirmed through extensive clinical experience AND provings; most reliable association", styles["table_cell"]),
Paragraph("Highest – strongly indicates this remedy covers the symptom deeply", styles["table_cell"])],
[Paragraph("Grade 2", styles["table_cell_bold"]),
Paragraph("Italics", styles["table_cell_bold"]),
Paragraph("2 marks", styles["table_cell"]),
Paragraph("Good support from provings and clinical use, but less extensive confirmation than Grade 3", styles["table_cell"]),
Paragraph("Moderate – reliable but requires confirmation with other rubrics", styles["table_cell"])],
[Paragraph("Grade 1\n(Lowest)", styles["table_cell_bold"]),
Paragraph("Plain / Roman", styles["table_cell_bold"]),
Paragraph("1 mark", styles["table_cell"]),
Paragraph("Noted association from provings or clinical observation with less certainty", styles["table_cell"]),
Paragraph("Lower per rubric – but a Grade 1 remedy appearing in many rubrics can be the correct remedy (totality principle)", styles["table_cell"])],
]
E.append(styled_table(grade_data, [2*cm, 3*cm, 2.5*cm, 5*cm, 4*cm], styles))
E.append(SP)
E.append(Paragraph("Scoring in Repertorization", styles["subsection"]))
E.append(Paragraph(
"When repertorizing, the scores from each rubric are added per remedy. Higher total scores "
"suggest closer alignment with the case. However, Kent cautioned against mechanical "
"totalization – a remedy scoring highly on generals is preferred over one scoring highly "
"only on particulars.", styles["body"]
))
E.append(SP)
E.append(info_box(
"<b>Critical Rule:</b> In Kent's repertory, a Grade 3 (CAPITALS) remedy in a mental general "
"rubric carries far more weight than Grade 3 in a particular symptom rubric. The grade of the "
"RUBRIC (its position in the symptom hierarchy) matters as much as the grade of the REMEDY "
"within that rubric.",
styles
))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 9 — 37 CHAPTERS
# ══════════════════════════════════════════════
E.append(section_bar("9. Structure of Kent's Repertory – 37 Chapters", styles))
E.append(SP)
E.append(Paragraph(
"Kent's Repertory of the Homeopathic Materia Medica is organized into 37 anatomical and "
"physiological chapters, arranged from the most important (Mind) to the most general "
"(Generalities). The order itself reflects the priority given to mental symptoms.",
styles["body"]
))
E.append(SP)
chapters = [
("1", "Mind", "Mental & emotional symptoms – Will, emotions, intellect, memory"),
("2", "Vertigo", "Dizziness, its character, modalities, concomitants"),
("3", "Head", "Headaches, scalp, congestion, eruptions of head"),
("4", "Eye", "Eye complaints, inflammation, discharges, vision disturbances"),
("5", "Vision", "Visual disturbances, objects appear colored, visual field defects"),
("6", "Ear", "Ear pain, discharge, tinnitus, hearing issues"),
("7", "Hearing", "Hearing-specific symptoms, acute/chronic hearing loss"),
("8", "Nose", "Nasal symptoms, coryza, discharge, smell, sneezing"),
("9", "Face", "Facial symptoms, expressions, pain, discolouration"),
("10", "Mouth", "Oral symptoms, taste, tongue, saliva, gums, lips"),
("11", "Teeth", "Dental pain, grinding, sensitivity, gum symptoms"),
("12", "Throat", "Sore throat, swallowing difficulty, constriction, tonsils"),
("13", "External Throat", "Cervical glands, thyroid region, external neck symptoms"),
("14", "Stomach", "Appetite, thirst, nausea, vomiting, eructations, heartburn"),
("15", "Abdomen", "Abdominal pain, bloating, rumbling, liver/spleen"),
("16", "Rectum", "Rectal symptoms, diarrhoea, constipation, haemorrhoids, fistula"),
("17", "Stool", "Characteristics of stool – color, consistency, odor, composition"),
("18", "Bladder", "Urinary urgency, retention, cystitis symptoms"),
("19", "Kidneys", "Kidney-specific complaints, calculi, pain"),
("20", "Prostate", "Prostate symptoms, enlargement, discharge"),
("21", "Urethra", "Urethral symptoms, discharge, stricture"),
("22", "Urine", "Characteristics of urine – color, sediment, albumin, sugar"),
("23", "Genitalia Male", "Male reproductive symptoms – erection, emission, testes"),
("24", "Genitalia Female", "Female reproductive – menses, leucorrhoea, ovaries, uterus"),
("25", "Larynx & Trachea", "Voice, hoarseness, croup, laryngeal symptoms"),
("26", "Respiration", "Breathing patterns, dyspnoea, asthma, type of respiration"),
("27", "Cough", "Types and modalities of cough"),
("28", "Expectoration", "Sputum characteristics – color, consistency, taste, odor"),
("29", "Chest", "Chest pain, palpitations, breast symptoms, lungs"),
("30", "Back", "Spinal pain, stiffness, lumbar, sacral, cervical symptoms"),
("31", "Extremities", "Limb symptoms, joint pain, numbness, trembling, cramps"),
("32", "Sleep", "Insomnia, sleep position, restlessness, somnambulism"),
("33", "Dreams", "Dream content, themes, nightmares, vivid dreams"),
("34", "Chill", "Chilliness, rigors, stage of chill in fever"),
("35", "Heat", "Fever heat, its stage and character"),
("36", "Perspiration", "Sweat – when, where, what triggers, character"),
("37", "Skin", "Skin eruptions, itching, discolouration, suppurations"),
("38*", "Generalities", "Whole-body symptoms not covered elsewhere – time modalities, thermal reactions, etc."),
]
ch_data = [[Paragraph("No.", styles["table_header"]),
Paragraph("Chapter", styles["table_header"]),
Paragraph("Content Summary", styles["table_header"])]]
for num, name, desc in chapters:
ch_data.append([
Paragraph(num, styles["table_cell"]),
Paragraph(f"<b>{name}</b>", styles["table_cell_bold"]),
Paragraph(desc, styles["table_cell"]),
])
E.append(styled_table(ch_data, [1.5*cm, 4*cm, 11.5*cm], styles))
E.append(Paragraph("* Some editions list Generalities as Chapter 38; others combine chapters differently.", styles["note"]))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 10 — COMPARISON
# ══════════════════════════════════════════════
E.append(section_bar("10. Comparison: Kent vs Boenninghausen vs Hahnemann", styles))
E.append(SP)
comp_data = [
[Paragraph("Feature", styles["table_header"]),
Paragraph("Kentian Method", styles["table_header"]),
Paragraph("Boenninghausen's Method", styles["table_header"]),
Paragraph("Hahnemannian (Aph. 153)", styles["table_header"])],
[Paragraph("Priority of Symptoms", styles["table_cell_bold"]),
Paragraph("Mental generals (Will first) → Physical generals → Particulars", styles["table_cell"]),
Paragraph("Groups of symptoms; modalities and concomitants most important", styles["table_cell"]),
Paragraph("Characteristic/peculiar/ singular/uncommon symptoms first", styles["table_cell"])],
[Paragraph("Symptom Grading", styles["table_cell_bold"]),
Paragraph("Both symptoms AND remedies are graded (3 grades)", styles["table_cell"]),
Paragraph("Only remedies are graded in Therapeutic Pocket Book", styles["table_cell"]),
Paragraph("Not formally quantified; qualitative ranking", styles["table_cell"])],
[Paragraph("Modalities", styles["table_cell_bold"]),
Paragraph("Important; elevate any symptom they modify", styles["table_cell"]),
Paragraph("Highest importance; can be 'transferred' to complete incomplete symptoms", styles["table_cell"]),
Paragraph("Important as part of peculiar/characteristic complex", styles["table_cell"])],
[Paragraph("Particulars", styles["table_cell_bold"]),
Paragraph("Used last for final differentiation after generals", styles["table_cell"]),
Paragraph("Separated from their organ; combined with modalities and sensations across the case", styles["table_cell"]),
Paragraph("Used as characteristic if peculiar or combined with rare modality", styles["table_cell"])],
[Paragraph("Role of Pathology", styles["table_cell_bold"]),
Paragraph("Pathological symptoms are common; used cautiously", styles["table_cell"]),
Paragraph("Diagnosis helps categorize symptoms", styles["table_cell"]),
Paragraph("Diagnosis not emphasized; totality transcends pathology", styles["table_cell"])],
[Paragraph("Ideal Use", styles["table_cell_bold"]),
Paragraph("Constitutionally strong patients with clear mental generals; chronic cases", styles["table_cell"]),
Paragraph("Cases with few clear mental symptoms; strong modalities; one-sided cases", styles["table_cell"]),
Paragraph("Cases with very striking, rare symptoms; acute and chronic both", styles["table_cell"])],
[Paragraph("Best For", styles["table_cell_bold"]),
Paragraph("Classical chronic constitutional prescribing", styles["table_cell"]),
Paragraph("Acute conditions; one-sided / pathological cases", styles["table_cell"]),
Paragraph("Rare disease expressions; essence-based prescribing", styles["table_cell"])],
]
E.append(styled_table(comp_data, [3.5*cm, 5.5*cm, 4.5*cm, 4*cm], styles))
E.append(SP)
E.append(info_box(
"<b>Note:</b> Dr. P. Sankaran classified symptoms into pathognomic and non-pathognomic, further "
"refining evaluation. Modern methods (Sensation Method, Miasmatic Prescribing) build upon "
"Kent's foundation while extending the evaluation framework.",
styles
))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 11 — STEP BY STEP
# ══════════════════════════════════════════════
E.append(section_bar("11. Step-by-Step Kentian Case Analysis", styles))
E.append(SP)
steps = [
("Step 1", "Thorough Case Taking",
"Record all symptoms in the patient's own words. Allow free narrative first, then systematic inquiry. "
"Note exact sensations, locations, modalities, concomitants, and time of onset. Identify causative factors."),
("Step 2", "Symptom Recording",
"List all symptoms. Separate them into: Mental generals, Physical generals, Common symptoms, "
"Particular symptoms. Note which were spontaneous vs. elicited."),
("Step 3", "Elimination of Common Symptoms",
"Strike out symptoms that are pathologically common and carry no peculiarity. These cannot lead "
"to the similimum. Retain only characteristic, strange, rare, and peculiar symptoms."),
("Step 4", "Evaluate Mental Generals",
"Apply Kent's mental hierarchy: Will (1st) → Emotions (2nd) → Intellect (3rd) → Memory (4th). "
"Identify the 2-3 most characteristic mental generals. These will be your top repertory rubrics."),
("Step 5", "Evaluate Physical Generals",
"Identify strong physical generals: thermal state, food desires/aversions, sleep, menstrual general, "
"time modality. Note which generals are modified by mental states (highest grade)."),
("Step 6", "Identify Characteristic Particulars",
"Select particulars that have peculiar sensations, unusual modalities, or are modified by generals. "
"Avoid plain, unqualified particulars at this stage."),
("Step 7", "Repertorization",
"Match symptoms to rubrics in Kent's Repertory. Begin with mental generals → physical generals → "
"characteristic particulars. Use eliminating generals to exclude remedies that fundamentally conflict."),
("Step 8", "Short-list Remedies",
"From repertorization, identify 3-5 remedies that cover the case best. Pay attention to grade "
"of coverage (especially Grade 3 in major rubrics) and breadth across key rubrics."),
("Step 9", "Materia Medica Study",
"Study each short-listed remedy in the Materia Medica (Kent's Lectures, Boericke, etc.). "
"The remedy that matches the totality AND the essence of the patient is the similimum."),
("Step 10", "Prescription & Follow-up",
"Prescribe the similimum in appropriate potency and dose. Evaluate response at follow-up using "
"the same symptom hierarchy. True improvement follows Kent's law: mental/general symptoms "
"improve first, followed by particulars."),
]
for step_title, title, body in steps:
row = [[
Paragraph(step_title, styles["table_cell_bold"]),
Paragraph(f"<b>{title}</b><br/>{body}", styles["table_cell"])
]]
tbl = Table(row, colWidths=[2.5*cm, PAGE_W - 2*MARGIN - 2.5*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), DARK_GREEN),
("BACKGROUND", (1,0), (1,-1), WHITE),
("TEXTCOLOR", (0,0), (0,-1), WHITE),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 8),
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("LINEBELOW", (0,0), (-1,-1), 0.5, MID_GREY),
]))
E.append(tbl)
E.append(Spacer(1, 0.1*cm))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 12 — RULES & MAXIMS
# ══════════════════════════════════════════════
E.append(section_bar("12. Important Rules & Maxims in Kent's Evaluation", styles))
E.append(SP)
maxims = [
("Rule 1", "Never begin repertorization with particular symptoms when generals are available. Generals confirm; particulars differentiate."),
("Rule 2", "A symptom that cannot be expressed in the language of the Materia Medica is useless for repertorization. Translate patient language into repertory rubrics precisely."),
("Rule 3", "Low-grade mental symptoms (e.g., poor memory) are of less value than a striking physical general symptom with a peculiar modality."),
("Rule 4", "All physical generals modified by mental generals are of higher value than physical generals alone. (e.g., 'appetite lacking after grief' > 'appetite lacking')."),
("Rule 5", "Particular symptoms modified by mental generals are of higher grade than particulars with only physical modifiers."),
("Rule 6", "Predisposing causes are of greatest value in CHRONIC prescribing; precipitating causes are of greatest value in ACUTE prescribing."),
("Rule 7", "Never-well-since (NWS) symptoms carry the highest etiological value and should always be repertorized."),
("Rule 8", "Strong generals can be used as eliminating symptoms – any remedy that fundamentally contradicts a strong general is excluded entirely from the short-list."),
("Rule 9", "The totality is not the sum of all symptoms. It is the characteristic pattern – the essence that makes this patient unique."),
("Rule 10", "After prescribing: mental and general symptoms should improve before local/particular symptoms (Hering's Law). If this is reversed, re-evaluate the prescription."),
("Rule 11", "A Grade 1 remedy appearing consistently across many rubrics may be correct despite lower per-rubric score. Context and totality always override mechanical counting."),
("Rule 12", "In Kent's own words: 'Take minimum symptoms of maximum importance.'"),
]
maxim_data = [[Paragraph("Rule", styles["table_header"]),
Paragraph("Maxim", styles["table_header"])]]
for rule, text in maxims:
maxim_data.append([
Paragraph(f"<b>{rule}</b>", styles["table_cell_bold"]),
Paragraph(text, styles["table_cell"])
])
E.append(styled_table(maxim_data, [2.5*cm, PAGE_W - 2*MARGIN - 2.5*cm], styles))
E.append(PageBreak())
# ══════════════════════════════════════════════
# SECTION 13 — QUICK REFERENCE SUMMARY
# ══════════════════════════════════════════════
E.append(section_bar("13. Quick Reference Summary Chart", styles))
E.append(SP)
summary_data = [
[Paragraph("Symptom Type", styles["table_header"]),
Paragraph("Grade", styles["table_header"]),
Paragraph("Kent's Priority", styles["table_header"]),
Paragraph("Use in Case", styles["table_header"]),
Paragraph("Eliminating Power", styles["table_header"])],
[Paragraph("Mental General: Will / Desires / Aversions", styles["table_cell_bold"]),
Paragraph("1st", styles["table_cell"]),
Paragraph("★★★★★", styles["table_cell_bold"]),
Paragraph("Primary selection – opens repertorization", styles["table_cell"]),
Paragraph("High", styles["table_cell"])],
[Paragraph("Mental General: Emotions", styles["table_cell_bold"]),
Paragraph("2nd", styles["table_cell"]),
Paragraph("★★★★☆", styles["table_cell_bold"]),
Paragraph("Primary selection – confirms mental picture", styles["table_cell"]),
Paragraph("Moderate-High", styles["table_cell"])],
[Paragraph("Mental General: Intellect / Understanding", styles["table_cell_bold"]),
Paragraph("3rd", styles["table_cell"]),
Paragraph("★★★☆☆", styles["table_cell_bold"]),
Paragraph("Supportive – helps confirm remedy group", styles["table_cell"]),
Paragraph("Moderate", styles["table_cell"])],
[Paragraph("Mental General: Memory", styles["table_cell_bold"]),
Paragraph("4th", styles["table_cell"]),
Paragraph("★★☆☆☆", styles["table_cell_bold"]),
Paragraph("Minor confirmation only", styles["table_cell"]),
Paragraph("Low", styles["table_cell"])],
[Paragraph("Physical General: Sexual / Menstrual", styles["table_cell_bold"]),
Paragraph("1st Physical", styles["table_cell"]),
Paragraph("★★★★☆", styles["table_cell_bold"]),
Paragraph("Key constitutional indicator", styles["table_cell"]),
Paragraph("Moderate-High", styles["table_cell"])],
[Paragraph("Physical General: Appetite / Desires / Aversions", styles["table_cell_bold"]),
Paragraph("2nd Physical", styles["table_cell"]),
Paragraph("★★★☆☆", styles["table_cell_bold"]),
Paragraph("Confirms constitution, strong peculiarity value", styles["table_cell"]),
Paragraph("Moderate", styles["table_cell"])],
[Paragraph("Physical General: Thermal / Weather / Climate", styles["table_cell_bold"]),
Paragraph("3rd Physical", styles["table_cell"]),
Paragraph("★★★☆☆", styles["table_cell_bold"]),
Paragraph("Strong eliminating general; thermal = chilly/hot", styles["table_cell"]),
Paragraph("High (thermal state)", styles["table_cell"])],
[Paragraph("Physical General: Modified by Mental General", styles["table_cell_bold"]),
Paragraph("Elevated", styles["table_cell"]),
Paragraph("★★★★☆", styles["table_cell_bold"]),
Paragraph("Near-mental general value; high priority", styles["table_cell"]),
Paragraph("High", styles["table_cell"])],
[Paragraph("Common Symptom (with peculiar modality)", styles["table_cell_bold"]),
Paragraph("Secondary", styles["table_cell"]),
Paragraph("★★☆☆☆", styles["table_cell_bold"]),
Paragraph("Include only if truly peculiar – supports generals", styles["table_cell"]),
Paragraph("Low", styles["table_cell"])],
[Paragraph("Particular: Modified by Mental/Physical General", styles["table_cell_bold"]),
Paragraph("Elevated Particular", styles["table_cell"]),
Paragraph("★★★☆☆", styles["table_cell_bold"]),
Paragraph("Differentiation after generals shortlist", styles["table_cell"]),
Paragraph("Low-Moderate", styles["table_cell"])],
[Paragraph("Particular: Peculiar Sensation", styles["table_cell_bold"]),
Paragraph("Elevated Particular", styles["table_cell"]),
Paragraph("★★★☆☆", styles["table_cell_bold"]),
Paragraph("High value if sensation is strange/rare/unique", styles["table_cell"]),
Paragraph("Moderate (for final Dx)", styles["table_cell"])],
[Paragraph("Plain Particular (unmodified)", styles["table_cell_bold"]),
Paragraph("Lowest", styles["table_cell"]),
Paragraph("★☆☆☆☆", styles["table_cell_bold"]),
Paragraph("Final differentiation only – do not open with these", styles["table_cell"]),
Paragraph("None", styles["table_cell"])],
]
E.append(styled_table(summary_data, [5*cm, 2.5*cm, 2.5*cm, 4.5*cm, 2.5*cm], styles))
E.append(SP_LG)
E.append(HRFlowable(width="100%", thickness=1.5, color=DARK_GREEN))
E.append(SP)
E.append(Paragraph(
"This reference is compiled from Kent's Repertory of the Homeopathic Materia Medica, "
"Kent's Lectures on Homeopathic Philosophy, and classical homeopathic literature. "
"For clinical practice, always corroborate repertorization with thorough Materia Medica study.",
styles["footer_note"]
))
return E
# ──────────────────────────────────────────────
# MAIN
# ──────────────────────────────────────────────
def main():
styles = make_styles()
doc = KentDocTemplate(
OUTPUT,
pagesize=A4,
title="Kent's Analysis & Evaluation of Symptoms",
author="J.T. Kent | Classical Homeopathy Reference",
subject="Homeopathic Symptom Evaluation",
creator="Orris Reference Generator",
)
elements = build_elements(styles)
# First page is the cover – use a special template
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
def first_page(canv, doc):
build_cover(canv, doc)
def later_pages(canv, doc):
doc._draw_page(canv, doc)
# Patch onPage for cover page
doc.pageTemplates[0].onPage = lambda c, d: (
build_cover(c, d) if d.page == 1 else doc._draw_page(c, d)
)
doc.build(elements)
print(f"PDF created: {OUTPUT}")
if __name__ == "__main__":
main()
cd /tmp/workspace/kent-pdf && python generate_kent_pdf.py 2>&1
~/kent-pdf/generate_kent_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/kent-pdf/generate_kent_pdf.py'
~/kent-pdf/generate_kent_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/kent-pdf/generate_kent_pdf.py'
cd /tmp/workspace/kent-pdf && python generate_kent_pdf.py 2>&1
ls -lh /tmp/workspace/kent-pdf/Kent_Symptom_Evaluation_Reference.pdf
Kent Symptom Evaluation Reference
PDF Document · PDF
| Section | Content |
|---|---|
| Cover Page | Full decorative cover with dark green & gold design, JTK monogram |
| Table of Contents | All 13 sections listed |
| 1. Introduction | Background, Swedenborgian philosophy, why evaluation matters, criteria for symptom value |
| 2. Classification | Full symptom classification table + color-coded hierarchy pyramid (9 levels, darkest = highest priority) |
| 3. Mental Generals | Detailed 4-grade table (Will → Emotions → Intellect → Memory) with clinical examples, Kent's exact quote |
| 4. Physical Generals | 3-grade table (Sexual/Menstrual → Appetite/Desires → Thermal/Weather) with subcategories |
| 5. Common Symptoms | When they become important + comparative table with examples |
| 6. Particular Symptoms | Elevation table (modified by generals, peculiar sensation, plain particular) |
| 7. Key Principles | 8 core evaluation principles in styled info boxes |
| 8. Remedy Grading | 3-tier grading system (CAPITALS/Italics/Plain) with scoring rules |
| 9. 37 Chapters | Complete chapter list of Kent's Repertory with content descriptions |
| 10. Comparison Table | Kent vs Boenninghausen vs Hahnemann across 8 features |
| 11. Step-by-Step Analysis | 10-step Kentian case analysis workflow |
| 12. Rules & Maxims | 12 key rules including Kent's maxims |
| 13. Quick Reference Chart | Master summary table with star ratings and eliminating power for every symptom type |
Analysis and evaluation of symptoms as per Bogar.
BBCR
Boger Boenninghausen BBCR analysis evaluation symptoms method homeopathy
Boger BBCR symptom evaluation scheme characteristics repertory totality
https://www.homeobook.com/analysis-and-evaluation-of-symptom…
| Kent | Boger (BBCR) | |
|---|---|---|
| Highest priority | Mental generals (Will) | Causation & Modalities |
| Pathological symptoms | Treated as "common" - low value | Pathological Generals - elevated as constitutional indicators |
| Mental symptoms | Used to open and lead repertorization | Used for final differentiation and confirmation |
| Generalization | Strict - only true generals used | Liberal generalization - if a sensation/modality appears in 3+ parts, it is predicated to the whole |
| Concomitants | Very limited role | Central role in completing totality |
1. CAUSATIVE MODALITIES
├── Mental Causation (grief, anger, vexation, fright, tension)
└── Physical Causation (cold wet feet, suppressed eruptions, exposure)
2. GENERAL MODALITIES (Aggravations & Ameliorations)
├── Mental modalities (agg. from emotions, consolation, company)
└── Physical modalities (time, temperature, weather, motion, posture,
sleep, eating/drinking, pressure, touch, discharges, open air)
3. GENERALS
├── Pathological Generals (tissue-level constitutional deviations)
└── Physical Generals (desires, aversions, perspiration character, thermals)
[qualified by Concomitant, Peculiarity, and Intensity]
4. CONCOMITANTS
(Accompanying symptoms from a different sphere - key to completing totality)
5. CHARACTERISTIC PARTICULARS
(Location + Sensation + Modality units; used when generals are absent/paucity)
6. MENTALS
(Used for final differentiation and confirmation of the similimum)
| Type | Examples |
|---|---|
| Mental Causation | Grief, anger, vexation, fright, shame, disappointed love, mental strain |
| Physical Causation | Getting wet/cold, suppressed skin eruptions, loss of fluids, injury, overwork, sun exposure |
A case where the never-well-since follows a clear causation: that causation is the single most important prescribing symptom.
"Certain types of constitutions are prone to certain pathological changes. A common propensity persists across different tissues - this shows the behavior of the whole constitution."
Example: Headache (chief complaint) with simultaneous sweat on the scalp only (concomitant from a different system) - the concomitant points directly to the remedy.
"Mentals are used for differentiation and the final selection of the remedy."
| Component | Sub-analysis |
|---|---|
| Chill | Type, partial/general, time, agg./amel., concomitants |
| Heat | Character, distribution, time, agg./amel., concomitants |
| Sweat | Time, location, character (odor, staining), agg./amel. |
| Periodicity | Daily, tertian, quartan, irregular |
| Time Modality | Hour of onset, duration of each stage |
"If a sensation or modality is present in more than three parts of the body, it can be predicated to the whole person and used as a general."
| Section | Content |
|---|---|
| Causation | Mental and physical causes |
| Time | Periodicity, time of aggravation |
| Sensations in General | Grand sensations used as generals |
| Modalities | All agg./amel. factors as generals |
| Mind | Mental symptoms (for differentiation) |
| Vertigo | Dizziness rubrics |
| Head to Extremities | Anatomical sections with location + sensation |
| Skin | Eruptions, their character and modalities |
| Fever | Chill, Heat, Sweat chapter |
| Generalities | Whole-body generals |
| Pathological Generals | Inflammation, suppuration, ulceration, etc. |
| Concordances | Related remedies for each polychrest |
| Clinical | Disease-diagnosis rubrics |
| Feature | Kent | Boger (BBCR) |
|---|---|---|
| Opens with | Mental Generals (Will) | Causation & Modalities |
| Pathological generals | Low priority | High priority |
| Mental symptoms | Highest priority | Final differentiation |
| Concomitants | Minimal role | Central role |
| Generalization | Strict | Liberal (3+ parts rule) |
| Fever | No special structure | Fever Totality |
| Best for | Constitutional chronic cases with strong mentals | Pathological states, fever, one-sided cases, paucity of symptoms |
| Grading in repertory | Symptoms AND remedies graded | Remedies graded; rubric value by position |
C - Causation (Mental > Physical)
M - Modalities (General - time, temp, weather, motion...)
P - Pathological Generals (tissue-level constitutional)
G - Physical Generals (desires, aversions, perspiration)
C - Concomitants (from a different sphere)
P - Characteristic Particulars (Location + Sensation + Modality)
M - Mentals (last - for final differentiation)