List out all the sections(BNS,BNSS,BSA) from the ks narayan reddy textbook of forensic medicine latest edition
| New Law | Full Name | Act No. | Replaced |
|---|---|---|---|
| BNS | Bharatiya Nyaya Sanhita | Act 45 of 2023 | Indian Penal Code (IPC), 1860 |
| BNSS | Bharatiya Nagarika Suraksha Sanhita | Act 46 of 2023 | Criminal Procedure Code (CrPC), 1973 |
| BSA | Bharatiya Sakshya Adhiniyam | Act 47 of 2023 | Indian Evidence Act (IEA), 1872 |
| BNS Section | Subject/Description | Old IPC Equivalent |
|---|---|---|
| Section 2(24) | Definition of "Offence" | S. 40, IPC |
| Section 4 | Punishments authorized by law (death, life imprisonment, rigorous/simple imprisonment, fine) | - |
| Section 72 | Printing/publishing identity of rape victim - imprisonment up to 2 years | S. 228-A, IPC |
| Section 74 | Assault or criminal force to woman with intent to outrage modesty - imprisonment 1 to 5 years | S. 354, IPC |
| Section 75 | Sexual harassment (physical contact, sexual advances, pornography) - imprisonment 1-3 years or fine | S. 354-A, IPC |
| Section 76 | Assault/criminal force to disrobe a woman - imprisonment 3 to 7 years | S. 354-B, IPC |
| Section 77 | Voyeurism | S. 354-C, IPC |
| Section 79 | Insulting modesty of a woman by words, sounds, gestures - imprisonment up to 3 years | S. 509, IPC |
| Section 81 | Cohabitation by deceitfully inducing belief of lawful marriage - imprisonment up to 10 years | S. 493, IPC |
| Section 84 | Enticing or taking away a married woman with criminal intent - imprisonment up to 2 years or fine | S. 498, IPC |
| Section 124 | Voluntarily causing grievous hurt by acid - imprisonment not less than 10 years, may extend to life; fine of ₹10 lakh | S. 326-A, IPC |
| Section 124(2) | Voluntarily throwing or attempting to throw acid - imprisonment 5 to 7 years | S. 326-B, IPC |
| Section 144 | Trafficking of a minor for sexual exploitation - imprisonment not less than 5 years up to 7 years | S. 370-A, IPC |
| Section 196 | Custody death/rape - mandatory magistrate inquest + autopsy when death/disappearance/rape occurs in police or court-authorized custody | S. 176(1A), CrPC |
| Sections 206-208 | Punishment for non-attendance in obedience to court summons - imprisonment up to 1 month or fine | - |
| Section 208 | Non-attendance in obedience to court summons - imprisonment up to 1 month or fine | - |
| Section 234 | Issuing or signing a false certificate - punishable | S. 197, IPC |
| Section 296 | Obscene act in a public place - imprisonment up to 3 months or fine | S. 294, IPC |
| Section 64 (clause a-m/n), Sub-section (2) | Rape offences (referenced in BSA Section 120 for burden of proof) | S. 376, IPC |
| BNSS Section | Subject/Description | Old CrPC Equivalent |
|---|---|---|
| Section 2(1) | Definition of Cognizable and Noncognizable offences | - |
| Section 2(n) | Definition of Offence | S. 40, IPC |
| Section 18 & 19 | Public prosecutor examines witnesses in government prosecution | S. 24 & 25, CrPC |
| Section 35 | Arrest without warrant (noncognisable offence) | S. 41, CrPC |
| Section 52 | Medical examination of victim of rape/attempted rape by a Registered Medical Practitioner (RMP) | S. 53-A, CrPC |
| Sections 63-71 | Summons - issuance, service, and procedures | Ss. 61-69, CrPC |
| Section 63 | Summons issued in writing, in duplicate, signed by presiding officer | S. 61, CrPC |
| Section 64 | Service of summons on the witness | S. 62, CrPC |
| Section 68 | Summons to a government servant - sent to head of office | S. 66, CrPC |
| Section 90 | Warrant for securing presence of witness | - |
| Section 94 | Production of documents (subpoena duces tectum) | - |
| Sections 94 & 195 | Subpoena duces tectum - requiring witness to bring documents | S. 165, BSA |
| Section 173 | Cognisable offence - individual sent to doctor for medical examination | - |
| Section 176 | Statement of rape/indecent assault victim to be recorded by woman police officer at victim's home | S. 157, CrPC |
| Section 180 | Statement of a woman against whom offence is committed | S. 161, CrPC |
| Section 184 | Medical examination of rape victim - consent, report format, forwarding to magistrate | S. 164-A, CrPC |
| Section 195 | Subpoena duces tectum | - |
| Section 326 | Expert evidence - can be called without undue delay or unreasonable expense | - |
| Section 328 | Reports of government scientific experts (Chemical Examiner etc.) as evidence | - |
| Section 348 | Court may recall and re-examine any witness already examined | - |
| Section 389 | Notice to witness who fails to attend court | - |
| Sections 6 to 17 | Courts in India and their powers | - |
| BSA Section | Subject/Description | Old IEA Equivalent |
|---|---|---|
| Section 2 | Definition of "Fact" | S. 3, IEA |
| Section 26 | Dying declaration - admissibility of statement by a deceased/unavailable person | - |
| Section 39 | Expert witness opinion | - |
| Section 54 | Facts (other than document contents) may be proved by oral evidence | S. 59, IEA |
| Section 55 | Oral evidence must be direct; expert opinion in treatise | S. 60, IEA |
| Sections 56 to 92 | Documentary evidence | - |
| Section 56 | Primary and secondary evidence - document produced for inspection | - |
| Section 60 | Oral evidence direct; Court may require production of material things (e.g., blood-stained weapon) | S. 60, IEA |
| Section 94 | Subpoena duces tectum - compelling witness to bring documents | - |
| Section 120 | Presumption as to absence of consent in rape (burden of proof shifts to accused in custodial rape/gang rape) | S. 114-A, IEA |
| Section 124 | Competency of witnesses; mental capacity requirement | - |
| Section 125 | Deaf-mute witness may testify by signs, writing, or interpreter | S. 119, IEA |
| Section 142 | Examination-in-chief (direct examination) of witness | - |
| Section 143 | Order of examination of witnesses | - |
| Section 146 | Leading questions not allowed in examination-in-chief (except hostile witness) | - |
| Section 155 | Hostile witness provisions | - |
| Section 165 | Subpoena duces tectum - production of documents | - |
| Section 168 | Court may recall and re-examine any already-examined witness for just decision | - |
Note: The BNS, BNSS, and BSA came into force on 1 July 2024, replacing the IPC (1860), CrPC (1973), and Indian Evidence Act (1872) respectively. This 36th edition is the first edition to fully incorporate these three new laws throughout the text.
Create a comparison table of BNS vs old IPC sections for quick reference
mkdir -p /tmp/workspace/bns-ipc-table && ls /tmp/workspace/bns-ipc-table/
~/bns-ipc-table/generate_pdf.py
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph,
Spacer, HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
OUTPUT = "/tmp/workspace/bns-ipc-table/BNS_vs_IPC_Comparison.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A4),
rightMargin=1.5*cm,
leftMargin=1.5*cm,
topMargin=1.8*cm,
bottomMargin=1.5*cm,
title="BNS vs IPC – Forensic Medicine Quick Reference",
author="KS Narayan Reddy 36th Edition"
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
'Title',
parent=styles['Normal'],
fontSize=16,
fontName='Helvetica-Bold',
textColor=colors.HexColor('#1a237e'),
alignment=TA_CENTER,
spaceAfter=4,
)
subtitle_style = ParagraphStyle(
'Subtitle',
parent=styles['Normal'],
fontSize=9,
fontName='Helvetica',
textColor=colors.HexColor('#555555'),
alignment=TA_CENTER,
spaceAfter=10,
)
section_header_style = ParagraphStyle(
'SectionHeader',
parent=styles['Normal'],
fontSize=9,
fontName='Helvetica-Bold',
textColor=colors.white,
alignment=TA_LEFT,
)
cell_style = ParagraphStyle(
'Cell',
parent=styles['Normal'],
fontSize=8,
fontName='Helvetica',
leading=11,
alignment=TA_LEFT,
)
cell_bold_style = ParagraphStyle(
'CellBold',
parent=styles['Normal'],
fontSize=8,
fontName='Helvetica-Bold',
leading=11,
alignment=TA_LEFT,
)
note_style = ParagraphStyle(
'Note',
parent=styles['Normal'],
fontSize=7.5,
fontName='Helvetica-Oblique',
textColor=colors.HexColor('#444444'),
alignment=TA_LEFT,
spaceAfter=2,
)
# ─── DATA ────────────────────────────────────────────────────────────────────
# Each row: (BNS Section, Old IPC Section, Subject/Topic, Punishment/Key Points)
header_row = [
Paragraph('<b>BNS Section\n(2023)</b>', ParagraphStyle('h', parent=styles['Normal'], fontSize=8.5, fontName='Helvetica-Bold', textColor=colors.white, alignment=TA_CENTER)),
Paragraph('<b>Old IPC Section\n(1860)</b>', ParagraphStyle('h', parent=styles['Normal'], fontSize=8.5, fontName='Helvetica-Bold', textColor=colors.white, alignment=TA_CENTER)),
Paragraph('<b>Subject / Topic</b>', ParagraphStyle('h', parent=styles['Normal'], fontSize=8.5, fontName='Helvetica-Bold', textColor=colors.white, alignment=TA_CENTER)),
Paragraph('<b>Key Points / Punishment</b>', ParagraphStyle('h', parent=styles['Normal'], fontSize=8.5, fontName='Helvetica-Bold', textColor=colors.white, alignment=TA_CENTER)),
]
def row(bns, ipc, topic, key):
return [
Paragraph(bns, cell_bold_style),
Paragraph(ipc, cell_style),
Paragraph(topic, cell_style),
Paragraph(key, cell_style),
]
data = [header_row]
# ── DEFINITIONS & GENERAL ─────────────────────────────────────────────────
data.append([
Paragraph('DEFINITIONS & GENERAL', ParagraphStyle('cat', parent=styles['Normal'], fontSize=8, fontName='Helvetica-BoldOblique', textColor=colors.HexColor('#1a237e'), alignment=TA_LEFT)),
'', '', ''
])
data += [
row('S. 2(24)', 'S. 40', 'Definition of "Offence"',
'Any act or omission made punishable by law; offences classified as bailable and non-bailable.'),
row('S. 4', '—', 'Punishments authorised by law',
'Death; imprisonment for life; rigorous imprisonment (with hard labour, including solitary confinement Ss. 11 & 12); simple imprisonment (S. 7); fine (S. 8(1)).'),
]
# ── SEXUAL OFFENCES ────────────────────────────────────────────────────────
data.append([
Paragraph('SEXUAL OFFENCES', ParagraphStyle('cat', parent=styles['Normal'], fontSize=8, fontName='Helvetica-BoldOblique', textColor=colors.HexColor('#1a237e'), alignment=TA_LEFT)),
'', '', ''
])
data += [
row('S. 64 (clauses a–n, sub-s. 2)', 'S. 376',
'Rape',
'Penetration offences. BSA S. 120 shifts burden of proof to accused in custodial rape / gang rape if victim states absence of consent.'),
row('S. 72', 'S. 228-A',
'Publication of rape victim\'s identity',
'Printing/publishing name or matter that discloses identity of rape victim → imprisonment up to 2 years.'),
row('S. 74', 'S. 354',
'Assault / criminal force to woman – outrage modesty',
'Imprisonment not less than 1 year, may extend to 5 years + fine.'),
row('S. 75', 'S. 354-A',
'Sexual harassment',
'(1) Physical contact with sexual overtures, (2) demand for sexual favours, (3) sexually coloured remarks, (4) showing pornography → imprisonment 1–3 years or fine or both.'),
row('S. 76', 'S. 354-B',
'Assault / criminal force to disrobe a woman',
'Compelling a woman to be naked → imprisonment not less than 3 years, may extend to 7 years + fine.'),
row('S. 77', 'S. 354-C',
'Voyeurism',
'Capturing or disseminating image of woman in private act.'),
row('S. 79', 'S. 509',
'Insulting modesty of woman – words, sounds, gestures',
'Uttering offensive words/sounds/gestures; intruding on privacy → simple imprisonment up to 3 years + fine.'),
]
# ── MARRIAGE OFFENCES ──────────────────────────────────────────────────────
data.append([
Paragraph('MARRIAGE & DOMESTIC OFFENCES', ParagraphStyle('cat', parent=styles['Normal'], fontSize=8, fontName='Helvetica-BoldOblique', textColor=colors.HexColor('#1a237e'), alignment=TA_LEFT)),
'', '', ''
])
data += [
row('S. 81', 'S. 493',
'Cohabitation by deceit – inducing belief of lawful marriage',
'Man deceitfully inducing a woman to believe a non-existent marriage → imprisonment up to 10 years.'),
row('S. 84', 'S. 498',
'Enticing / taking away a married woman',
'Criminal intention to entice or detain a married woman → imprisonment up to 2 years or fine or both.'),
]
# ── ACID ATTACK ────────────────────────────────────────────────────────────
data.append([
Paragraph('ACID ATTACKS', ParagraphStyle('cat', parent=styles['Normal'], fontSize=8, fontName='Helvetica-BoldOblique', textColor=colors.HexColor('#1a237e'), alignment=TA_LEFT)),
'', '', ''
])
data += [
row('S. 124', 'S. 326-A',
'Voluntarily causing grievous hurt by acid',
'Imprisonment not less than 10 years, may extend to life + fine of ₹10 lakh (payable to victim for medical expenses).'),
row('S. 124(2)', 'S. 326-B',
'Voluntarily throwing / attempting to throw acid',
'Imprisonment not less than 5 years, may extend to 7 years + fine.'),
]
# ── TRAFFICKING ────────────────────────────────────────────────────────────
data.append([
Paragraph('TRAFFICKING', ParagraphStyle('cat', parent=styles['Normal'], fontSize=8, fontName='Helvetica-BoldOblique', textColor=colors.HexColor('#1a237e'), alignment=TA_LEFT)),
'', '', ''
])
data += [
row('S. 144', 'S. 370-A',
'Trafficking of a minor for sexual exploitation',
'Knowingly engaging a trafficked minor for sexual exploitation → imprisonment not less than 5 years, may extend to 7 years + fine.'),
]
# ── CUSTODY DEATHS & INQUEST ───────────────────────────────────────────────
data.append([
Paragraph('CUSTODY DEATHS & INQUEST', ParagraphStyle('cat', parent=styles['Normal'], fontSize=8, fontName='Helvetica-BoldOblique', textColor=colors.HexColor('#1a237e'), alignment=TA_LEFT)),
'', '', ''
])
data += [
row('S. 196', 'S. 176(1A) CrPC',
'Death / disappearance / rape in police or court-authorized custody',
'In addition to police inquest, a Judicial Magistrate inquest is mandatory; body to be sent for autopsy.'),
]
# ── COURT PROCESS & CONTEMPT ───────────────────────────────────────────────
data.append([
Paragraph('COURT PROCESS & CONTEMPT', ParagraphStyle('cat', parent=styles['Normal'], fontSize=8, fontName='Helvetica-BoldOblique', textColor=colors.HexColor('#1a237e'), alignment=TA_LEFT)),
'', '', ''
])
data += [
row('Ss. 206–208', '—',
'Non-attendance in obedience to court summons',
'Willful non-appearance in court → imprisonment up to 1 month or fine or both.'),
row('S. 208', '—',
'Specific: Non-attendance (summons)',
'Imprisonment up to 1 month or fine or both.'),
]
# ── PROFESSIONAL / MEDICAL ─────────────────────────────────────────────────
data.append([
Paragraph('PROFESSIONAL / MEDICAL PRACTICE', ParagraphStyle('cat', parent=styles['Normal'], fontSize=8, fontName='Helvetica-BoldOblique', textColor=colors.HexColor('#1a237e'), alignment=TA_LEFT)),
'', '', ''
])
data += [
row('S. 234', 'S. 197',
'Issuing or signing a false certificate',
'Doctor issuing a false medical/death certificate → punishable under BNS.'),
]
# ── PUBLIC NUISANCE ────────────────────────────────────────────────────────
data.append([
Paragraph('PUBLIC NUISANCE', ParagraphStyle('cat', parent=styles['Normal'], fontSize=8, fontName='Helvetica-BoldOblique', textColor=colors.HexColor('#1a237e'), alignment=TA_LEFT)),
'', '', ''
])
data += [
row('S. 296', 'S. 294',
'Obscene act in a public place',
'(a) Obscene act in public or (b) obscene songs/words near public place to the annoyance of others → imprisonment up to 3 months or fine or both.'),
]
# ─── COLUMN WIDTHS ───────────────────────────────────────────────────────────
page_w = landscape(A4)[0] - 3*cm # usable width
col_widths = [
page_w * 0.13, # BNS Section
page_w * 0.13, # IPC Section
page_w * 0.30, # Topic
page_w * 0.44, # Key Points
]
# ─── TABLE STYLE ─────────────────────────────────────────────────────────────
HEADER_BG = colors.HexColor('#1a237e') # deep navy
CAT_BG = colors.HexColor('#e8eaf6') # light indigo tint
ODD_BG = colors.HexColor('#ffffff')
EVEN_BG = colors.HexColor('#f5f5ff')
GRID_COLOR = colors.HexColor('#c5cae9')
table_style_cmds = [
# Global
('FONTNAME', (0,0), (-1,-1), 'Helvetica'),
('FONTSIZE', (0,0), (-1,-1), 8),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING',(0,0), (-1,-1), 5),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING',(0,0), (-1,-1), 4),
('GRID', (0,0), (-1,-1), 0.4, GRID_COLOR),
('ROWBACKGROUNDS', (0,0), (-1,-1), [ODD_BG, EVEN_BG]),
# Header row
('BACKGROUND', (0,0), (-1,0), HEADER_BG),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 8.5),
('ALIGN', (0,0), (-1,0), 'CENTER'),
('VALIGN', (0,0), (-1,0), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,0), 6),
('BOTTOMPADDING', (0,0), (-1,0), 6),
]
# Category separator rows
cat_rows = []
current_row = 1
for i, d in enumerate(data):
if i == 0:
continue
# detect category rows: col 1-3 are empty strings
if d[1] == '' and d[2] == '' and d[3] == '':
cat_rows.append(current_row)
current_row += 1
for r in cat_rows:
table_style_cmds += [
('BACKGROUND', (0,r), (-1,r), CAT_BG),
('SPAN', (0,r), (-1,r)),
('TOPPADDING', (0,r), (-1,r), 3),
('BOTTOMPADDING',(0,r), (-1,r), 3),
('LINEABOVE', (0,r), (-1,r), 1.0, colors.HexColor('#7986cb')),
]
table = Table(data, colWidths=col_widths, repeatRows=1)
table.setStyle(TableStyle(table_style_cmds))
# ─── BUILD ────────────────────────────────────────────────────────────────────
elements = []
elements.append(Paragraph("BNS vs IPC — Forensic Medicine Quick Reference", title_style))
elements.append(Paragraph(
"Bharatiya Nyaya Sanhita (BNS), Act 45 of 2023 | Replaces: Indian Penal Code (IPC), 1860 | "
"Source: KS Narayan Reddy's Essentials of Forensic Medicine & Toxicology, 36th Edition (2026)",
subtitle_style))
elements.append(HRFlowable(width="100%", thickness=1.5, color=colors.HexColor('#1a237e'), spaceAfter=8))
elements.append(table)
elements.append(Spacer(1, 8))
elements.append(Paragraph(
"Note: BNS, BNSS (replaces CrPC) and BSA (replaces IEA) came into force on 1 July 2024. "
"Sections without an IPC equivalent are new provisions introduced by the BNS.",
note_style))
doc.build(elements)
print(f"PDF saved to: {OUTPUT}")
cd /tmp/workspace/bns-ipc-table && python generate_pdf.py
BNS vs IPC Comparison
PDF Document · PDF
| Category | BNS Sections Covered |
|---|---|
| Definitions & General | S. 2(24), S. 4 |
| Sexual Offences | S. 64, 72, 74, 75, 76, 77, 79 |
| Marriage & Domestic Offences | S. 81, 84 |
| Acid Attacks | S. 124, 124(2) |
| Trafficking | S. 144 |
| Custody Deaths & Inquest | S. 196 |
| Court Process & Contempt | Ss. 206-208 |
| Professional / Medical Practice | S. 234 |
| Public Nuisance | S. 296 |
Create a similar table for BNSS vs CrPC procedural sections
~/bns-ipc-table/generate_bnss_pdf.py
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph,
Spacer, HRFlowable
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUTPUT = "/tmp/workspace/bns-ipc-table/BNSS_vs_CrPC_Comparison.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A4),
rightMargin=1.5*cm,
leftMargin=1.5*cm,
topMargin=1.8*cm,
bottomMargin=1.5*cm,
title="BNSS vs CrPC – Forensic Medicine Quick Reference",
author="KS Narayan Reddy 36th Edition"
)
styles = getSampleStyleSheet()
title_style = ParagraphStyle(
'Title', parent=styles['Normal'],
fontSize=16, fontName='Helvetica-Bold',
textColor=colors.HexColor('#1b5e20'),
alignment=TA_CENTER, spaceAfter=4,
)
subtitle_style = ParagraphStyle(
'Subtitle', parent=styles['Normal'],
fontSize=9, fontName='Helvetica',
textColor=colors.HexColor('#555555'),
alignment=TA_CENTER, spaceAfter=10,
)
cell_style = ParagraphStyle(
'Cell', parent=styles['Normal'],
fontSize=8, fontName='Helvetica',
leading=11, alignment=TA_LEFT,
)
cell_bold_style = ParagraphStyle(
'CellBold', parent=styles['Normal'],
fontSize=8, fontName='Helvetica-Bold',
leading=11, alignment=TA_LEFT,
)
note_style = ParagraphStyle(
'Note', parent=styles['Normal'],
fontSize=7.5, fontName='Helvetica-Oblique',
textColor=colors.HexColor('#444444'),
alignment=TA_LEFT, spaceAfter=2,
)
cat_label_style = ParagraphStyle(
'CatLabel', parent=styles['Normal'],
fontSize=8, fontName='Helvetica-BoldOblique',
textColor=colors.HexColor('#1b5e20'),
alignment=TA_LEFT,
)
# ─── HEADER ──────────────────────────────────────────────────────────────────
hdr_para = ParagraphStyle(
'Hdr', parent=styles['Normal'],
fontSize=8.5, fontName='Helvetica-Bold',
textColor=colors.white, alignment=TA_CENTER,
)
def hdr(txt):
return Paragraph(txt, hdr_para)
def row(bnss, crpc, topic, key):
return [
Paragraph(bnss, cell_bold_style),
Paragraph(crpc, cell_style),
Paragraph(topic, cell_style),
Paragraph(key, cell_style),
]
def cat(label):
return [Paragraph(label, cat_label_style), '', '', '']
# ─── DATA ────────────────────────────────────────────────────────────────────
header_row = [
hdr('BNSS Section\n(2023)'),
hdr('Old CrPC Section\n(1973)'),
hdr('Subject / Topic'),
hdr('Key Points / Procedural Details'),
]
data = [header_row]
# ── 1. DEFINITIONS ────────────────────────────────────────────────────────────
data.append(cat('DEFINITIONS'))
data += [
row('S. 2(1)', '—',
'Cognizable & Noncognizable offence (defined)',
'Cognizable offence: police can arrest without warrant (e.g. rape, murder, dowry death, sex offences, robbery, ragging, negligent death). '
'Noncognizable offence: arrest only with magistrate warrant.'),
row('S. 2(n)', 'S. 40, IPC',
'Definition of "Offence"',
'Any act or omission made punishable by law. [Cross-referenced with BNS S. 2(24)]'),
]
# ── 2. COURTS ─────────────────────────────────────────────────────────────────
data.append(cat('COURTS OF LAW'))
data += [
row('Ss. 6–17', '—',
'Courts in India and their powers',
'Hierarchy: Supreme Court → High Court → Sessions Court → Magistrate\'s Court → Labour Court → Family Court → '
'Executive Magistrate Court → Juvenile Justice Board.'),
]
# ── 3. ARREST ─────────────────────────────────────────────────────────────────
data.append(cat('ARREST'))
data += [
row('S. 35', 'S. 41, CrPC',
'Arrest without warrant – noncognizable offence',
'In noncognizable offences, accused cannot be arrested without a warrant issued by the magistrate. '
'Injured person may go directly to the doctor or file an affidavit before a magistrate who sends him for examination.'),
row('S. 173', '—',
'Cognizable offence – medical examination by police',
'Individual accused in a cognizable offence is sent by police to a doctor for medical examination and report.'),
]
# ── 4. SUMMONS ────────────────────────────────────────────────────────────────
data.append(cat('SUMMONS (SUBPOENA)'))
data += [
row('Ss. 63–71', 'Ss. 61–69, CrPC',
'Summons – issuance, service, and procedures',
'General provisions governing summons to witnesses and accused persons.'),
row('S. 63', 'S. 61, CrPC',
'Issue of summons',
'Issued in writing, in duplicate, signed by presiding officer of the court, bearing court seal. '
'Crime number and name of accused mentioned.'),
row('S. 64', 'S. 62, CrPC',
'Service of summons on the witness',
'Served by police officer, court officer or public servant; recipient signs receipt on back of duplicate copy. '
'Can also be served by registered post or affixed on conspicuous part of residence.'),
row('S. 68', 'S. 66, CrPC',
'Summons to a government servant',
'Court sends summons in duplicate to head of office; head serves it on the individual and returns it to court with endorsement.'),
row('S. 90', '—',
'Bailable/non-bailable warrant to secure presence of witness',
'Court may issue warrant if witness wilfully neglects to attend after hearing under S. 389.'),
row('S. 94', '—',
'Subpoena duces tectum – witness to produce documents',
'Requires witness to bring books, documents or things under his control that he is legally bound to produce. '
'[Also cross-referenced: BSA S. 165]'),
row('S. 389', '—',
'Notice to witness who fails to attend court',
'If witness neglects attendance without justification after notice, court may sentence to fine or imprisonment, '
'or issue bailable/non-bailable warrant.'),
]
# ── 5. PROSECUTION & PUBLIC PROSECUTOR ────────────────────────────────────────
data.append(cat('PROSECUTION & PUBLIC PROSECUTOR'))
data += [
row('Ss. 18 & 19', 'Ss. 24 & 25, CrPC',
'Public Prosecutor – appointment and role',
'In government prosecution cases, public prosecutor first examines the witness (examination-in-chief). '
'Distinction between Public Prosecutor (Sessions Court) and Assistant Public Prosecutor (Magistrate\'s Court).'),
]
# ── 6. INVESTIGATION ──────────────────────────────────────────────────────────
data.append(cat('INVESTIGATION'))
data += [
row('S. 52', 'S. 53-A, CrPC',
'Medical examination of accused in rape / attempted rape',
'Examination by a Registered Medical Practitioner (RMP) employed in a government or local authority hospital. '
'In absence, any RMP, with consent. Woman to be sent to RMP within 24 hours.'),
row('S. 176', 'S. 157, CrPC',
'Recording victim\'s statement – rape / indecent assault',
'Statement of rape/indecent assault victim to be recorded by a woman police officer at victim\'s residence '
'or place of her choice, in presence of parents or guardians.'),
row('S. 180', 'S. 161, CrPC',
'Statement of woman against whom sexual offence committed',
'Statement of a woman against whom an offence under BNS S. 376-A to E and S. 509 IPC has been alleged.'),
row('S. 184', 'S. 164-A, CrPC',
'Medical examination of rape victim – detailed procedure',
'(1) RMP to examine without delay; prepare report with: name, age, address, who brought her, injuries, '
'mental condition, all materials taken for investigation. (2) Report must state reasons for each conclusion. '
'(3) Record that consent was obtained. (4) Note exact time of start and end of examination. '
'(5) Forward report to investigating officer → forwarded to magistrate. (6) Examination without consent is unlawful.'),
row('S. 195', '—',
'Subpoena duces tectum (in investigation context)',
'Compelling production of documents / things during investigation.'),
]
# ── 7. EXPERT EVIDENCE ────────────────────────────────────────────────────────
data.append(cat('EXPERT EVIDENCE & SCIENTIFIC REPORTS'))
data += [
row('S. 326', '—',
'Expert witness – can be called without undue delay or expense',
'Witness can be called to give oral evidence without unreasonable expense or delay. '
'[Cross-ref: BSA S. 55 / IEA S. 60]'),
row('S. 328', '—',
'Reports of government scientific experts as evidence',
'Written reports of government scientific experts (Chemical Examiner, Serologist, DNA analyst, etc.) '
'are admissible as evidence without the expert needing to appear in person unless the court directs otherwise.'),
]
# ── 8. TRIAL PROCEDURE ────────────────────────────────────────────────────────
data.append(cat('TRIAL PROCEDURE'))
data += [
row('S. 348', '—',
'Recall and re-examination of witness by court',
'Court is empowered to recall and re-examine any witness already examined if his evidence is essential '
'to the just decision of the case. [Cross-ref: BSA S. 168]'),
]
# ─── COLUMN WIDTHS ───────────────────────────────────────────────────────────
page_w = landscape(A4)[0] - 3*cm
col_widths = [
page_w * 0.13,
page_w * 0.13,
page_w * 0.28,
page_w * 0.46,
]
# ─── TABLE STYLE ─────────────────────────────────────────────────────────────
HEADER_BG = colors.HexColor('#1b5e20') # deep green
CAT_BG = colors.HexColor('#e8f5e9') # light green tint
ODD_BG = colors.HexColor('#ffffff')
EVEN_BG = colors.HexColor('#f1f8f1')
GRID_COLOR = colors.HexColor('#a5d6a7')
table_style_cmds = [
('FONTNAME', (0,0), (-1,-1), 'Helvetica'),
('FONTSIZE', (0,0), (-1,-1), 8),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING',(0,0), (-1,-1), 5),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING',(0,0), (-1,-1), 4),
('GRID', (0,0), (-1,-1), 0.4, GRID_COLOR),
('ROWBACKGROUNDS', (0,0), (-1,-1), [ODD_BG, EVEN_BG]),
# Header
('BACKGROUND', (0,0), (-1,0), HEADER_BG),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 8.5),
('ALIGN', (0,0), (-1,0), 'CENTER'),
('VALIGN', (0,0), (-1,0), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,0), 6),
('BOTTOMPADDING', (0,0), (-1,0), 6),
]
# Identify and style category rows
cat_row_indices = []
for i, d in enumerate(data):
if i == 0:
continue
if d[1] == '' and d[2] == '' and d[3] == '':
cat_row_indices.append(i)
for r in cat_row_indices:
table_style_cmds += [
('BACKGROUND', (0,r), (-1,r), CAT_BG),
('SPAN', (0,r), (-1,r)),
('TOPPADDING', (0,r), (-1,r), 3),
('BOTTOMPADDING', (0,r), (-1,r), 3),
('LINEABOVE', (0,r), (-1,r), 1.0, colors.HexColor('#66bb6a')),
]
table = Table(data, colWidths=col_widths, repeatRows=1)
table.setStyle(TableStyle(table_style_cmds))
# ─── BUILD ────────────────────────────────────────────────────────────────────
elements = []
elements.append(Paragraph(
"BNSS vs CrPC — Forensic Medicine Procedural Quick Reference", title_style))
elements.append(Paragraph(
"Bharatiya Nagarika Suraksha Sanhita (BNSS), Act 46 of 2023 | Replaces: Code of Criminal Procedure (CrPC), 1973 | "
"Source: KS Narayan Reddy's Essentials of Forensic Medicine & Toxicology, 36th Edition (2026)",
subtitle_style))
elements.append(HRFlowable(
width="100%", thickness=1.5,
color=colors.HexColor('#1b5e20'), spaceAfter=8))
elements.append(table)
elements.append(Spacer(1, 8))
elements.append(Paragraph(
"Note: BNSS (replaces CrPC), BNS (replaces IPC), and BSA (replaces IEA) all came into force on 1 July 2024. "
"Sections without a CrPC equivalent are new provisions introduced by the BNSS. "
"For BSA vs IEA comparison, refer to the companion table.",
note_style))
doc.build(elements)
print(f"PDF saved to: {OUTPUT}")
cd /tmp/workspace/bns-ipc-table && python generate_bnss_pdf.py
BNSS vs CrPC Comparison
PDF Document · PDF
| Category | BNSS Sections Covered |
|---|---|
| Definitions | S. 2(1), S. 2(n) |
| Courts of Law | Ss. 6–17 |
| Arrest | S. 35, S. 173 |
| Summons (Subpoena) | Ss. 63–71, 63, 64, 68, 90, 94, 389 |
| Prosecution & Public Prosecutor | Ss. 18 & 19 |
| Investigation | S. 52, 176, 180, 184, 195 |
| Expert Evidence & Scientific Reports | S. 326, 328 |
| Trial Procedure | S. 348 |
Arrange all the sections chapter wise
~/bns-ipc-table/generate_chapterwise.py
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph,
Spacer, HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUTPUT = "/tmp/workspace/bns-ipc-table/ChapterWise_BNS_BNSS_BSA.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A4),
rightMargin=1.5*cm, leftMargin=1.5*cm,
topMargin=1.8*cm, bottomMargin=1.5*cm,
title="Chapter-wise BNS / BNSS / BSA – KS Narayan Reddy 36th Ed.",
author="KS Narayan Reddy 36th Edition (2026)"
)
styles = getSampleStyleSheet()
# ── Styles ────────────────────────────────────────────────────────────────────
def ps(name, **kw):
return ParagraphStyle(name, parent=styles['Normal'], **kw)
title_s = ps('T', fontSize=16, fontName='Helvetica-Bold', textColor=colors.HexColor('#37474f'), alignment=TA_CENTER, spaceAfter=3)
sub_s = ps('S', fontSize=8.5, fontName='Helvetica', textColor=colors.HexColor('#555'), alignment=TA_CENTER, spaceAfter=10)
ch_s = ps('CH', fontSize=12, fontName='Helvetica-Bold', textColor=colors.white, alignment=TA_LEFT)
hdr_s = ps('H', fontSize=8.5, fontName='Helvetica-Bold', textColor=colors.white, alignment=TA_CENTER)
cell_s = ps('C', fontSize=8, fontName='Helvetica', leading=11, alignment=TA_LEFT)
bold_s = ps('B', fontSize=8, fontName='Helvetica-Bold', leading=11, alignment=TA_LEFT)
law_bns = ps('LB', fontSize=8, fontName='Helvetica-Bold', textColor=colors.HexColor('#1a237e'), leading=11, alignment=TA_LEFT)
law_bnss = ps('LN', fontSize=8, fontName='Helvetica-Bold', textColor=colors.HexColor('#1b5e20'), leading=11, alignment=TA_LEFT)
law_bsa = ps('LS', fontSize=8, fontName='Helvetica-Bold', textColor=colors.HexColor('#4a148c'), leading=11, alignment=TA_LEFT)
note_s = ps('N', fontSize=7.5, fontName='Helvetica-Oblique', textColor=colors.HexColor('#444'), alignment=TA_LEFT, spaceAfter=2)
# Color palette
BNS_COL = colors.HexColor('#1a237e') # navy
BNSS_COL = colors.HexColor('#1b5e20') # dark green
BSA_COL = colors.HexColor('#4a148c') # dark purple
ODD_BG = colors.HexColor('#ffffff')
EVEN_BG = colors.HexColor('#f8f9ff')
GRID_C = colors.HexColor('#cfd8dc')
def hdr(txt): return Paragraph(txt, hdr_s)
def row(law_type, sec, old, topic, details):
law_styles = {'BNS': law_bns, 'BNSS': law_bnss, 'BSA': law_bsa}
law_colors = {'BNS': colors.HexColor('#e8eaf6'), 'BNSS': colors.HexColor('#e8f5e9'), 'BSA': colors.HexColor('#f3e5f5')}
return [
Paragraph(law_type, law_styles.get(law_type, bold_s)),
Paragraph(sec, bold_s),
Paragraph(old, cell_s),
Paragraph(topic, cell_s),
Paragraph(details, cell_s),
], law_colors.get(law_type, ODD_BG)
HEADER_ROW = [hdr('Law'), hdr('New Section\n(2023)'), hdr('Old Section'), hdr('Topic / Subject'), hdr('Key Points / Punishment')]
PAGE_W = landscape(A4)[0] - 3*cm
COL_W = [PAGE_W*0.07, PAGE_W*0.11, PAGE_W*0.13, PAGE_W*0.26, PAGE_W*0.43]
def make_table(rows_data):
"""rows_data = list of (row_cells, row_bg_color)"""
table_data = [HEADER_ROW]
row_colors = [None] # header handled separately
for cells, bg in rows_data:
table_data.append(cells)
row_colors.append(bg)
cmds = [
('FONTNAME', (0,0), (-1,-1), 'Helvetica'),
('FONTSIZE', (0,0), (-1,-1), 8),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING', (0,0), (-1,-1), 5),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('GRID', (0,0), (-1,-1), 0.4, GRID_C),
# header row
('BACKGROUND', (0,0), (-1,0), colors.HexColor('#37474f')),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('ALIGN', (0,0), (-1,0), 'CENTER'),
('VALIGN', (0,0), (-1,0), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,0), 6),
('BOTTOMPADDING', (0,0), (-1,0), 6),
]
for i, bg in enumerate(row_colors):
if bg is not None and i > 0:
cmds.append(('BACKGROUND', (0,i), (-1,i), bg))
t = Table(table_data, colWidths=COL_W, repeatRows=1)
t.setStyle(TableStyle(cmds))
return t
def ch_banner(ch_num, ch_title, pages, color):
data = [[Paragraph(f"<b>CHAPTER {ch_num}</b> {ch_title} <i>(pp. {pages})</i>", ch_s)]]
t = Table(data, colWidths=[sum(COL_W)])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), color),
('TOPPADDING', (0,0), (-1,-1), 7),
('BOTTOMPADDING', (0,0), (-1,-1), 7),
('LEFTPADDING', (0,0), (-1,-1), 10),
]))
return t
# ═══════════════════════════════════════════════════════════════════════════════
# DATA (chapter → rows)
# ═══════════════════════════════════════════════════════════════════════════════
# ── CHAPTER 1 – Medical Jurisprudence & Legal Medicine (pp.17-109) ─────────────
ch1_rows = [
row('BNS', 'S. 2(24)', 'S. 40, IPC', 'Definition of "Offence"',
'Any act or omission made punishable by law. Offences classified as bailable and non-bailable.'),
row('BNSS', 'S. 2(1)', '—', 'Cognizable & Noncognizable offence',
'Cognizable: police can arrest without warrant (rape, murder, dowry death, sex offences, robbery, ragging, negligent death). '
'Noncognizable: arrest only with magistrate warrant.'),
row('BNSS', 'S. 2(n)', 'S. 40, IPC', 'Definition of "Offence" (BNSS)',
'Offence defined in BNSS; cross-referenced with BNS S. 2(24).'),
row('BNS', 'S. 4', '—', 'Punishments authorised by law',
'Death; life imprisonment; rigorous imprisonment (Ss. 11 & 12); simple imprisonment (S. 7); fine (S. 8(1)).'),
row('BNSS', 'Ss. 6–17', '—', 'Courts in India – constitution & powers',
'Hierarchy: Supreme Court → High Court → Sessions Court → Magistrate Court → Labour / Family / Executive Magistrate / Juvenile Justice Board.'),
row('BNSS', 'S. 35', 'S. 41, CrPC', 'Arrest without warrant – noncognizable offence',
'Injured person may go directly to doctor or file affidavit before magistrate who sends him for examination.'),
row('BNSS', 'S. 63', 'S. 61, CrPC', 'Issue of summons',
'Issued in writing, in duplicate, signed by presiding officer, with court seal. Crime number and name of accused mentioned.'),
row('BNSS', 'Ss. 63–71', 'Ss. 61–69, CrPC', 'Summons – general provisions',
'All provisions governing issuance, service, and compliance of summons to witnesses and accused.'),
row('BNSS', 'S. 64', 'S. 62, CrPC', 'Service of summons',
'Served by police officer / court officer / public servant; recipient signs receipt on back of duplicate. '
'Can be served by registered post or affixed on house.'),
row('BNSS', 'S. 68', 'S. 66, CrPC', 'Summons to a government servant',
'Court sends summons in duplicate to head of office; head serves it and returns to court with endorsement.'),
row('BNSS', 'S. 90', '—', 'Warrant to secure presence of witness',
'Bailable or non-bailable warrant issued if witness wilfully neglects attendance [after notice under S. 389].'),
row('BNSS', 'S. 94', '—', 'Subpoena duces tectum – produce documents',
'Requires witness to bring books, documents or things under his control legally bound to produce. [BSA S. 165]'),
row('BNS', 'Ss. 206–208', '—', 'Non-attendance in obedience to court summons',
'Wilful non-appearance in court → imprisonment up to 1 month or fine or both.'),
row('BNSS', 'Ss. 18 & 19', 'Ss. 24 & 25, CrPC', 'Public Prosecutor – appointment & role',
'In govt. prosecution, public prosecutor first examines witness (examination-in-chief). '
'Distinct from Assistant PP (Magistrate\'s Court).'),
row('BNSS', 'S. 173', '—', 'Cognizable offence – medical examination by police',
'Accused in a cognizable offence is sent by police to a doctor for medical examination and report.'),
row('BNSS', 'S. 194', 'S. 174, CrPC', 'Police Inquest',
'Officer-in-charge (SI, not below head constable) conducts police inquest in cases of suicide, murder, accident, '
'suspicious/unnatural death, unidentified bodies, etc.'),
row('BNSS', 'S. 195', 'S. 175, CrPC', 'Police inquest – investigation report',
'Police officer makes investigation in presence of two+ respectable persons (panchas) and prepares inquest report.'),
row('BNSS', 'S. 196', 'S. 176, CrPC', 'Magistrate Inquest',
'Magistrate inquest held: (a) custodial deaths/rape, (b) deaths in psychiatric facility, '
'(c) unnatural deaths as specified. Body sent for autopsy. [See also BNS S. 196 / old S. 176(1A)]'),
row('BSA', 'S. 2', 'S. 3, IEA', 'Definition of "Fact"',
'Fact = anything perceptible by the senses, or any mental condition of which a person is conscious.'),
row('BSA', 'S. 26(1)', 'S. 32, IEA', 'Dying declaration (Leterm mortem)',
'Statement of a person who is dead, cannot be found, incapable of giving evidence, or attendance cannot be procured → admissible as evidence.'),
row('BSA', 'Ss. 56–92', '—', 'Documentary evidence – general provisions',
'Contents of documents may be proved by primary or secondary evidence.'),
row('BSA', 'S. 56', '—', 'Primary & secondary evidence',
'Primary evidence = document itself produced for inspection. Secondary = copy, oral account, etc. [S. 58 BSA]'),
row('BSA', 'S. 54', 'S. 59, IEA', 'Oral evidence – general',
'All facts (except document contents) may be proved by oral evidence.'),
row('BSA', 'S. 55', 'S. 60, IEA', 'Oral evidence must be direct',
'Must be from person who saw / heard / perceived the fact. Court may require production of material thing (e.g. blood-stained weapon). '
'Expert opinion in treatise admitted if author dead/unavailable.'),
row('BSA', 'S. 60', 'S. 60, IEA', 'Oral evidence – material things',
'Court may require production of blood-stained weapon, poison eliminated, article of clothing, etc.'),
row('BSA', 'Ss. 139–124', '—', 'Witnesses – general provisions',
'All persons competent to testify unless prevented by tender years, extreme old age, or disease.'),
row('BSA', 'S. 39', '—', 'Expert witness',
'A trained / skilled person in technical or scientific subject capable of drawing opinions: doctor, firearms expert, '
'fingerprints expert, handwriting expert, etc.'),
row('BSA', 'Ss. 143–162', '—', 'Evidence recording procedure',
'Governs oath, affirmation, and recording of witness evidence in court.'),
row('BSA', 'S. 142', '—', 'Examination-in-Chief (Direct Examination)',
'First examination of a witness by the lawyer for the side which summoned him. Leading questions not allowed except for hostile witness.'),
row('BSA', 'S. 143', '—', 'Order of examination of witnesses',
'Examination-in-chief → Cross-examination → Re-examination.'),
row('BSA', 'S. 146', '—', 'Leading questions',
'Suggests the desired answer to the witness. Not allowed in examination-in-chief; allowed in cross-examination. [Also S. 155 BSA]'),
row('BSA', 'S. 149', '—', 'Cross-examination – purpose',
'To test veracity; to contradict statements; to modify/explain what was said; to shake credit. '
'Witness not obliged to answer questions that incriminate himself.'),
row('BSA', 'S. 151', '—', 'Character of witness – attack in cross-examination',
'Lawyer may attack character of witness; witness may be asked about bias or prior inconsistent statements.'),
row('BSA', 'S. 155', '—', 'Hostile witness',
'Leading questions allowed when judge satisfied that witness is hostile.'),
row('BSA', 'S. 162', '—', 'Refreshing memory',
'Expert may refresh memory by reference to professional treatises. A writing used to refresh memory may be produced.'),
row('BSA', 'S. 165', '—', 'Subpoena duces tectum – produce documents',
'Court can compel production of documents by subpoena. [Also BNSS Ss. 94 & 195]'),
row('BSA', 'S. 168', '—', 'Recall and re-examination of witness',
'Court may recall and re-examine any already-examined witness if essential to just decision. [BNSS S. 348]'),
row('BNSS', 'S. 326', '—', 'Expert witness called without undue delay/expense',
'Witness can be called to give oral evidence without unreasonable delay or expense.'),
row('BNSS', 'S. 328', '—', 'Govt. scientific expert reports as evidence',
'Written reports of Chemical Examiner, Serologist, DNA analyst, etc. admissible without expert appearing in person unless court directs.'),
row('BNSS', 'S. 329', '—', 'Right to demand expert summons',
'Party has right to demand the court to summon and examine any such government scientific expert.'),
row('BNSS', 'S. 348', '—', 'Recall and re-examination of witness',
'Court empowered to recall and re-examine any witness whose evidence is essential to the just decision. [BSA S. 168]'),
row('BNSS', 'S. 383', '—', 'Perjury',
'Giving false evidence [BSA Ss. 227 & 228, BNS]. Person is said to give false evidence when statement is intentionally false.'),
row('BNS', 'Ss. 227 & 228', '—', 'Giving / fabricating false evidence (Perjury)',
'BNS S. 227: giving false evidence. S. 228: fabricating false evidence. [BNSS S. 383]'),
row('BNSS', 'S. 389', '—', 'Notice to witness – failure to attend court',
'After hearing witness, if neglect without justification → fine, imprisonment, or bailable/non-bailable warrant.'),
row('BNSS', 'S. 407', '—', 'Death sentence – confirmation by High Court',
'When Sessions Court passes death sentence, proceedings submitted to High Court for confirmation.'),
row('BNSS', 'S. 255', '—', 'Acquittal order',
'If court finds no prima facie case, passes order of acquittal.'),
row('BNSS', 'S. 180', 'S. 161, CrPC', 'Statement during investigation – answer in writing',
'If questions cannot be answered verbally during investigation, answers given in writing.'),
row('BNSS', 'S. 214', '—', 'Refusal to answer questions – punishment',
'Refusal to answer investigator\'s questions → imprisonment up to 6 months.'),
row('BSA', 'S. 124', 'S. 118, IEA', 'Competency of witness – mental capacity',
'All persons competent unless unable to understand questions / give rational answers due to age, old age, or disease.'),
row('BSA', 'S. 125', 'S. 119, IEA', 'Deaf-mute witness',
'May testify by signs, writing, or through an interpreter.'),
row('BSA', 'Ss. 132(1)/(2), 134', '—', 'Lawyer–client privilege',
'Lawyer can claim privilege in court with regard to communications made to him by his client.'),
]
# ── CHAPTER 2 – Post-Mortem / Identification (pp.110-208) ──────────────────────
ch2_rows = [
row('BNS', 'S. 301', '—', 'Indignity to a corpse',
'Trespassing on burial ground with intent to wound feelings / insult religion → imprisonment up to 1 year or fine or both.'),
row('BNSS', 'S. 196(4)', '—', 'Exhumation order',
'Order for exhumation granted by Executive or Judicial Magistrate.'),
row('BNSS', 'S. 196(5)', '—', 'Exhumation – witness presence',
'Relatives or interested persons to be present at the exhumation enquiry.'),
row('BSA', 'S. 110', 'S. 107, IEA', 'Presumption of life or death',
'A person is presumed to be alive if evidence exists of their being alive within 30 years. '
'Person not heard of for 7 years by those likely to know → presumed dead.'),
]
# ── CHAPTER 3 – Medical Ethics / Negligence / Consent (pp. within block 1) ─────
ch3_rows = [
row('BNS', 'S. 2(11)', '—', 'Good Faith',
'Nothing is said to be done in good faith which is done without due care and attention.'),
row('BNS', 'Ss. 25–31', '—', 'Legal protection to medical doctors',
'Provides legal defences/protection to registered medical practitioners in various clinical situations.'),
row('BNS', 'S. 27', '—', 'Act done in good faith for benefit of child',
'Protection for acts done in good faith for benefit of child or insane person by guardian/person in charge.'),
row('BNS', 'S. 28', '—', 'Consent given under fear of injury',
'Consent given by person under fear of injury, or under misconception of fact, is not valid consent that protects the doctor.'),
row('BNS', 'S. 30', 'S. 92, IPC', 'Harm caused in good faith for person\'s benefit',
'Any harm caused to a person for his own benefit with consent → protected if done in good faith.'),
row('BNS', 'S. 31', '—', 'Emergency extension of surgical consent',
'Doctor may extend procedure beyond scope of consent to treat a life-threatening emergency.'),
row('BNS', 'S. 58', '—', 'Concealing design to commit offence',
'Concealing design to commit offence punishable with death or life imprisonment → imprisonment 3 months (offence not committed) / 7 years (offence committed).'),
row('BNS', 'S. 106', '—', 'Causing death by negligence (medical negligence)',
'Death by rash/negligent act → imprisonment up to 2 years or fine or both. '
'[Culpable homicide not amounting to murder for medical negligence]'),
row('BNS', 'S. 125', '—', 'Rash/negligent acts endangering human life',
'Rash or negligent acts that endanger human life or personal safety → imprisonment 3 months to 2 years or fine or both.'),
row('BNS', 'S. 211', '—', 'Omission to give notice/information to public servant',
'Person legally bound to give information to public servant but fails to do so → imprisonment up to 1 month or fine or both.'),
row('BNSS', 'S. 33', '—', 'Duty to report a serious crime',
'Every person aware of commission / intention to commit any cognizable offence must inform the nearest magistrate or police officer. '
'Doctor knowing of a serious crime (e.g. poisoning, culpable homicide, unlawful abortion) must report. [Also BNS S. 211]'),
row('BNS', 'S. 212', '—', 'Furnishing false information',
'Imprisonment up to 6 months or fine or both.'),
row('BNS', 'S. 216', '—', 'False statement on oath / affirmation to public servant',
'Imprisonment up to 3 years + fine.'),
row('BNS', 'S. 229', '—', 'Punishment for giving false evidence (Perjury)',
'Imprisonment up to 7 years or life imprisonment.'),
row('BNS', 'S. 234', 'S. 197, IPC', 'Issuing or signing a false certificate',
'Doctor issuing false medical / death certificate → imprisonment up to 7 years.'),
row('BNS', 'S. 238', '—', 'Causing disappearance of evidence / giving false info',
'Hiding evidence of an offence or giving false info to screen offenders → imprisonment up to 10 years.'),
row('BNS', 'S. 239', '—', 'Intentional omission to give info of offence',
'Imprisonment up to 6 months or fine or both.'),
row('BNS', 'S. 240', '—', 'Giving false information respecting an offence',
'Imprisonment up to 2 years or fine or both.'),
row('BNS', 'S. 241', '—', 'Destruction of document / electronic record',
'To prevent production as evidence → imprisonment up to 2 years or fine or both.'),
row('BNS', 'S. 257', '—', 'Disciplinary control – NMC / Medical Council',
'Covered under "infamous conduct" provisions alongside Ss. 229 and 267 BNS.'),
row('BNS', 'S. 267', '—', 'Disciplinary control – NMC / Medical Council',
'Covered under disciplinary control with Ss. 229 and 257 BNS.'),
row('BNS', 'S. 271', '—', 'Negligent act likely to spread dangerous disease',
'Imprisonment up to 6 months or fine or both.'),
row('BNS', 'S. 272', '—', 'Malignant act likely to spread dangerous disease',
'Imprisonment up to 2 years or fine or both.'),
row('BNS', 'S. 286', '—', 'Negligent conduct with poisonous substances',
'Imprisonment up to 6 months or fine or both.'),
row('BNSS', 'S. 337', '—', 'Defense – Res judicata',
'If question of negligence against a doctor has already been decided by a competent court, cannot be re-tried.'),
row('BNSS', 'S. 357C', 'S. 357C, CrPC', 'Free treatment of sexual assault victims (all hospitals)',
'All hospitals (public or private, Central/State/local authority/any person) to provide free first-aid / medical treatment to victims of sexual assault and inform police. Imprisonment up to 1 year or fine or both for non-compliance.'),
row('BNSS', 'S. 397', 'S. 357C, CrPC', 'Free treatment – all hospitals (BNSS numbering)',
'Same provision as above under BNSS numbering. Failure to provide free treatment is punishable.'),
]
# ── CHAPTER 4 – Identification (line 6313 block 1, Age section at 7760) ────────
ch4_rows = [
row('BNS', 'S. 20', 'S. 82, IPC', 'Age below 7 years – no criminal responsibility',
'A child under 7 years of age is not an offence [doli incapax]. '
'Child 7–12 with immature understanding: partial protection. Over 12: full responsibility.'),
row('BSA', 'S. 110', 'S. 107, IEA', 'Presumption of life or death (age/identification context)',
'Person not heard of for 7 years by those likely to know is presumed dead. '
'Used in identification cases, missing persons, age estimation.'),
]
# ── CHAPTER: Sexual Offences (block 5, pp.404-492) ─────────────────────────────
ch_sex_rows = [
row('BNS', 'S. 64 (cls. a–n, sub-s.2)', 'S. 376, IPC', 'Rape',
'Penetration offences. BSA S. 120 shifts burden of proof to accused in custodial rape / gang rape '
'if victim states absence of consent.'),
row('BNS', 'S. 72', 'S. 228-A, IPC', 'Publication of rape victim\'s identity',
'Printing / publishing name or matter disclosing identity of rape victim → imprisonment up to 2 years.'),
row('BNS', 'S. 74', 'S. 354, IPC', 'Assault / criminal force to woman – outrage modesty',
'Imprisonment not less than 1 year, may extend to 5 years + fine.'),
row('BNS', 'S. 75', 'S. 354-A, IPC', 'Sexual harassment',
'(1) Physical contact with sexual overtures; (2) demand for sexual favours; (3) sexually coloured remarks; '
'(4) showing pornography → imprisonment 1–3 years or fine or both.'),
row('BNS', 'S. 76', 'S. 354-B, IPC', 'Assault / criminal force to disrobe a woman',
'Compelling woman to be naked → imprisonment not less than 3 years, up to 7 years + fine.'),
row('BNS', 'S. 77', 'S. 354-C, IPC', 'Voyeurism',
'Capturing or disseminating image of woman in private act without consent.'),
row('BNS', 'S. 78', 'S. 354-D, IPC', 'Stalking',
'Following a woman and contacting or attempting to contact her despite clear indication of disinterest; '
'monitoring use of internet / electronic communication.'),
row('BNS', 'S. 79', 'S. 509, IPC', 'Insulting modesty of woman – words / sounds / gestures',
'Uttering offensive words / sounds / gestures; intruding on privacy → simple imprisonment up to 3 years + fine.'),
row('BNS', 'S. 81', 'S. 493, IPC', 'Cohabitation by deceit – belief of lawful marriage',
'Man deceitfully inducing woman to believe a non-existent marriage and cohabiting → imprisonment up to 10 years.'),
row('BNS', 'S. 84', 'S. 498, IPC', 'Enticing / taking away a married woman',
'Criminal intent to entice or detain married woman → imprisonment up to 2 years or fine or both.'),
row('BNS', 'S. 93', 'S. 317, IPC', 'Exposure / abandonment of child under 12 years',
'Exposure or abandonment by parent or person having care → imprisonment up to 7 years or fine or both.'),
row('BNS', 'S. 124', 'S. 326-A, IPC', 'Voluntarily causing grievous hurt by acid',
'Imprisonment not less than 10 years, may extend to life + fine of ₹10 lakh (for victim\'s medical expenses).'),
row('BNS', 'S. 124(2)', 'S. 326-B, IPC', 'Voluntarily throwing / attempting to throw acid',
'Imprisonment not less than 5 years, up to 7 years + fine.'),
row('BNS', 'S. 144', 'S. 370-A, IPC', 'Trafficking minor for sexual exploitation',
'Knowingly engaging trafficked minor for sexual exploitation → imprisonment not less than 5 years, up to 7 years + fine.'),
row('BNS', 'S. 196', 'S. 176(1A), CrPC', 'Custody death/disappearance/rape – mandatory magistrate inquest',
'Death, disappearance, or rape in police/court custody → in addition to police inquest, '
'Judicial Magistrate inquest mandatory; body sent for autopsy.'),
row('BNS', 'S. 296', 'S. 294, IPC', 'Obscene act in public place / sexual paraphilias',
'Obscene act in public or obscene songs/words near public place to annoyance of others → imprisonment up to 3 months or fine.'),
row('BNSS', 'S. 52', 'S. 53-A, CrPC', 'Medical examination of accused in rape / attempted rape',
'Examination by RMP in govt./local authority hospital; in absence, any RMP with consent. '
'Woman to be referred within 24 hours.'),
row('BNSS', 'S. 176', 'S. 157, CrPC', 'Recording rape victim\'s statement',
'Statement recorded by woman police officer at victim\'s residence or place of her choice, '
'in presence of parents / guardians.'),
row('BNSS', 'S. 180', 'S. 161, CrPC', 'Statement of woman against whom sexual offence committed',
'Statement of woman against whom offence under BNS Ss. 376-A to E / S. 509 IPC has been alleged.'),
row('BNSS', 'S. 184', 'S. 164-A, CrPC', 'Medical examination of rape victim – full procedure',
'(1) Name, age, address, who brought her, injuries, mental condition, all materials taken for investigation. '
'(2) Reasons for each conclusion. (3) Record consent obtained. '
'(4) Exact time start/end of examination. (5) Forward report to IO → magistrate. '
'(6) Examination without consent = unlawful.'),
row('BSA', 'S. 120', 'S. 114-A, IEA', 'Presumption as to absence of consent – rape burden of proof',
'If victim states she did not consent in custodial rape or gang rape, Court presumes she did not consent. '
'Burden of proof of consent shifts to accused.'),
row('BNS', 'S. 377 (deleted)', 'S. 377, IPC', 'Unnatural offences – deleted in BNS',
'Section 377 IPC (consensual homosexual acts between adults) has been deleted in BNS. '
'Non-consensual acts still punishable under relevant rape / assault provisions.'),
]
# ── CHAPTER: Psychiatry / Mental Responsibility (block 5) ──────────────────────
ch_psych_rows = [
row('BNSS', 'Ss. 367–378', 'Ss. 328–339, CrPC', 'Provisions for mentally ill accused during trial',
'Procedure when accused appears to be of unsound mind: inquiry, medical examination, '
'adjournment, safe custody, disposal of person acquitted on ground of mental illness.'),
row('BNSS', 'Ss. 369, 374', 'Ss. 330, 335, CrPC','Mentally ill accused – safe custody / discharge',
'Admission under Army Act (1950), Navy Act (1957), or BNSS Ss. 369/374 when accused is found of unsound mind.'),
row('BNS', '—', '—', 'M\'Naghten rules in BNS',
'Legal test for criminal responsibility / insanity accepted in India under BNS. '
'Defense must prove insanity under BSA.'),
row('BSA', 'S. 105 (BSA)', 'S. 105, IEA', 'Burden of proof – insanity defense',
'In criminal cases where mental illness is pleaded as defense, defense must prove it.'),
row('BSA', 'S. 124', 'S. 118, IEA', 'Competency of insane witness',
'All persons competent to testify unless unable to understand questions or give rational answers '
'due to disease, age, etc.'),
row('BNS', 'S. 20', 'S. 82, IPC', 'Criminal responsibility – child below 7 years',
'Child under 7 years: no criminal responsibility (doli incapax).'),
row('BSA', 'S. 2/34 (BNS)', 'S. 31, IPC', 'Definition of "Will" – testamentary capacity',
'"Will" denotes any testamentary document BNS 2/34. Requirements of valid will linked to testamentary capacity.'),
]
# ── CHAPTER: Toxicology (block 6, pp.493-595) ──────────────────────────────────
ch_tox_rows = [
row('BNS', 'S. 124(1)', 'S. 326-A, IPC', 'Acid poisoning – causing permanent / partial damage',
'Throwing or administering acid with intention and knowledge that it is likely to cause permanent or partial damage → '
'imprisonment not less than 10 years up to life + fine.'),
row('BNS', 'S. 106', '—', 'Rash & negligent act causing death – toxicology context',
'Death caused by negligent administration of drug / poison (therapeutic misadventure) → '
'imprisonment up to 2 years or fine or both.'),
row('BNS', '—', 'S. 309, IPC', 'Attempted suicide – deleted in BNS',
'BNS deleted S. 309 IPC (attempt to commit suicide). Suicide attempt is no longer a criminal offence. '
'Not included in BNSS S. 2(33) list of offences for which information must be given.'),
row('BNSS', 'S. 2(33)', 'S. 39, CrPC', 'Duty to inform police – list of offences',
'Suicide attempt (BNS deleted S. 309 IPC) is no longer in the list of offences for which '
'information must be given to police.'),
]
# ═══════════════════════════════════════════════════════════════════════════════
# BUILD PDF
# ═══════════════════════════════════════════════════════════════════════════════
elements = []
# Title block
elements.append(Paragraph("Chapter-wise BNS / BNSS / BSA Reference Table", title_s))
elements.append(Paragraph(
"KS Narayan Reddy's Essentials of Forensic Medicine & Toxicology, 36th Edition (2026) | "
"BNS = Bharatiya Nyaya Sanhita (Act 45/2023) replaces IPC | "
"BNSS = Bharatiya Nagarika Suraksha Sanhita (Act 46/2023) replaces CrPC | "
"BSA = Bharatiya Sakshya Adhiniyam (Act 47/2023) replaces IEA", sub_s))
# Legend
legend_data = [[
Paragraph('<b><font color="#1a237e">■ BNS</font></b> (replaces IPC, substantive criminal law)', cell_s),
Paragraph('<b><font color="#1b5e20">■ BNSS</font></b> (replaces CrPC, procedural law)', cell_s),
Paragraph('<b><font color="#4a148c">■ BSA</font></b> (replaces IEA, evidence law)', cell_s),
]]
leg_t = Table(legend_data, colWidths=[sum(COL_W)/3]*3)
leg_t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#eceff1')),
('LEFTPADDING', (0,0), (-1,-1), 10),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('BOX', (0,0), (-1,-1), 0.5, colors.HexColor('#90a4ae')),
]))
elements.append(leg_t)
elements.append(Spacer(1, 10))
def add_chapter(ch_num, ch_title, pages, color, rows_data):
if not rows_data:
return
elements.append(KeepTogether([
ch_banner(ch_num, ch_title, pages, color),
Spacer(1, 4),
make_table(rows_data),
Spacer(1, 14),
]))
DARK_BLUE = colors.HexColor('#1a237e')
DARK_GREEN = colors.HexColor('#1b5e20')
DARK_PURPLE = colors.HexColor('#4a148c')
TEAL = colors.HexColor('#00695c')
BROWN = colors.HexColor('#4e342e')
GREY = colors.HexColor('#37474f')
add_chapter(1, "Medical Jurisprudence, Legal Medicine & Medical Evidence",
"pp. 17–109", DARK_BLUE, ch1_rows)
add_chapter(2, "Post-Mortem Examination, Exhumation & Identification",
"pp. 110–208", TEAL, ch2_rows)
add_chapter(3, "Medical Ethics, Negligence, Consent & Professional Responsibilities",
"pp. (within block 1–5)", DARK_GREEN, ch3_rows)
add_chapter(4, "Identification – Age & Criminal Responsibility",
"pp. (within block 1)", BROWN, ch4_rows)
add_chapter("—", "Sexual Offences",
"pp. 404–492", DARK_PURPLE, ch_sex_rows)
add_chapter("—", "Psychiatry & Mental Responsibility",
"pp. (block 5)", colors.HexColor('#6a1b9a'), ch_psych_rows)
add_chapter("—", "Toxicology",
"pp. 493–595", colors.HexColor('#bf360c'), ch_tox_rows)
# Footer note
elements.append(HRFlowable(width="100%", thickness=0.8, color=GREY, spaceAfter=5))
elements.append(Paragraph(
"All three laws (BNS, BNSS, BSA) came into force on 1 July 2024. "
"Sections without an old equivalent are new provisions. "
"Where the old column shows a CrPC section, the law type is BNSS; IPC → BNS; IEA → BSA.",
note_s))
doc.build(elements)
print(f"PDF saved to: {OUTPUT}")
cd /tmp/workspace/bns-ipc-table && python generate_chapterwise.py 2>&1
ChapterWise BNS BNSS BSA
PDF Document · PDF
| Colour | Law | Replaces |
|---|---|---|
| 🟦 Navy | BNS | IPC 1860 |
| 🟩 Green | BNSS | CrPC 1973 |
| 🟪 Purple | BSA | IEA 1872 |
| Chapter | Sections count | Coverage |
|---|---|---|
| Ch. 1 - Medical Jurisprudence & Legal Evidence | ~50 sections | Offence definitions, punishments, courts, summons, inquest, witnesses, examination order, dying declaration, oral/documentary evidence |
| Ch. 2 - Post-Mortem & Exhumation | 4 sections | Indignity to corpse, exhumation orders, presumption of death |
| Ch. 3 - Ethics, Negligence & Consent | ~25 sections | Good faith protections, medical negligence punishment, false certificates, duty to report, penal provisions table |
| Ch. 4 - Identification & Age | 2 sections | Criminal responsibility by age, presumption of life/death |
| Sexual Offences | ~22 sections | Rape, POCSO, acid attack, trafficking, stalking, voyeurism, medical exam procedure |
| Psychiatry & Mental Responsibility | 6 sections | Insanity defense, M'Naghten rules, mentally ill accused, testamentary capacity |
| Toxicology | 4 sections | Acid poisoning, negligent death, suicide (S.309 deleted) |