I don't understand anything about legal procedure chapter of forensic medicine. Please me to understand this chapter in easy language so I can remember everything from KS Narayan reddy
| Old Name | New Name | What it does |
|---|---|---|
| IPC (Indian Penal Code, 1860) | BNS - Bharatiya Nyaya Sanhita (Act 45, 2023) | Defines crimes and punishments |
| CrPC (Criminal Procedure Code, 1973) | BNSS - Bharatiya Nagarika Suraksha Sanhita (Act 46, 2023) | How crimes are investigated and tried (procedure) |
| IEA (Indian Evidence Act, 1872) | BSA - Bharatiya Sakshya Adhiniyam (Act 47, 2023) | What counts as evidence in court |
| Type | Simple meaning | Who vs. Who |
|---|---|---|
| Criminal law | Crimes against society (murder, theft, assault) | State vs. Accused |
| Civil law | Disputes between individuals (property, divorce, money) | Plaintiff vs. Defendant |
| Common law | Law made by judges through their decisions | - |
| Feature | Cognizable Offence | Non-Cognizable Offence |
|---|---|---|
| Definition | Serious crime | Minor crime |
| Arrest | Police can arrest WITHOUT warrant | Police CANNOT arrest without warrant |
| Investigation | Police can investigate without magistrate's order | Need magistrate's permission |
| Examples | Murder, rape, robbery, dacoity | Cheating, assault, defamation |
Doctor's evidence is an opinion (not a definite fact). An eyewitness gives positive evidence; a doctor gives corroborative (supporting) evidence.
| Type | Who they are |
|---|---|
| Ordinary (Common) Witness | States facts they personally observed |
| Expert Witness | Gives professional opinion (doctor, ballistics expert, etc.) |
| Hostile Witness | Turns against the side that called them |
| Mnemonic | What to Remember |
|---|---|
| BNS = Crimes, BNSS = Procedure, BSA = Evidence | The 3 new laws |
| Cognizable = Can arrest without warrant | Police powers |
| Dying declaration = No oath needed | Valid even without swearing |
| Perjury = 7 years imprisonment | Punishment for false evidence |
| Magistrate inquest = 4 D's | Custody Death, Dowry Death, Dig up (exhumation), Disturbed (mental hospital death) |
| Doctor = both common AND expert witness | Observations = common; Opinion = expert |
Create a study PDF with all legal procedure definitions and mnemonics
mkdir -p /home/daytona/workspace/forensic-legal-procedure && ls /home/daytona/wo…
~/forensic-legal-procedure/create_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, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import FrameBreak
from reportlab.pdfbase import pdfmetrics
OUTPUT = "/home/daytona/workspace/forensic-legal-procedure/Legal_Procedure_Forensic_KSNarayanReddy.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
NAVY = colors.HexColor("#1A2B5A")
TEAL = colors.HexColor("#0077B6")
ORANGE = colors.HexColor("#F4A400")
LIGHT_BLUE = colors.HexColor("#E8F4FD")
LIGHT_GOLD = colors.HexColor("#FFF8E7")
LIGHT_GREEN= colors.HexColor("#E8F8F2")
LIGHT_RED = colors.HexColor("#FEF0F0")
WHITE = colors.white
GREY_BG = colors.HexColor("#F5F5F5")
DARK_GREY = colors.HexColor("#333333")
MED_GREY = colors.HexColor("#666666")
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.8*cm,
leftMargin=1.8*cm,
topMargin=1.5*cm,
bottomMargin=1.5*cm,
title="Legal Procedure - Forensic Medicine (KS Narayan Reddy)",
author="Orris Study Aid",
)
styles = getSampleStyleSheet()
# Custom styles
def S(name, **kw):
return ParagraphStyle(name, **kw)
title_style = S("Title2", fontSize=22, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", spaceAfter=4, leading=28)
subtitle_style = S("Subtitle2", fontSize=11, textColor=LIGHT_BLUE, alignment=TA_CENTER,
fontName="Helvetica", spaceAfter=2)
h1 = S("H1", fontSize=14, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_LEFT, spaceAfter=4, leading=18, leftIndent=4)
h2 = S("H2", fontSize=11, textColor=NAVY, fontName="Helvetica-Bold",
spaceBefore=6, spaceAfter=3, leading=15)
h3 = S("H3", fontSize=10, textColor=TEAL, fontName="Helvetica-Bold",
spaceBefore=4, spaceAfter=2, leading=13)
body = S("Body2", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=14, spaceAfter=4, alignment=TA_JUSTIFY)
bullet = S("Bullet2", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=14, leftIndent=14, spaceAfter=2, bulletIndent=4)
bold_body = S("BoldBody", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica-Bold",
leading=14, spaceAfter=4)
mnemonic_text = S("MnemonicText", fontSize=9.5, textColor=NAVY, fontName="Helvetica-Bold",
leading=14, leftIndent=8, spaceAfter=3)
small_note = S("SmallNote", fontSize=8.5, textColor=MED_GREY, fontName="Helvetica-Oblique",
leading=12, spaceAfter=3, alignment=TA_CENTER)
def section_header(text, bg=NAVY):
"""Returns a coloured section header block."""
data = [[Paragraph(text, h1)]]
t = Table(data, colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("ROUNDEDCORNERS", [5, 5, 5, 5]),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return t
def definition_box(term, defn, bg=LIGHT_BLUE):
"""Term + definition in a coloured box."""
data = [
[Paragraph(f"<b>{term}</b>", S("DefTerm", fontSize=10, textColor=NAVY,
fontName="Helvetica-Bold", leading=14))],
[Paragraph(defn, S("DefBody", fontSize=9.5, textColor=DARK_GREY,
fontName="Helvetica", leading=13, alignment=TA_JUSTIFY))]
]
t = Table(data, colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 0.5, TEAL),
("ROUNDEDCORNERS", [4, 4, 4, 4]),
]))
return t
def mnemonic_box(title, content_lines, bg=LIGHT_GOLD):
"""Special mnemonic box with star emoji."""
rows = [[Paragraph(f"⭐ {title}", S("MnTitle", fontSize=10, textColor=colors.HexColor("#7B4F00"),
fontName="Helvetica-Bold", leading=14))]]
for line in content_lines:
rows.append([Paragraph(line, S("MnLine", fontSize=9.5, textColor=DARK_GREY,
fontName="Helvetica", leading=13, leftIndent=10))])
t = Table(rows, colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 1, ORANGE),
("LINEBELOW", (0,0), (-1,0), 1, ORANGE),
]))
return t
def two_col_table(headers, rows, col_widths=None, header_bg=NAVY):
if col_widths is None:
col_widths = [17.4*cm / len(headers)] * len(headers)
header_style = S("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12)
cell_style = S("TD", fontSize=9, textColor=DARK_GREY, fontName="Helvetica",
alignment=TA_LEFT, leading=12)
table_data = [[Paragraph(h, header_style) for h in headers]]
for row in rows:
table_data.append([Paragraph(str(c), cell_style) for c in row])
t = Table(table_data, colWidths=col_widths)
style = [
("BACKGROUND", (0,0), (-1,0), header_bg),
("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, colors.HexColor("#CCCCCC")),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, GREY_BG]),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]
t.setStyle(TableStyle(style))
return t
# ════════════════════════════════════════════════════════════════════════════
# BUILD CONTENT
# ════════════════════════════════════════════════════════════════════════════
story = []
SP = Spacer(1, 0.3*cm)
SP_SM = Spacer(1, 0.15*cm)
# ── COVER BANNER ─────────────────────────────────────────────────────────────
cover_data = [[
Paragraph("FORENSIC MEDICINE", title_style),
Spacer(1, 0.1*cm),
Paragraph("Legal Procedure", S("CovSub", fontSize=16, textColor=ORANGE,
fontName="Helvetica-Bold", alignment=TA_CENTER, leading=20)),
Spacer(1, 0.1*cm),
Paragraph("Complete Definitions & Mnemonics", subtitle_style),
Spacer(1, 0.1*cm),
Paragraph("Based on KS Narayan Reddy – Essentials of Forensic Medicine & Toxicology (36th Ed., 2026)",
S("CovRef", fontSize=9, textColor=LIGHT_BLUE, alignment=TA_CENTER,
fontName="Helvetica-Oblique", leading=12)),
]]
# Flatten - reportlab can't nest tables in a single cell like this easily, so build as column
cover_rows = [
[Paragraph("FORENSIC MEDICINE", title_style)],
[Paragraph("Legal Procedure", S("CovSub2", fontSize=17, textColor=ORANGE,
fontName="Helvetica-Bold", alignment=TA_CENTER, leading=22))],
[Paragraph("Complete Definitions & Mnemonics", subtitle_style)],
[Spacer(1, 0.2*cm)],
[Paragraph("Based on <i>KS Narayan Reddy – Essentials of Forensic Medicine & Toxicology (36th Ed., 2026)</i>",
S("CovRef2", fontSize=9, textColor=LIGHT_BLUE, alignment=TA_CENTER,
fontName="Helvetica-Oblique", leading=12))],
]
cover_t = Table(cover_rows, colWidths=[17.4*cm])
cover_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
("BOX", (0,0), (-1,-1), 2, ORANGE),
]))
story.append(cover_t)
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 1: THE THREE LAWS
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("1. THE THREE LANDMARK LAWS (New Names - 2023)"))
story.append(SP_SM)
story.append(Paragraph(
"India replaced old British-era laws in 2023. You must know both old and new names:",
body))
story.append(SP_SM)
story.append(two_col_table(
["Old Name", "New Name (2023)", "What It Does"],
[
["IPC – Indian Penal Code, 1860",
"BNS – Bharatiya Nyaya Sanhita\n(Act 45 of 2023)",
"Defines crimes and prescribes punishments (Substantive criminal law)"],
["CrPC – Criminal Procedure Code, 1973",
"BNSS – Bharatiya Nagarika Suraksha Sanhita\n(Act 46 of 2023)",
"Mechanism for punishment; police duties, investigation, court procedures"],
["IEA – Indian Evidence Act, 1872",
"BSA – Bharatiya Sakshya Adhiniyam\n(Act 47 of 2023)",
"Law of evidence – collection, preservation, and use. Applies to ALL courts"],
],
col_widths=[5.0*cm, 6.2*cm, 6.2*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: BNS / BNSS / BSA",
[
"<b>BNS = Blames (defines crimes)</b> | <b>BNSS = Brings to court (procedure)</b> | <b>BSA = Backs with evidence</b>",
'Think: "BNS punishes ➜ BNSS processes ➜ BSA proves"',
"All three Act numbers are consecutive: 45, 46, 47 of 2023"
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 2: TYPES OF LAW
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("2. TYPES OF LAW & CASES", bg=TEAL))
story.append(SP_SM)
story.append(two_col_table(
["Type", "Definition", "Parties Involved"],
[
["Criminal Law",
"Deals with offences against public interest – murder, theft, rape, assault.",
"STATE (prosecution) vs. ACCUSED"],
["Civil Law",
"Deals with disputes between two individuals or parties – property, divorce, contracts.",
"PLAINTIFF vs. DEFENDANT"],
["Common Law",
"Law made by judges when they deliver decisions in individual cases (case law).",
"—"],
],
col_widths=[3.5*cm, 8.5*cm, 5.4*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: Who is who?",
[
"<b>Criminal case:</b> STATE prosecutes the accused – the state CARES about society",
"<b>Civil case:</b> PLAINTIFF files against DEFENDANT – 'P' files, 'D' defends",
"Defendant = used in BOTH criminal and civil cases for the person being accused",
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 3: INQUEST - DEFINITIONS
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("3. INQUEST"))
story.append(SP_SM)
story.append(definition_box(
"INQUEST (Definition)",
"An inquest is an official inquiry or investigation into the cause of death. "
"It is conducted in cases of suicide, murder, killing by animal or machinery, accidents, "
"deaths due to torture or ill-treatment, occupational diseases, suspected medical negligence, "
"suspicious (unnatural) deaths, deaths during anaesthesia/operation, and unidentified or skeletonised bodies."
))
story.append(SP_SM)
story.append(Paragraph("Two Types of Inquest in India:", h2))
story.append(two_col_table(
["Feature", "Police Inquest", "Magistrate's Inquest"],
[
["Legal Section", "Section 194, BNSS (old Sec 174, CrPC)", "Section 195, BNSS (old Sec 176, CrPC)"],
["Conducted By", "Sub-Inspector (minimum: Head Constable)", "Executive Magistrate (NOT Judicial)"],
["When Done", "All unnatural/suspicious deaths", "Only in specific cases (see below)"],
["Can examine witnesses on oath?", "NO", "YES"],
["Can order post-mortem?", "YES", "YES"],
["Document prepared", "Panchanama (with 2 panch witnesses)", "Formal inquest report"],
["Powers", "Limited", "Greater – can summon witnesses, examine on oath"],
],
col_widths=[4.2*cm, 6.6*cm, 6.6*cm]
))
story.append(SP_SM)
story.append(Paragraph("When is Magistrate's Inquest Mandatory?", h3))
story.append(bullet_list([
"Death in <b>police custody or jail</b>",
"<b>Dowry deaths</b> – death within 5 years of marriage",
"<b>Exhumation</b> – when a buried body is dug up",
"Death of a person in a <b>mental hospital</b>",
]))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: Magistrate's 4 D's",
[
"<b>D</b>eath in custody (police/jail)",
"<b>D</b>owry death (within 5 yrs of marriage)",
"<b>D</b>ig up (exhumation of buried body)",
"<b>D</b>isturbed mind death (mental hospital)",
"→ If you see these 4 D's, MAGISTRATE does the inquest, not police!",
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 4: OFFENCES
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("4. OFFENCES – COGNIZABLE vs. NON-COGNIZABLE", bg=TEAL))
story.append(SP_SM)
story.append(definition_box(
"Cognizable Offence",
"A serious offence where police CAN arrest without a warrant and can investigate WITHOUT the "
"Magistrate's order. Examples: Murder, rape, robbery, dacoity, kidnapping."
))
story.append(SP_SM)
story.append(definition_box(
"Non-Cognizable Offence",
"A minor offence where police CANNOT arrest without a warrant and CANNOT investigate without "
"the Magistrate's permission. Examples: Cheating, forgery, defamation, simple assault."
))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: Cognizable = Can arrest without warrant (Both start with C!)",
[
"<b>C</b>ognizable → <b>C</b>op can arrest without warrant",
"Non-cognizable → Needs permission (warrant + magistrate order)",
"Seriousness: Cognizable offences are SERIOUS crimes; Non-cognizable are MINOR",
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 5: PUNISHMENTS
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("5. PUNISHMENTS UNDER BNS"))
story.append(SP_SM)
story.append(Paragraph("Types of punishment in India (under BNS – replaces IPC):", body))
story.append(SP_SM)
punishments = [
["1", "Death", "Capital punishment – highest penalty"],
["2", "Imprisonment for Life", "Life-long confinement"],
["3", "Rigorous Imprisonment (RI)", "With hard labour (e.g., grinding grain, breaking stones)"],
["4", "Simple Imprisonment (SI)", "Without hard labour"],
["5", "Forfeiture of Property", "Property seized by state"],
["6", "Fine", "Monetary penalty"],
["7", "Community Service", "NEW addition in BNS (not present in old IPC)"],
]
story.append(two_col_table(
["#", "Type of Punishment", "Description"],
punishments,
col_widths=[1.0*cm, 5.0*cm, 11.4*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: Death LR SIF C",
[
"<b>D</b>eath | <b>L</b>ife imprisonment | <b>R</b>igorous imprisonment | <b>S</b>imple imprisonment | <b>F</b>ine | <b>F</b>orfeiture | <b>C</b>ommunity service",
'Remember: "Death LoRes Simple Fine For Community" – 7 punishments total',
"Community Service is NEW in BNS – always a favourite MCQ!",
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 6: COURTS
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("6. COURTS OF LAW", bg=TEAL))
story.append(SP_SM)
story.append(two_col_table(
["Level", "Criminal Courts", "Civil Courts"],
[
["Lowest", "Executive Magistrate", "Munsif Court"],
["2nd", "Judicial Magistrate (1st / 2nd class)", "Sub-Judge Court"],
["3rd", "Chief Judicial Magistrate (CJM)", "District Court"],
["4th", "Sessions Court ← gives DEATH PENALTY", "High Court"],
["5th", "High Court", "Supreme Court"],
["Highest", "Supreme Court", "—"],
],
col_widths=[3.0*cm, 7.2*cm, 7.2*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"KEY FACT: Sessions Court = lowest court that can award DEATH PENALTY",
[
"Sessions Court handles cases punishable with death or life imprisonment",
"Executive Magistrate ≠ Judicial Magistrate (important distinction!)",
"Executive Magistrate conducts Magistrate's Inquest; Judicial Magistrate handles trials",
]
))
story.append(SP)
# PAGE BREAK
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════════════════
# SECTION 7: SUMMONS & CONDUCT MONEY
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("7. SUMMONS (SUBPOENA) & CONDUCT MONEY"))
story.append(SP_SM)
story.append(definition_box(
"Summons / Subpoena (Definition)",
"A summons is an official written court order requiring a person (including a doctor) to "
"appear in court and give evidence. It is served by a court officer (process server). "
"Failure to comply = Contempt of Court."
))
story.append(SP_SM)
story.append(definition_box(
"Conduct Money (Definition)",
"The travelling expenses and daily allowance paid to a witness (including a doctor) by the "
"court when they are summoned. A doctor has the right to REFUSE to appear if conduct money "
"is NOT paid. The amount varies by court type.",
bg=LIGHT_GREEN
))
story.append(SP_SM)
story.append(Paragraph("Doctor's Obligations with Summons:", h3))
story.append(bullet_list([
"MUST appear when summoned – cannot refuse without valid reason",
"If ill, must <b>inform the court in advance</b>",
"Failure to appear = Contempt of Court",
"CAN refuse if conduct money is NOT provided",
"Must bring all relevant records and reports",
]))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: SUMMONS = Must Go; MONEY = Can Refuse if Not Paid",
[
"Summons → Compulsory appearance (like an exam – you MUST show up)",
"No conduct money? → You can legally refuse – the court must pay you to come",
"Contempt of court = punishment for ignoring a summons",
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 8: MEDICAL EVIDENCE
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("8. MEDICAL EVIDENCE – DEFINITIONS & TYPES", bg=TEAL))
story.append(SP_SM)
story.append(definition_box(
"Evidence (Definition) – Section 2, BSA",
"Evidence means and includes: (1) All statements which the court permits or requires to be "
"made before it by witnesses in relation to matters of fact under inquiry. "
"(2) All documents produced for inspection of the court. "
"NOTE: Doctor's evidence is an OPINION (corroborative), not positive proof like an eyewitness."
))
story.append(SP_SM)
story.append(two_col_table(
["Type of Evidence", "Definition", "Example"],
[
["ORAL – Direct",
"Evidence of a fact directly in issue, witnessed personally by the person giving evidence.",
"Eyewitness saying 'I saw B stab A'"],
["ORAL – Circumstantial / Indirect",
"Evidence not from a direct eyewitness, but from facts that logically support the conclusion. Court draws inferences. (Section 4, BSA)",
"'C saw B with a knife near the murder scene minutes before the crime'"],
["ORAL – Hearsay",
"Statement made by a person about what they did NOT personally witness; obtained from a third party. Generally NOT admissible.",
"'A says B told him that C committed the crime' – only B can testify to that"],
["DOCUMENTARY – Primary",
"The original document itself produced for inspection of the court. (Section 208, BNS / Section 59, BSA)",
"Original prescription, original hospital record"],
["DOCUMENTARY – Secondary",
"Certified copies, copies made by mechanical process, copies compared with original, or oral account of document contents. (Section 58, BSA)",
"Photocopy of a discharge summary (certified)"],
],
col_widths=[3.8*cm, 7.8*cm, 5.8*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: D-C-H for Oral Evidence",
[
"<b>D</b>irect – personally witnessed",
"<b>C</b>ircumstantial – court draws logical inference from indirect facts",
"<b>H</b>earsay – heard from someone else; generally NOT allowed in court",
"Doctor's evidence = OPINION = corroborative (supports, doesn't prove by itself)",
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 9: DOCUMENTARY EVIDENCE (3 TYPES)
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("9. DOCUMENTARY EVIDENCE – 3 KEY TYPES"))
story.append(SP_SM)
story.append(definition_box(
"1. Medical Certificates",
"Documents issued by a doctor certifying ill-health, insanity, age, disability, etc. for legal purposes. "
"Must be truthful. Issuing a FALSE certificate is a criminal offence under Section 234, BNS. "
"Retention: Indoor records = 3 years (NMC) / 8 years (DGHS); Outdoor records = not mandatory (NMC)."
))
story.append(SP_SM)
story.append(definition_box(
"2. Medico-Legal Report (MLR / MLC Report)",
"A written report prepared by a doctor after examining a medicolegal case. Contains case history, "
"clinical findings, and medical opinion. Once signed, it becomes a legal document and can be used "
"as evidence in court. The doctor may be called to court to testify on it.",
bg=LIGHT_GREEN
))
story.append(SP_SM)
story.append(definition_box(
"3. Dying Declaration – Section 26, BSA (old Section 32, IEA)",
"A statement made by a DYING PERSON regarding the cause or circumstances of their death. "
"Key rules: (a) No oath required. (b) Can be oral, written, or by gestures/signs. "
"(c) Must be voluntary – no coaching. (d) Person must be in a FIT STATE OF MIND (doctor certifies this). "
"(e) Ideally recorded by a Magistrate; if unavailable, by a doctor or police officer. "
"(f) Person need NOT actually die for it to be valid. "
"(g) Can ALONE be the basis for conviction if reliable.",
bg=LIGHT_RED
))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: Dying Declaration – 'FOVG MAD'",
[
"<b>F</b>it state of mind (doctor must certify this)",
"<b>O</b>ath NOT required",
"<b>V</b>oluntary (no coaching or pressure)",
"<b>G</b>estures allowed (oral, written, or signs)",
"<b>M</b>agistrate records ideally (doctor/police if not available)",
"<b>A</b>lone sufficient for conviction (if reliable)",
"<b>D</b>eath NOT necessary for it to be valid",
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 10: WITNESSES
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("10. WITNESSES – TYPES & DEFINITIONS", bg=TEAL))
story.append(SP_SM)
story.append(two_col_table(
["Type", "Definition"],
[
["Ordinary / Common Witness",
"A person who states facts they have PERSONALLY observed, without giving any professional opinion."],
["Expert Witness",
"A person with special knowledge, skill, or experience in a particular field who gives a PROFESSIONAL OPINION to assist the court. "
"An expert can refer to standard textbooks; if he adopts a passage as his own view, it is treated as his evidence. "
"Expert opinion can be challenged by quoting standard textbooks."],
["Hostile Witness (Section 227, BNS)",
"A witness who is supposed to have some interest or motive for concealing part of the truth, or for giving completely false evidence. "
"Declared hostile by the court on request of the lawyer who SUMMONED the witness. "
"Once declared hostile, the SAME SIDE'S lawyer can cross-examine them."],
],
col_widths=[3.8*cm, 13.6*cm]
))
story.append(SP_SM)
story.append(definition_box(
"Doctor as BOTH Common AND Expert Witness",
"A doctor can act as BOTH types: "
"(1) COMMON WITNESS – when describing observable findings on the body (e.g., wound location, size, colour). "
"(2) EXPERT WITNESS – when giving professional opinion on cause of death, ante-mortem vs. post-mortem nature of injuries, "
"or whether injuries were suicidal, homicidal, or accidental.",
bg=LIGHT_BLUE
))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: Common vs. Expert Witness in a Doctor",
[
"<b>COMMON</b> = Describes what he SEES (observations = facts)",
"<b>EXPERT</b> = Says what he THINKS (interpretation = opinion)",
"Example: 'Wound is 3cm long' → Common witness",
"Example: 'Wound is antemortem and homicidal' → Expert witness",
]
))
story.append(SP)
# PAGE BREAK
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════════════════
# SECTION 11: PERJURY
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("11. PERJURY"))
story.append(SP_SM)
story.append(definition_box(
"Perjury (Definition) – Sections 227 & 228, BNS / Section 383, BNSS",
"Perjury means giving WILFUL FALSE or FABRICATED evidence. Whoever, being legally bound by an oath "
"or by an express provision of law to state the truth, makes any statement which is FALSE, and which "
"he either knows or believes to be false or does not believe to be true, is said to give false evidence. "
"It occurs when a person's earlier sworn statement and their later sworn statement COMPLETELY CONTRADICT each other. "
"PUNISHMENT: Imprisonment extending to SEVEN (7) YEARS [Section 229, BNS].",
bg=LIGHT_RED
))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: Perjury = 7 year Penalty for False Play",
[
"<b>P</b>erjury = <b>P</b>urposely lying under oath",
"Punishment = 7 years imprisonment",
"Applies to doctors too – falsifying a post-mortem report = perjury",
"Doctor may sit in court if lawyers of accused do NOT object",
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 12: ORDER OF EXAMINATION IN COURT
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("12. ORDER OF EXAMINATION IN COURT – Section 143, BSA", bg=TEAL))
story.append(SP_SM)
story.append(two_col_table(
["Step", "Name", "Who Asks Questions", "Purpose"],
[
["1st", "Examination-in-Chief", "Lawyer who CALLED the witness", "Establish facts favourable to their side"],
["2nd", "Cross-Examination", "Lawyer on the OPPOSITE side", "Challenge, discredit, or clarify the testimony"],
["3rd", "Re-Examination", "Original (calling) lawyer AGAIN", "Clarify only NEW matters raised during cross-examination"],
],
col_widths=[1.5*cm, 4.0*cm, 5.5*cm, 6.4*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"MNEMONIC: E-C-R (Examination → Cross → Re-examination)",
[
'Think: "Every Court has Rounds" – E then C then R',
"Re-examination is LIMITED to new matters raised in cross – cannot bring up old topics",
"Leading questions: NOT allowed in examination-in-chief; ALLOWED in cross-examination",
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# SECTION 13: DOCTOR'S DUTIES IN COURT
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("13. DOCTOR'S DUTIES IN COURT"))
story.append(SP_SM)
story.append(bullet_list([
"Appear promptly when summoned (carry the summons with you)",
"Bring all relevant records, MLRs, post-mortem reports – bring CERTIFIED COPIES, not originals",
"Give honest, impartial, and objective opinion – do NOT favour prosecution OR defence",
"Answer only what is asked – do not volunteer extra information",
"Say 'I don't know' or 'I don't remember' rather than guessing",
"Remain calm and polite; do NOT argue with lawyers",
"Ask the judge for clarification if a question is confusing or misleading",
"May refer to standard textbooks with court's permission",
"May request to be seated in the court – usually granted unless lawyers object",
"Use simple, non-technical language when explaining medical findings",
]))
story.append(SP_SM)
story.append(mnemonic_box(
"GOLDEN RULE for Doctor in Court",
[
"Be an IMPARTIAL WITNESS – your job is to help the court find the TRUTH, not to win a case",
"You are the 'eyes of the court' in medical matters – be precise and honest",
"If your written report says X and you say Y in court – that is contradictory evidence and damages credibility",
]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# QUICK REVISION TABLE
# ════════════════════════════════════════════════════════════════════════════
story.append(section_header("14. QUICK REVISION – ALL KEY DEFINITIONS AT A GLANCE", bg=TEAL))
story.append(SP_SM)
quick_defs = [
["Inquest", "Official inquiry into the CAUSE OF DEATH in unnatural/suspicious deaths"],
["Police Inquest", "Conducted by Sub-Inspector under Section 194, BNSS – for ALL unnatural deaths"],
["Magistrate's Inquest", "Conducted by Executive Magistrate under Section 195, BNSS – for 4 D's (custody, dowry, exhumation, mental hospital death)"],
["Cognizable Offence", "SERIOUS crime; police arrest WITHOUT warrant; investigate WITHOUT magistrate's order"],
["Non-Cognizable Offence", "MINOR crime; police need warrant to arrest and magistrate's order to investigate"],
["Summons / Subpoena", "Court order requiring a person to appear and give evidence; MUST comply"],
["Conduct Money", "Travel + daily allowance paid by court to witness; doctor CAN REFUSE if not paid"],
["Evidence", "Statements by witnesses + documents produced before court (Section 2, BSA)"],
["Direct Evidence", "Eyewitness testimony about a fact directly in issue"],
["Circumstantial Evidence", "Indirect evidence from which court draws logical inferences"],
["Hearsay Evidence", "Statement from a third party; generally NOT admissible"],
["Primary Evidence", "ORIGINAL document produced before court"],
["Secondary Evidence", "Certified copies or copies compared with the original"],
["Dying Declaration", "Statement by a DYING PERSON about cause of their death (Section 26, BSA); no oath required; can alone convict"],
["Medical Certificate", "Document by doctor certifying health status; false certificate = offence (Section 234, BNS)"],
["Common Witness", "States FACTS personally observed (no opinion)"],
["Expert Witness", "Gives PROFESSIONAL OPINION; can refer to textbooks"],
["Hostile Witness", "Witness who turns against the side that called them (Section 227, BNS); cross-examined by SAME side"],
["Perjury", "Willful false evidence under oath; punishment up to 7 YEARS (Section 229, BNS)"],
["Examination-in-Chief", "First examination by the lawyer who CALLED the witness"],
["Cross-Examination", "Examination by the OPPOSITE side's lawyer"],
["Re-Examination", "By original lawyer AGAIN – only on new matters from cross-examination"],
["BNS", "Bharatiya Nyaya Sanhita (Act 45/2023) – replaces IPC; defines crimes & punishments"],
["BNSS", "Bharatiya Nagarika Suraksha Sanhita (Act 46/2023) – replaces CrPC; procedure"],
["BSA", "Bharatiya Sakshya Adhiniyam (Act 47/2023) – replaces IEA; law of evidence"],
]
story.append(two_col_table(
["Term", "Quick Definition"],
quick_defs,
col_widths=[4.5*cm, 12.9*cm]
))
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# MNEMONICS MASTER SHEET
# ════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(section_header("15. MNEMONICS MASTER SHEET – ALL IN ONE"))
story.append(SP_SM)
mnemonics = [
("BNS / BNSS / BSA – 3 Laws",
["BNS (45) = Blames → defines CRIMES", "BNSS (46) = Brings to court → PROCEDURE",
"BSA (47) = Backs with proof → EVIDENCE", '"BNS punishes ➜ BNSS processes ➜ BSA proves"']),
("Magistrate's Inquest – 4 D's",
["Death in custody (police/jail)", "Dowry death (within 5 years of marriage)",
"Dig up (exhumation)", "Disturbed mind death (mental hospital)"]),
("Cognizable = C = Can arrest without warrant",
["Both Cognizable and Cop-can-arrest start with C",
"Non-Cognizable = Need permission for everything"]),
("7 Punishments – Death LR SI FF C",
["Death | Life imprisonment | Rigorous imprisonment | Simple imprisonment",
"Fine | Forfeiture | Community service (NEW in BNS)"]),
("Dying Declaration – FOVG MAD",
["Fit state of mind | Oath NOT required | Voluntary",
"Gestures allowed | Magistrate records ideally | Alone sufficient for conviction | Death NOT necessary"]),
("Order of Examination – E–C–R",
['"Every Court has Rounds"', "Examination-in-chief ➜ Cross-examination ➜ Re-examination",
"Re-examination: only NEW matters from cross"]),
("Doctor as Witness – See vs. Think",
["COMMON witness = Describes what he SEES (observations)",
"EXPERT witness = States what he THINKS (opinion/interpretation)"]),
("Perjury – 7-year Penalty",
["Perjury = Purposely lying under oath",
"Punishment = 7 years imprisonment (Section 229, BNS)"]),
("Evidence Types – D-C-H",
["Direct = personally witnessed", "Circumstantial = inferred from indirect facts",
"Hearsay = heard from someone else (generally NOT admissible)"]),
]
for title, lines in mnemonics:
story.append(mnemonic_box(title, lines))
story.append(SP_SM)
story.append(SP)
# ════════════════════════════════════════════════════════════════════════════
# FOOTER NOTE
# ════════════════════════════════════════════════════════════════════════════
story.append(HRFlowable(width="100%", thickness=0.5, color=TEAL))
story.append(SP_SM)
story.append(Paragraph(
"Source: The Essentials of Forensic Medicine & Toxicology, 36th Edition (2026) – KS Narayan Reddy & O P Murty | Study aid generated by Orris",
small_note
))
# ════════════════════════════════════════════════════════════════════════════
# HELPER: bullet list
# ════════════════════════════════════════════════════════════════════════════
# (defined here because Python functions must be defined before use in the flow)
# Actually defined above as inline – let's define it properly
# Build PDF
doc.build(story)
print(f"PDF created: {OUTPUT}")
~/forensic-legal-procedure/create_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, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/forensic-legal-procedure/Legal_Procedure_Forensic_KSNarayanReddy.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
NAVY = colors.HexColor("#1A2B5A")
TEAL = colors.HexColor("#0077B6")
ORANGE = colors.HexColor("#F4A400")
LIGHT_BLUE = colors.HexColor("#E8F4FD")
LIGHT_GOLD = colors.HexColor("#FFF8E7")
LIGHT_GREEN = colors.HexColor("#E8F8F2")
LIGHT_RED = colors.HexColor("#FEF0F0")
WHITE = colors.white
GREY_BG = colors.HexColor("#F5F5F5")
DARK_GREY = colors.HexColor("#333333")
MED_GREY = colors.HexColor("#666666")
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.8*cm, leftMargin=1.8*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm,
title="Legal Procedure - Forensic Medicine (KS Narayan Reddy)",
author="Orris Study Aid",
)
# ── Styles ──────────────────────────────────────────────────────────────────
def S(name, **kw):
return ParagraphStyle(name, **kw)
h1_style = S("H1s", fontSize=13, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_LEFT, spaceAfter=3, leading=17, leftIndent=4)
h2_style = S("H2s", fontSize=11, textColor=NAVY, fontName="Helvetica-Bold",
spaceBefore=5, spaceAfter=3, leading=15)
h3_style = S("H3s", fontSize=10, textColor=TEAL, fontName="Helvetica-Bold",
spaceBefore=4, spaceAfter=2, leading=13)
body_style = S("Bdy", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=14, spaceAfter=4, alignment=TA_JUSTIFY)
blt_style = S("Blt", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=14, leftIndent=14, spaceAfter=2)
sm_note = S("SmN", fontSize=8.5, textColor=MED_GREY, fontName="Helvetica-Oblique",
leading=12, spaceAfter=3, alignment=TA_CENTER)
# ── Helper: paragraph inside table cell ────────────────────────────────────
def P(txt, **kw):
st = S("_tmp", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=13, alignment=TA_LEFT, **kw)
return Paragraph(txt, st)
def PH(txt): # header cell
return Paragraph(txt, S("_th", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12))
# ── Helper: section header bar ──────────────────────────────────────────────
def section_header(text, bg=NAVY):
t = Table([[Paragraph(text, h1_style)]], colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return t
# ── Helper: coloured definition box ─────────────────────────────────────────
def def_box(term, defn, bg=LIGHT_BLUE):
rows = [
[Paragraph(f"<b>{term}</b>",
S("_dt", fontSize=10, textColor=NAVY, fontName="Helvetica-Bold", leading=14))],
[Paragraph(defn,
S("_db", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=13, alignment=TA_JUSTIFY))],
]
t = Table(rows, colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 0.5, TEAL),
]))
return t
# ── Helper: mnemonic (gold) box ──────────────────────────────────────────────
def mnemonic_box(title, lines):
rows = [[Paragraph(f"<b>MNEMONIC: {title}</b>",
S("_mt", fontSize=10, textColor=colors.HexColor("#7B4F00"),
fontName="Helvetica-Bold", leading=14))]]
for line in lines:
rows.append([Paragraph(line,
S("_ml", fontSize=9.5, textColor=DARK_GREY,
fontName="Helvetica", leading=13, leftIndent=10))])
t = Table(rows, colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_GOLD),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 1, ORANGE),
("LINEBELOW", (0,0), (-1,0), 1, ORANGE),
]))
return t
# ── Helper: comparison table ─────────────────────────────────────────────────
def ctable(headers, rows, col_widths):
data = [[PH(h) for h in headers]]
for row in rows:
data.append([P(str(c)) for c in row])
t = Table(data, colWidths=col_widths)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("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, colors.HexColor("#CCCCCC")),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, GREY_BG]),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
return t
# ── Helper: bullet list ───────────────────────────────────────────────────────
def bullets(items):
return [Paragraph(f"• {item}", blt_style) for item in items]
SP = Spacer(1, 0.28*cm)
SP_SM = Spacer(1, 0.14*cm)
# ════════════════════════════════════════════════════════════════════════════
# BUILD STORY
# ════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER BANNER ─────────────────────────────────────────────────────────────
cover_rows = [
[Paragraph("FORENSIC MEDICINE",
S("cT", fontSize=20, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=26))],
[Paragraph("Legal Procedure",
S("cS", fontSize=16, textColor=ORANGE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=22))],
[Paragraph("Complete Definitions & Mnemonics",
S("cU", fontSize=11, textColor=LIGHT_BLUE, fontName="Helvetica",
alignment=TA_CENTER, leading=15))],
[Spacer(1, 0.15*cm)],
[Paragraph("<i>Based on KS Narayan Reddy – Essentials of Forensic Medicine & Toxicology (36th Ed., 2026)</i>",
S("cR", fontSize=9, textColor=LIGHT_BLUE, fontName="Helvetica-Oblique",
alignment=TA_CENTER, leading=12))],
]
cover = Table(cover_rows, colWidths=[17.4*cm])
cover.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 9),
("BOTTOMPADDING", (0,0), (-1,-1), 9),
("LEFTPADDING", (0,0), (-1,-1), 14),
("RIGHTPADDING", (0,0), (-1,-1), 14),
("BOX", (0,0), (-1,-1), 2.5, ORANGE),
]))
story += [cover, SP]
# ── SECTION 1: THE THREE LAWS ─────────────────────────────────────────────────
story += [section_header("1. THE THREE LANDMARK LAWS (2023 Replacements)"), SP_SM]
story.append(Paragraph("India replaced old British-era laws in 2023. Know both old and new names:", body_style))
story.append(SP_SM)
story.append(ctable(
["Old Name", "New Name (2023)", "What It Does"],
[
["IPC – Indian Penal Code, 1860",
"BNS – Bharatiya Nyaya Sanhita (Act 45/2023)",
"Defines crimes & prescribes punishments (substantive criminal law)"],
["CrPC – Criminal Procedure Code, 1973",
"BNSS – Bharatiya Nagarika Suraksha Sanhita (Act 46/2023)",
"Procedure: police duties, investigation, court proceedings, appeals"],
["IEA – Indian Evidence Act, 1872",
"BSA – Bharatiya Sakshya Adhiniyam (Act 47/2023)",
"Law of evidence – collection, preservation, admissibility. Applies to ALL courts"],
],
col_widths=[4.8*cm, 6.2*cm, 6.4*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"BNS / BNSS / BSA",
[
"<b>BNS (45) = Blames</b> – defines CRIMES and punishments",
"<b>BNSS (46) = Brings to court</b> – PROCEDURE for prosecution",
"<b>BSA (47) = Backs with proof</b> – law of EVIDENCE",
'"BNS punishes ➜ BNSS processes ➜ BSA proves" | Acts: 45, 46, 47 (consecutive)',
]
))
story.append(SP)
# ── SECTION 2: TYPES OF LAW ───────────────────────────────────────────────────
story += [section_header("2. TYPES OF LAW & CASES", bg=TEAL), SP_SM]
story.append(ctable(
["Type", "Definition", "Parties"],
[
["Criminal Law",
"Offences against public interest – murder, theft, rape, assault.",
"STATE (public prosecutor) vs. ACCUSED"],
["Civil Law",
"Disputes between two individuals – property, divorce, contracts.",
"PLAINTIFF vs. DEFENDANT"],
["Common Law",
"Law made by judges through decisions in individual cases (judge-made / case law).",
"—"],
],
col_widths=[3.2*cm, 9.2*cm, 5.0*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"Who is Who?",
[
"<b>Criminal</b>: State prosecutes → 'State CARES about society'",
"<b>Civil</b>: Plaintiff files, Defendant defends → 'P files, D defends'",
"Defendant = used in BOTH criminal AND civil cases for the person being accused",
]
))
story.append(SP)
# ── SECTION 3: INQUEST ────────────────────────────────────────────────────────
story += [section_header("3. INQUEST"), SP_SM]
story.append(def_box(
"INQUEST (Definition)",
"An official inquiry or investigation into the CAUSE OF DEATH. Conducted in cases of suicide, "
"murder, killing by animal or machinery, accidents, deaths due to torture or ill-treatment, "
"occupational diseases, suspected medical negligence, suspicious (unnatural) deaths, deaths "
"during anaesthesia/operation, and unidentified or skeletonised bodies."
))
story.append(SP_SM)
story.append(Paragraph("Two Types of Inquest in India:", h2_style))
story.append(ctable(
["Feature", "Police Inquest", "Magistrate's Inquest"],
[
["Legal Section", "Sec 194, BNSS (old Sec 174, CrPC)", "Sec 195, BNSS (old Sec 176, CrPC)"],
["Conducted By", "Sub-Inspector (min: Head Constable)", "Executive Magistrate (NOT Judicial)"],
["When Done", "ALL unnatural / suspicious deaths", "Only for specific cases (4 D's – see below)"],
["Examine on oath?", "NO", "YES"],
["Can order post-mortem?", "YES", "YES"],
["Document", "Panchanama (2 panch witnesses)", "Formal inquest report"],
["Powers", "Limited", "Greater – can summon & examine witnesses on oath"],
],
col_widths=[4.0*cm, 6.7*cm, 6.7*cm]
))
story.append(SP_SM)
story.append(Paragraph("Magistrate's Inquest is MANDATORY in:", h3_style))
story += bullets([
"Death in <b>police custody or jail</b>",
"<b>Dowry deaths</b> – within 5 years of marriage",
"<b>Exhumation</b> – digging up a buried body",
"Death in a <b>mental hospital</b>",
])
story.append(SP_SM)
story.append(mnemonic_box(
"Magistrate's 4 D's",
[
"<b>D</b>eath in custody (police/jail)",
"<b>D</b>owry death (within 5 yrs of marriage)",
"<b>D</b>ig up (exhumation of buried body)",
"<b>D</b>isturbed mind death (mental hospital)",
"If any of these 4 D's → MAGISTRATE does the inquest, NOT police!",
]
))
story.append(SP)
# ── SECTION 4: OFFENCES ───────────────────────────────────────────────────────
story += [section_header("4. COGNIZABLE vs. NON-COGNIZABLE OFFENCES", bg=TEAL), SP_SM]
story.append(def_box(
"Cognizable Offence",
"A SERIOUS crime where police CAN arrest WITHOUT a warrant and can investigate WITHOUT "
"the magistrate's order. Examples: Murder, rape, robbery, dacoity, kidnapping."
))
story.append(SP_SM)
story.append(def_box(
"Non-Cognizable Offence",
"A MINOR crime where police CANNOT arrest without a warrant and CANNOT investigate "
"without the magistrate's permission. Examples: Cheating, forgery, defamation, simple assault.",
bg=LIGHT_GREEN
))
story.append(SP_SM)
story.append(mnemonic_box(
"Cognizable = Can arrest without warrant (Both start with C!)",
[
"<b>C</b>ognizable → <b>C</b>op can arrest without warrant, <b>C</b>an investigate independently",
"Non-cognizable → Needs permission for BOTH arrest (warrant) AND investigation (magistrate)",
"Seriousness: Cognizable = SERIOUS | Non-cognizable = MINOR",
]
))
story.append(SP)
# ── SECTION 5: PUNISHMENTS ────────────────────────────────────────────────────
story += [section_header("5. PUNISHMENTS UNDER BNS"), SP_SM]
story.append(ctable(
["#", "Type", "Description"],
[
["1", "Death", "Capital punishment"],
["2", "Imprisonment for Life", "Lifelong confinement"],
["3", "Rigorous Imprisonment (RI)", "WITH hard labour (e.g., grinding grain, breaking stones)"],
["4", "Simple Imprisonment (SI)", "WITHOUT hard labour"],
["5", "Forfeiture of Property", "State seizes property"],
["6", "Fine", "Monetary penalty"],
["7", "Community Service", "<b>NEW</b> in BNS – not present in old IPC! (favourite MCQ)"],
],
col_widths=[1.0*cm, 5.0*cm, 11.4*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
'"DeLRSI-FF-C" – 7 Punishments',
[
"<b>De</b>ath | <b>L</b>ife | <b>R</b>igorous | <b>S</b>imple | <b>I</b>mprisonment | <b>F</b>ine | <b>F</b>orfeiture | <b>C</b>ommunity service",
"Community Service is BRAND NEW in BNS – always ask in MCQs!",
]
))
story.append(SP)
# ── SECTION 6: COURTS ─────────────────────────────────────────────────────────
story += [section_header("6. COURTS OF LAW", bg=TEAL), SP_SM]
story.append(ctable(
["Level (Low→High)", "Criminal Courts", "Civil Courts"],
[
["1 (Lowest)", "Executive Magistrate", "Munsif Court"],
["2", "Judicial Magistrate (1st / 2nd class)", "Sub-Judge Court"],
["3", "Chief Judicial Magistrate (CJM)", "District Court"],
["4", "Sessions Court ← DEATH PENALTY awarded here", "High Court"],
["5", "High Court", "Supreme Court"],
["6 (Highest)", "Supreme Court", "—"],
],
col_widths=[3.2*cm, 7.1*cm, 7.1*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"KEY FACT: Sessions Court = Lowest court that awards DEATH PENALTY",
[
"Executive Magistrate ≠ Judicial Magistrate (Important distinction!)",
"Executive Magistrate → conducts Magistrate's Inquest",
"Judicial Magistrate → handles criminal trials",
]
))
story.append(SP)
# PAGE BREAK
story.append(PageBreak())
# ── SECTION 7: SUMMONS & CONDUCT MONEY ───────────────────────────────────────
story += [section_header("7. SUMMONS (SUBPOENA) & CONDUCT MONEY"), SP_SM]
story.append(def_box(
"Summons / Subpoena (Definition)",
"An official written court order requiring a person (including a doctor) to appear in court "
"and give evidence. Served by a court officer (process server). "
"Failure to comply = Contempt of Court."
))
story.append(SP_SM)
story.append(def_box(
"Conduct Money (Definition)",
"Travelling expenses + daily allowance paid by the court to a summoned witness (including a doctor). "
"A doctor has the RIGHT to REFUSE to appear if conduct money is NOT paid. Amount varies by court type.",
bg=LIGHT_GREEN
))
story.append(SP_SM)
story += bullets([
"Doctor MUST appear when summoned – cannot refuse without valid reason",
"If ill, must <b>inform the court in advance</b>",
"Failure to appear = Contempt of Court",
"CAN refuse if conduct money is NOT provided",
"Must bring all relevant records and reports (certified copies, NOT originals)",
])
story.append(SP_SM)
story.append(mnemonic_box(
"SUMMONS = Must Go | No Money = Can Refuse",
[
"Summons → Compulsory (like an exam – you MUST attend)",
"No conduct money paid? → You can LEGALLY refuse",
"Always bring: certified copies of reports (keep originals safe)",
]
))
story.append(SP)
# ── SECTION 8: MEDICAL EVIDENCE ──────────────────────────────────────────────
story += [section_header("8. MEDICAL EVIDENCE – TYPES & DEFINITIONS", bg=TEAL), SP_SM]
story.append(def_box(
"Evidence (Definition) – Section 2, BSA",
"(1) All statements which the court permits or requires to be made before it by witnesses "
"in relation to matters of fact under inquiry. (2) All documents produced for inspection of the court. "
"NOTE: Doctor's evidence is an OPINION (corroborative) – NOT positive proof like an eyewitness."
))
story.append(SP_SM)
story.append(ctable(
["Type", "Definition", "Example"],
[
["ORAL – Direct",
"Personally witnessed testimony about a fact directly in issue.",
"'I saw B stab A'"],
["ORAL – Circumstantial / Indirect",
"Indirect evidence; court draws logical inferences. (Section 4, BSA)",
"'C saw B with a knife near the scene just before the murder'"],
["ORAL – Hearsay",
"Statement about what the witness did NOT personally see – from a third party. Generally NOT admissible.",
"'A says B told him C committed the crime'"],
["DOCUMENTARY – Primary",
"The ORIGINAL document produced before the court. (Section 208, BNS / Sec 59, BSA)",
"Original prescription or hospital record"],
["DOCUMENTARY – Secondary",
"Certified copies, mechanical copies, or copies compared with the original. (Section 58, BSA)",
"Certified photocopy of discharge summary"],
],
col_widths=[3.8*cm, 7.8*cm, 5.8*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"D-C-H for Oral Evidence",
[
"<b>D</b>irect = personally witnessed",
"<b>C</b>ircumstantial = inferred from indirect facts (court draws logical conclusion)",
"<b>H</b>earsay = heard from someone else → generally NOT admissible",
"Doctor's evidence = OPINION = corroborative (supports, does not prove by itself)",
]
))
story.append(SP)
# ── SECTION 9: DOCUMENTARY EVIDENCE (3 Types) ────────────────────────────────
story += [section_header("9. DOCUMENTARY EVIDENCE – 3 KEY TYPES"), SP_SM]
story.append(def_box(
"1. Medical Certificates",
"Documents issued by a doctor certifying ill-health, insanity, age, disability, etc. "
"Must be truthful. Issuing a FALSE certificate = criminal offence (Section 234, BNS). "
"<b>Retention:</b> Indoor records = 3 years (NMC) / 8 years (DGHS); Outdoor records = not mandatory (NMC)."
))
story.append(SP_SM)
story.append(def_box(
"2. Medico-Legal Report (MLR / MLC Report)",
"Written report by a doctor after examining a medicolegal case. Contains case history, "
"clinical findings, and medical opinion. Once signed, it becomes a LEGAL DOCUMENT and "
"can be used as evidence in court. The doctor may be called to testify on it.",
bg=LIGHT_GREEN
))
story.append(SP_SM)
story.append(def_box(
"3. Dying Declaration – Section 26, BSA (old Section 32, IEA)",
"Statement made by a DYING PERSON regarding the cause or circumstances of their death. "
"Key rules: (a) No oath required. (b) Can be oral, written, or by gestures/signs. "
"(c) Must be VOLUNTARY – no coaching or pressure. "
"(d) Person must be in a FIT STATE OF MIND (doctor certifies this). "
"(e) Ideally recorded by a MAGISTRATE; if unavailable, by a doctor or police officer. "
"(f) Person need NOT actually die for it to be valid. "
"(g) Can ALONE be the sole basis for conviction if it is reliable.",
bg=LIGHT_RED
))
story.append(SP_SM)
story.append(mnemonic_box(
"Dying Declaration – 'FOVG MAD'",
[
"<b>F</b>it state of mind (doctor certifies this)",
"<b>O</b>ath NOT required",
"<b>V</b>oluntary (no coaching or pressure)",
"<b>G</b>estures allowed (oral / written / signs)",
"<b>M</b>agistrate records ideally (doctor / police if not available)",
"<b>A</b>lone sufficient for conviction (if reliable)",
"<b>D</b>eath NOT necessary for it to be valid",
]
))
story.append(SP)
# ── SECTION 10: WITNESSES ─────────────────────────────────────────────────────
story += [section_header("10. WITNESSES – TYPES & DEFINITIONS", bg=TEAL), SP_SM]
story.append(ctable(
["Type", "Definition"],
[
["Ordinary / Common Witness",
"States facts PERSONALLY OBSERVED. No professional opinion involved."],
["Expert Witness",
"Person with special knowledge/skill/experience in a field who gives a PROFESSIONAL OPINION "
"to assist the court. Can refer to standard textbooks; if the expert adopts a passage as "
"their own view, it is treated as their evidence. Opinion can be challenged by textbooks."],
["Hostile Witness (Sec 227, BNS)",
"A witness who turns against the side that called them – conceals truth or gives false evidence. "
"Court declares them hostile on request of the summoning lawyer. "
"Once hostile: the SAME SIDE'S lawyer can cross-examine them."],
],
col_widths=[4.0*cm, 13.4*cm]
))
story.append(SP_SM)
story.append(def_box(
"Doctor as BOTH Common AND Expert Witness",
"(1) <b>COMMON witness</b> – when describing OBSERVABLE findings (wound location, size, colour). "
"(2) <b>EXPERT witness</b> – when giving PROFESSIONAL OPINION on cause of death, "
"ante-mortem vs. post-mortem nature, or suicidal/homicidal/accidental classification.",
bg=LIGHT_BLUE
))
story.append(SP_SM)
story.append(mnemonic_box(
"Common vs. Expert: SEE vs. THINK",
[
"<b>COMMON</b> witness = Describes what he <b>SEES</b> (observations = facts)",
"<b>EXPERT</b> witness = States what he <b>THINKS</b> (interpretation = opinion)",
"Example: 'Wound is 3 cm long' → Common | 'Wound is antemortem & homicidal' → Expert",
]
))
story.append(SP)
# ── SECTION 11: PERJURY ───────────────────────────────────────────────────────
story += [section_header("11. PERJURY"), SP_SM]
story.append(def_box(
"Perjury (Definition) – Sections 227 & 228, BNS / Section 383, BNSS",
"Giving WILFUL FALSE or FABRICATED evidence under oath. Whoever, being legally bound by an oath, "
"makes any statement which is FALSE and which he knows or believes to be false, is said to give "
"false evidence. It occurs when a person's earlier sworn statement and their later sworn statement "
"COMPLETELY CONTRADICT each other and cannot be reconciled. "
"<b>PUNISHMENT: Imprisonment up to SEVEN (7) YEARS [Section 229, BNS].</b>",
bg=LIGHT_RED
))
story.append(SP_SM)
story.append(mnemonic_box(
"Perjury = 7-year Penalty for False Play",
[
"<b>P</b>erjury = <b>P</b>urposely lying under oath",
"Punishment = <b>7 years</b> imprisonment (Section 229, BNS)",
"Applies to doctors too – falsifying a post-mortem report = perjury",
"Doctor may SIT in court unless lawyers of the accused object",
]
))
story.append(SP)
# ── SECTION 12: ORDER OF EXAMINATION ─────────────────────────────────────────
story += [section_header("12. ORDER OF EXAMINATION IN COURT – Section 143, BSA", bg=TEAL), SP_SM]
story.append(ctable(
["Step", "Name", "Who Asks Questions", "Purpose"],
[
["1st", "Examination-in-Chief",
"Lawyer who <b>CALLED</b> the witness",
"Establish facts favourable to their side; leading questions NOT allowed"],
["2nd", "Cross-Examination",
"Lawyer on the <b>OPPOSITE</b> side",
"Challenge, discredit, or clarify; leading questions ARE allowed"],
["3rd", "Re-Examination",
"Original (calling) lawyer <b>AGAIN</b>",
"Clarify only NEW matters raised in cross-examination; cannot revisit old topics"],
],
col_widths=[1.5*cm, 4.2*cm, 5.5*cm, 6.2*cm]
))
story.append(SP_SM)
story.append(mnemonic_box(
"E-C-R: Every Court has Rounds",
[
"<b>E</b>xamination-in-chief → <b>C</b>ross-examination → <b>R</b>e-examination",
"Re-examination = LIMITED to new matters raised in cross (cannot repeat old topics)",
"Leading questions: FORBIDDEN in examination-in-chief | ALLOWED in cross-examination",
]
))
story.append(SP)
# ── SECTION 13: DOCTOR'S DUTIES IN COURT ─────────────────────────────────────
story += [section_header("13. DOCTOR'S DUTIES IN COURT"), SP_SM]
story += bullets([
"Appear promptly when summoned; carry the summons",
"Bring <b>certified copies</b> of MLR, post-mortem reports – NOT originals",
"Give honest, impartial, objective opinion – do NOT favour prosecution OR defence",
"Answer ONLY what is asked – do not volunteer extra information",
"Say 'I don't know' or 'I don't remember' rather than guessing",
"Remain calm and polite; do NOT argue with lawyers",
"Ask the judge for clarification if a question is confusing or misleading",
"May refer to standard textbooks with the court's permission",
"May request to be seated – usually granted unless lawyers for the accused object",
"Use simple, non-technical language when explaining medical findings to the court",
])
story.append(SP_SM)
story.append(mnemonic_box(
"GOLDEN RULE: You are the Court's Medical Expert – be IMPARTIAL",
[
"Your job is to help the court find the TRUTH, not to 'win' a case for either side",
"If your written report says X and you say Y in court → damages your credibility",
"Being an honest, clear, impartial expert is the highest standard",
]
))
story.append(SP)
# PAGE BREAK
story.append(PageBreak())
# ── SECTION 14: QUICK REVISION TABLE ─────────────────────────────────────────
story += [section_header("14. QUICK REVISION – ALL KEY DEFINITIONS AT A GLANCE", bg=TEAL), SP_SM]
story.append(ctable(
["Term", "Quick Definition / Key Fact"],
[
["Inquest", "Official inquiry into the CAUSE OF DEATH in unnatural/suspicious deaths"],
["Police Inquest", "Sub-Inspector | Sec 194, BNSS | ALL unnatural deaths | Panchanama"],
["Magistrate's Inquest", "Executive Magistrate | Sec 195, BNSS | 4 D's: Custody, Dowry, Dig-up, Disturbed"],
["Cognizable Offence", "SERIOUS crime; police arrest WITHOUT warrant, investigate WITHOUT magistrate"],
["Non-Cognizable Offence", "MINOR crime; need warrant to arrest + magistrate order to investigate"],
["Summons", "Court order to appear; MUST comply; failure = contempt of court"],
["Conduct Money", "Travel + daily allowance from court; doctor CAN REFUSE if NOT paid"],
["Evidence (BSA)", "Statements by witnesses + documents produced before court"],
["Direct Evidence", "Eyewitness; personally saw the fact in issue"],
["Circumstantial Evidence", "Indirect facts; court draws logical inference (Sec 4, BSA)"],
["Hearsay Evidence", "Heard from someone else; generally NOT admissible"],
["Primary Evidence", "ORIGINAL document before the court"],
["Secondary Evidence", "Certified copies / copies compared with original (Sec 58, BSA)"],
["Medical Certificate", "False certificate = offence Sec 234, BNS; Retention 3 yrs (NMC) / 8 yrs (DGHS)"],
["Dying Declaration", "Sec 26, BSA; no oath; voluntary; fit mind; alone sufficient for conviction"],
["Common Witness", "States FACTS personally observed – no opinion"],
["Expert Witness", "Gives PROFESSIONAL OPINION; can refer to textbooks"],
["Hostile Witness", "Turns against calling side (Sec 227, BNS); cross-examined by SAME side"],
["Perjury", "Wilful false evidence under oath; 7 YEARS imprisonment (Sec 229, BNS)"],
["Examination-in-Chief", "1st – by lawyer who called the witness"],
["Cross-Examination", "2nd – by OPPOSITE side's lawyer"],
["Re-Examination", "3rd – by original lawyer; ONLY on new matters from cross"],
["BNS", "Bharatiya Nyaya Sanhita – Act 45/2023 – replaces IPC – CRIMES & PUNISHMENTS"],
["BNSS", "Bharatiya Nagarika Suraksha Sanhita – Act 46/2023 – replaces CrPC – PROCEDURE"],
["BSA", "Bharatiya Sakshya Adhiniyam – Act 47/2023 – replaces IEA – EVIDENCE"],
],
col_widths=[4.5*cm, 12.9*cm]
))
story.append(SP)
# ── SECTION 15: MNEMONICS MASTER SHEET ───────────────────────────────────────
story += [section_header("15. MNEMONICS MASTER SHEET – ALL IN ONE"), SP_SM]
mnem_data = [
("BNS / BNSS / BSA",
["BNS (45) = Blames → defines CRIMES",
"BNSS (46) = Brings to court → PROCEDURE",
"BSA (47) = Backs with proof → EVIDENCE",
'"BNS punishes ➜ BNSS processes ➜ BSA proves" | Acts: 45, 46, 47 (consecutive!)']),
("Magistrate Inquest – 4 D's",
["Death in custody", "Dowry death (within 5 yrs)", "Dig up (exhumation)", "Disturbed mind death (mental hospital)"]),
("Cognizable = C = Can arrest without warrant",
["Cognizable → Cop can arrest without warrant, Can investigate independently",
"Non-Cognizable → Needs warrant + magistrate permission"]),
("7 Punishments – DeLRSI-FF-C",
["Death | Life | Rigorous | Simple | Imprisonment | Fine | Forfeiture | Community service",
"Community Service = NEW in BNS (not in old IPC) → always in MCQs!"]),
("Dying Declaration – FOVG MAD",
["Fit mind | Oath not required | Voluntary | Gestures allowed",
"Magistrate records ideally | Alone sufficient for conviction | Death not necessary"]),
("Order of Examination – E-C-R",
['"Every Court has Rounds"',
"Examination-in-chief ➜ Cross-examination ➜ Re-examination",
"Re-examination = ONLY new matters from cross"]),
("Doctor as Witness – SEE vs. THINK",
["COMMON = Describes what he SEES (observations = facts)",
"EXPERT = States what he THINKS (interpretation = opinion)"]),
("Perjury – 7-year Penalty",
["Perjury = Purposely lying under oath",
"7 years imprisonment (Section 229, BNS)"]),
("Evidence Types – D-C-H",
["Direct = personally witnessed",
"Circumstantial = court draws logical inference",
"Hearsay = heard from someone else → generally NOT admissible"]),
]
for title, lines in mnem_data:
story.append(mnemonic_box(title, lines))
story.append(SP_SM)
story.append(SP)
# ── FOOTER ────────────────────────────────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=0.5, color=TEAL))
story.append(SP_SM)
story.append(Paragraph(
"Source: The Essentials of Forensic Medicine & Toxicology, 36th Edition (2026) – "
"KS Narayan Reddy & O P Murty | Study aid generated by Orris",
sm_note
))
# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created successfully: {OUTPUT}")
~/forensic-legal-procedure/create_pdf.py
Error: String not found in file: '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, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY'rm /home/daytona/workspace/forensic-legal-procedure/create_pdf.py
~/forensic-legal-procedure/create_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/forensic-legal-procedure/Legal_Procedure_Forensic_KSNarayanReddy.pdf"
# Colours
NAVY = colors.HexColor("#1A2B5A")
TEAL = colors.HexColor("#0077B6")
ORANGE = colors.HexColor("#F4A400")
LIGHT_BLUE = colors.HexColor("#E8F4FD")
LIGHT_GOLD = colors.HexColor("#FFF8E7")
LIGHT_GREEN = colors.HexColor("#E8F8F2")
LIGHT_RED = colors.HexColor("#FEF0F0")
WHITE = colors.white
GREY_BG = colors.HexColor("#F5F5F5")
DARK_GREY = colors.HexColor("#333333")
MED_GREY = colors.HexColor("#666666")
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
rightMargin=1.8*cm, leftMargin=1.8*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm,
title="Legal Procedure - Forensic Medicine (KS Narayan Reddy)",
author="Orris Study Aid",
)
def S(name, **kw):
return ParagraphStyle(name, **kw)
h1s = S("h1s", fontSize=13, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_LEFT, spaceAfter=3, leading=17, leftIndent=4)
h2s = S("h2s", fontSize=11, textColor=NAVY, fontName="Helvetica-Bold",
spaceBefore=5, spaceAfter=3, leading=15)
h3s = S("h3s", fontSize=10, textColor=TEAL, fontName="Helvetica-Bold",
spaceBefore=4, spaceAfter=2, leading=13)
bdy = S("bdy", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=14, spaceAfter=4, alignment=TA_JUSTIFY)
blt = S("blt", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=14, leftIndent=14, spaceAfter=2)
smn = S("smn", fontSize=8.5, textColor=MED_GREY, fontName="Helvetica-Oblique",
leading=12, spaceAfter=3, alignment=TA_CENTER)
def P(txt, **kw):
st = S("_p", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=13, alignment=TA_LEFT, **kw)
return Paragraph(txt, st)
def PH(txt):
return Paragraph(txt, S("_ph", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12))
def sec(text, bg=NAVY):
t = Table([[Paragraph(text, h1s)]], colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return t
def defbox(term, defn, bg=LIGHT_BLUE):
rows = [
[Paragraph("<b>"+term+"</b>",
S("_dt", fontSize=10, textColor=NAVY, fontName="Helvetica-Bold", leading=14))],
[Paragraph(defn,
S("_db", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=13, alignment=TA_JUSTIFY))],
]
t = Table(rows, colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 0.5, TEAL),
]))
return t
def mnbox(title, lines):
rows = [[Paragraph("<b>MNEMONIC: "+title+"</b>",
S("_mt", fontSize=10, textColor=colors.HexColor("#7B4F00"),
fontName="Helvetica-Bold", leading=14))]]
for line in lines:
rows.append([Paragraph(line,
S("_ml", fontSize=9.5, textColor=DARK_GREY,
fontName="Helvetica", leading=13, leftIndent=10))])
t = Table(rows, colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_GOLD),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 1, ORANGE),
("LINEBELOW", (0,0), (-1,0), 1, ORANGE),
]))
return t
def ctbl(headers, rows, cw):
data = [[PH(h) for h in headers]]
for row in rows:
data.append([P(str(c)) for c in row])
t = Table(data, colWidths=cw)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("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, colors.HexColor("#CCCCCC")),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, GREY_BG]),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
return t
def blist(items):
return [Paragraph("• " + item, blt) for item in items]
SP = Spacer(1, 0.28*cm)
SPSM = Spacer(1, 0.14*cm)
# ── STORY ──────────────────────────────────────────────────────────────────
story = []
# Cover
cr = [
[Paragraph("FORENSIC MEDICINE",
S("ct",fontSize=20,textColor=WHITE,fontName="Helvetica-Bold",alignment=TA_CENTER,leading=26))],
[Paragraph("Legal Procedure",
S("cs",fontSize=16,textColor=ORANGE,fontName="Helvetica-Bold",alignment=TA_CENTER,leading=22))],
[Paragraph("Complete Definitions & Mnemonics",
S("cu",fontSize=11,textColor=LIGHT_BLUE,fontName="Helvetica",alignment=TA_CENTER,leading=15))],
[Spacer(1,0.15*cm)],
[Paragraph("<i>Based on KS Narayan Reddy – Essentials of Forensic Medicine & Toxicology (36th Ed., 2026)</i>",
S("cr",fontSize=9,textColor=LIGHT_BLUE,fontName="Helvetica-Oblique",alignment=TA_CENTER,leading=12))],
]
cv = Table(cr, colWidths=[17.4*cm])
cv.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),NAVY),
("TOPPADDING",(0,0),(-1,-1),9),
("BOTTOMPADDING",(0,0),(-1,-1),9),
("LEFTPADDING",(0,0),(-1,-1),14),
("RIGHTPADDING",(0,0),(-1,-1),14),
("BOX",(0,0),(-1,-1),2.5,ORANGE),
]))
story += [cv, SP]
# ── S1: THREE LAWS ──────────────────────────────────────────────────────────
story += [sec("1. THE THREE LANDMARK LAWS (2023 Replacements)"), SPSM]
story.append(Paragraph("India replaced old British-era laws in 2023. Know BOTH old and new names:", bdy))
story.append(SPSM)
story.append(ctbl(
["Old Name","New Name (2023)","What It Does"],
[
["IPC – Indian Penal Code, 1860",
"BNS – Bharatiya Nyaya Sanhita (Act 45/2023)",
"Defines crimes & prescribes punishments (substantive criminal law)"],
["CrPC – Criminal Procedure Code, 1973",
"BNSS – Bharatiya Nagarika Suraksha Sanhita (Act 46/2023)",
"Procedure: police duties, investigation, court proceedings, appeals"],
["IEA – Indian Evidence Act, 1872",
"BSA – Bharatiya Sakshya Adhiniyam (Act 47/2023)",
"Law of evidence – collection, preservation, admissibility. Applies to ALL courts"],
],
cw=[4.8*cm,6.2*cm,6.4*cm]
))
story += [SPSM, mnbox(
"BNS / BNSS / BSA",
["<b>BNS (45) = Blames</b> – defines CRIMES and punishments",
"<b>BNSS (46) = Brings to court</b> – PROCEDURE for prosecution",
"<b>BSA (47) = Backs with proof</b> – law of EVIDENCE",
'"BNS punishes ➜ BNSS processes ➜ BSA proves" | Acts: 45, 46, 47 (consecutive)']
), SP]
# ── S2: TYPES OF LAW ────────────────────────────────────────────────────────
story += [sec("2. TYPES OF LAW & CASES", bg=TEAL), SPSM]
story.append(ctbl(
["Type","Definition","Parties"],
[
["Criminal Law","Offences against public interest – murder, theft, rape, assault.","STATE (public prosecutor) vs. ACCUSED"],
["Civil Law","Disputes between two individuals – property, divorce, contracts.","PLAINTIFF vs. DEFENDANT"],
["Common Law","Law made by judges through decisions in individual cases (case law).","—"],
],
cw=[3.2*cm,9.2*cm,5.0*cm]
))
story += [SPSM, mnbox(
"Who is Who?",
["<b>Criminal</b>: State prosecutes → 'State CARES about society'",
"<b>Civil</b>: Plaintiff files, Defendant defends → 'P files, D defends'",
"Defendant = used in BOTH criminal AND civil cases"]
), SP]
# ── S3: INQUEST ─────────────────────────────────────────────────────────────
story += [sec("3. INQUEST"), SPSM]
story.append(defbox(
"INQUEST (Definition)",
"An official inquiry or investigation into the CAUSE OF DEATH. Conducted in: suicide, murder, "
"killing by animal/machinery, accidents, deaths due to torture/ill-treatment, occupational diseases, "
"suspected medical negligence, suspicious (unnatural) deaths, deaths during anaesthesia/operation, "
"and unidentified or skeletonised bodies."
))
story += [SPSM, Paragraph("Two Types of Inquest in India:", h2s)]
story.append(ctbl(
["Feature","Police Inquest","Magistrate's Inquest"],
[
["Legal Section","Sec 194, BNSS (old Sec 174, CrPC)","Sec 195, BNSS (old Sec 176, CrPC)"],
["Conducted By","Sub-Inspector (min: Head Constable)","Executive Magistrate (NOT Judicial)"],
["When Done","ALL unnatural / suspicious deaths","Only for specific cases (4 D's)"],
["Examine on oath?","NO","YES"],
["Can order post-mortem?","YES","YES"],
["Document","Panchanama (2 panch witnesses)","Formal inquest report"],
["Powers","Limited","Greater – can summon & examine witnesses on oath"],
],
cw=[4.0*cm,6.7*cm,6.7*cm]
))
story += [SPSM, Paragraph("Magistrate's Inquest is MANDATORY in:", h3s)]
story += blist([
"Death in <b>police custody or jail</b>",
"<b>Dowry deaths</b> – within 5 years of marriage",
"<b>Exhumation</b> – digging up a buried body",
"Death in a <b>mental hospital</b>",
])
story += [SPSM, mnbox(
"Magistrate's 4 D's",
["<b>D</b>eath in custody (police/jail)",
"<b>D</b>owry death (within 5 yrs of marriage)",
"<b>D</b>ig up (exhumation of buried body)",
"<b>D</b>isturbed mind death (mental hospital)",
"If any of these 4 D's → MAGISTRATE does the inquest, NOT police!"]
), SP]
# ── S4: OFFENCES ────────────────────────────────────────────────────────────
story += [sec("4. COGNIZABLE vs. NON-COGNIZABLE OFFENCES", bg=TEAL), SPSM]
story.append(defbox(
"Cognizable Offence",
"A SERIOUS crime. Police CAN arrest WITHOUT a warrant and investigate WITHOUT the magistrate's order. "
"Examples: Murder, rape, robbery, dacoity, kidnapping."
))
story.append(SPSM)
story.append(defbox(
"Non-Cognizable Offence",
"A MINOR crime. Police CANNOT arrest without a warrant and CANNOT investigate without the magistrate's permission. "
"Examples: Cheating, forgery, defamation, simple assault.",
bg=LIGHT_GREEN
))
story += [SPSM, mnbox(
"Cognizable = Can arrest without warrant (Both start with C!)",
["<b>C</b>ognizable → <b>C</b>op can arrest without warrant, <b>C</b>an investigate independently",
"Non-cognizable → Needs warrant to arrest + magistrate permission to investigate",
"Seriousness: Cognizable = SERIOUS | Non-cognizable = MINOR"]
), SP]
# ── S5: PUNISHMENTS ─────────────────────────────────────────────────────────
story += [sec("5. PUNISHMENTS UNDER BNS"), SPSM]
story.append(ctbl(
["#","Type","Description"],
[
["1","Death","Capital punishment"],
["2","Imprisonment for Life","Lifelong confinement"],
["3","Rigorous Imprisonment (RI)","WITH hard labour (grinding grain, breaking stones)"],
["4","Simple Imprisonment (SI)","WITHOUT hard labour"],
["5","Forfeiture of Property","State seizes property"],
["6","Fine","Monetary penalty"],
["7","Community Service","<b>NEW in BNS</b> – not in old IPC! (favourite MCQ)"],
],
cw=[1.0*cm,5.0*cm,11.4*cm]
))
story += [SPSM, mnbox(
'"DeLRSI-FF-C" – 7 Punishments',
["<b>D</b>eath | <b>L</b>ife | <b>R</b>igorous | <b>S</b>imple | <b>I</b>mprisonment | <b>F</b>ine | <b>F</b>orfeiture | <b>C</b>ommunity service",
"Community Service = BRAND NEW in BNS → always tested in MCQs!"]
), SP]
# ── S6: COURTS ──────────────────────────────────────────────────────────────
story += [sec("6. COURTS OF LAW", bg=TEAL), SPSM]
story.append(ctbl(
["Level (Low→High)","Criminal Courts","Civil Courts"],
[
["1 (Lowest)","Executive Magistrate","Munsif Court"],
["2","Judicial Magistrate (1st / 2nd class)","Sub-Judge Court"],
["3","Chief Judicial Magistrate (CJM)","District Court"],
["4","Sessions Court ← DEATH PENALTY here","High Court"],
["5","High Court","Supreme Court"],
["6 (Highest)","Supreme Court","—"],
],
cw=[3.2*cm,7.1*cm,7.1*cm]
))
story += [SPSM, mnbox(
"Sessions Court = Lowest court that awards DEATH PENALTY",
["Executive Magistrate ≠ Judicial Magistrate (important distinction!)",
"Executive Magistrate → conducts Magistrate's Inquest",
"Judicial Magistrate → handles criminal trials"]
), SP]
story.append(PageBreak())
# ── S7: SUMMONS & CONDUCT MONEY ─────────────────────────────────────────────
story += [sec("7. SUMMONS (SUBPOENA) & CONDUCT MONEY"), SPSM]
story.append(defbox(
"Summons / Subpoena (Definition)",
"An official written court order requiring a person (including a doctor) to appear in court "
"and give evidence. Served by a court officer (process server). Failure to comply = Contempt of Court."
))
story.append(SPSM)
story.append(defbox(
"Conduct Money (Definition)",
"Travelling expenses + daily allowance paid by the court to a summoned witness. "
"A doctor has the RIGHT to REFUSE to appear if conduct money is NOT paid. Amount varies by court type.",
bg=LIGHT_GREEN
))
story += [SPSM] + blist([
"Doctor MUST appear when summoned",
"If ill, must <b>inform the court in advance</b>",
"Failure to appear = Contempt of Court",
"CAN legally refuse if conduct money is NOT provided",
"Bring <b>certified copies</b> of reports (keep originals safe)",
])
story += [SPSM, mnbox(
"SUMMONS = Must Go | No Money = Can Refuse",
["Summons → Compulsory (like an exam – you MUST attend)",
"No conduct money paid? → You can LEGALLY refuse",
"Always bring: certified copies of reports (NOT originals)"]
), SP]
# ── S8: MEDICAL EVIDENCE ────────────────────────────────────────────────────
story += [sec("8. MEDICAL EVIDENCE – TYPES & DEFINITIONS", bg=TEAL), SPSM]
story.append(defbox(
"Evidence (Definition) – Section 2, BSA",
"(1) All statements which the court permits or requires to be made before it by witnesses. "
"(2) All documents produced for inspection of the court. "
"NOTE: Doctor's evidence is an OPINION (corroborative) – NOT positive proof like an eyewitness."
))
story.append(SPSM)
story.append(ctbl(
["Type","Definition","Example"],
[
["ORAL – Direct","Personally witnessed testimony about a fact directly in issue.","'I saw B stab A'"],
["ORAL – Circumstantial / Indirect","Indirect evidence; court draws logical inferences. (Section 4, BSA)","'C saw B with a knife near the scene just before the murder'"],
["ORAL – Hearsay","Statement about what the witness did NOT personally see. Generally NOT admissible.","'A says B told him C committed the crime'"],
["DOCUMENTARY – Primary","The ORIGINAL document produced before the court. (Sec 59, BSA)","Original prescription or hospital record"],
["DOCUMENTARY – Secondary","Certified copies / copies compared with the original. (Sec 58, BSA)","Certified photocopy of discharge summary"],
],
cw=[3.8*cm,7.8*cm,5.8*cm]
))
story += [SPSM, mnbox(
"D-C-H for Oral Evidence",
["<b>D</b>irect = personally witnessed",
"<b>C</b>ircumstantial = court draws logical inference from indirect facts",
"<b>H</b>earsay = heard from someone else → generally NOT admissible",
"Doctor's evidence = OPINION = corroborative (supports, does not prove by itself)"]
), SP]
# ── S9: DOCUMENTARY EVIDENCE (3 types) ─────────────────────────────────────
story += [sec("9. DOCUMENTARY EVIDENCE – 3 KEY TYPES"), SPSM]
story.append(defbox(
"1. Medical Certificates",
"Documents by a doctor certifying ill-health, insanity, age, disability, etc. "
"Must be truthful. FALSE certificate = offence (Section 234, BNS). "
"<b>Retention:</b> Indoor records = 3 years (NMC) / 8 years (DGHS); Outdoor = not mandatory (NMC)."
))
story.append(SPSM)
story.append(defbox(
"2. Medico-Legal Report (MLR / MLC Report)",
"Written report by a doctor after examining a medicolegal case. Contains history, "
"clinical findings, and medical opinion. Once signed = LEGAL DOCUMENT admissible as evidence.",
bg=LIGHT_GREEN
))
story.append(SPSM)
story.append(defbox(
"3. Dying Declaration – Section 26, BSA (old Section 32, IEA)",
"Statement by a DYING PERSON about the cause/circumstances of their death. "
"Rules: (a) No oath required. (b) Oral, written, or gestures/signs. "
"(c) Must be VOLUNTARY – no coaching. (d) Person must be in FIT STATE OF MIND (doctor certifies). "
"(e) Ideally recorded by MAGISTRATE; if unavailable, by doctor or police. "
"(f) Person need NOT actually die for it to be valid. "
"(g) Can ALONE be the basis for conviction if reliable.",
bg=LIGHT_RED
))
story += [SPSM, mnbox(
"Dying Declaration – 'FOVG MAD'",
["<b>F</b>it state of mind (doctor certifies)",
"<b>O</b>ath NOT required",
"<b>V</b>oluntary (no coaching/pressure)",
"<b>G</b>estures allowed (oral / written / signs)",
"<b>M</b>agistrate records ideally (doctor / police if not available)",
"<b>A</b>lone sufficient for conviction (if reliable)",
"<b>D</b>eath NOT necessary for validity"]
), SP]
# ── S10: WITNESSES ──────────────────────────────────────────────────────────
story += [sec("10. WITNESSES – TYPES & DEFINITIONS", bg=TEAL), SPSM]
story.append(ctbl(
["Type","Definition"],
[
["Ordinary / Common Witness",
"States facts PERSONALLY OBSERVED. No professional opinion."],
["Expert Witness",
"Special knowledge/skill gives a PROFESSIONAL OPINION to help the court. "
"Can refer to standard textbooks; if the expert adopts a passage as their own view, it is treated as their evidence. "
"Opinion can be challenged by quoting standard textbooks."],
["Hostile Witness (Sec 227, BNS)",
"Turns against the side that called them – conceals truth or gives false evidence. "
"Court declares hostile on request of the summoning lawyer. "
"Once hostile: the SAME SIDE'S lawyer can cross-examine them."],
],
cw=[4.0*cm,13.4*cm]
))
story.append(SPSM)
story.append(defbox(
"Doctor as BOTH Common AND Expert Witness",
"(1) <b>COMMON witness</b> – describes OBSERVABLE findings (wound size, location, colour). "
"(2) <b>EXPERT witness</b> – gives PROFESSIONAL OPINION on cause of death, ante-mortem vs. "
"post-mortem nature, or suicidal/homicidal/accidental classification.",
bg=LIGHT_BLUE
))
story += [SPSM, mnbox(
"Common vs. Expert: SEE vs. THINK",
["<b>COMMON</b> = Describes what he <b>SEES</b> (observations = facts)",
"<b>EXPERT</b> = States what he <b>THINKS</b> (interpretation = opinion)",
"Example: 'Wound is 3 cm long' → Common | 'Wound is antemortem & homicidal' → Expert"]
), SP]
# ── S11: PERJURY ────────────────────────────────────────────────────────────
story += [sec("11. PERJURY"), SPSM]
story.append(defbox(
"Perjury (Definition) – Sections 227 & 228, BNS / Section 383, BNSS",
"Giving WILFUL FALSE or FABRICATED evidence under oath. Whoever, being legally bound by oath, "
"makes any FALSE statement which he knows or believes to be false. "
"It occurs when sworn statements at two different times completely contradict each other. "
"<b>PUNISHMENT: Imprisonment up to 7 YEARS [Section 229, BNS].</b>",
bg=LIGHT_RED
))
story += [SPSM, mnbox(
"Perjury = 7-year Penalty for False Play",
["<b>P</b>erjury = <b>P</b>urposely lying under oath",
"Punishment = <b>7 years</b> imprisonment (Section 229, BNS)",
"Applies to doctors too – falsifying a post-mortem report = perjury",
"Doctor may SIT in court unless lawyers for the accused object"]
), SP]
# ── S12: ORDER OF EXAMINATION ───────────────────────────────────────────────
story += [sec("12. ORDER OF EXAMINATION IN COURT – Section 143, BSA", bg=TEAL), SPSM]
story.append(ctbl(
["Step","Name","Who Asks","Purpose"],
[
["1st","Examination-in-Chief","Lawyer who <b>CALLED</b> the witness",
"Establish facts; leading questions NOT allowed"],
["2nd","Cross-Examination","Lawyer on the <b>OPPOSITE</b> side",
"Challenge/discredit; leading questions ARE allowed"],
["3rd","Re-Examination","Original (calling) lawyer <b>AGAIN</b>",
"Clarify ONLY new matters from cross; cannot revisit old topics"],
],
cw=[1.5*cm,4.2*cm,5.5*cm,6.2*cm]
))
story += [SPSM, mnbox(
"E-C-R: Every Court has Rounds",
["<b>E</b>xamination-in-chief ➜ <b>C</b>ross-examination ➜ <b>R</b>e-examination",
"Re-examination = LIMITED to new matters raised in cross",
"Leading questions: FORBIDDEN in exam-in-chief | ALLOWED in cross-examination"]
), SP]
# ── S13: DOCTOR'S DUTIES IN COURT ───────────────────────────────────────────
story += [sec("13. DOCTOR'S DUTIES IN COURT"), SPSM]
story += blist([
"Appear promptly when summoned; carry the summons",
"Bring <b>certified copies</b> of MLR/PM reports (NOT originals)",
"Give honest, impartial, objective opinion – do NOT favour prosecution OR defence",
"Answer ONLY what is asked – do not volunteer extra information",
"Say 'I don't know' or 'I don't remember' rather than guessing",
"Remain calm and polite; do NOT argue with lawyers",
"Ask the judge for clarification if a question is confusing",
"May refer to standard textbooks with the court's permission",
"May request to be seated – usually granted unless accused's lawyers object",
"Use simple, non-technical language when explaining medical findings",
])
story += [SPSM, mnbox(
"GOLDEN RULE: You are the Court's Medical Expert – be IMPARTIAL",
["Your job = help the court find the TRUTH, not 'win' a case for either side",
"If your written report says X and you say Y in court → damages your credibility",
"Honest + clear + impartial = highest standard for a medical witness"]
), SP]
story.append(PageBreak())
# ── S14: QUICK REVISION TABLE ───────────────────────────────────────────────
story += [sec("14. QUICK REVISION – ALL KEY DEFINITIONS AT A GLANCE", bg=TEAL), SPSM]
story.append(ctbl(
["Term","Quick Definition / Key Fact"],
[
["Inquest","Official inquiry into CAUSE OF DEATH in unnatural/suspicious deaths"],
["Police Inquest","Sub-Inspector | Sec 194, BNSS | ALL unnatural deaths | Panchanama"],
["Magistrate's Inquest","Executive Magistrate | Sec 195, BNSS | 4 D's: Custody, Dowry, Dig-up, Disturbed"],
["Cognizable Offence","SERIOUS; police arrest WITHOUT warrant, investigate WITHOUT magistrate"],
["Non-Cognizable Offence","MINOR; need warrant to arrest + magistrate order to investigate"],
["Summons","Court order to appear; MUST comply; failure = contempt of court"],
["Conduct Money","Travel + allowance from court; doctor CAN REFUSE if NOT paid"],
["Evidence (BSA)","Statements by witnesses + documents produced before court"],
["Direct Evidence","Eyewitness; personally saw the fact in issue"],
["Circumstantial Evidence","Indirect facts; court draws logical inference (Sec 4, BSA)"],
["Hearsay Evidence","Heard from someone else; generally NOT admissible"],
["Primary Evidence","ORIGINAL document before the court"],
["Secondary Evidence","Certified copies / copies compared with original (Sec 58, BSA)"],
["Medical Certificate","False cert = offence Sec 234 BNS; Retention 3 yrs (NMC) / 8 yrs (DGHS)"],
["Dying Declaration","Sec 26 BSA; no oath; voluntary; fit mind; ALONE sufficient for conviction"],
["Common Witness","States FACTS personally observed – no opinion"],
["Expert Witness","Gives PROFESSIONAL OPINION; can refer to textbooks"],
["Hostile Witness","Turns against calling side (Sec 227 BNS); cross-examined by SAME side"],
["Perjury","Wilful false evidence under oath; 7 YEARS imprisonment (Sec 229 BNS)"],
["Examination-in-Chief","1st – by lawyer who called the witness"],
["Cross-Examination","2nd – by OPPOSITE side's lawyer"],
["Re-Examination","3rd – by original lawyer; ONLY on new matters from cross"],
["BNS","Bharatiya Nyaya Sanhita – Act 45/2023 – replaces IPC – CRIMES & PUNISHMENTS"],
["BNSS","Bharatiya Nagarika Suraksha Sanhita – Act 46/2023 – replaces CrPC – PROCEDURE"],
["BSA","Bharatiya Sakshya Adhiniyam – Act 47/2023 – replaces IEA – EVIDENCE"],
],
cw=[4.5*cm,12.9*cm]
))
story.append(SP)
# ── S15: MNEMONICS MASTER SHEET ─────────────────────────────────────────────
story += [sec("15. MNEMONICS MASTER SHEET – ALL IN ONE"), SPSM]
for title, lines in [
("BNS / BNSS / BSA",
["BNS (45) = Blames → defines CRIMES",
"BNSS (46) = Brings to court → PROCEDURE",
"BSA (47) = Backs with proof → EVIDENCE",
'"BNS punishes ➜ BNSS processes ➜ BSA proves" | Acts: 45, 46, 47 (consecutive!)']),
("Magistrate Inquest – 4 D's",
["Death in custody","Dowry death (within 5 yrs)","Dig up (exhumation)","Disturbed mind death (mental hospital)"]),
("Cognizable = C = Can arrest without warrant",
["Cognizable → Cop can arrest, Can investigate independently",
"Non-Cognizable → needs warrant + magistrate permission"]),
("7 Punishments – DeLRSI-FF-C",
["Death | Life | Rigorous | Simple | Imprisonment | Fine | Forfeiture | Community service",
"Community Service = NEW in BNS (not in old IPC) → always in MCQs!"]),
("Dying Declaration – FOVG MAD",
["Fit mind | Oath not required | Voluntary | Gestures allowed",
"Magistrate records ideally | Alone sufficient for conviction | Death not necessary"]),
("Order of Examination – E-C-R",
['"Every Court has Rounds"',
"Examination-in-chief ➜ Cross-examination ➜ Re-examination",
"Re-examination = ONLY new matters from cross"]),
("Doctor as Witness – SEE vs. THINK",
["COMMON = Describes what he SEES (observations = facts)",
"EXPERT = States what he THINKS (interpretation = opinion)"]),
("Perjury – 7-year Penalty",
["Perjury = Purposely lying under oath",
"7 years imprisonment (Section 229, BNS)"]),
("Evidence Types – D-C-H",
["Direct = personally witnessed",
"Circumstantial = court draws logical inference from indirect facts",
"Hearsay = heard from someone else → generally NOT admissible"]),
]:
story.append(mnbox(title, lines))
story.append(SPSM)
story.append(SP)
# Footer
story.append(HRFlowable(width="100%", thickness=0.5, color=TEAL))
story.append(SPSM)
story.append(Paragraph(
"Source: The Essentials of Forensic Medicine & Toxicology, 36th Edition (2026) – "
"KS Narayan Reddy & O P Murty | Study aid generated by Orris",
smn
))
doc.build(story)
print("PDF created:", OUTPUT)
cd /home/daytona/workspace/forensic-legal-procedure && python create_pdf.py 2>&1
ls -lh /home/daytona/workspace/forensic-legal-procedure/
In ks naryan readdy there is law about india and also court about india but i am nepali student from nepal so please replace the laws portion of india to indian from SBN's Manual of Forensic Medicine & Toxicology. But other topic shold be kept only from Essentials of Forensic Medicine and Toxicology by K.S. Narayan Reddy
SBN Manual Forensic Medicine Toxicology Nepal laws legal procedure courts
https://www.scribd.com/presentation/307205271/Nepalese-Legal…
Nepal Muluki Ain Muluki Penal Code Criminal Procedure Code Evidence Act courts hierarchy forensic medicine legal procedure
https://www.slideshare.net/slideshow/legal-procedure-in-crim…
rm /home/daytona/workspace/forensic-legal-procedure/create_pdf.py
~/forensic-legal-procedure/create_nepal_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/forensic-legal-procedure/Legal_Procedure_Forensic_Nepal_Student.pdf"
NAVY = colors.HexColor("#1A2B5A")
TEAL = colors.HexColor("#0077B6")
ORANGE = colors.HexColor("#F4A400")
CRIMSON = colors.HexColor("#8B0000") # Nepal flag red
NEPAL_RED = colors.HexColor("#C41E3A")
LIGHT_BLUE = colors.HexColor("#E8F4FD")
LIGHT_GOLD = colors.HexColor("#FFF8E7")
LIGHT_GREEN = colors.HexColor("#E8F8F2")
LIGHT_RED = colors.HexColor("#FEF0F0")
LIGHT_PINK = colors.HexColor("#FFF0F3")
WHITE = colors.white
GREY_BG = colors.HexColor("#F5F5F5")
DARK_GREY = colors.HexColor("#333333")
MED_GREY = colors.HexColor("#666666")
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
rightMargin=1.8*cm, leftMargin=1.8*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm,
title="Legal Procedure - Forensic Medicine (Nepal Edition)",
author="Orris Study Aid",
)
def S(name, **kw):
return ParagraphStyle(name, **kw)
h1s = S("h1s", fontSize=13, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_LEFT, spaceAfter=3, leading=17, leftIndent=4)
h2s = S("h2s", fontSize=11, textColor=NAVY, fontName="Helvetica-Bold",
spaceBefore=5, spaceAfter=3, leading=15)
h3s = S("h3s", fontSize=10, textColor=TEAL, fontName="Helvetica-Bold",
spaceBefore=4, spaceAfter=2, leading=13)
bdy = S("bdy", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=14, spaceAfter=4, alignment=TA_JUSTIFY)
blt = S("blt", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=14, leftIndent=14, spaceAfter=2)
smn = S("smn", fontSize=8.5, textColor=MED_GREY, fontName="Helvetica-Oblique",
leading=12, spaceAfter=3, alignment=TA_CENTER)
def P(txt, **kw):
st = S("_p", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=13, alignment=TA_LEFT, **kw)
return Paragraph(txt, st)
def PH(txt):
return Paragraph(txt, S("_ph", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12))
def sec(text, bg=NAVY):
t = Table([[Paragraph(text, h1s)]], colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return t
def nepal_sec(text):
"""Section header with Nepal crimson colour for Nepal-specific sections."""
return sec(text, bg=NEPAL_RED)
def defbox(term, defn, bg=LIGHT_BLUE):
rows = [
[Paragraph("<b>"+term+"</b>",
S("_dt", fontSize=10, textColor=NAVY, fontName="Helvetica-Bold", leading=14))],
[Paragraph(defn,
S("_db", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=13, alignment=TA_JUSTIFY))],
]
t = Table(rows, colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 0.5, TEAL),
]))
return t
def nepalbox(term, defn):
"""Defbox with Nepal red border – for Nepal-specific content."""
rows = [
[Paragraph("<b>"+term+"</b>",
S("_ndt", fontSize=10, textColor=NEPAL_RED, fontName="Helvetica-Bold", leading=14))],
[Paragraph(defn,
S("_ndb", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica",
leading=13, alignment=TA_JUSTIFY))],
]
t = Table(rows, colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_PINK),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 0.8, NEPAL_RED),
]))
return t
def mnbox(title, lines, gold=True):
bg = LIGHT_GOLD if gold else colors.HexColor("#FFE8EC")
bdr = ORANGE if gold else NEPAL_RED
title_col = colors.HexColor("#7B4F00") if gold else NEPAL_RED
rows = [[Paragraph("<b>MNEMONIC: "+title+"</b>",
S("_mt", fontSize=10, textColor=title_col,
fontName="Helvetica-Bold", leading=14))]]
for line in lines:
rows.append([Paragraph(line,
S("_ml", fontSize=9.5, textColor=DARK_GREY,
fontName="Helvetica", leading=13, leftIndent=10))])
t = Table(rows, colWidths=[17.4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 1, bdr),
("LINEBELOW", (0,0), (-1,0), 1, bdr),
]))
return t
def ctbl(headers, rows, cw, hbg=NAVY):
data = [[PH(h) for h in headers]]
for row in rows:
data.append([P(str(c)) for c in row])
t = Table(data, colWidths=cw)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), hbg),
("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, colors.HexColor("#CCCCCC")),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, GREY_BG]),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
return t
def blist(items):
return [Paragraph("• " + item, blt) for item in items]
SP = Spacer(1, 0.28*cm)
SPSM = Spacer(1, 0.14*cm)
# ══════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER ─────────────────────────────────────────────────────────────────────
cr = [
[Paragraph("FORENSIC MEDICINE",
S("ct",fontSize=20,textColor=WHITE,fontName="Helvetica-Bold",alignment=TA_CENTER,leading=26))],
[Paragraph("Legal Procedure",
S("cs",fontSize=16,textColor=ORANGE,fontName="Helvetica-Bold",alignment=TA_CENTER,leading=22))],
[Paragraph("Nepal Edition – Complete Definitions & Mnemonics",
S("cu",fontSize=11,textColor=LIGHT_BLUE,fontName="Helvetica",alignment=TA_CENTER,leading=15))],
[Spacer(1,0.1*cm)],
[Paragraph("Nepal Laws from <i>SBN's Manual of Forensic Medicine & Toxicology</i>",
S("cs2",fontSize=9.5,textColor=colors.HexColor("#FFD700"),fontName="Helvetica-BoldOblique",alignment=TA_CENTER,leading=13))],
[Paragraph("Other Topics from <i>KS Narayan Reddy – Essentials of Forensic Medicine & Toxicology (36th Ed., 2026)</i>",
S("cr",fontSize=9,textColor=LIGHT_BLUE,fontName="Helvetica-Oblique",alignment=TA_CENTER,leading=12))],
]
cv = Table(cr, colWidths=[17.4*cm])
cv.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),NAVY),
("TOPPADDING",(0,0),(-1,-1),9),
("BOTTOMPADDING",(0,0),(-1,-1),9),
("LEFTPADDING",(0,0),(-1,-1),14),
("RIGHTPADDING",(0,0),(-1,-1),14),
("BOX",(0,0),(-1,-1),2.5,NEPAL_RED),
]))
story += [cv, SP]
# Source legend
legend_rows = [
[Paragraph("COLOUR GUIDE", S("lg0",fontSize=9,textColor=WHITE,fontName="Helvetica-Bold",alignment=TA_CENTER,leading=12)),
Paragraph("NAVY/TEAL header = Content from <b>KS Narayan Reddy</b>", S("lg1",fontSize=9,textColor=DARK_GREY,fontName="Helvetica",leading=12)),
Paragraph("RED header/box = Content from <b>Nepal Laws (SBN's Manual)</b>", S("lg2",fontSize=9,textColor=NEPAL_RED,fontName="Helvetica-Bold",leading=12))],
]
leg = Table(legend_rows, colWidths=[3.5*cm,7.0*cm,6.9*cm])
leg.setStyle(TableStyle([
("BACKGROUND",(0,0),(0,-1),NAVY),
("BACKGROUND",(1,0),(1,-1),LIGHT_BLUE),
("BACKGROUND",(2,0),(2,-1),LIGHT_PINK),
("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
("LEFTPADDING",(0,0),(-1,-1),7),("RIGHTPADDING",(0,0),(-1,-1),7),
("BOX",(0,0),(-1,-1),0.5,colors.HexColor("#AAAAAA")),
("GRID",(0,0),(-1,-1),0.3,colors.HexColor("#CCCCCC")),
]))
story += [leg, SP]
# ── S1: NEPAL LAWS ─────────────────────────────────────────────────────────────
story += [nepal_sec("1. THE LAWS OF NEPAL [From SBN's Manual]"), SPSM]
story.append(Paragraph(
"Nepal has its own distinct legal codes. The three foundational laws governing forensic medicine practice in Nepal are:",
bdy))
story.append(SPSM)
story.append(ctbl(
["Law","Nepali Name / Year","What It Does"],
[
["Substantive Criminal Law",
"<b>Muluki Penal (Code) Act / National Penal Code Act</b>\n2074 BS (2017 AD) – in force from 17 August 2018",
"Defines criminal offences and prescribes punishments. "
"Replaced the old Muluki Ain (1963). Covers murder, assault, rape, theft, property crimes, etc."],
["Criminal Procedure Law",
"<b>Muluki Criminal Procedure (Code) Act / National Criminal Procedure (Code) Act</b>\n2074 BS (2017 AD)",
"Provides the mechanism and procedure for criminal investigation, prosecution, and trial. "
"Governs police duties, arrest, investigation, court proceedings, and appeals."],
["Evidence Law",
"<b>Evidence Act (Saboot Ain)</b>\nRelevant provisions in the National Civil Code and Criminal Procedure Code",
"Governs the collection, preservation, and admissibility of evidence in all courts. "
"Applies to both criminal and civil proceedings."],
],
cw=[3.5*cm,5.2*cm,8.7*cm], hbg=NEPAL_RED
))
story.append(SPSM)
story.append(nepalbox(
"Historical Background",
"Nepal's legal system was traditionally governed by the <b>Muluki Ain</b> (first enacted 1854 AD / 1910 BS, "
"reformed in 1963). This served as both civil and criminal code for over 150 years. "
"It was finally replaced in 2018 by three modern codes: the National Penal Code, the National Criminal "
"Procedure Code, and the National Civil Code – bringing Nepal's law in line with international standards."
))
story.append(SPSM)
story.append(mnbox(
"Nepal's 3 Laws – Penal / Procedure / Evidence",
["<b>Penal Code (2074)</b> = defines CRIMES and punishments (= India's BNS)",
"<b>Criminal Procedure Code (2074)</b> = HOW crimes are investigated and tried (= India's BNSS)",
"<b>Evidence Act</b> = what counts as EVIDENCE in court (= India's BSA)",
"All enacted 2017, came into force 17 August 2018 – remember this year!"],
gold=False
))
story.append(SP)
# ── S2: TYPES OF LAW ───────────────────────────────────────────────────────────
story += [nepal_sec("2. TYPES OF CASES IN NEPAL [From SBN's Manual]"), SPSM]
story.append(nepalbox(
"Classification of Cases – Section 9, Muluki Ain",
"Cases in Nepal are classified into two groups under Section 9 of the Muluki Ain: "
"(A) <b>Civil Cases</b> and (B) <b>Criminal Cases</b>."
))
story.append(SPSM)
story.append(ctbl(
["Type","Definition","Examples in Nepal","Parties"],
[
["Criminal Cases",
"Offences against public interest – the State prosecutes the accused.",
"Murder, rape, arson, assault, illegal marriage, robbery",
"GOVERNMENT (State) vs. ACCUSED"],
["Civil Cases",
"Disputes between two individuals or parties. Settled by agreement or court decision.",
"Transactions, donations, inheritance, adoptions, trusts, partition",
"PLAINTIFF vs. DEFENDANT"],
],
cw=[2.8*cm,5.2*cm,5.8*cm,3.6*cm], hbg=NEPAL_RED
))
story.append(SPSM)
story.append(mnbox(
"Nepal Cases – Criminal = State; Civil = Private",
["<b>Criminal</b>: Government files the case (State vs. Accused)",
"<b>Civil</b>: Individual files the case (Plaintiff vs. Defendant)",
"Standard of proof: Civil = Preponderance of evidence | Criminal = Beyond reasonable doubt"],
gold=False
))
story.append(SP)
# ── S3: COURTS IN NEPAL ────────────────────────────────────────────────────────
story += [nepal_sec("3. COURTS OF LAW IN NEPAL [From SBN's Manual]"), SPSM]
story.append(Paragraph("Nepal has a three-tier court system under the Constitution of Nepal (2015):", bdy))
story.append(SPSM)
story.append(ctbl(
["Level","Court","Jurisdiction"],
[
["1 (Lowest)", "District Court (Jilla Adalat)",
"First instance for all civil and criminal cases; can try all offences."],
["2 (Middle)", "High Court (Uccha Adalat) – 7 regional High Courts",
"Hears appeals from District Courts; original jurisdiction in some matters."],
["3 (Highest)", "Supreme Court (Sarbochcha Adalat) – Kathmandu",
"Final court of appeal; constitutional jurisdiction; final authority on all matters."],
],
cw=[2.5*cm,5.2*cm,9.7*cm], hbg=NEPAL_RED
))
story.append(SPSM)
story.append(nepalbox(
"Special Courts in Nepal",
"In addition to regular courts, Nepal has: "
"<b>Special Court</b> (for corruption cases and special offences); "
"<b>Revenue Tribunal</b> (tax matters); "
"<b>Administrative Court</b> (disputes with government). "
"The <b>District Court</b> is the entry point for all medicolegal cases in Nepal."
))
story.append(SPSM)
story.append(mnbox(
"Nepal's 3-Tier Courts: District → High → Supreme",
["<b>District Court</b> = where all forensic/medicolegal cases start",
"<b>High Court</b> = appeals from District Court (7 regional High Courts)",
"<b>Supreme Court</b> = final authority; based in Kathmandu",
"Simple: D → H → S (like 'Doctor Has Skills')"],
gold=False
))
story.append(SP)
# ── S4: PUNISHMENTS IN NEPAL ───────────────────────────────────────────────────
story += [nepal_sec("4. PUNISHMENTS UNDER NEPAL LAW [From SBN's Manual]"), SPSM]
story.append(Paragraph("Punishments under the National Penal Code Act, 2074 (Nepal):", bdy))
story.append(SPSM)
story.append(ctbl(
["#","Type of Punishment","Description"],
[
["1","Imprisonment for Life","Highest penalty in Nepal – <b>Nepal abolished the death penalty in 1990</b>"],
["2","Rigorous Imprisonment (with hard labour)","Fixed-term imprisonment with hard physical labour"],
["3","Simple Imprisonment (without hard labour)","Fixed-term imprisonment, no hard labour required"],
["4","Forfeiture/Confiscation of Property","State seizure of property"],
["5","Fine","Monetary penalty imposed by court"],
],
cw=[1.0*cm,5.5*cm,10.9*cm], hbg=NEPAL_RED
))
story.append(SPSM)
story.append(nepalbox(
"KEY FACT: Nepal abolished the DEATH PENALTY in 1990",
"Nepal's Constitution (2015) expressly prohibits the death penalty. "
"Life imprisonment is therefore the MAXIMUM punishment in Nepal. "
"This is a critical difference from India (which still has the death penalty). "
"Penal powers of Nepali courts: imprisonment (life/rigorous/simple), forfeiture of property, and fine."
))
story.append(SPSM)
story.append(mnbox(
"Nepal Punishments – No Death Penalty!",
["Nepal ABOLISHED death penalty in 1990 (Constitution 2015 bans it)",
"Maximum = Life Imprisonment",
"Types: Life | Rigorous (hard labour) | Simple | Forfeiture | Fine",
"Remember: 'Nepal is Life-first, not Death' – maximum = LIFE"],
gold=False
))
story.append(SP)
story.append(PageBreak())
# ── S5: INQUEST (KSNAR) ────────────────────────────────────────────────────────
story += [sec("5. INQUEST [From KS Narayan Reddy]"), SPSM]
story.append(defbox(
"INQUEST (Definition)",
"An official inquiry or investigation into the CAUSE OF DEATH. Conducted in: suicide, murder, "
"killing by animal/machinery, accidents, deaths due to torture/ill-treatment, occupational diseases, "
"suspected medical negligence, suspicious (unnatural) deaths, deaths during anaesthesia/operation, "
"and unidentified or skeletonised bodies."
))
story.append(SPSM)
story.append(Paragraph("Types of Inquest in Nepal:", h2s))
story.append(ctbl(
["Feature","Police Inquest","Magistrate's Inquest","Coroner's Inquest"],
[
["Conducted By",
"Sub-Inspector of Police (officer in charge of police station)",
"District Magistrate / Judicial Magistrate / Executive Magistrate",
"Coroner (doctor, lawyer, or both) – assisted by deputy coroner"],
["When Done",
"On receiving any information of accidental or unnatural death – informs nearest magistrate immediately",
"Death in prison, police custody, due to police firing, exhumation, dowry death",
"In some jurisdictions for unnatural deaths requiring medico-legal inquiry"],
["Powers",
"Draws up report on apparent cause of death; describes wounds/fractures",
"Can examine witnesses on oath; broader powers",
"Court of inquiry only – NOT a trial court; cannot order arrest"],
["Post-mortem?","YES – can order","YES – can order","YES – coroner performs PM too"],
],
cw=[3.0*cm,4.8*cm,4.8*cm,4.8*cm]
))
story.append(SPSM)
story.append(Paragraph("Magistrate Inquest is mandatory in Nepal for:", h3s))
story += blist([
"Death in <b>prison or police custody</b>",
"Death due to <b>police firing</b>",
"<b>Exhumation</b> – digging up a buried body",
"Death classified as <b>dowry death</b>",
])
story.append(SPSM)
story.append(mnbox(
"Magistrate Inquest – 4 Situations (Nepal)",
["<b>Prison/Police custody death</b>",
"<b>Police firing death</b>",
"<b>P</b>uried body dug up (exhumation)",
"<b>Dowry death</b>",
"Remember: 'Police Prison Police-firing Dowry' → Magistrate investigates!"]
))
story.append(SP)
# ── S6: COGNIZABLE OFFENCES ────────────────────────────────────────────────────
story += [sec("6. COGNIZABLE vs. NON-COGNIZABLE OFFENCES [From KS Narayan Reddy]"), SPSM]
story.append(defbox(
"Cognizable Offence",
"A SERIOUS crime where police CAN arrest WITHOUT a warrant and can investigate WITHOUT the "
"magistrate's order. In Nepal: police send the person to the medical officer for examination "
"directly in cognizable cases (e.g., rape). Examples: Murder, rape, robbery, arson."
))
story.append(SPSM)
story.append(defbox(
"Non-Cognizable Offence",
"A MINOR crime where police CANNOT arrest without a warrant and CANNOT investigate without "
"the magistrate's permission. Examples: Cheating, defamation, simple assault.",
bg=LIGHT_GREEN
))
story.append(SPSM)
story.append(mnbox(
"Cognizable = Can arrest without warrant (Both start with C!)",
["<b>C</b>ognizable → <b>C</b>op can arrest without warrant",
"In Nepal: rape/cognizable offences → Sub-inspector sends person to medical officer directly",
"Non-cognizable → Needs warrant + magistrate permission"]
))
story.append(SP)
# ── S7: SUMMONS & CONDUCT MONEY ────────────────────────────────────────────────
story += [sec("7. SUMMONS (SUBPOENA) & CONDUCT MONEY [From KS Narayan Reddy]"), SPSM]
story.append(defbox(
"Summons / Subpoena (Definition)",
"A document compelling the attendance of a witness in court – written in duplicates, "
"signed by the presiding officer of the court, and bears the seal of the court. "
"Failure to comply = Contempt of Court."
))
story.append(SPSM)
story.append(defbox(
"Conduct Money (Definition)",
"Travelling expenses + daily allowance paid by the court to a summoned witness (including a doctor). "
"A doctor has the RIGHT to REFUSE to appear if conduct money is NOT paid.",
bg=LIGHT_GREEN
))
story.append(SPSM)
story += blist([
"Doctor MUST appear when summoned",
"If ill, must <b>inform the court in advance</b>",
"Failure to appear = Contempt of Court",
"CAN refuse if conduct money is NOT provided",
"Bring <b>certified copies</b> of reports (keep originals safe)",
])
story.append(SPSM)
story.append(mnbox(
"SUMMONS = Must Go | No Money = Can Refuse",
["Summons → Compulsory (you MUST attend)",
"No conduct money? → You can legally refuse",
"Always bring: certified copies, NOT originals"]
))
story.append(SP)
# ── S8: MEDICAL EVIDENCE ───────────────────────────────────────────────────────
story += [sec("8. MEDICAL EVIDENCE – TYPES & DEFINITIONS [From KS Narayan Reddy]"), SPSM]
story.append(defbox(
"Evidence (Definition)",
"(1) All statements which the court permits or requires to be made before it by witnesses. "
"(2) All documents produced for inspection of the court. "
"NOTE: Doctor's evidence is an OPINION (corroborative) – NOT positive proof like an eyewitness."
))
story.append(SPSM)
story.append(ctbl(
["Type","Definition","Example"],
[
["ORAL – Direct","Personally witnessed testimony about a fact directly in issue.","'I saw B stab A'"],
["ORAL – Circumstantial","Indirect evidence; court draws logical inferences.","'C saw B with a knife near the scene just before the murder'"],
["ORAL – Hearsay","What the witness did NOT personally see – from a third party. Generally NOT admissible.","'A says B told him C committed the crime'"],
["DOCUMENTARY – Primary","The ORIGINAL document produced before the court.","Original prescription or hospital record"],
["DOCUMENTARY – Secondary","Certified copies / copies compared with the original.","Certified photocopy of discharge summary"],
],
cw=[3.8*cm,7.8*cm,5.8*cm]
))
story.append(SPSM)
story.append(mnbox(
"D-C-H for Oral Evidence",
["<b>D</b>irect = personally witnessed",
"<b>C</b>ircumstantial = court draws logical inference",
"<b>H</b>earsay = heard from someone else → generally NOT admissible",
"Doctor's evidence = OPINION = corroborative (not proof by itself)"]
))
story.append(SP)
# ── S9: DOCUMENTARY EVIDENCE ──────────────────────────────────────────────────
story += [sec("9. DOCUMENTARY EVIDENCE – 3 KEY TYPES [From KS Narayan Reddy]"), SPSM]
story.append(defbox(
"1. Medical Certificates",
"Documents by a doctor certifying ill-health, insanity, age, disability, etc. "
"Must be truthful. FALSE certificate = criminal offence. "
"<b>Retention:</b> Indoor records = 3 years (NMC) / 8 years (DGHS); Outdoor = not mandatory."
))
story.append(SPSM)
story.append(defbox(
"2. Medico-Legal Report (MLR / MLC Report)",
"Written report by a doctor after examining a medicolegal case – history, clinical findings, and opinion. "
"Once signed = LEGAL DOCUMENT admissible as evidence in court.",
bg=LIGHT_GREEN
))
story.append(SPSM)
story.append(defbox(
"3. Dying Declaration",
"Statement by a DYING PERSON about the cause/circumstances of their death. "
"Rules: (a) No oath required. (b) Oral, written, or gestures/signs. "
"(c) Must be VOLUNTARY – no coaching. (d) FIT STATE OF MIND (doctor certifies). "
"(e) Ideally recorded by MAGISTRATE; if unavailable, by doctor or police. "
"(f) Person need NOT actually die for it to be valid. "
"(g) Can ALONE be the basis for conviction if reliable.",
bg=LIGHT_RED
))
story.append(SPSM)
story.append(mnbox(
"Dying Declaration – 'FOVG MAD'",
["<b>F</b>it state of mind | <b>O</b>ath NOT required | <b>V</b>oluntary | <b>G</b>estures allowed",
"<b>M</b>agistrate ideally | <b>A</b>lone sufficient for conviction | <b>D</b>eath not necessary"]
))
story.append(SP)
# ── S10: WITNESSES ─────────────────────────────────────────────────────────────
story += [sec("10. WITNESSES – TYPES & DEFINITIONS [From KS Narayan Reddy]"), SPSM]
story.append(ctbl(
["Type","Definition"],
[
["Ordinary / Common Witness","States facts PERSONALLY OBSERVED. No professional opinion."],
["Expert Witness","Special knowledge gives a PROFESSIONAL OPINION to help the court. "
"Can refer to textbooks; if expert adopts a passage as their view, it is treated as their evidence."],
["Hostile Witness","Turns against the side that called them. "
"Court declares hostile; the SAME SIDE'S lawyer can then cross-examine them."],
],
cw=[4.0*cm,13.4*cm]
))
story.append(SPSM)
story.append(defbox(
"Doctor as BOTH Common AND Expert Witness",
"(1) <b>COMMON witness</b> – describes OBSERVABLE findings (wound size, location, colour). "
"(2) <b>EXPERT witness</b> – gives PROFESSIONAL OPINION on cause of death, ante-mortem vs. post-mortem, "
"or suicidal/homicidal/accidental classification.",
bg=LIGHT_BLUE
))
story.append(SPSM)
story.append(mnbox(
"SEE vs. THINK",
["COMMON = Describes what he <b>SEES</b> (observations = facts)",
"EXPERT = States what he <b>THINKS</b> (interpretation = opinion)",
"'Wound is 3 cm long' → Common | 'Wound is antemortem and homicidal' → Expert"]
))
story.append(SP)
story.append(PageBreak())
# ── S11: PERJURY ───────────────────────────────────────────────────────────────
story += [sec("11. PERJURY [From KS Narayan Reddy]"), SPSM]
story.append(defbox(
"Perjury (Definition)",
"Giving WILFUL FALSE or FABRICATED evidence under oath. Whoever, being legally bound by oath, "
"makes any FALSE statement which he knows or believes to be false. "
"It occurs when sworn statements at two different times completely contradict each other. "
"<b>PUNISHMENT: Imprisonment up to 7 YEARS.</b>",
bg=LIGHT_RED
))
story.append(SPSM)
story.append(mnbox(
"Perjury = 7-year Penalty for False Play",
["<b>P</b>erjury = <b>P</b>urposely lying under oath",
"Punishment = <b>7 years</b> imprisonment",
"Applies to doctors too – falsifying a post-mortem report = perjury",
"Doctor may sit in court unless lawyers for the accused object"]
))
story.append(SP)
# ── S12: ORDER OF EXAMINATION ─────────────────────────────────────────────────
story += [sec("12. ORDER OF EXAMINATION IN COURT [From KS Narayan Reddy]"), SPSM]
story.append(ctbl(
["Step","Name","Who Asks","Purpose"],
[
["1st","Examination-in-Chief","Lawyer who <b>CALLED</b> the witness","Establish facts; leading questions NOT allowed"],
["2nd","Cross-Examination","Lawyer on the <b>OPPOSITE</b> side","Challenge/discredit; leading questions ARE allowed"],
["3rd","Re-Examination","Original (calling) lawyer <b>AGAIN</b>","Clarify ONLY new matters from cross"],
],
cw=[1.5*cm,4.2*cm,5.5*cm,6.2*cm]
))
story.append(SPSM)
story.append(mnbox(
"E-C-R: Every Court has Rounds",
["<b>E</b>xamination-in-chief → <b>C</b>ross-examination → <b>R</b>e-examination",
"Re-examination = LIMITED to new matters from cross",
"Leading questions: FORBIDDEN in exam-in-chief | ALLOWED in cross"]
))
story.append(SP)
# ── S13: DOCTOR'S DUTIES ──────────────────────────────────────────────────────
story += [sec("13. DOCTOR'S DUTIES IN COURT [From KS Narayan Reddy]"), SPSM]
story += blist([
"Appear promptly when summoned; carry the summons",
"Bring <b>certified copies</b> of MLR/PM reports (NOT originals)",
"Give honest, impartial, objective opinion – do NOT favour prosecution OR defence",
"Answer ONLY what is asked – do not volunteer extra information",
"Say 'I don't know' or 'I don't remember' rather than guessing",
"Remain calm and polite; do NOT argue with lawyers",
"Ask the judge for clarification if a question is confusing",
"May refer to standard textbooks with the court's permission",
"May request to be seated – usually granted unless accused's lawyers object",
"Use simple, non-technical language when explaining medical findings",
])
story.append(SPSM)
story.append(mnbox(
"GOLDEN RULE: You are the Court's Medical Expert – be IMPARTIAL",
["Your job = help the court find the TRUTH, not to 'win' a case",
"If your written report says X and you say Y in court → damages credibility",
"Honest + clear + impartial = highest standard for a medical witness"]
))
story.append(SP)
story.append(PageBreak())
# ── S14: COMPARISON TABLE (India vs. Nepal) ────────────────────────────────────
story += [sec("14. INDIA vs. NEPAL – KEY DIFFERENCES FOR EXAM [Comparative]", bg=colors.HexColor("#2D5A27")), SPSM]
story.append(ctbl(
["Topic","India (KS Narayan Reddy)","Nepal (SBN's Manual)"],
[
["Penal Law","BNS – Bharatiya Nyaya Sanhita (Act 45/2023)","National Penal (Code) Act / Muluki Penal Code (2074 BS / 2017 AD)"],
["Procedure Law","BNSS – Bharatiya Nagarika Suraksha Sanhita (Act 46/2023)","National Criminal Procedure (Code) Act (2074 BS / 2017 AD)"],
["Evidence Law","BSA – Bharatiya Sakshya Adhiniyam (Act 47/2023)","Evidence Act / provisions within Criminal Procedure Code"],
["Death Penalty","YES – awarded by Sessions Court","<b>ABOLISHED in 1990</b> – Life imprisonment is maximum"],
["Court Hierarchy (lowest→highest)","Executive Magistrate → Sessions Court → High Court → Supreme Court","District Court → High Court → Supreme Court (3-tier system)"],
["Inquest Types","Police + Magistrate (2 types)","Police + Magistrate + Coroner (3 types)"],
["Magistrate Inquest triggers","Custody, Dowry, Exhumation, Mental hospital (4 D's)","Prison/custody, Police firing, Exhumation, Dowry death"],
["Classification of cases","Civil vs. Criminal (based on BNS/BNSS)","Civil vs. Criminal – classified under Section 9, Muluki Ain"],
["Perjury punishment","7 years imprisonment (Sec 229, BNS)","Imprisonment (term varies by Nepal Penal Code)"],
],
cw=[4.0*cm,6.7*cm,6.7*cm], hbg=colors.HexColor("#2D5A27")
))
story.append(SP)
# ── S15: QUICK REVISION ────────────────────────────────────────────────────────
story += [sec("15. QUICK REVISION – ALL KEY DEFINITIONS AT A GLANCE"), SPSM]
story.append(ctbl(
["Term","Quick Definition / Key Fact","Source"],
[
["National Penal Code (2074)","Nepal's substantive criminal law; replaces old Muluki Ain; in force Aug 2018","Nepal"],
["Criminal Procedure Code (2074)","Nepal's procedure for criminal investigation and trial; in force Aug 2018","Nepal"],
["Muluki Ain","Old General Code of Nepal (1963); replaced in 2018 by modern codes","Nepal"],
["Death Penalty","ABOLISHED in Nepal (1990/2015 Constitution); max = LIFE imprisonment","Nepal"],
["Nepal Court Hierarchy","District Court → High Court → Supreme Court (3 tiers)","Nepal"],
["Inquest","Official inquiry into CAUSE OF DEATH in unnatural/suspicious deaths","KSN Reddy"],
["Police Inquest","Sub-Inspector; ALL unnatural deaths; draws report; informs magistrate","KSN Reddy"],
["Magistrate's Inquest","Prison/custody death, police firing, exhumation, dowry death","Both"],
["Coroner's Inquest","Doctor/lawyer as coroner; court of inquiry only – NOT a trial court","KSN Reddy"],
["Cognizable Offence","SERIOUS; police arrest WITHOUT warrant; investigate WITHOUT magistrate","KSN Reddy"],
["Non-Cognizable Offence","MINOR; need warrant to arrest + magistrate order to investigate","KSN Reddy"],
["Summons","Court order to appear; MUST comply; signed by presiding officer + court seal","KSN Reddy"],
["Conduct Money","Travel + allowance; doctor CAN REFUSE if NOT paid","KSN Reddy"],
["Evidence","Witness statements + documents before court","KSN Reddy"],
["Direct Evidence","Eyewitness; personally saw the fact","KSN Reddy"],
["Circumstantial Evidence","Indirect; court draws logical inference","KSN Reddy"],
["Hearsay Evidence","Heard from someone else; generally NOT admissible","KSN Reddy"],
["Dying Declaration","No oath; voluntary; fit mind; ALONE sufficient for conviction","KSN Reddy"],
["Common Witness","States FACTS personally observed – no opinion","KSN Reddy"],
["Expert Witness","Gives PROFESSIONAL OPINION; can refer to textbooks","KSN Reddy"],
["Hostile Witness","Turns against calling side; cross-examined by SAME side","KSN Reddy"],
["Perjury","Wilful false evidence under oath; up to 7 years imprisonment","KSN Reddy"],
["Examination-in-Chief","1st – by lawyer who called the witness","KSN Reddy"],
["Cross-Examination","2nd – by OPPOSITE side's lawyer","KSN Reddy"],
["Re-Examination","3rd – original lawyer; ONLY new matters from cross","KSN Reddy"],
],
cw=[4.0*cm,10.4*cm,3.0*cm]
))
story.append(SP)
# ── S16: MNEMONICS MASTER SHEET ───────────────────────────────────────────────
story += [sec("16. MNEMONICS MASTER SHEET – ALL IN ONE"), SPSM]
for title, lines, isnep in [
("Nepal's 3 Laws (2074 BS / 2017 AD)",
["Penal Code = defines CRIMES (like India's BNS)",
"Criminal Procedure Code = HOW trials happen (like India's BNSS)",
"Evidence provisions = what counts in court (like India's BSA)",
"All came into force: 17 August 2018 – remember this date!"], True),
("Nepal: No Death Penalty!",
["Nepal ABOLISHED death penalty in 1990",
"Constitution 2015 expressly prohibits it",
"Maximum punishment = LIFE IMPRISONMENT",
"'Nepal is Life-first'"], True),
("Nepal 3-Tier Courts: D→H→S",
["District Court (Jilla Adalat) = entry point for all medicolegal cases",
"High Court (Uccha Adalat) = 7 regional courts; hears appeals",
"Supreme Court (Sarbochcha Adalat) = final; Kathmandu",
"Memory: 'Doctor Has Skills' = District → High → Supreme"], True),
("Magistrate Inquest Triggers (Nepal)",
["Prison/Police custody death",
"Police firing death",
"Exhumation (buried body dug up)",
"Dowry death"], True),
("Dying Declaration – FOVG MAD",
["Fit mind | Oath NOT required | Voluntary | Gestures allowed",
"Magistrate records ideally | Alone sufficient for conviction | Death not necessary"], False),
("Order of Examination – E-C-R",
['"Every Court has Rounds"',
"Examination-in-chief → Cross-examination → Re-examination",
"Re-examination: ONLY new matters from cross"], False),
("Doctor as Witness – SEE vs. THINK",
["COMMON = Describes what he SEES (observations)",
"EXPERT = States what he THINKS (opinion/interpretation)"], False),
("Perjury – 7-year Penalty",
["Perjury = Purposely lying under oath",
"Punishment = 7 years imprisonment"], False),
("Evidence Types – D-C-H",
["Direct = personally witnessed",
"Circumstantial = court draws logical inference",
"Hearsay = heard from someone else → generally NOT admissible"], False),
]:
story.append(mnbox(title, lines, gold=not isnep))
story.append(SPSM)
story.append(SP)
# Footer
story.append(HRFlowable(width="100%", thickness=0.5, color=NEPAL_RED))
story.append(SPSM)
story.append(Paragraph(
"<b>Nepal Laws:</b> SBN's Manual of Forensic Medicine & Toxicology | "
"<b>Other Topics:</b> KS Narayan Reddy – Essentials of Forensic Medicine & Toxicology (36th Ed., 2026) | "
"Study aid generated by Orris",
smn
))
doc.build(story)
print("PDF created:", OUTPUT)
cd /home/daytona/workspace/forensic-legal-procedure && python create_nepal_pdf.p…
ls -lh /home/daytona/workspace/forensic-legal-procedure/
Legal Procedure Forensic Nepal Student
PDF Document · PDF
| Section | Content |
|---|---|
| 1. Laws of Nepal | National Penal Code (2074 BS), Criminal Procedure Code (2074 BS), Evidence Act - with Muluki Ain background |
| 2. Types of Cases | Civil vs. Criminal classification under Section 9, Muluki Ain |
| 3. Courts in Nepal | District Court → High Court → Supreme Court (3-tier system) |
| 4. Punishments | Nepal abolished death penalty in 1990; max = Life imprisonment; types of punishment under Nepal Penal Code |
| 14. India vs. Nepal comparison table | Side-by-side of all major differences |
Actually I don't need pdf please display all here
🔴 Nepal Laws = from SBN's Manual of Forensic Medicine & Toxicology 🔵 Other Topics = from KS Narayan Reddy – Essentials of Forensic Medicine & Toxicology (36th Ed., 2026)
| Old System | New Law (Nepal) | What It Does |
|---|---|---|
| Muluki Ain (crime part) | National Penal (Code) Act, 2074 BS (2017 AD) | Defines criminal offences and prescribes punishments (= India's BNS) |
| Muluki Ain (procedure part) | National Criminal Procedure (Code) Act, 2074 BS (2017 AD) | How crimes are investigated, prosecuted, and tried in court (= India's BNSS) |
| Scattered evidence rules | Evidence Act / Saboot Ain (provisions within Criminal Procedure Code) | Governs collection, preservation, and admissibility of evidence in all courts (= India's BSA) |
⭐ MNEMONIC: Nepal's 3 Laws
- Penal Code (2074) = defines CRIMES
- Criminal Procedure Code (2074) = HOW trials happen
- Evidence Act = what counts as proof in court
- All came into force: 17 August 2018 - remember this date!
- Just like India: Penal = punishes | Procedure = processes | Evidence = proves
| Type | Definition | Examples | Parties |
|---|---|---|---|
| Criminal Cases | Offences against public interest – State prosecutes the accused | Murder, rape, arson, assault, illegal marriage, robbery | Government (State) vs. Accused |
| Civil Cases | Disputes between two private individuals or parties | Transactions, donations, inheritance, adoptions, trusts, partition | Plaintiff vs. Defendant |
⭐ MNEMONIC:
- Criminal = State cares about society (Government files the case)
- Civil = Private people fight (Plaintiff vs. Defendant)
| Level | Court | Jurisdiction |
|---|---|---|
| 1 - Lowest | District Court (Jilla Adalat) | First instance for ALL civil and criminal cases; entry point for all medicolegal cases |
| 2 - Middle | High Court (Uccha Adalat) - 7 regional High Courts | Hears appeals from District Courts; original jurisdiction in some matters |
| 3 - Highest | Supreme Court (Sarbochcha Adalat) - Kathmandu | Final court of appeal; constitutional jurisdiction; final authority on all matters |
⭐ MNEMONIC: D → H → S
- District → High → Supreme
- "Doctor Has Skills" = District, High, Supreme
- All medicolegal cases START at the District Court
| # | Type of Punishment | Description |
|---|---|---|
| 1 | Imprisonment for Life | MAXIMUM punishment in Nepal |
| 2 | Rigorous Imprisonment | WITH hard labour (grinding grain, breaking stones) |
| 3 | Simple Imprisonment | WITHOUT hard labour |
| 4 | Forfeiture / Confiscation of Property | State seizes property |
| 5 | Fine | Monetary penalty |
⭐ MNEMONIC: Nepal = No Death
- Nepal abolished death penalty in 1990
- Constitution 2015 bans it
- Max = LIFE imprisonment
- Punishments: Life | Rigorous | Simple | Forfeiture | Fine (5 types only)
| Feature | Police Inquest | Magistrate's Inquest | Coroner's Inquest |
|---|---|---|---|
| Conducted By | Sub-Inspector of Police (officer in charge of police station) | District Magistrate / Judicial Magistrate / Executive Magistrate | Coroner (doctor, lawyer, or both) - assisted by deputy coroner |
| When Done | On receiving ANY information of accidental or unnatural death - immediately informs nearest magistrate | Death in prison/custody, police firing, exhumation, dowry death | Certain unnatural deaths requiring medico-legal inquiry |
| Powers | Draws report on apparent cause of death; describes wounds/fractures | Can examine witnesses on oath; broader powers | Court of inquiry ONLY - NOT a trial court; cannot order arrest |
| Post-mortem? | YES - can order | YES - can order | YES - coroner performs PM too |
⭐ MNEMONIC: Magistrate's 4 Triggers (Nepal)
- Prison/custody death
- Police firing death
- Buried body dug up (exhumation)
- Dowry death
- "Prison, Police-firing, dig-up, Dowry" → Magistrate investigates!
⭐ MNEMONIC: Cognizable = Can (both start with C!)
- Cognizable → Cop can arrest without warrant
- Non-cognizable → Needs warrant + magistrate permission
- Serious = Cognizable | Minor = Non-Cognizable
⭐ MNEMONIC:
- Summons = Must Go (compulsory, like an exam)
- No conduct money? = Can legally refuse
- Always bring: certified copies, NOT originals
NOTE: Doctor's evidence is an OPINION (corroborative) - NOT positive proof like an eyewitness.
| Type | Definition | Example |
|---|---|---|
| ORAL - Direct | Personally witnessed fact directly in issue | "I saw B stab A" |
| ORAL - Circumstantial | Indirect; court draws logical inferences | "C saw B with a knife near the scene just before the murder" |
| ORAL - Hearsay | What the witness did NOT personally see - from a third party. Generally NOT admissible | "A says B told him C committed the crime" |
| DOCUMENTARY - Primary | The ORIGINAL document before the court | Original prescription or hospital record |
| DOCUMENTARY - Secondary | Certified copies / copies compared with the original | Certified photocopy of discharge summary |
⭐ MNEMONIC: D-C-H for Oral Evidence
- Direct = personally witnessed
- Circumstantial = court draws logical inference
- Hearsay = heard from someone else → generally NOT admissible
- Doctor's evidence = OPINION = corroborative (supports, does not prove by itself)
Definition: A statement made by a DYING PERSON about the cause or circumstances of their death.
⭐ MNEMONIC: FOVG MAD
- Fit state of mind
- Oath NOT required
- Voluntary (no coaching)
- Gestures allowed (oral/written/signs)
- Magistrate records ideally
- Alone sufficient for conviction
- Death NOT necessary for validity
| Type | Definition |
|---|---|
| Ordinary / Common Witness | States facts PERSONALLY OBSERVED. No professional opinion. |
| Expert Witness | Has special knowledge/skill; gives a PROFESSIONAL OPINION to help the court. Can refer to textbooks - if expert adopts a passage as their own view, it is treated as their evidence. |
| Hostile Witness | Turns against the side that called them - conceals truth or gives false evidence. Court declares hostile on request of summoning lawyer. Once declared hostile, the SAME SIDE'S lawyer can cross-examine them. |
⭐ MNEMONIC: SEE vs. THINK
- COMMON = Describes what he SEES (observations = facts)
- EXPERT = States what he THINKS (interpretation = opinion)
- "Wound is 3 cm long" → Common | "Wound is antemortem and homicidal" → Expert
⭐ MNEMONIC: Perjury = 7-year Penalty
- Perjury = Purposely lying under oath
- Punishment = 7 years imprisonment
- Two contradictory sworn statements = perjury
| Step | Name | Who Asks Questions | Key Rule |
|---|---|---|---|
| 1st | Examination-in-Chief | Lawyer who CALLED the witness | Leading questions NOT allowed |
| 2nd | Cross-Examination | Lawyer on the OPPOSITE side | Leading questions ARE allowed |
| 3rd | Re-Examination | Original (calling) lawyer AGAIN | Only NEW matters raised in cross - cannot revisit old topics |
⭐ MNEMONIC: E-C-R = "Every Court has Rounds"
- Examination-in-chief → Cross-examination → Re-examination
- Re-examination = LIMITED to new matters from cross
- Leading questions: FORBIDDEN in exam-in-chief | ALLOWED in cross
⭐ GOLDEN RULE: Your job is to help the court find the TRUTH, not to "win" a case for either side. If your written report says X and you say Y in court → damages your credibility.
| Topic | India (KS Narayan Reddy) | Nepal (SBN's Manual) |
|---|---|---|
| Penal Law | BNS - Bharatiya Nyaya Sanhita (Act 45/2023) | National Penal Code Act (2074 BS / 2017 AD) |
| Procedure Law | BNSS - Bharatiya Nagarika Suraksha Sanhita (Act 46/2023) | National Criminal Procedure Code (2074 BS / 2017 AD) |
| Evidence Law | BSA - Bharatiya Sakshya Adhiniyam (Act 47/2023) | Evidence Act / Saboot Ain |
| Death Penalty | YES - awarded by Sessions Court | ABOLISHED in 1990 - Life = maximum |
| Court Hierarchy | Magistrate → Sessions → High → Supreme | District → High → Supreme (3 tiers) |
| Inquest Types | Police + Magistrate (2 types) | Police + Magistrate + Coroner (3 types) |
| Magistrate Inquest triggers | Custody, Dowry, Exhumation, Mental hospital | Prison/custody, Police firing, Exhumation, Dowry |
| Case classification | Civil vs. Criminal (BNS/BNSS) | Section 9, Muluki Ain |
| Perjury punishment | 7 years (Section 229, BNS) | Imprisonment (Nepal Penal Code) |
| Mnemonic | What to Remember |
|---|---|
| Penal → Procedure → Evidence | Nepal's 3 laws (2074 BS); all in force 17 Aug 2018 |
| Nepal = No Death | Death penalty abolished 1990; max = LIFE imprisonment |
| D→H→S = Doctor Has Skills | District → High → Supreme (Nepal 3-tier courts) |
| 4 Triggers for Magistrate | Prison/custody, Police firing, Exhumation, Dowry death |
| Cognizable = C = Can arrest | Without warrant; Non-cognizable = needs permission |
| FOVG MAD | Dying declaration rules (Fit/Oath-not/Voluntary/Gestures/Magistrate/Alone/Death-not-needed) |
| E-C-R = "Every Court Rounds" | Examination-in-chief → Cross → Re-examination |
| SEE vs. THINK | Common witness = sees facts |
| Perjury = 7 years | Willful false evidence under oath |
| D-C-H | Direct / Circumstantial / Hearsay (oral evidence types) |
| Summons = Must Go | No conduct money = can legally refuse |
I don't know anything about this pdf. And from this pdf the long question will be asked . Help me to understand all the topic easily and remember all the concepts present in this pdf in easy language
python3 -c " import pdfplumber path = '/home/daytona/workspace/attachments/a09a3…