Xantho proteic reaction in fmt
xanthoproteic reaction biochemistry aromatic amino acids mechanism
| Finding | Description |
|---|---|
| Lips, tongue & oral mucosa | Initially white, then turn deep yellow due to xanthoproteic acid formation |
| Clothing | Stained yellow |
| Teeth | Yellow stained (crowns of teeth) |
| Vomitus | Yellowish-brown, containing altered blood |
| Urine | Brown colored |
| Abdomen | More distended and tender (gas formation from direct acid action on organic matter of stomach) |
| Feature | Sulphuric Acid | Nitric Acid | Hydrochloric Acid |
|---|---|---|---|
| Color of stain | Black/brown (charring) | Yellow (xanthoproteic) | White/grayish |
| Perforation of stomach | Common | Uncommon (chars/toughens tissue) | Uncommon |
| Gas formation | Less | More (more eructation/distension) | Moderate |
| Fumes at room temp | No | Yes (volatile) | Yes |
Flow chart
A clean, detailed medical flowchart titled "Xanthoproteic Reaction in Nitric Acid Poisoning (FMT)" with the following flow: Start box: "NITRIC ACID (HNO3) EXPOSURE" (Aqua Fortis / Red Spirit of Niter) Arrow down to two parallel branches: Branch 1: "INGESTION" Branch 2: "INHALATION OF FUMES" INGESTION branch flows down: → "Concentrated HNO3 contacts protein-rich tissues" → "Nitration of aromatic amino acids (Tyrosine, Phenylalanine, Tryptophan)" → "Formation of XANTHOPROTEIC ACID" → Yellow box: "XANTHOPROTEIC REACTION — Yellow discoloration" → Signs box listing: "• Lips/tongue/mucosa: white → yellow • Teeth: yellow stained • Clothing: yellow stained • Vomitus: yellowish-brown • Urine: brown • Abdomen: distended (gas)" Then from Yellow discoloration box: → "In alkaline conditions (e.g., ammonia added)" → "Color deepens to ORANGE-YELLOW" INHALATION branch flows down: → "Fumes irritate respiratory tract" → Signs: "• Lachrymation • Photophobia • Cough • Dyspnoea" → "Pulmonary Oedema / Bronchopneumonia / Glottic Oedema" → "Death" Bottom section — FORENSIC TESTS box: "1. Brown Ring Test — ferrous sulphate + H2SO4 → brown ring (confirms nitrates) 2. Ammonia test — yellow stains turn orange-yellow 3. Iodide + ammonia → stains disappear" Bottom facts box: "Fatal Dose: 10–15 mL | Fatal Period: 12–24 hours | Treatment: Same as H2SO4 poisoning" Use a white background, color-coded boxes (blue for mechanism, yellow for xanthoproteic reaction signs, red for fatal outcomes, green for tests), clear arrows, professional medical diagram style.
mkdir -p /tmp/workspace/fmt-flowchart && python3 -c "import matplotlib; print(matplotlib.__version__)"
~/fmt-flowchart/flowchart.py
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.patches import FancyBboxPatch, FancyArrowPatch
fig, ax = plt.subplots(figsize=(16, 22))
ax.set_xlim(0, 16)
ax.set_ylim(0, 22)
ax.axis('off')
fig.patch.set_facecolor('#FAFAFA')
# ---------- helper functions ----------
def box(ax, x, y, w, h, text, facecolor, edgecolor='#333333', fontsize=10,
textcolor='black', bold=False, radius=0.3, lw=1.5, ha='center', va='center'):
fancy = FancyBboxPatch((x - w/2, y - h/2), w, h,
boxstyle=f"round,pad=0.05,rounding_size={radius}",
facecolor=facecolor, edgecolor=edgecolor, linewidth=lw, zorder=3)
ax.add_patch(fancy)
weight = 'bold' if bold else 'normal'
ax.text(x, y, text, ha=ha, va=va, fontsize=fontsize,
color=textcolor, weight=weight, zorder=4,
multialignment='center', wrap=True)
def arrow(ax, x1, y1, x2, y2, color='#444444', lw=2):
ax.annotate('', xy=(x2, y2), xytext=(x1, y1),
arrowprops=dict(arrowstyle='->', color=color, lw=lw), zorder=5)
def label_arrow(ax, x, y, text, fontsize=8.5, color='#555555'):
ax.text(x, y, text, ha='center', va='center', fontsize=fontsize,
color=color, style='italic', zorder=6)
# ============================================================
# TITLE
# ============================================================
ax.text(8, 21.4, 'Xanthoproteic Reaction in Nitric Acid Poisoning',
ha='center', va='center', fontsize=15, weight='bold', color='#1a1a2e')
ax.text(8, 21.0, 'Forensic Medicine & Toxicology (FMT)',
ha='center', va='center', fontsize=11, color='#4a4e69', style='italic')
# ============================================================
# TOP: NITRIC ACID BOX
# ============================================================
box(ax, 8, 20.2, 7.5, 0.85,
'NITRIC ACID (HNO₃) — Aqua Fortis / Red Spirit of Niter\n'
'Clear, colourless, fuming liquid | Powerful oxidising agent',
facecolor='#1a1a2e', edgecolor='#1a1a2e', fontsize=10,
textcolor='white', bold=True)
arrow(ax, 8, 19.77, 8, 19.35)
# ============================================================
# EXPOSURE TYPE: two branches
# ============================================================
box(ax, 4.2, 19.0, 4.5, 0.6, 'INGESTION\n(Concentrated liquid)',
facecolor='#e63946', edgecolor='#c1121f', textcolor='white', bold=True, fontsize=10)
box(ax, 11.8, 19.0, 4.5, 0.6, 'INHALATION\n(Fumes / vapours)',
facecolor='#e77d22', edgecolor='#c05e0a', textcolor='white', bold=True, fontsize=10)
# branch lines from top box
ax.annotate('', xy=(4.2, 19.3), xytext=(8, 19.35),
arrowprops=dict(arrowstyle='->', color='#444', lw=2), zorder=5)
ax.annotate('', xy=(11.8, 19.3), xytext=(8, 19.35),
arrowprops=dict(arrowstyle='->', color='#444', lw=2), zorder=5)
# ============================================================
# LEFT BRANCH — INGESTION / XANTHOPROTEIC
# ============================================================
arrow(ax, 4.2, 18.7, 4.2, 18.15)
box(ax, 4.2, 17.85, 5.5, 0.55,
'HNO₃ contacts protein-rich tissues\n(skin, mucosa, GI tract)',
facecolor='#f1faee', edgecolor='#457b9d', fontsize=9.5)
arrow(ax, 4.2, 17.57, 4.2, 17.05)
box(ax, 4.2, 16.75, 5.5, 0.55,
'Nitration of aromatic amino acids\n(Tyrosine · Phenylalanine · Tryptophan)',
facecolor='#a8dadc', edgecolor='#457b9d', fontsize=9.5, bold=False)
arrow(ax, 4.2, 16.47, 4.2, 15.95)
box(ax, 4.2, 15.65, 5.5, 0.55,
'Formation of XANTHOPROTEIC ACID\n(yellow nitro-compound)',
facecolor='#ffd166', edgecolor='#e0a800', fontsize=9.5, bold=True)
arrow(ax, 4.2, 15.37, 4.2, 14.8)
# XANTHOPROTEIC REACTION big yellow box
box(ax, 4.2, 14.25, 5.8, 1.05,
'✦ XANTHOPROTEIC REACTION ✦\nYellow discolouration of tissues\n(hallmark of HNO₃ poisoning)',
facecolor='#f9c74f', edgecolor='#e0a800', fontsize=10.5, bold=True, lw=2.5)
arrow(ax, 4.2, 13.72, 4.2, 13.15)
# Signs box
box(ax, 4.2, 12.25, 5.8, 1.75,
'CLINICAL SIGNS\n'
'• Lips / tongue / mucosa: white → YELLOW\n'
'• Teeth crowns: yellow stained\n'
'• Clothing: yellow stained\n'
'• Vomitus: yellowish-brown + altered blood\n'
'• Urine: brown\n'
'• Abdomen: distended & tender (gas)',
facecolor='#fffbe6', edgecolor='#e0a800', fontsize=9, lw=1.5)
# Alkaline sub-branch
arrow(ax, 6.1, 14.25, 7.3, 14.25)
box(ax, 8.9, 14.25, 2.8, 0.55,
'Alkaline medium\n(e.g. ammonia added)',
facecolor='#d0f4de', edgecolor='#52b788', fontsize=8.5)
arrow(ax, 10.3, 14.25, 11.0, 14.25)
box(ax, 12.1, 14.25, 2.5, 0.55,
'Colour deepens\nto ORANGE-YELLOW',
facecolor='#ff9a3c', edgecolor='#c05e0a', fontsize=8.5, bold=True, textcolor='white')
# ============================================================
# RIGHT BRANCH — INHALATION
# ============================================================
arrow(ax, 11.8, 18.7, 11.8, 18.15)
box(ax, 11.8, 17.85, 4.8, 0.55,
'Fumes irritate respiratory\n& ocular mucosa',
facecolor='#f1faee', edgecolor='#e77d22', fontsize=9.5)
arrow(ax, 11.8, 17.57, 11.8, 17.05)
box(ax, 11.8, 16.6, 4.8, 0.8,
'SYMPTOMS\n• Lachrymation • Photophobia\n• Burning throat • Sneezing\n• Cough • Chest constriction',
facecolor='#ffe8d6', edgecolor='#e77d22', fontsize=9)
arrow(ax, 11.8, 16.2, 11.8, 15.7)
box(ax, 11.8, 15.4, 4.8, 0.55,
'Dyspnoea / Oedema of Glottis\nPulmonary Oedema | Bronchopneumonia',
facecolor='#ffb4a2', edgecolor='#e63946', fontsize=9)
arrow(ax, 11.8, 15.12, 11.8, 14.62)
box(ax, 11.8, 14.35, 3.5, 0.45,
'DEATH',
facecolor='#e63946', edgecolor='#9d0208', fontsize=11,
textcolor='white', bold=True, lw=2)
# ============================================================
# FORENSIC FACTS row
# ============================================================
arrow(ax, 4.2, 11.37, 4.2, 10.85)
box(ax, 8, 10.5, 13.5, 0.65,
'FATAL DOSE: 10–15 mL | FATAL PERIOD: 12–24 hours | TREATMENT: Same as H₂SO₄ (dilution, demulcents; NO emesis)',
facecolor='#e9ecef', edgecolor='#6c757d', fontsize=9.5, lw=1.5)
# ============================================================
# FORENSIC TESTS
# ============================================================
arrow(ax, 8, 10.17, 8, 9.65)
box(ax, 8, 8.9, 13.5, 1.3,
'FORENSIC CONFIRMATORY TESTS FOR NITRIC ACID\n\n'
'1. Brown Ring Test — Add ferrous sulphate + H₂SO₄ to suspected solution → brown ring at junction (confirms nitrates)\n'
'2. Ammonia Test — Add ammonia to yellow stains → colour turns ORANGE-YELLOW\n'
'3. Iodide + Ammonia Test — Yellow stains DISAPPEAR\n'
'4. Bile Test — Further confirmation',
facecolor='#d8f3dc', edgecolor='#40916c', fontsize=9.5, lw=2)
# ============================================================
# COMPARISON TABLE
# ============================================================
arrow(ax, 8, 8.25, 8, 7.65)
# table header
box(ax, 8, 7.35, 13.5, 0.55,
'COMPARISON: CORROSIVE ACID POISONING',
facecolor='#343a40', edgecolor='#343a40', fontsize=10,
textcolor='white', bold=True)
# column headers
cols = [2.0, 5.5, 8.5, 11.5, 14.5]
headers = ['Feature', 'H₂SO₄ (Sulphuric)', 'HNO₃ (Nitric) ★', 'HCl (Hydrochloric)', 'Oxalic Acid']
for i, (cx, hdr) in enumerate(zip(cols, headers)):
fc = '#f9c74f' if i == 2 else '#dee2e6'
box(ax, cx, 6.85, 2.8 if i > 0 else 2.5, 0.45, hdr,
facecolor=fc, edgecolor='#adb5bd', fontsize=8.5, bold=True)
rows = [
('Tissue stain', 'Black / brown', 'YELLOW ★', 'White / grey', 'White'),
('Perforation', 'Common', 'Uncommon\n(chars tissue)', 'Uncommon', 'Rare'),
('Gas / distension', 'Less', 'MORE', 'Moderate', 'Less'),
('Fumes at room temp', 'No', 'YES', 'Yes', 'No'),
]
y_row = 6.4
for row in rows:
for i, (cx, val) in enumerate(zip(cols, row)):
fc = '#fffbe6' if i == 2 else 'white'
box(ax, cx, y_row, 2.8 if i > 0 else 2.5, 0.38, val,
facecolor=fc, edgecolor='#dee2e6', fontsize=8, lw=1)
y_row -= 0.4
# ============================================================
# FOOTER
# ============================================================
ax.text(8, 4.35, 'Source: Essentials of Forensic Medicine & Toxicology 36th ed. (2026) | P.C. Dikshit Textbook of FMT',
ha='center', va='center', fontsize=8, color='#6c757d', style='italic')
plt.tight_layout(pad=0.5)
plt.savefig('/tmp/workspace/fmt-flowchart/xanthoproteic_flowchart.png',
dpi=160, bbox_inches='tight', facecolor='#FAFAFA')
print("Saved.")
cd /tmp/workspace/fmt-flowchart && python3 flowchart.py
xanthoproteic flowchart
Image · PNG