1. Definition & Historical background of Medical Jurisprudence 2. Important terminologies 3. classification of poisons 4. characteristics of an Ideal homicidal & Suicidal poison Answer these questions according to k s naryan reddy textbook
| Period | Event |
|---|---|
| ~3000 BC | Menes Pharohs I (Egypt) studied poisons. The Charaka Samhita (7th century BC) laid down an elaborate code regarding training, duties, privileges and social status of physicians, and gave detailed description of poisons and their treatment. |
| 4000-3000 BC | Law-medicine problems found in written records in Egypt, Sumer, Babylon, India, and China. A Chinese Materia Medica (~3000 BC) gives information on poisons. |
| 27th century BC | Imhotep (Grand Vizir, Chief Justice and chief physician of King Zoser of Egypt) enacted rules for medical practice, brought under law. |
| ~2200 BC | The Code of Hammurabi (King of Babylon) - the oldest known medicolegal Code. |
| 3000-1000 BC | Rig Veda and other Vedas mentioned crimes like incest, adultery, murder, drunkenness, etc. and their punishments. Physicians were identified as professional people. |
| 4th century BC | Manu Smriti laid down laws including punishment for various sexual and other offences, and recognized mental incapacity due to intoxication, illness and age. |
| 4th-3rd century BC | Artha Shastra of Kautilya defined penal laws and regulated medical practice. Physicians were punished for negligence. It mentions examination of dead bodies in unnatural deaths. |
| 460-377 BC | Hippocrates - "Father of Western Medicine" - born in the island of Kos in Greece; discussed the lethality of wounds. His contribution to medical ethics is his greatest in the medical field. |
| ~300 BC | Rabbis of the Rabbinical Court sought aid of medical experts. Greek and Roman jurists and medical men collaborated in developing principles of forensic medicine. |
| 200-300 AD | Sushruta ("Father of Indian Surgery") in his Sushruta Samhita defined duties of physicians, classified wounds and fractures, classified poisons and snakes, and described modes of administration of poisons. |
| 6th century AD | The Justinian Code (Roman Emperor) regulated practice of medicine and surgery and established the function of medical expert for legal procedure. |
| 1302 AD | The first medicolegal autopsy was performed in Bologna (Italy) by Bartolomeo Da Varginana. |
| 1507 AD | Bishop of Bamberg (Georgia) proclaimed a penal code where medical evidence was a necessity in certain cases. |
| 1553 AD | Caroline Code proclaimed in Germany by Emperor Charles V. Expert medical testimony became a requirement in cases of murder, wounding, poisoning, hanging, drowning, infanticide, and abortion. |
| 1602 AD | The first book on Forensic Medicine was published by the Italian physician Fortunato Fedele. |
| 1621-1666 AD | Paulus Zacchias published "Quaestiones Medico-legales" (7 volumes + 2 additional volumes). He is considered the Father of Legal Medicine as well as Father of Forensic Psychiatry. |
| 18th century | Professorships in legal medicine were founded in Germany. Orfila (1787-1853) - professor of chemistry and legal medicine in Paris - introduced precise chemical methods into toxicology. He is considered the Founder of Modern Toxicology. |
| 1843 AD | Law regarding criminal responsibility of insane persons established in England in McNaughten's Case. |
| 1860 AD | Under British rule, the Indian Penal Code was gazetted, including definitions of offences and punishments. |
Note: The definition of poison is vague and unsatisfactory because (1) a substance which is harmless in small quantities may act as a poison and cause death when taken in large amounts, and (2) bacterial toxins are not regarded as poisons in the ordinary sense of the term.
| Category | Examples |
|---|---|
| Inorganic poisons | Mineral acids (H₂SO₄, HCl, HNO₃), metallic poisons (arsenic, lead, mercury), gases (CO, CO₂) |
| Organic poisons | Vegetable alkaloids (opium, strychnine, aconite), animal poisons (snake venom), synthetic organic compounds |
Poisons that satisfy several of these criteria: Organic compounds of fluorine (used as rodenticides) and thallium. Arsenic and aconite are the most commonly used homicidal poisons.
Poisons that satisfy several of these criteria: Opium and barbiturates. Organophosphorus compounds, aluminum phosphide and endrin are the most commonly used suicidal poisons in India.
Create a pdf
ls -la /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace && ls -la /home/daytona/workspace/
mkdir -p /home/daytona/workspace/forensic-notes && python3 -c "import reportlab; print('reportlab ok')" && python3 -c "from reportlab.lib.pagesizes import A4; print('A4 ok')"
Create a pdf of the answers which uh have provided
~/forensic-notes/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import PageBreak
OUTPUT = "/home/daytona/workspace/forensic-notes/Medical_Jurisprudence_KSNarayanaReddy.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2.2*cm, bottomMargin=2*cm,
title="Medical Jurisprudence & Toxicology Notes",
author="K.S. Narayana Reddy - Essentials of Forensic Medicine & Toxicology 36th Ed."
)
styles = getSampleStyleSheet()
# ── Custom Styles ──────────────────────────────────────────────────────────────
cover_title = ParagraphStyle("cover_title", parent=styles["Title"],
fontSize=22, leading=28, textColor=colors.HexColor("#1a3a5c"),
spaceAfter=6, alignment=TA_CENTER)
cover_sub = ParagraphStyle("cover_sub", parent=styles["Normal"],
fontSize=12, leading=16, textColor=colors.HexColor("#2e6da4"),
spaceAfter=4, alignment=TA_CENTER)
cover_source = ParagraphStyle("cover_source", parent=styles["Normal"],
fontSize=10, leading=14, textColor=colors.HexColor("#555555"),
spaceAfter=4, alignment=TA_CENTER)
h1 = ParagraphStyle("h1", parent=styles["Heading1"],
fontSize=14, leading=18, textColor=colors.white,
backColor=colors.HexColor("#1a3a5c"),
spaceBefore=14, spaceAfter=6,
leftIndent=-0.5*cm, rightIndent=-0.5*cm,
borderPad=6)
h2 = ParagraphStyle("h2", parent=styles["Heading2"],
fontSize=12, leading=15, textColor=colors.HexColor("#1a3a5c"),
spaceBefore=10, spaceAfter=4,
borderPad=2)
h3 = ParagraphStyle("h3", parent=styles["Heading3"],
fontSize=11, leading=14, textColor=colors.HexColor("#2e6da4"),
spaceBefore=8, spaceAfter=3)
body = ParagraphStyle("body", parent=styles["Normal"],
fontSize=10, leading=14, textColor=colors.HexColor("#222222"),
spaceAfter=4, alignment=TA_JUSTIFY)
bullet = ParagraphStyle("bullet", parent=styles["Normal"],
fontSize=10, leading=14, textColor=colors.HexColor("#222222"),
spaceAfter=3, leftIndent=16, bulletIndent=4)
note_box = ParagraphStyle("note_box", parent=styles["Normal"],
fontSize=9.5, leading=13, textColor=colors.HexColor("#5a3a00"),
backColor=colors.HexColor("#fff8e1"),
borderColor=colors.HexColor("#f0b429"),
borderWidth=1, borderPad=6,
spaceAfter=6, leftIndent=4, rightIndent=4)
footer_style = ParagraphStyle("footer", parent=styles["Normal"],
fontSize=8, textColor=colors.HexColor("#888888"), alignment=TA_CENTER)
# ── Helper ──────────────────────────────────────────────────────────────────
def add_h1(text, story):
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(text, h1))
def add_h2(text, story):
story.append(Paragraph(text, h2))
def add_h3(text, story):
story.append(Paragraph(text, h3))
def add_body(text, story):
story.append(Paragraph(text, body))
def add_bullet(items, story):
for item in items:
story.append(Paragraph(f"• {item}", bullet))
def add_note(text, story):
story.append(Paragraph(text, note_box))
def add_space(story, h=0.3):
story.append(Spacer(1, h*cm))
def add_hr(story):
story.append(HRFlowable(width="100%", thickness=0.5,
color=colors.HexColor("#2e6da4"), spaceAfter=4))
def make_table(header, rows, col_widths=None):
data = [header] + rows
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9),
("ALIGN", (0,0), (-1,-1), "LEFT"),
("VALIGN", (0,0), (-1,-1), "TOP"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,1), (-1,-1), 9),
("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.HexColor("#f0f5fb"), colors.white]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aac4e0")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
]))
return t
# ══════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER PAGE ────────────────────────────────────────────────────────────────
story.append(Spacer(1, 3*cm))
story.append(Paragraph("Medical Jurisprudence & Toxicology", cover_title))
story.append(Spacer(1, 0.4*cm))
story.append(HRFlowable(width="70%", thickness=2, color=colors.HexColor("#2e6da4"),
hAlign="CENTER", spaceAfter=12))
story.append(Paragraph("Study Notes", cover_sub))
story.append(Spacer(1, 0.6*cm))
story.append(Paragraph(
"Based on: <b>K.S. Narayana Reddy</b><br/>"
"The Essentials of Forensic Medicine and Toxicology<br/>"
"36th Edition (2026)", cover_source))
story.append(Spacer(1, 1.5*cm))
topics = [
"1. Definition & Historical Background of Medical Jurisprudence",
"2. Important Terminologies",
"3. Classification of Poisons",
"4. Characteristics of Ideal Homicidal & Suicidal Poison",
]
for t in topics:
story.append(Paragraph(t, ParagraphStyle("toc", parent=styles["Normal"],
fontSize=11, leading=18, textColor=colors.HexColor("#1a3a5c"),
alignment=TA_CENTER)))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 1 – DEFINITION & HISTORICAL BACKGROUND
# ══════════════════════════════════════════════════════════════════════════════
add_h1("1. DEFINITION & HISTORICAL BACKGROUND OF MEDICAL JURISPRUDENCE", story)
add_h2("A. Key Definitions", story)
add_hr(story)
defs = [
("<b>Forensic Medicine</b>",
"Deals with the application of medical and paramedical knowledge to aid in the "
"administration of justice. Used by legal authorities for solution of legal problems "
"(injuries, murder, suicide, accidents, sexual offences, poisoning, etc.). "
"In short — deals with <b>medical aspects of law</b>."),
("<b>Medical Jurisprudence</b><br/><i>(juris = law; Prudentia = knowledge)</i>",
"Deals with the <b>legal responsibilities of the physician</b> — medical negligence, "
"consent, rights and duties of doctors, serious professional misconduct, medical ethics, etc. "
"In short — deals with <b>legal aspects of practice of medicine</b>."),
("<b>Clinical Forensic Medicine</b>",
"Medicolegal aspects of examination of living human beings caused by or associated "
"with all types of violence and other cases where legal problems are involved."),
("<b>State Medicine</b>",
"Deals with legal aspects of practice of medicine, regulating professional activities, "
"standard and uniformity of medical education, and health requirements of the community."),
("<b>Forensic Pathology</b>",
"Study and application of the effects of violence or unnatural disease on the human body; "
"determines cause and manner of death in violent, suspicious, unexplained, sudden and "
"medically unattended deaths."),
("<b>Medical Ethics</b>",
"Moral principles guiding members of the medical profession in dealings with each other, "
"patients, and the State."),
("<b>Medical Etiquette</b>",
"Conventional laws of courtesy observed between members of the medical profession."),
]
for term, defn in defs:
row_data = [[Paragraph(term, ParagraphStyle("td_l", parent=styles["Normal"],
fontSize=9.5, leading=13, textColor=colors.HexColor("#1a3a5c"))),
Paragraph(defn, ParagraphStyle("td_r", parent=styles["Normal"],
fontSize=9.5, leading=13))]]
t = Table(row_data, colWidths=[5*cm, 11.5*cm])
t.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("LINEBELOW", (0,0), (-1,-1), 0.3, colors.HexColor("#d0dce8")),
("BACKGROUND", (0,0), (0,-1), colors.HexColor("#eef4fb")),
]))
story.append(t)
story.append(Spacer(1, 0.1*cm))
add_space(story)
add_h2("B. Historical Background of Forensic Medicine", story)
add_hr(story)
add_body("Medicine and law have been related from the earliest times. The bonds which united them were religion, superstition and magic.", story)
add_space(story, 0.2)
hist_rows = [
["~3000 BC", "Menes Pharohs I (Egypt) studied poisons. Charaka Samhita (7th c. BC) — elaborate code for physician duties; detailed descriptions of poisons."],
["4000–3000 BC", "Law-medicine records in Egypt, Sumer, Babylon, India, China. Chinese Materia Medica (~3000 BC) gives information on poisons."],
["27th c. BC", "Imhotep (Grand Vizir, Chief Justice and Chief Physician of King Zoser of Egypt) — enacted rules for medical practice brought under law."],
["~2200 BC", "Code of Hammurabi (King of Babylon) — oldest known medicolegal Code."],
["3000–1000 BC", "Rig Veda and other Vedas — mentions crimes (murder, incest, adultery, drunkenness) and punishments."],
["4th c. BC", "Manu Smriti — laws on sexual and other offences; recognized mental incapacity due to intoxication, illness and age."],
["4th–3rd c. BC", "Artha Shastra of Kautilya — defined penal laws, regulated medical practice, mentions examination of dead bodies in unnatural deaths."],
["460–377 BC", "Hippocrates — 'Father of Western Medicine'; discussed lethality of wounds; greatest contribution to medical ethics."],
["~300 BC", "Rabbis of Rabbinical Court sought medical expert aid. Greek and Roman jurists collaborated in developing forensic medicine principles."],
["200–300 AD", "Sushruta (Father of Indian Surgery) — Sushruta Samhita: classified wounds, fractures, poisons and snakes; described modes of poison administration."],
["6th c. AD", "Justinian Code (Roman Emperor) — regulated medical practice and established function of medical expert for legal procedure."],
["1302 AD", "First medicolegal autopsy — Bologna, Italy, by Bartolomeo Da Varginana."],
["1507 AD", "Bishop of Bamberg proclaimed a penal code where medical evidence was a necessity in certain cases."],
["1553 AD", "Caroline Code (Germany, Emperor Charles V) — expert medical testimony became a requirement in cases of murder, wounding, poisoning, hanging, drowning, infanticide, and abortion."],
["1602 AD", "First book on Forensic Medicine published by Italian physician Fortunato Fedele."],
["1621–1666 AD", "Paulus Zacchias — 'Quaestiones Medico-legales' (9 volumes). Father of Legal Medicine and Father of Forensic Psychiatry."],
["18th c.", "Professorships in legal medicine founded in Germany. Orfila (1787–1853) — introduced precise chemical methods into toxicology; Founder of Modern Toxicology."],
["1843 AD", "Criminal responsibility of insane persons established in England — McNaughten's Case."],
["1860 AD", "Indian Penal Code gazetted under British rule — definitions of offences and punishments."],
]
t = make_table(
[Paragraph("<b>Period</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white)),
Paragraph("<b>Event</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white))],
[[Paragraph(r[0], ParagraphStyle("td", parent=styles["Normal"], fontSize=9, leading=12, textColor=colors.HexColor("#1a3a5c"))),
Paragraph(r[1], ParagraphStyle("td", parent=styles["Normal"], fontSize=9, leading=12))]
for r in hist_rows],
col_widths=[3*cm, 13.5*cm]
)
story.append(t)
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 2 – IMPORTANT TERMINOLOGIES
# ══════════════════════════════════════════════════════════════════════════════
add_h1("2. IMPORTANT TERMINOLOGIES", story)
add_hr(story)
terms = [
("<b>Toxicology</b>",
"Science dealing with properties, actions, toxicity, fatal dose, detection and estimation of, "
"interpretation of results of toxicological analysis, and treatment of poisons."),
("<b>Forensic Toxicology</b>",
"Deals with the <b>medical and legal aspects</b> of the harmful effects of chemicals on human beings."),
("<b>Clinical Toxicology</b>",
"Deals with human diseases caused by, or associated with, abnormal exposure to chemical substances."),
("<b>Toxinology</b>",
"Refers to toxins produced by living organisms which are dangerous to man — e.g., poisonous plants, "
"venom of snakes, spiders, bees, bacterial and fungal toxins."),
("<b>Poison</b>",
"A substance (solid, liquid or gaseous) which, if introduced in the living body or brought into "
"contact with any part thereof, will produce ill-health or death by its constitutional or local effects or both."),
("<b>Pharmacokinetics</b>",
"Study of action of a drug in the body over time — including absorption, distribution, localization "
"in tissues, biotransformation and excretion."),
("<b>Pharmacodynamics</b>",
"The action of drugs on living organisms."),
("<b>Fatal Dose</b>",
"The minimum quantity of a poison sufficient to cause death."),
("<b>Lethal Dose (LD50)</b>",
"The dose that kills 50% of an experimental population."),
("<b>Antidote</b>",
"A substance that counteracts or neutralizes the effect of a poison."),
("<b>Stupefying Poison</b>",
"A poison that causes stupor or unconsciousness, e.g., Datura, Cannabis indica, Chloral hydrate."),
]
for term, defn in terms:
row_data = [[Paragraph(term, ParagraphStyle("td_l", parent=styles["Normal"],
fontSize=9.5, leading=13, textColor=colors.HexColor("#1a3a5c"))),
Paragraph(defn, ParagraphStyle("td_r", parent=styles["Normal"],
fontSize=9.5, leading=13))]]
t = Table(row_data, colWidths=[4.5*cm, 12*cm])
t.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("LINEBELOW", (0,0), (-1,-1), 0.3, colors.HexColor("#d0dce8")),
("BACKGROUND", (0,0), (0,-1), colors.HexColor("#eef4fb")),
]))
story.append(t)
story.append(Spacer(1, 0.08*cm))
add_space(story)
add_note(
"⚠ NOTE: The definition of poison is vague and unsatisfactory because: "
"(1) A substance harmless in small quantities may act as a poison in large amounts, and "
"(2) Bacterial toxins are not regarded as poisons in the ordinary sense of the term.",
story
)
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 3 – CLASSIFICATION OF POISONS
# ══════════════════════════════════════════════════════════════════════════════
add_h1("3. CLASSIFICATION OF POISONS", story)
add_body("Poisons may be classified according to the chief symptoms which they produce.", story)
add_h2("A. Based on Chemical Origin", story)
add_hr(story)
class_a = [
["Inorganic Poisons",
"Mineral acids (H₂SO₄, HCl, HNO₃), metallic poisons (arsenic, lead, mercury), gases (CO, CO₂)"],
["Organic Poisons",
"Vegetable alkaloids (opium, strychnine, aconite), animal poisons (snake venom), synthetic organic compounds"],
]
t = make_table(
[Paragraph("<b>Category</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white)),
Paragraph("<b>Examples</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white))],
[[Paragraph(r[0], ParagraphStyle("td", parent=styles["Normal"], fontSize=9.5, leading=13, textColor=colors.HexColor("#1a3a5c"))),
Paragraph(r[1], ParagraphStyle("td", parent=styles["Normal"], fontSize=9.5, leading=13))] for r in class_a],
col_widths=[5*cm, 11.5*cm]
)
story.append(t)
add_space(story)
add_h2("B. Based on Mode of Action (Medico-legal Classification)", story)
add_hr(story)
mode_rows = [
["1. Corrosives",
"Fix, destroy and erode surfaces; extract water from tissues, coagulate cellular proteins, convert Hb to hematin.",
"• Inorganic acids: H₂SO₄, HNO₃, HCl\n• Organic acids: Oxalic acid, Carbolic acid\n• Alkalis: Caustic soda, Caustic potash, Ammonia"],
["2. Irritants",
"Cause irritation and inflammation of mucous membranes.",
"• Inorganic: Arsenic, Copper sulfate, Zinc sulfate\n• Organic/Vegetable: Castor seeds (ricin), Croton oil, Calotropis, Dhatura, Colchicum\n• Animal: Cantharides, Snake venom"],
["3. Spinal/Peripheral Nerve Poisons (Convulsants)",
"Act primarily on the spinal cord and peripheral nerves; cause tetanic convulsions.",
"Strychnine (Nux vomica), Brucine"],
["4. Cerebral/Deliriant Poisons",
"Act on the brain causing delirium, hallucinations, or coma.",
"Datura (Belladonna), Cannabis, Alcohol, Chloroform, Cocaine"],
["5. Somniferous/Narcotic Poisons",
"Act on the brain causing narcosis or deep sleep.",
"Opium, Morphine, Barbiturates, Chloral hydrate"],
["6. Cardiac Poisons",
"Act primarily on the heart.",
"Aconite, Digitalis, Tobacco, Oleander (Nerium)"],
["7. Asphyxiants/Gaseous Poisons",
"Cause death by preventing oxygen supply.",
"Carbon monoxide (CO), Hydrogen cyanide (HCN), Hydrogen sulfide (H₂S)"],
]
mode_data = [
[Paragraph("<b>Type</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white)),
Paragraph("<b>Mechanism</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white)),
Paragraph("<b>Examples</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white))]
]
for r in mode_rows:
mode_data.append([
Paragraph(r[0], ParagraphStyle("td", parent=styles["Normal"], fontSize=9, leading=12, textColor=colors.HexColor("#1a3a5c"))),
Paragraph(r[1], ParagraphStyle("td", parent=styles["Normal"], fontSize=9, leading=12)),
Paragraph(r[2], ParagraphStyle("td", parent=styles["Normal"], fontSize=9, leading=12)),
])
t = Table(mode_data, colWidths=[4*cm, 6*cm, 6.5*cm], repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9),
("ALIGN", (0,0), (-1,-1), "LEFT"),
("VALIGN", (0,0), (-1,-1), "TOP"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,1), (-1,-1), 9),
("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.HexColor("#f0f5fb"), colors.white]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aac4e0")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
]))
story.append(t)
add_space(story)
add_h2("C. Based on Medico-legal Purpose of Use", story)
add_hr(story)
ml_rows = [
["1. Homicidal", "Arsenic, Aconite, Thallium, Organic fluorine compounds"],
["2. Suicidal", "Organophosphorus compounds, Aluminum phosphide, Endrin, Opium, Barbiturates"],
["3. Stupefying", "Datura, Cannabis indica, Chloral hydrate"],
["4. Abortifacient","Calotropis, Oleanders, Aconite, Croton, Ergot, Lead, Arsenic, Mercury, KMnO₄"],
["5. Accidental", "Household poisons, OPs, Household chemicals, Rat poisons"],
["6. Arrow poisons","Abrus precatorius, Aconite, Strychnine, Curare, Snake venom"],
["7. Aphrodisiacs", "Cantharides, Cocaine, Cannabis, Strychnine"],
]
t = make_table(
[Paragraph("<b>Purpose</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white)),
Paragraph("<b>Common Poisons Used</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white))],
[[Paragraph(r[0], ParagraphStyle("td", parent=styles["Normal"], fontSize=9.5, leading=13, textColor=colors.HexColor("#1a3a5c"))),
Paragraph(r[1], ParagraphStyle("td", parent=styles["Normal"], fontSize=9.5, leading=13))] for r in ml_rows],
col_widths=[4.5*cm, 12*cm]
)
story.append(t)
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 4 – IDEAL HOMICIDAL & SUICIDAL POISON
# ══════════════════════════════════════════════════════════════════════════════
add_h1("4. CHARACTERISTICS OF AN IDEAL HOMICIDAL & SUICIDAL POISON", story)
# ── Homicidal ─────────────────────────────────────────────────────────────────
add_h2("A. Ideal Homicidal Poison", story)
add_hr(story)
add_body("An ideal homicidal poison should have the following characteristics:", story)
hom_items = [
"<b>Cheap</b> — easily affordable",
"<b>Easily available</b> — can be procured without suspicion",
"<b>Colorless, odorless and tasteless</b> — cannot be detected by the victim",
"<b>Capable of being administered</b> in food, drink or medicine without producing any obvious change to prevent suspicion",
"<b>Highly toxic</b> — effective even in small doses",
"<b>Signs and symptoms should resemble a natural disease</b>, OR the serious ill-effects should be <b>delayed sufficiently long</b> for the accused to escape suspicion",
"<b>No antidote should exist</b>",
"<b>Should not produce any postmortem changes</b>",
"<b>Should not be detected</b> by chemical tests or other methods",
"<b>Must be rapidly destroyed or made undetectable</b> in the body",
]
for i, item in enumerate(hom_items, 1):
story.append(Paragraph(
f"({i}) {item}",
ParagraphStyle("num", parent=styles["Normal"],
fontSize=10, leading=14, leftIndent=16, spaceAfter=3)
))
add_space(story, 0.3)
add_note(
"✓ EXAMPLES: Organic compounds of fluorine (used as rodenticides) and Thallium satisfy "
"several of the above criteria. <b>Arsenic and Aconite</b> are the most commonly used "
"homicidal poisons in India.",
story
)
add_space(story)
# ── Suicidal ──────────────────────────────────────────────────────────────────
add_h2("B. Ideal Suicidal Poison", story)
add_hr(story)
add_body("An ideal suicidal poison should have the following characteristics:", story)
sui_items = [
"<b>Cheap</b> — easily affordable",
"<b>Easily available</b>",
"<b>Highly toxic</b> — effective in available doses",
"<b>Tasteless or of pleasant taste</b> — easy to consume",
"<b>Capable of being easily taken</b> in food or drink",
"<b>Capable of producing painless death</b>",
]
for i, item in enumerate(sui_items, 1):
story.append(Paragraph(
f"({i}) {item}",
ParagraphStyle("num", parent=styles["Normal"],
fontSize=10, leading=14, leftIndent=16, spaceAfter=3)
))
add_space(story, 0.3)
add_note(
"✓ EXAMPLES: Opium and Barbiturates satisfy several of the above criteria. "
"<b>Organophosphorus compounds, Aluminum phosphide and Endrin</b> are the most "
"commonly used suicidal poisons in India.",
story
)
add_space(story)
# ── Comparison Table ──────────────────────────────────────────────────────────
add_h3("Comparison: Ideal Homicidal vs. Ideal Suicidal Poison", story)
comp_rows = [
["Cheap", "✓", "✓"],
["Easily available", "✓", "✓"],
["Colorless, odorless, tasteless", "✓", "Tasteless/pleasant taste"],
["Highly toxic", "✓", "✓"],
["Mimics natural disease", "✓ (Essential)", "Not required"],
["No antidote", "✓ (Essential)", "Not specifically required"],
["No postmortem changes", "✓ (Essential)", "Not specifically required"],
["Undetectable chemically", "✓ (Essential)", "Not specifically required"],
["Painless death", "Not required", "✓ (Essential)"],
["Common examples (India)", "Arsenic, Aconite", "OPs, AlPO₄, Endrin"],
]
t = make_table(
[Paragraph("<b>Feature</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white)),
Paragraph("<b>Homicidal Poison</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white)),
Paragraph("<b>Suicidal Poison</b>", ParagraphStyle("th", parent=styles["Normal"], fontSize=9, textColor=colors.white))],
[[Paragraph(r[0], ParagraphStyle("td", parent=styles["Normal"], fontSize=9, leading=12)),
Paragraph(r[1], ParagraphStyle("td", parent=styles["Normal"], fontSize=9, leading=12, textColor=colors.HexColor("#155724"))),
Paragraph(r[2], ParagraphStyle("td", parent=styles["Normal"], fontSize=9, leading=12, textColor=colors.HexColor("#155724")))] for r in comp_rows],
col_widths=[6*cm, 5.5*cm, 5*cm]
)
story.append(t)
add_space(story, 1)
story.append(HRFlowable(width="100%", thickness=0.8,
color=colors.HexColor("#1a3a5c"), spaceAfter=6))
story.append(Paragraph(
"Source: K.S. Narayana Reddy — The Essentials of Forensic Medicine and Toxicology, 36th Edition (2026)",
footer_style
))
# ── Build ──────────────────────────────────────────────────────────────────────
def add_page_number(canvas, doc):
canvas.saveState()
canvas.setFont("Helvetica", 8)
canvas.setFillColor(colors.HexColor("#888888"))
page_num = canvas.getPageNumber()
canvas.drawRightString(A4[0] - 2*cm, 1.2*cm, f"Page {page_num}")
canvas.drawString(2*cm, 1.2*cm, "Medical Jurisprudence & Toxicology | K.S. Narayana Reddy 36th Ed.")
canvas.restoreState()
doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number)
print("PDF generated successfully:", OUTPUT)
cd /home/daytona/workspace/forensic-notes && python3 generate_pdf.py
ls -lh /home/daytona/workspace/forensic-notes/Medical_Jurisprudence_KSNarayanaReddy.pdf
Medical Jurisprudence KSNarayanaReddy
PDF Document · PDF