RAPE (sCc 63) → DEFINITION → PROCEDURE OF EXAMN OF RAPE VICTIM → EVIDENCE/SAMPLE PRESERVED IN A VICTIM → CLINICAL FINDINGS IN A VICTIM OF 14YRS. L MARITAL RAPE - → DISCUSS THE "BURDEN OF PROOF" IN CASES OF ALLEDUED RAPE. → ENUMERATE THE VARIOUS SECTIONS OF IPC, CrPC and IEA RELATED TO RAPE - → SECTION 375 IPC → PUNISHMENT AS PER LAW Refer from standard books of forensic medicine
| Sample | Method | Purpose |
|---|---|---|
| Hair - 10 scalp hairs (cut close to roots from different locations) | Cut in separate polythene bags | Comparison |
| Pubic hair combings | Comb onto paper, pack in polythene bag | Foreign hairs from assailant |
| Avulsed pubic hair (with roots) | Polythene bag | DNA profiling |
| Matted pubic hair | Separate bag | Spermatozoa, lubricants |
| Loose hair anywhere on body | Separate bag | Identify foreign hairs |
| Finger scrapings | Wooden stick under nails | Blood or tissue from accused |
| Any foreign matter (fibres, soil) | Polythene bag | Locard's exchange principle |
| Blood 5 mL (plain) | Refrigerate, do NOT freeze | Blood grouping |
| Blood 5 mL (EDTA) | Refrigerate | DNA profile |
| Blood 5 mL (NaF + KOx) | Refrigerate | Alcohol, drugs, VD serology |
| Urine (NaF) | Refrigerate | Alcohol and drug screening |
| Saliva | Swab | Secretor grouping |
| Swabs from kissed/licked surfaces | Cotton swab, air dry | Salivary DNA |
| Vaginal swabs (high vaginal, cervical) | Air dry on glass slides and in swab tubes | Spermatozoa, DNA |
| Anal swabs (if anal penetration alleged) | Same as above | Spermatozoa, STI |
| Oral/buccal swabs (if oral penetration alleged) | Same | Spermatozoa |
| Vaginal washings/aspirate | Blunt pipette aspiration | Motile/non-motile sperms |
| Clothing | All items in paper bags (NOT plastic - prevents mould) | Seminal/blood stains |
| Sanitary napkin/tampon (if used) | Collected for analysis | Semen traces |
| Used condom (if found in vagina) | End tied, in paper bag | Contained semen |
| Cervical/urethral swabs | For adults - cervix + urethra; for children - vagina | Gonococci (Gram -ve diplococci) |
| Blood for syphilis serology | STI (positive after 6 weeks) |
"Sexual intercourse by a man with his own wife, the wife not being under fifteen years of age, is NOT rape." - Exception 2, Section 63 BNS (formerly Section 375 IPC)
"In prosecution for rape under Section 376 IPC (now Section 64 BNS), where sexual intercourse by the accused is proved and the question is whether it was without the consent of the woman alleged to have been raped, and she states in her evidence before the court that she did not consent, the court SHALL PRESUME that she did not consent."
| IPC Section | BNS Section | Subject |
|---|---|---|
| S. 375 IPC | S. 63 BNS | Definition of Rape |
| S. 376 IPC | S. 64 BNS | Punishment for Rape (min. 10 yrs - life imprisonment + fine) |
| S. 376AB IPC | S. 65 BNS | Rape on a woman under 12 years (min 20 yrs, may extend to life/death) |
| S. 376A IPC | S. 66 BNS | Rape causing death or persistent vegetative state (min 20 yrs - life/death) |
| S. 376B IPC | S. 67 BNS | Sexual intercourse with wife living separately without consent (2-7 yrs + fine) |
| S. 376C IPC | S. 68 BNS | Sexual intercourse by person in authority/fiduciary position (5-10 yrs + fine) |
| S. 376D IPC | S. 70 BNS | Gang rape (life imprisonment + fine) |
| S. 376DA IPC | S. 70 BNS | Gang rape on woman under 16 years (life imprisonment + fine) |
| S. 376DB IPC | S. 70 BNS | Gang rape on woman under 12 years (life imprisonment + fine/death) |
| S. 354 IPC | - | Indecent assault / outraging modesty of a woman |
| S. 228A IPC | - | Prohibition of disclosure of identity of rape victim |
| S. 166B IPC | S. 200 BNS | Punishment for doctor refusing medicolegal examination |
| S. 100 IPC | S. 38 BNS | Right of private defense extends to causing death in case of rape/acid attack |
| S. 90 IPC | - | Consent under fear, misconception (no valid consent) |
| CrPC Section | Subject |
|---|---|
| S. 53(2) CrPC | Female victim to be examined only by or under supervision of a female RMP |
| S. 164A CrPC | Medical examination of rape victim within 24 hours, with consent; report sent to Magistrate |
| S. 327 CrPC | Trial of rape to be conducted in camera (closed court); prohibition on publication of proceedings except with court's permission |
| IEA Section | Subject |
|---|---|
| S. 114A IEA | Presumption of absence of consent in rape when intercourse proved and victim states she did not consent - burden shifts to accused (especially in custodial and gang rape) |
| S. 146 IEA | (Amended post-Nirbhaya) Past sexual history of victim is inadmissible as evidence to imply consent; character of the woman cannot be questioned |
| Offence | Punishment |
|---|---|
| Simple rape (S. 64(1) BNS) | Rigorous imprisonment: min. 10 years to life imprisonment + fine |
| Aggravated rape (police officer, public servant, hospital staff, armed forces, jail staff, teacher/relative, communal violence, pregnant woman, incapable of consent, mental/physical disability, grievous harm, repeated rape) - S. 64(2) BNS | Rigorous imprisonment: min. 10 years to life (remainder of natural life) + fine |
| Rape on woman under 16 years | Rigorous imprisonment: min. 20 years to life (remainder of natural life) + fine |
| Rape on woman under 12 years (S. 65 BNS = S. 376AB IPC) | Rigorous imprisonment: min. 20 years to life (remainder of natural life) + fine / OR death |
| Rape causing death or PVS (S. 66 BNS = S. 376A IPC) | Rigorous imprisonment: min. 20 years to life / OR death |
| Sexual intercourse with separated wife without consent (S. 67 BNS = S. 376B IPC) | Imprisonment: min. 2 years to 7 years + fine |
| Abuse of authority (S. 68 BNS = S. 376C IPC) | Rigorous imprisonment: min. 5 years to 10 years + fine |
| Gang rape (S. 70 BNS = S. 376D IPC) | Rigorous imprisonment: life (remainder of natural life) + fine |
| Gang rape on woman under 16 years (S. 70 BNS = S. 376DA IPC) | Life imprisonment (remainder of natural life) + fine |
| Gang rape on woman under 12 years (S. 70 BNS = S. 376DB IPC) | Life imprisonment (remainder of natural life) + fine / OR death |
| Topic | Key Fact |
|---|---|
| Age of consent | 18 years |
| Marital rape exception | Wife above 15 years = not rape |
| Minimum punishment | 10 years RI (simple rape) |
| Rape on <16 years | Min. 20 years RI |
| Rape on <12 years | Min. 20 years RI / death |
| Gang rape | Life imprisonment |
| Hymen + rape | Hymen may be intact; absence of injury ≠ no rape |
| Sperm motility in vagina | Motile: 1-6 hrs (up to 12 hrs); non-motile: up to 24-72 hrs |
| Examiner must be | Female RMP (Section 53(2) CrPC) |
| Burden of proof | Shifted to accused under S. 114A IEA if penetration proved + victim denied consent |
| In camera trial | S. 327 CrPC |
| Victim identity disclosure | Prohibited - S. 228A IPC |
| Doctor refusing examination | Punishable - S. 200 BNS / S. 166B IPC |
Create a presentation summarizing rape examination procedures and legal sections
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
mkdir -p /tmp/workspace/rape-forensic-pptx && cat > /tmp/workspace/rape-forensic-pptx/build.py << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.util import Inches, Pt from io import BytesIO # ─────────── Colour palette ─────────── DARK_NAVY = RGBColor(0x1A, 0x23, 0x3A) # slide backgrounds / header bars MED_BLUE = RGBColor(0x1F, 0x4E, 0x79) # accent rectangles ACCENT_RED = RGBColor(0xC0, 0x39, 0x2B) # bullet icons / highlight LIGHT_BLUE = RGBColor(0xD6, 0xE4, 0xF0) # light text boxes / table bg WHITE = RGBColor(0xFF, 0xFF, 0xFF) GOLD = RGBColor(0xF3, 0x9C, 0x12) LIGHT_GREY = RGBColor(0xF2, 0xF2, 0xF2) DARK_TEXT = RGBColor(0x1A, 0x23, 0x3A) prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) blank = prs.slide_layouts[6] # ─────────── Helper functions ─────────── def add_rect(slide, x, y, w, h, fill_color, alpha=None): shape = slide.shapes.add_shape( 1, # MSO_SHAPE_TYPE.RECTANGLE Inches(x), Inches(y), Inches(w), Inches(h) ) shape.fill.solid() shape.fill.fore_color.rgb = fill_color shape.line.fill.background() return shape def add_text(slide, text, x, y, w, h, font_size=18, bold=False, color=WHITE, align=PP_ALIGN.LEFT, wrap=True, italic=False, anchor=MSO_ANCHOR.TOP): tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = tb.text_frame tf.word_wrap = wrap tf.vertical_anchor = anchor tf.margin_left = Pt(4) tf.margin_right = Pt(4) tf.margin_top = Pt(2) tf.margin_bottom= Pt(2) p = tf.paragraphs[0] p.alignment = align r = p.add_run() r.text = text r.font.size = Pt(font_size) r.font.bold = bold r.font.italic = italic r.font.color.rgb = color r.font.name = "Calibri" return tb def add_multiline(slide, lines, x, y, w, h, font_size=14, color=WHITE, bold_first=False, line_spacing=1.15, anchor=MSO_ANCHOR.TOP): """lines = list of (text, bold, color_override_or_None)""" tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = tb.text_frame tf.word_wrap = True tf.vertical_anchor = anchor tf.margin_left = Pt(4) tf.margin_right = Pt(4) tf.margin_top = Pt(2) tf.margin_bottom = Pt(2) from pptx.util import Pt as PT from pptx.oxml.ns import qn from lxml import etree first = True for (txt, bld, col) in lines: if first: p = tf.paragraphs[0] first = False else: p = tf.add_paragraph() r = p.add_run() r.text = txt r.font.size = Pt(font_size) r.font.bold = bld r.font.color.rgb = col if col else color r.font.name = "Calibri" return tb def slide_header(slide, title, subtitle=None): """Dark navy top bar with title.""" add_rect(slide, 0, 0, 13.333, 1.2, DARK_NAVY) add_rect(slide, 0, 1.2, 13.333, 0.07, ACCENT_RED) add_text(slide, title, 0.4, 0.1, 12, 0.9, font_size=28, bold=True, color=WHITE, align=PP_ALIGN.LEFT) if subtitle: add_text(slide, subtitle, 0.4, 0.85, 12, 0.4, font_size=13, bold=False, color=LIGHT_BLUE, align=PP_ALIGN.LEFT) # ═══════════════════════════════════════════════════════════════ # SLIDE 1 — Title Slide # ═══════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, 13.333, 7.5, DARK_NAVY) add_rect(slide, 0, 3.2, 13.333, 0.1, ACCENT_RED) add_rect(slide, 0, 3.3, 13.333, 0.05, GOLD) add_text(slide, "RAPE", 1, 0.7, 11, 1.6, font_size=72, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_text(slide, "Section 63 BNS · (Formerly Section 375 IPC)", 1, 2.3, 11, 0.7, font_size=22, bold=False, color=LIGHT_BLUE, align=PP_ALIGN.CENTER) add_rect(slide, 3.5, 3.5, 6.3, 0.06, GOLD) add_text(slide, "Forensic Medicine & Medical Jurisprudence", 1, 3.7, 11, 0.7, font_size=19, bold=True, color=GOLD, align=PP_ALIGN.CENTER) add_text(slide, "Examination Procedures · Evidence Collection · Legal Sections", 1, 4.35, 11, 0.6, font_size=15, bold=False, color=LIGHT_BLUE, align=PP_ALIGN.CENTER) add_text(slide, "Based on: Parikh's Textbook of Medical Jurisprudence | Essentials of FM & Tox, 36th Ed. (K.S. Narayan Reddy, 2026)", 0.5, 6.7, 12.3, 0.5, font_size=11, bold=False, color=RGBColor(0x7F, 0x8C, 0x8D), align=PP_ALIGN.CENTER) # ═══════════════════════════════════════════════════════════════ # SLIDE 2 — Definition (Section 63 BNS / S.375 IPC) # ═══════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GREY) slide_header(slide, "DEFINITION OF RAPE", "Section 63 BNS (formerly Section 375 IPC)") # Left panel add_rect(slide, 0.3, 1.4, 6.0, 5.7, MED_BLUE) add_text(slide, "ACTS CONSTITUTING RAPE", 0.4, 1.45, 5.8, 0.45, font_size=13, bold=True, color=GOLD, align=PP_ALIGN.CENTER) acts = [ ("(a)", "Penile penetration into vagina, mouth,\n urethra or anus"), ("(b)", "Insertion of any object/body part (not penis)\n into vagina, urethra or anus"), ("(c)", "Manipulation of body to cause penetration\n into vagina, urethra, anus"), ("(d)", "Application of mouth to vagina, anus\n or urethra"), ] y = 1.95 for (lbl, txt) in acts: add_rect(slide, 0.38, y, 0.55, 0.45, ACCENT_RED) add_text(slide, lbl, 0.38, y+0.02, 0.55, 0.42, font_size=11, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_text(slide, txt, 0.97, y, 5.2, 0.55, font_size=12, bold=False, color=WHITE, align=PP_ALIGN.LEFT) y += 0.65 add_text(slide, "NOTE: 'Vagina' includes Labia Majora", 0.4, 5.65, 5.8, 0.4, font_size=11, bold=True, color=GOLD, align=PP_ALIGN.LEFT) add_text(slide, "Non-resistance ≠ Consent", 0.4, 6.05, 5.8, 0.35, font_size=11, bold=True, color=GOLD, align=PP_ALIGN.LEFT) # Right panel add_rect(slide, 6.7, 1.4, 6.3, 4.0, WHITE) add_rect(slide, 6.7, 1.4, 6.3, 0.45, MED_BLUE) add_text(slide, "SEVEN CIRCUMSTANCES", 6.75, 1.42, 6.2, 0.42, font_size=13, bold=True, color=GOLD, align=PP_ALIGN.CENTER) circs = [ "1. Against her will", "2. Without her consent", "3. Consent under fear of death or hurt", "4. Consent under impersonation (husband)", "5. Consent when unable to understand (intox/unsound mind)", "6. With or without consent — under 18 years", "7. When she cannot communicate consent", ] y2 = 1.9 for c in circs: add_text(slide, c, 6.85, y2, 6.0, 0.37, font_size=12, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) y2 += 0.38 # Exceptions box add_rect(slide, 6.7, 5.5, 6.3, 1.6, RGBColor(0xFF, 0xEB, 0xCD)) add_rect(slide, 6.7, 5.5, 6.3, 0.35, ACCENT_RED) add_text(slide, "EXCEPTIONS", 6.75, 5.52, 6.2, 0.32, font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_text(slide, "1. Medical procedure / intervention — NOT rape\n" "2. Sexual intercourse with wife NOT under 15 yrs — NOT rape", 6.85, 5.88, 6.05, 1.1, font_size=11.5, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) # ═══════════════════════════════════════════════════════════════ # SLIDE 3 — Procedure of Examination # ═══════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GREY) slide_header(slide, "PROCEDURE OF EXAMINATION OF RAPE VICTIM", "Section 53(2) CrPC — Examination by female RMP only") steps = [ ("1", "INFORMED CONSENT", "Written consent of victim (if ≥12 yrs)\nConsent of parent/guardian if <12 yrs or mentally subnormal (S.90 IPC)\nVictim CANNOT be forced to submit for examination"), ("2", "PRELIMINARY DATA", "Name, age, address, occupation, social status\nDate & time of arrival · Identification marks\nName of female nurse present · By whom referred"), ("3", "STATEMENT OF VICTIM", "Verbatim account of the alleged assault\nAmount of violence, position of assailant, mode of attack\nVaginal/oral/rectal contact · Pain, haemorrhage, sensation of penetration\nEvents AFTER assault (change of clothes, bath, urination)"), ("4", "EXAMINATION OF CLOTHES & SIGNS OF STRUGGLE", "Tears, mud, grass marks, blood stains (posterior), seminal stains (anterior)\nBroken/bent fingernails — can be matched by striae to source\nCorrespond injuries on body with clothing tears"), ("5", "GENERAL PHYSICAL EXAMINATION", "Vital signs, emotional state (shock, hysteria)\nBruises, abrasions, bite marks (neck, breasts, thighs)\nLigature marks · Scratch marks · Inner thigh ecchymosis"), ("6", "GENITAL EXAMINATION (Lithotomy position)", "Vulva: oedema, redness, tenderness · Fourchette tears · Fossa navicularis\nHymen: shape, orifice size, lacerations (fresh = sharp red margins; 3-4 days = congested)\nVaginal walls: lacerations (posterior) · Perianal/rectal & oral exam if indicated"), ("7", "COLLECTION OF SPECIMENS", "Hair (scalp + pubic) · Finger scrapings · Blood (grouping + DNA + drugs)\nVaginal swabs/aspirate · Urine · Saliva · Clothing\nSAFE / PERK kit used for standardized collection"), ] cols = [0.25, 6.75] rows_per_col = [4, 3] y_starts = [1.35, 1.35] box_h = 1.38 box_w = 6.1 step_i = 0 for col_idx, col_x in enumerate(cols): y = y_starts[col_idx] for _ in range(rows_per_col[col_idx]): if step_i >= len(steps): break num, title, body = steps[step_i] add_rect(slide, col_x, y, box_w, box_h, WHITE) add_rect(slide, col_x, y, 0.5, box_h, MED_BLUE) add_text(slide, num, col_x+0.01, y+0.35, 0.48, 0.6, font_size=18, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_rect(slide, col_x+0.5, y, box_w-0.5, 0.38, RGBColor(0xD5, 0xE8, 0xF5)) add_text(slide, title, col_x+0.55, y+0.04, box_w-0.6, 0.32, font_size=12, bold=True, color=MED_BLUE, align=PP_ALIGN.LEFT) add_text(slide, body, col_x+0.55, y+0.42, box_w-0.65, box_h-0.48, font_size=10.5, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) y += box_h + 0.06 step_i += 1 # ═══════════════════════════════════════════════════════════════ # SLIDE 4 — Specimens / Evidence Collected # ═══════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GREY) slide_header(slide, "SPECIMENS / EVIDENCE PRESERVED FROM VICTIM", "SAFE Kit (Sexual Assault Forensic Evidence) / PERK Kit (Physical Evidence Recovery Kit)") add_rect(slide, 0.25, 1.35, 12.85, 0.5, MED_BLUE) headers = ["SPECIMEN", "METHOD / CONTAINER", "PURPOSE"] x_cols = [0.3, 4.2, 9.0] col_widths = [3.85, 4.7, 4.0] for i, h in enumerate(headers): add_text(slide, h, x_cols[i], 1.38, col_widths[i], 0.42, font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) rows = [ ("Hair (scalp × 10 from diff. sites)", "Cut close to roots · Separate polythene bags", "Comparison / identify foreign hair"), ("Pubic hair combings + avulsed hair", "Comb onto paper · polythene bag", "Foreign hairs · DNA profiling"), ("Finger scrapings (under nails)", "Wooden stick scraping · polythene bag", "Blood / tissue from accused"), ("Blood 5 mL (plain)", "Refrigerate (do NOT freeze)", "Blood grouping"), ("Blood 5 mL (EDTA)", "Refrigerate", "DNA fingerprinting profile"), ("Blood 5 mL (NaF + KOx)", "Refrigerate", "Alcohol · drugs · VD serology"), ("Urine (sodium fluoride)", "Refrigerate", "Alcohol & drug screening"), ("Saliva swab", "Air-dry swab", "Secretor grouping"), ("Vaginal swabs / aspirate", "Air-dry on glass slides + swab tube", "Spermatozoa · DNA · STIs"), ("Anal / buccal swabs", "Same as vaginal if penetration alleged", "Spermatozoa · STI"), ("Clothing / undergarments", "Paper bags (NOT plastic)", "Seminal · blood · trace stains"), ("Sanitary napkin / tampon / condom", "Paper bag / tie end of condom", "Semen traces"), ] y = 1.87 alt = False for row in rows: bg = WHITE if alt else RGBColor(0xEB, 0xF5, 0xFB) add_rect(slide, 0.25, y, 12.85, 0.42, bg) for i, cell in enumerate(row): add_text(slide, cell, x_cols[i], y+0.02, col_widths[i], 0.38, font_size=10.5, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) y += 0.43 alt = not alt # Sperm timeline bar add_rect(slide, 0.25, 7.0, 12.85, 0.42, MED_BLUE) add_text(slide, "⏱ Sperm motility in vagina: 1–6 hrs (up to 12 hrs) | Non-motile detectable: up to 24–72 hrs | " "Uterine cavity: motile 3–5 days | Post-mortem: weeks–months", 0.3, 7.02, 12.75, 0.38, font_size=11, bold=True, color=WHITE, align=PP_ALIGN.CENTER) # ═══════════════════════════════════════════════════════════════ # SLIDE 5 — Clinical Findings in a 14-Year-Old Victim # ═══════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GREY) slide_header(slide, "CLINICAL FINDINGS IN A 14-YEAR-OLD RAPE VICTIM", "Post-pubertal adolescent · Likely virgin · Narrow vaginal introitus") # General findings add_rect(slide, 0.25, 1.35, 6.1, 2.95, WHITE) add_rect(slide, 0.25, 1.35, 6.1, 0.42, MED_BLUE) add_text(slide, "GENERAL FINDINGS", 0.3, 1.37, 6.0, 0.38, font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER) gen = [ "• Emotional shock, hysteria, or extreme fear", "• Dishevelled appearance / torn clothing", "• Bruises & abrasions on neck, wrists (restraint marks)", "• Bite marks on breasts, neck, shoulders", "• Linear scratch marks from assailant's nails", "• Inner thigh ecchymosis (hallmark — forced thigh separation)", "• Ligature marks on wrists/ankles if restrained", ] yg = 1.82 for g in gen: add_text(slide, g, 0.35, yg, 5.9, 0.35, font_size=11.5, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) yg += 0.36 # Genital findings add_rect(slide, 6.65, 1.35, 6.4, 4.6, WHITE) add_rect(slide, 6.65, 1.35, 6.4, 0.42, ACCENT_RED) add_text(slide, "GENITAL / LOCAL FINDINGS", 6.7, 1.37, 6.3, 0.38, font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER) gfind = [ ("Vulval oedema, redness & tenderness", True), ("Fourchette tear — COMMON in virgins", True), (" Sharp red margins (fresh)", False), (" Congested & swollen edges at 3-4 days", False), ("Fossa navicularis disappears (with fourchette tear)", False), ("Posterior commissure rupture (disproportion)", False), ("Hymenal lacerations (3 & 9 o'clock position)", True), (" Fresh: irregular, sharp, red, bleeding on touch", False), ("Vaginal wall lacerations — posterior", True), ("Broad-based painful gait", False), ("Perineal tears (narrow introitus in young girls)", True), ] yf = 1.85 for (txt, bld) in gfind: add_text(slide, txt, 6.75, yf, 6.2, 0.37, font_size=11.5, bold=bld, color=DARK_TEXT, align=PP_ALIGN.LEFT) yf += 0.38 # Important note add_rect(slide, 0.25, 4.38, 6.1, 2.75, RGBColor(0xFF, 0xF3, 0xCD)) add_rect(slide, 0.25, 4.38, 6.1, 0.38, GOLD) add_text(slide, "⚠ KEY MEDICOLEGAL NOTES", 0.3, 4.39, 6.0, 0.35, font_size=12, bold=True, color=DARK_NAVY, align=PP_ALIGN.LEFT) notes = [ "• Absence of hymenal injury does NOT rule out rape", " (Fimbriated / elastic hymen or lubricant used)", "• No physical injury ≠ No rape occurred", "• Rape legally proved even without semen", "• Ejaculation between labia (no penetration) = rape", "• Age < 18 years: consent irrelevant — ALWAYS rape", ] yn = 4.82 for n in notes: add_text(slide, n, 0.35, yn, 5.9, 0.35, font_size=11, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) yn += 0.36 add_rect(slide, 6.65, 6.03, 6.4, 1.25, RGBColor(0xFF, 0xF3, 0xCD)) add_rect(slide, 6.65, 6.03, 6.4, 0.35, GOLD) add_text(slide, "SPECIMENS PRIORITY in Adolescent", 6.7, 6.04, 6.3, 0.32, font_size=12, bold=True, color=DARK_NAVY, align=PP_ALIGN.LEFT) add_text(slide, "Vaginal swabs (NOT cervical) · Hymenal swabs · " "Perianal swabs · Vaginal aspirate for sperms · Blood for grouping & DNA", 6.75, 6.42, 6.2, 0.8, font_size=11, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) # ═══════════════════════════════════════════════════════════════ # SLIDE 6 — Marital Rape # ═══════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GREY) slide_header(slide, "MARITAL RAPE", "Intramarital Rape — Legal Position in India") # Law box add_rect(slide, 0.25, 1.35, 12.85, 1.15, RGBColor(0xFF, 0xEB, 0xCD)) add_rect(slide, 0.25, 1.35, 12.85, 0.38, ACCENT_RED) add_text(slide, "CURRENT LAW — Exception 2, Section 63 BNS", 0.35, 1.37, 12.7, 0.35, font_size=13, bold=True, color=WHITE, align=PP_ALIGN.LEFT) add_text(slide, '"Sexual intercourse by a man with his own wife, the wife not being under fifteen years of age, is NOT rape."', 0.45, 1.77, 12.5, 0.65, font_size=14, bold=True, color=ACCENT_RED, align=PP_ALIGN.CENTER) # Three columns box_data = [ ("CLASSICAL LEGAL\nPOSITION", MED_BLUE, [ "Consent to sexual intercourse considered implicit in marriage contract", "Husband cannot be charged with rape upon wife above age specified by law", "Wife cannot retract implied consent given at marriage", "Exception: unless separation order is in force", ]), ("MODERN VIEW\n(Parikh's)", DARK_NAVY, [ "Marital exemption in rape is a thing of the past", "Marriage = partnership of equals", "No absolute right of husband over wife's body", "Enlightened jurists: rape = aggravated assault regardless of marriage", "Husband cannot assist another man to rape his wife", ]), ("SECTION 67 BNS\n(S.376B IPC)", ACCENT_RED, [ "Husband + wife living separately (decree / otherwise)", "Sexual intercourse WITHOUT her consent", "Punishment: min. 2 years — up to 7 years + fine", "SC (2017): marital rape of wife 15-18 yrs IS an offence", "(Independent Thought v. Union of India)", ]), ] x = 0.25 for (title, color, bullets) in box_data: add_rect(slide, x, 2.65, 4.2, 4.6, WHITE) add_rect(slide, x, 2.65, 4.2, 0.55, color) add_text(slide, title, x+0.1, 2.67, 4.0, 0.5, font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) yb = 3.25 for b in bullets: add_rect(slide, x+0.15, yb+0.08, 0.2, 0.2, color) add_text(slide, b, x+0.42, yb, 3.7, 0.65, font_size=11, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) yb += 0.72 x += 4.38 # ═══════════════════════════════════════════════════════════════ # SLIDE 7 — Burden of Proof # ═══════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GREY) slide_header(slide, "BURDEN OF PROOF IN ALLEGED RAPE", "Section 114A IEA — Presumption of Absence of Consent") # Central provision add_rect(slide, 0.25, 1.35, 12.85, 1.5, RGBColor(0xD6, 0xE4, 0xF0)) add_rect(slide, 0.25, 1.35, 12.85, 0.4, MED_BLUE) add_text(slide, "SECTION 114A — Indian Evidence Act (IEA)", 0.35, 1.37, 12.7, 0.38, font_size=13, bold=True, color=WHITE, align=PP_ALIGN.LEFT) add_text(slide, '"In prosecution for rape (S.376 IPC / S.64 BNS), where sexual intercourse by the accused is PROVED ' 'and the woman states in evidence that she did NOT consent — the court SHALL PRESUME she did not consent."', 0.45, 1.8, 12.5, 0.95, font_size=13, bold=False, color=DARK_NAVY, align=PP_ALIGN.CENTER) # Flow diagram - burden shift add_rect(slide, 0.25, 2.95, 12.85, 0.4, MED_BLUE) add_text(slide, "HOW BURDEN OF PROOF OPERATES IN RAPE TRIALS", 0.35, 2.97, 12.7, 0.35, font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) flow_items = [ ("STEP 1\nProsecution", "Proves sexual intercourse occurred\n(Medical evidence + DNA)"), ("STEP 2\nVictim", "States in court:\n'I did not consent'"), ("STEP 3\nCourt", "PRESUMES no consent\n(S.114A IEA triggered)"), ("STEP 4\nAccused", "Must rebut presumption\nby proving consent"), ] fx = 0.4 for (title, desc) in flow_items: add_rect(slide, fx, 3.45, 2.85, 1.35, MED_BLUE) add_text(slide, title, fx+0.1, 3.5, 2.65, 0.5, font_size=12, bold=True, color=GOLD, align=PP_ALIGN.CENTER) add_text(slide, desc, fx+0.1, 3.98, 2.65, 0.75, font_size=11, bold=False, color=WHITE, align=PP_ALIGN.CENTER) if fx < 9.0: add_text(slide, "▶", fx+2.9, 3.88, 0.5, 0.5, font_size=22, bold=True, color=ACCENT_RED, align=PP_ALIGN.CENTER) fx += 3.22 # Key medicolegal points add_rect(slide, 0.25, 4.95, 6.1, 2.3, WHITE) add_rect(slide, 0.25, 4.95, 6.1, 0.38, ACCENT_RED) add_text(slide, "MEDICOLEGAL SIGNIFICANCE", 0.3, 4.97, 6.0, 0.35, font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) ml_pts = [ "• Medical evidence CORROBORATES but does NOT substitute victim's testimony", "• Victim's statement is central to the trial", "• Medical evidence can confirm OR contradict allegations", "• Absence of injuries does NOT rule out rape", "• Locard's Principle: trace evidence exchange between victim & assailant", '• "Trial of rape cannot be based on emotional reactions" — Wecht', ] ym = 5.38 for pt in ml_pts: add_text(slide, pt, 0.35, ym, 5.9, 0.35, font_size=11, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) ym += 0.35 add_rect(slide, 6.65, 4.95, 6.4, 2.3, WHITE) add_rect(slide, 6.65, 4.95, 6.4, 0.38, MED_BLUE) add_text(slide, "ALSO NOTE: SECTION 146 IEA (Amended)", 6.7, 4.97, 6.3, 0.35, font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_text(slide, "Post-Nirbhaya amendment:\n\n" "• Past sexual history of victim is INADMISSIBLE as evidence to imply consent\n\n" "• Character of the woman CANNOT be questioned in rape trial\n\n" "• Applies to ALL rape trials under S.376 IPC / S.64 BNS", 6.75, 5.38, 6.2, 1.8, font_size=11.5, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) # ═══════════════════════════════════════════════════════════════ # SLIDE 8 — Legal Sections (IPC/BNS, CrPC, IEA) # ═══════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GREY) slide_header(slide, "LEGAL SECTIONS — IPC / BNS, CrPC & IEA", "Key sections related to rape in Indian criminal law") # IPC/BNS Table add_rect(slide, 0.25, 1.35, 8.3, 5.9, WHITE) add_rect(slide, 0.25, 1.35, 8.3, 0.42, MED_BLUE) add_text(slide, "IPC / BNS SECTIONS", 0.3, 1.37, 8.2, 0.38, font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) ipc_rows = [ ("S.375/S.63 BNS", "DEFINITION of Rape", ""), ("S.376/S.64 BNS", "Punishment for Rape", "Min. 10 yrs RI — Life + Fine"), ("S.376AB/S.65 BNS", "Rape on woman < 12 yrs", "Min. 20 yrs RI / Death + Fine"), ("S.376A/S.66 BNS", "Rape causing death / PVS", "Min. 20 yrs RI / Death"), ("S.376B/S.67 BNS", "Sex with separated wife w/o consent", "2-7 yrs + Fine"), ("S.376C/S.68 BNS", "Abuse of authority / fiduciary", "5-10 yrs RI + Fine"), ("S.376D/S.70 BNS", "Gang Rape", "Life (natural) + Fine"), ("S.376DA/S.70 BNS", "Gang Rape on woman < 16 yrs", "Life (natural) + Fine"), ("S.376DB/S.70 BNS", "Gang Rape on woman < 12 yrs", "Life / Death + Fine"), ("S.354 IPC", "Indecent Assault / outraging modesty", ""), ("S.228A IPC", "Disclosure of victim identity", "Prohibited"), ("S.166B IPC / S.200 BNS", "Doctor refuses MLC exam", "Punishable"), ("S.100/S.38 BNS", "Right of private defence (rape)", "Can extend to causing death"), ] ipc_h = [("IPC / BNS", "SUBJECT", "PUNISHMENT")] xc = [0.3, 2.7, 6.1] cw = [2.35, 3.35, 2.35] y = 1.82 add_rect(slide, 0.25, y-0.02, 8.3, 0.36, RGBColor(0xD5, 0xE8, 0xF5)) for ci, h in enumerate(ipc_h[0]): add_text(slide, h, xc[ci], y, cw[ci], 0.32, font_size=10, bold=True, color=MED_BLUE, align=PP_ALIGN.CENTER) y += 0.36 alt = False for row in ipc_rows: bg = WHITE if alt else RGBColor(0xEB, 0xF5, 0xFB) add_rect(slide, 0.25, y, 8.3, 0.35, bg) for ci, cell in enumerate(row): col = ACCENT_RED if ci==0 else DARK_TEXT bld = True if ci==0 else False add_text(slide, cell, xc[ci], y+0.02, cw[ci], 0.3, font_size=9.5, bold=bld, color=col, align=PP_ALIGN.LEFT) y += 0.36 alt = not alt # CrPC + IEA panel on right # CrPC add_rect(slide, 8.8, 1.35, 4.3, 3.1, WHITE) add_rect(slide, 8.8, 1.35, 4.3, 0.42, ACCENT_RED) add_text(slide, "CrPC SECTIONS", 8.85, 1.37, 4.2, 0.38, font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) crpc = [ ("S.53(2) CrPC", "Female RMP must examine rape victim (or under her supervision)"), ("S.164A CrPC", "Medical exam within 24 hrs; report sent to Magistrate; consent required"), ("S.327 CrPC", "Trial of rape IN CAMERA (closed court); no publication of proceedings"), ] yc = 1.82 for (sec, desc) in crpc: add_rect(slide, 8.8, yc, 4.3, 0.82, RGBColor(0xFF, 0xF0, 0xED) if yc>1.85 else WHITE) add_text(slide, sec, 8.88, yc+0.02, 1.5, 0.38, font_size=11, bold=True, color=ACCENT_RED, align=PP_ALIGN.LEFT) add_text(slide, desc, 8.88, yc+0.35, 4.1, 0.45, font_size=10.5, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) yc += 0.9 # IEA add_rect(slide, 8.8, 4.55, 4.3, 2.7, WHITE) add_rect(slide, 8.8, 4.55, 4.3, 0.42, MED_BLUE) add_text(slide, "IEA SECTIONS", 8.85, 4.57, 4.2, 0.38, font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) iea = [ ("S.114A IEA", "When penetration proved + victim says no consent → court PRESUMES no consent\n(Applies esp. to custodial rape & gang rape)"), ("S.146 IEA\n(amended)", "Past sexual history INADMISSIBLE to imply consent; victim's character CANNOT be questioned"), ] yi = 5.02 for (sec, desc) in iea: add_text(slide, sec, 8.88, yi, 1.5, 0.45, font_size=11, bold=True, color=MED_BLUE, align=PP_ALIGN.LEFT) add_text(slide, desc, 8.88, yi+0.42, 4.1, 0.85, font_size=10.5, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT) yi += 1.22 # ═══════════════════════════════════════════════════════════════ # SLIDE 9 — Punishment Summary # ═══════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GREY) slide_header(slide, "PUNISHMENT AS PER LAW", "Section 64 BNS (formerly S.376 IPC) and related provisions") punishments = [ (ACCENT_RED, "Simple Rape\n(S.64(1) BNS)", "Min. 10 yrs RI\nup to Life Imprisonment\n+ Fine"), (MED_BLUE, "Aggravated Rape\n(Police/Public servant/Armed forces/\nJail staff/Teacher/Relative/Pregnant\nvictim/Disability/Repeated rape)\n(S.64(2) BNS)", "Min. 10 yrs RI\nup to Life (natural)\n+ Fine"), (RGBColor(0x8E, 0x44, 0xAD), "Rape on Woman\n< 16 years", "Min. 20 yrs RI\nup to Life (natural)\n+ Fine"), (DARK_NAVY, "Rape on Woman\n< 12 years\n(S.65 BNS)", "Min. 20 yrs RI\nup to Life (natural)\nor DEATH + Fine"), (ACCENT_RED, "Rape Causing\nDeath or PVS\n(S.66 BNS)", "Min. 20 yrs RI\nup to Life (natural)\nor DEATH"), (MED_BLUE, "Sex with\nSeparated Wife\nw/o Consent\n(S.67 BNS)", "Min. 2 yrs\nup to 7 years\n+ Fine"), (RGBColor(0x16, 0xA0, 0x85), "Abuse of Authority /\nFiduciary\n(S.68 BNS)", "Min. 5 yrs RI\nup to 10 years\n+ Fine"), (DARK_NAVY, "Gang Rape\n(S.70 BNS)", "Life (natural)\n+ Fine"), (ACCENT_RED, "Gang Rape\n< 12 yrs\n(S.70 BNS)", "Life (natural)\nor DEATH\n+ Fine"), ] xs = [0.25, 1.6, 3.2, 4.8, 6.4, 8.0, 9.6, 11.2, 12.4] box_width = 1.3 for i, (col, title, punish) in enumerate(punishments): bx = xs[i] if i < len(xs) else 12.0 add_rect(slide, bx, 1.35, box_width, 4.1, col) add_text(slide, title, bx+0.05, 1.4, box_width-0.1, 1.5, font_size=10, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_rect(slide, bx, 2.95, box_width, 0.05, WHITE) add_text(slide, punish, bx+0.05, 3.05, box_width-0.1, 1.35, font_size=10.5, bold=True, color=GOLD, align=PP_ALIGN.CENTER) # Summary table at bottom add_rect(slide, 0.25, 5.6, 12.85, 1.65, WHITE) add_rect(slide, 0.25, 5.6, 12.85, 0.38, MED_BLUE) add_text(slide, "QUICK REFERENCE TABLE", 0.3, 5.62, 12.7, 0.35, font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) summary_cols = [ ("Minimum sentence", "10 yrs RI"), ("Age of consent", "18 years"), ("Marital rape exception", "Wife > 15 yrs"), ("Rape on < 16 yrs", "Min. 20 yrs RI"), ("Gang rape", "Life (natural)"), ("Death penalty applicable", "Rape < 12 yrs / PVS death"), ] sx = 0.35 for (lbl, val) in summary_cols: add_rect(slide, sx, 6.05, 2.05, 0.55, RGBColor(0xEB, 0xF5, 0xFB)) add_text(slide, lbl, sx+0.05, 6.06, 1.95, 0.25, font_size=9.5, bold=True, color=MED_BLUE, align=PP_ALIGN.CENTER) add_text(slide, val, sx+0.05, 6.3, 1.95, 0.28, font_size=10, bold=True, color=ACCENT_RED, align=PP_ALIGN.CENTER) sx += 2.15 # ═══════════════════════════════════════════════════════════════ # SLIDE 10 — Summary / Quick Reference # ═══════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) add_rect(slide, 0, 0, 13.333, 7.5, DARK_NAVY) add_rect(slide, 0, 0, 13.333, 1.2, MED_BLUE) add_rect(slide, 0, 1.2, 13.333, 0.07, ACCENT_RED) add_text(slide, "SUMMARY — KEY POINTS AT A GLANCE", 0.4, 0.1, 12.5, 0.9, font_size=26, bold=True, color=WHITE, align=PP_ALIGN.LEFT) add_text(slide, "Forensic Medicine & Medical Jurisprudence · RAPE", 0.4, 0.85, 12.5, 0.38, font_size=13, color=LIGHT_BLUE, align=PP_ALIGN.LEFT) key_points = [ ("Definition", "S.63 BNS — Penile/object/oral penetration; 7 circumstances; consent defined"), ("Age of consent", "18 years — with or without consent, sex with girl < 18 = RAPE"), ("Marital exception", "Wife ≥ 15 yrs → not rape (Exception 2, S.63 BNS)"), ("Examiner", "ONLY female RMP, or under her supervision (S.53(2) CrPC)"), ("Hymen & rape", "Intact hymen does NOT rule out rape; absence of injury ≠ no rape"), ("Sperm motility", "Motile: 1–6 hrs (up to 12 hrs) | Non-motile: up to 24–72 hrs in vagina"), ("SAFE/PERK kit", "Standardised collection: hair, swabs, blood (plain/EDTA/NaF), urine, clothing"), ("Burden of proof", "S.114A IEA: penetration proved + victim denies consent → presumed rape"), ("In camera trial", "S.327 CrPC — closed court; identity protected under S.228A IPC"), ("Minimum sentence", "10 yrs RI (simple rape) | 20 yrs (< 16 yrs) | Death possible (< 12 yrs)"), ("Gang rape", "All members liable; life imprisonment (natural) + fine"), ("S.146 IEA", "Past sexual history INADMISSIBLE; victim character cannot be questioned"), ] xp = [0.5, 6.9] yp = 1.45 row_h = 0.43 items_per_col = 6 for idx, (lbl, val) in enumerate(key_points): col = idx // items_per_col row = idx % items_per_col bx = xp[col] by = yp + row * row_h add_rect(slide, bx, by, 1.6, row_h-0.04, ACCENT_RED) add_text(slide, lbl, bx+0.05, by+0.05, 1.5, row_h-0.12, font_size=10.5, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_rect(slide, bx+1.6, by, 4.8, row_h-0.04, RGBColor(0x1E, 0x2D, 0x4E)) add_text(slide, val, bx+1.65, by+0.04, 4.7, row_h-0.1, font_size=11, bold=False, color=WHITE, align=PP_ALIGN.LEFT) add_text(slide, "Sources: Parikh's Textbook of Medical Jurisprudence, FM & Toxicology | " "Essentials of FM & Tox, 36th Ed. — K.S. Narayan Reddy (2026) | BNS 2023 / IPC 1860", 0.4, 7.12, 12.5, 0.32, font_size=10, bold=False, color=RGBColor(0x7F, 0x8C, 0x8D), align=PP_ALIGN.CENTER) # ─────────── Save ─────────── from io import BytesIO buf = BytesIO() prs.save(buf) with open("/tmp/workspace/rape-forensic-pptx/Rape_Forensic_Medicine.pptx", "wb") as f: f.write(buf.getvalue()) print("Saved successfully!") PYEOF echo "Script written."
cd /tmp/workspace/rape-forensic-pptx && python build.py 2>&1
ls -lh /tmp/workspace/rape-forensic-pptx/Rape_Forensic_Medicine.pptx
Rape Forensic Medicine
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title Slide — Rape: Section 63 BNS / S.375 IPC |
| 2 | Definition — Acts (a-d) + 7 Circumstances + Exceptions |
| 3 | Procedure of Examination — 7-step procedure (consent → specimens) |
| 4 | Specimens / Evidence — Full SAFE/PERK kit table with sperm motility timeline |
| 5 | Clinical Findings in a 14-Year-Old — General + genital findings + medicolegal notes |
| 6 | Marital Rape — Classical vs modern legal view + S.67 BNS + Supreme Court (2017) |
| 7 | Burden of Proof — S.114A IEA + 4-step flow diagram + S.146 IEA |
| 8 | Legal Sections — Complete IPC/BNS, CrPC, and IEA table |
| 9 | Punishment Summary — Visual punishment boxes by offence category |
| 10 | Summary / Quick Reference — 12 key points at a glance |