What is the treatment of scorpian bite
scorpion sting envenomation treatment
| Severity | Treatment |
|---|---|
| Mild (local pain only) | Ice pack, analgesics, antihistamines, home observation |
| Moderate-severe (neuromuscular) | IV midazolam, antivenom, close monitoring |
| Cardiovascular crisis | Nifedipine / nitroprusside / prazosin, antiarrhythmics |
| Respiratory failure | O2, intubation, ICU |
| Hemolysis / AKI (H. lepturus) | Supportive renal care, monitor hemoglobin |
Give me basic drugs and their doses in children according to their age and weight
Important: Always dose by weight (kg) when possible. Age-based dosing is a fallback. Never exceed maximum daily doses.
| Weight (lbs) | Weight (kg) | Age | Dose (mg) |
|---|---|---|---|
| 6-11 | 2.7-5 | 0-3 months | 40 |
| 12-17 | 5.1-7.7 | 4-11 months | 80 |
| 18-23 | 7.8-10.5 | 1-2 years | 120 |
| 24-35 | 10.6-15.9 | 2-3 years | 160 |
| 36-47 | 16-21.4 | 4-5 years | 240 |
| 48-59 | 21.5-26.8 | 6-8 years | 320-325 |
| 60-71 | 26.9-32.3 | 9-10 years | 325-400 |
| 72-95 | 32.4-43.2 | 11 years | 480-500 |
| Age | Dose |
|---|---|
| < 6 months | Not recommended |
| 6 months - 12 years | 5-10 mg/kg/dose PO every 6-8 hr |
| JRA (8 mo - 12 yr) | 30-50 mg/kg/24 hr divided every 6 hr; max 800 mg/dose |
| 12-17 years (IV) | 400 mg/dose every 4-6 hr; max 2400 mg/24 hr |
| Adult | 200-400 mg/dose every 4-6 hr PO; max 3.2 g/24 hr |
Avoid with dehydration, renal insufficiency, GI disease, or in neonates. Give with food/milk to reduce GI upset.
| Age/Weight | Dose |
|---|---|
| Neonate / ≤3 months | 20-30 mg/kg/24 hr divided every 12 hr |
| Child (standard dose) | 25-50 mg/kg/24 hr divided every 8-12 hr |
| Child (high dose - resistant organisms, CAP, AOM) | 80-90 mg/kg/24 hr divided every 8-12 hr; max 2-3 g/24 hr |
| Tonsillitis/Pharyngitis (S. pyogenes) | 50 mg/kg/24 hr divided every 12 hr x 10 days; max 1 g/24 hr |
| Adult (mild/moderate) | 250 mg every 8 hr OR 500 mg every 12 hr PO |
| Adult (severe) | 500 mg every 8 hr OR 875 mg every 12 hr PO |
| Age/Weight | Dose |
|---|---|
| Infant 1 - <3 months | 30 mg/kg/24 hr divided every 12 hr (use 125 mg/5 mL suspension) |
| Child >3 months and <40 kg | Standard: 25-45 mg/kg/24 hr every 12 hr PO |
| Child >3 months and <40 kg (resistant organisms, CAP, orbital cellulitis) | 90 mg/kg/24 hr divided every 8-12 hr (use ES-600 or 14:1 formulation) |
| ≥40 kg or Adult | 250-500 mg every 8 hr OR 875 mg every 12 hr PO |
| Age | Dose |
|---|---|
| 6-12 months | 2.5 mg once daily |
| 12-23 months | 2.5 mg once daily; may increase to 2.5 mg every 12 hr |
| 2-5 years | 2.5 mg once daily; may increase to 5 mg/24 hr (once daily or divided BID) |
| ≥6 years and adult | 5-10 mg once daily |
| Age | Dose |
|---|---|
| 2-6 years | 1 mg every 4-6 hr; max 6 mg/24 hr |
| 6-12 years | 2 mg every 4-6 hr; max 12 mg/24 hr |
| ≥12 years and adult | 4 mg every 4-6 hr; max 24 mg/24 hr |
| Drug | Child Dose (per kg) | Frequency | Max/24 hr |
|---|---|---|---|
| Paracetamol | 10-15 mg/kg | Every 4-6 hr | 75 mg/kg or 4 g |
| Ibuprofen (≥6 mo) | 5-10 mg/kg | Every 6-8 hr | 40 mg/kg or 2.4 g |
| Amoxicillin (standard) | 25-50 mg/kg | Divided every 8-12 hr | 3 g |
| Amoxicillin (high dose) | 80-90 mg/kg | Divided every 8-12 hr | 3 g |
| Amoxicillin-Clav (standard) | 25-45 mg/kg | Every 12 hr | Per weight |
| Amoxicillin-Clav (high dose) | 90 mg/kg | Every 8-12 hr | Per weight |
| Cetirizine | - | Once daily | 10 mg |
| Chlorpheniramine | 0.35 mg/kg/24 hr | Divided every 4-6 hr | Age-dependent |
Note: These doses are from the Harriet Lane Handbook (23rd ed., Johns Hopkins Hospital). Dosing may be adjusted for renal/hepatic impairment, gestational age in neonates, or specific infections. Always confirm with local formulary or a clinical pharmacist before prescribing.
Create a quick reference PDF for common pediatric drug doses also give me doses in ml
mkdir -p /home/daytona/workspace/pediatric-drug-ref && ls /home/daytona/workspace/pediatric-drug-ref/
~/pediatric-drug-ref/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import PageBreak
from datetime import date
OUTPUT = "/home/daytona/workspace/pediatric-drug-ref/Pediatric_Drug_Quick_Reference.pdf"
# ── Colours ──────────────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a3a5c")
MID_BLUE = colors.HexColor("#2566a8")
LIGHT_BLUE = colors.HexColor("#dbeafe")
ACCENT = colors.HexColor("#e05c2a")
HEADER_BG = colors.HexColor("#1a3a5c")
ROW_ALT = colors.HexColor("#f0f6ff")
WHITE = colors.white
LIGHT_GRAY = colors.HexColor("#f5f5f5")
WARN_YELLOW = colors.HexColor("#fff3cd")
WARN_BORDER = colors.HexColor("#e6a817")
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.5*cm, rightMargin=1.5*cm,
topMargin=1.8*cm, bottomMargin=1.8*cm,
title="Pediatric Drug Quick Reference",
author="Orris Medical Reference | Harriet Lane Handbook 23rd Ed."
)
W = A4[0] - 3*cm # usable width
styles = getSampleStyleSheet()
# Custom styles
def S(name, **kw):
base = kw.pop("base", "Normal")
return ParagraphStyle(name, parent=styles[base], **kw)
title_style = S("DocTitle", fontSize=22, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", leading=28)
sub_style = S("DocSub", fontSize=11, textColor=colors.HexColor("#cce0ff"),
alignment=TA_CENTER, fontName="Helvetica", leading=15)
source_style = S("Source", fontSize=7.5, textColor=colors.HexColor("#aacbee"),
alignment=TA_CENTER, fontName="Helvetica-Oblique")
drug_hdr = S("DrugHdr", fontSize=13, textColor=WHITE,
fontName="Helvetica-Bold", leading=17, alignment=TA_LEFT)
section_hdr = S("SectionHdr", fontSize=9, textColor=DARK_BLUE,
fontName="Helvetica-Bold", leading=12)
note_style = S("Note", fontSize=7.5, textColor=colors.HexColor("#5a3e00"),
fontName="Helvetica-Oblique", leading=10)
warn_style = S("Warn", fontSize=8, textColor=colors.HexColor("#7a3000"),
fontName="Helvetica-Bold", leading=11)
footer_style = S("Footer", fontSize=7, textColor=colors.gray,
alignment=TA_CENTER, fontName="Helvetica-Oblique")
cell_style = S("Cell", fontSize=7.8, fontName="Helvetica", leading=10)
cell_b_style = S("CellB", fontSize=7.8, fontName="Helvetica-Bold", leading=10)
cell_hdr = S("CellHdr", fontSize=8, fontName="Helvetica-Bold",
textColor=WHITE, leading=10)
# ── Helper: table style ───────────────────────────────────────────────────────
def drug_table_style(nrows, ncols, alt_start=1):
s = TableStyle([
# Header row
('BACKGROUND', (0,0), (-1,0), MID_BLUE),
('TEXTCOLOR', (0,0), (-1,0), WHITE),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 8),
('ALIGN', (0,0), (-1,0), 'CENTER'),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('ROWBACKGROUND',(0, 0), (-1, 0), MID_BLUE),
('GRID', (0,0), (-1,-1), 0.3, colors.HexColor("#b0c8e8")),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING',(0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING',(0,0), (-1,-1), 5),
])
# Alternating rows
for r in range(alt_start, nrows):
if r % 2 == 0:
s.add('BACKGROUND', (0,r), (-1,r), ROW_ALT)
else:
s.add('BACKGROUND', (0,r), (-1,r), WHITE)
return s
def drug_block(name, brand, indication, table_data, col_widths, notes=None, warn=None):
"""Returns a list of flowables for one drug block."""
items = []
# Drug header bar
hdr_tbl = Table(
[[Paragraph(f" {name}", drug_hdr),
Paragraph(f"{brand}", S("BrandRight", fontSize=9, textColor=colors.HexColor("#cce0ff"),
fontName="Helvetica-Oblique", alignment=TA_RIGHT))]],
colWidths=[W*0.6, W*0.4]
)
hdr_tbl.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_BLUE),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 4),
('RIGHTPADDING', (0,0), (-1,-1), 8),
]))
items.append(hdr_tbl)
# Indication tag
ind_tbl = Table(
[[Paragraph(f" Uses: {indication}", S("IndTag", fontSize=8,
textColor=WHITE, fontName="Helvetica",
leading=11))]],
colWidths=[W]
)
ind_tbl.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), MID_BLUE),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 6),
]))
items.append(ind_tbl)
# Dose table
formatted = []
for i, row in enumerate(table_data):
if i == 0:
formatted.append([Paragraph(str(c), cell_hdr) for c in row])
else:
formatted.append([Paragraph(str(c), cell_style) for c in row])
t = Table(formatted, colWidths=col_widths, repeatRows=1)
t.setStyle(drug_table_style(len(formatted), len(col_widths)))
items.append(t)
# Notes
if notes:
nt = Table(
[[Paragraph(f"Note: {notes}", note_style)]],
colWidths=[W]
)
nt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), LIGHT_GRAY),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 6),
('GRID', (0,0), (-1,-1), 0.3, colors.HexColor("#cccccc")),
]))
items.append(nt)
if warn:
wt = Table(
[[Paragraph(f"⚠ {warn}", warn_style)]],
colWidths=[W]
)
wt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), WARN_YELLOW),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 6),
('BOX', (0,0), (-1,-1), 0.8, WARN_BORDER),
]))
items.append(wt)
items.append(Spacer(1, 6))
return KeepTogether(items)
# ══════════════════════════════════════════════════════════════════════════════
# Build story
# ══════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER HEADER ─────────────────────────────────────────────────────────────
cover = Table(
[[Paragraph("PEDIATRIC DRUG", title_style)],
[Paragraph("QUICK REFERENCE GUIDE", title_style)],
[Spacer(1, 4)],
[Paragraph("Common Drug Doses by Age & Weight · Including mL Volumes", sub_style)],
[Spacer(1, 3)],
[Paragraph(f"Based on Harriet Lane Handbook, 23rd Edition (Johns Hopkins) · Generated {date.today().strftime('%B %d, %Y')}", source_style)],
],
colWidths=[W]
)
cover.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_BLUE),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 10),
('RIGHTPADDING', (0,0), (-1,-1), 10),
]))
story.append(cover)
story.append(Spacer(1, 8))
# Important warning box
imp = Table([[Paragraph(
"⚠ IMPORTANT: Always dose by WEIGHT (kg) when possible. Verify doses before prescribing. "
"Do not exceed stated maximum doses. Adjust for renal/hepatic impairment. "
"mL volumes shown assume the STANDARD concentration listed for each drug.",
warn_style)]], colWidths=[W])
imp.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), WARN_YELLOW),
('BOX', (0,0), (-1,-1), 1, WARN_BORDER),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 8),
]))
story.append(imp)
story.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# 1. ACETAMINOPHEN (Paracetamol)
# ══════════════════════════════════════════════════════════════════════════════
# Suspension: 120 mg/5 mL (paeds) and 250 mg/5 mL (older)
# Dose: 15 mg/kg/dose Q4-6hr
para_data = [
["Weight (kg)", "Age", "Dose (mg)", "Volume\n120mg/5mL susp.", "Volume\n250mg/5mL susp.", "Frequency", "Max/24hr"],
["2.7–5", "0–3 mo", "40", "1.7 mL", "—", "Q4–6 hr", "5 doses"],
["5.1–7.7", "4–11 mo", "80", "3.3 mL", "—", "Q4–6 hr", "5 doses"],
["7.8–10.5","1–2 yr", "120", "5.0 mL", "2.4 mL", "Q4–6 hr", "5 doses"],
["10.6–15.9","2–3 yr", "160", "6.7 mL", "3.2 mL", "Q4–6 hr", "5 doses"],
["16–21.4", "4–5 yr", "240", "10 mL", "4.8 mL", "Q4–6 hr", "5 doses"],
["21.5–26.8","6–8 yr", "325", "13.5 mL", "6.5 mL", "Q4–6 hr", "5 doses"],
["26.9–32.3","9–10 yr", "400", "—", "8.0 mL", "Q4–6 hr", "5 doses"],
["32.4–43.2","11 yr", "500", "—", "10 mL", "Q4–6 hr", "5 doses"],
["≥44", "≥12 yr/Adult","500–650","—", "10–13 mL","Q4–6 hr","4 g/day"],
]
cw = [W*0.11, W*0.10, W*0.10, W*0.155, W*0.155, W*0.12, W*0.12]
story.append(drug_block(
"ACETAMINOPHEN (PARACETAMOL)",
"Tylenol · Panadol · Calpol · FeverAll",
"Fever · Mild-Moderate Pain",
para_data, cw,
notes="10–15 mg/kg/dose PO/PR. Suspension 120 mg/5 mL (infant) or 250 mg/5 mL (older child). "
"Max 75 mg/kg/24hr or 4 g/24hr. Do NOT exceed 5 doses in 24 hours.",
warn="OVERDOSE RISK: Paracetamol is the leading cause of acute liver failure. Check ALL sources of paracetamol before dosing."
))
# ══════════════════════════════════════════════════════════════════════════════
# 2. IBUPROFEN
# ══════════════════════════════════════════════════════════════════════════════
# Suspension: 100 mg/5 mL (standard OTC)
ibup_data = [
["Weight (kg)", "Age", "Dose (mg)\n5–10 mg/kg", "Volume\n100mg/5mL susp.", "Frequency", "Max/24hr"],
["< 6 mo", "< 6 mo", "NOT RECOMMENDED", "—", "—", "—"],
["7–9", "6–12 mo", "50–75 mg", "2.5–3.75 mL","Q6–8 hr","2.4 g"],
["9–12", "1–2 yr", "75–100 mg", "3.75–5 mL", "Q6–8 hr","2.4 g"],
["12–16", "2–4 yr", "100–150 mg", "5–7.5 mL", "Q6–8 hr","2.4 g"],
["16–21", "4–6 yr", "150–200 mg", "7.5–10 mL", "Q6–8 hr","2.4 g"],
["21–27", "6–9 yr", "200–250 mg", "10–12.5 mL", "Q6–8 hr","2.4 g"],
["27–32", "9–11 yr", "250–300 mg", "12.5–15 mL", "Q6–8 hr","2.4 g"],
["32–40", "11–13 yr", "300–400 mg", "15–20 mL", "Q6–8 hr","2.4 g"],
["≥40", "≥12 yr/Adult","400 mg", "20 mL", "Q6–8 hr","3.2 g"],
]
cw2 = [W*0.11, W*0.11, W*0.175, W*0.185, W*0.115, W*0.115]
story.append(drug_block(
"IBUPROFEN",
"Motrin · Advil · Children's Advil · Nurofen",
"Fever · Pain · Inflammation",
ibup_data, cw2,
notes="5–10 mg/kg/dose Q6–8hr PO. Standard suspension: 100 mg/5 mL. "
"Max 40 mg/kg/24hr or 2400 mg/24hr (antipyretic). Give with food to reduce GI upset.",
warn="NOT for infants <6 months. Avoid in dehydration, renal impairment, GI disease, or asthma sensitive to NSAIDs."
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 3. AMOXICILLIN
# ══════════════════════════════════════════════════════════════════════════════
# Suspension: 125 mg/5 mL (standard) or 250 mg/5 mL
amox_data = [
["Age / Weight", "Indication", "Dose", "Frequency", "Volume\n125mg/5mL", "Volume\n250mg/5mL"],
["Neonate/≤3 mo", "General", "20–30 mg/kg/24hr", "÷ Q12hr", "—", "—"],
["Child (std dose)","Mild–mod infections", "25–50 mg/kg/24hr", "÷ Q8–12hr", "Per weight", "Per weight"],
["Child (high dose)","AOM, CAP, sinusitis\n(resistant organisms)", "80–90 mg/kg/24hr","÷ Q8–12hr","Per weight","Per weight"],
["Child", "Pharyngitis (GAS)", "50 mg/kg/24hr", "÷ Q12hr\n× 10 days","Per weight","Per weight"],
["10 kg example", "Standard dose", "250–500 mg/day", "125–250 mg Q12hr","5–10 mL Q12hr","2.5–5 mL Q12hr"],
["15 kg example", "High dose", "1200–1350 mg/day", "400–450 mg Q8hr", "16–18 mL Q8hr","8–9 mL Q8hr"],
["20 kg example", "High dose", "1600–1800 mg/day", "530–600 mg Q8hr", "21–24 mL Q8hr","10.6–12 mL Q8hr"],
["Adult", "Mild/moderate", "250–500 mg/dose", "Q8hr PO", "—", "—"],
["Adult", "Severe", "500–875 mg/dose", "Q8–12hr PO","—", "—"],
]
cw3 = [W*0.14, W*0.19, W*0.15, W*0.12, W*0.175, W*0.175]
story.append(drug_block(
"AMOXICILLIN",
"Amoxil · Trimox · Generics",
"Ear / Throat / Chest / Urinary infections",
amox_data, cw3,
notes="Suspension available as 125 mg/5 mL or 250 mg/5 mL. "
"High-dose (80–90 mg/kg/day) recommended for AOM, CAP, sinusitis. Max 3 g/24hr.",
))
# ══════════════════════════════════════════════════════════════════════════════
# 4. AMOXICILLIN-CLAVULANIC ACID
# ══════════════════════════════════════════════════════════════════════════════
amoxclav_data = [
["Age / Weight", "Indication", "Dose (amox component)", "Frequency", "Volume\n125/31.25 mg/5mL", "Volume\n200/28.5 mg/5mL"],
["Infant 1–<3 mo", "General", "30 mg/kg/24hr", "÷ Q12hr", "6 mL/kg/day", "—"],
["Child <40 kg\n(std)", "Mild–mod", "25–45 mg/kg/24hr", "÷ Q12hr", "5–9 mL/kg/day", "3.1–5.6 mL/kg/day"],
["Child <40 kg\n(high)", "CAP, orbital cellulitis, severe", "90 mg/kg/24hr","÷ Q8–12hr","18 mL/kg/day","11.25 mL/kg/day"],
["10 kg (std)", "Mild–mod", "250–400 mg/day", "Q12hr", "~5–8 mL Q12hr", "~3–5 mL Q12hr"],
["15 kg (high)", "Severe/CAP", "1350 mg/day", "Q8hr", "~9 mL Q8hr", "~5.6 mL Q8hr"],
["≥40 kg / Adult", "Mild–mod", "250–500 mg", "Q8hr PO", "—", "—"],
["≥40 kg / Adult", "Severe", "875 mg", "Q12hr PO", "—", "—"],
]
cw4 = [W*0.14, W*0.18, W*0.17, W*0.11, W*0.195, W*0.175]
story.append(drug_block(
"AMOXICILLIN-CLAVULANATE",
"Augmentin · Augmentin ES-600",
"AOM · Sinusitis · Animal bites · Lower respiratory infections",
amoxclav_data, cw4,
notes="Doses based on amoxicillin component. Available as 125/31.25 mg/5 mL or 200/28.5 mg/5 mL suspension. "
"Use ES-600 formulation for high-dose regimens. Max 3 g amoxicillin/24hr.",
warn="Avoid in penicillin allergy. Diarrhea is common — counsel parents."
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 5. CETIRIZINE
# ══════════════════════════════════════════════════════════════════════════════
# Syrup: 5 mg/5 mL
cet_data = [
["Age", "Dose", "Frequency", "Volume (5mg/5mL syrup)", "Max/24hr"],
["6–12 months", "2.5 mg", "Once daily", "2.5 mL", "2.5 mg"],
["12–23 months", "2.5 mg", "Once daily\n(max Q12hr if needed)", "2.5 mL", "5 mg"],
["2–5 years", "2.5 mg", "Once daily\n(max 5 mg/day)", "2.5 mL", "5 mg"],
["≥6 years", "5–10 mg", "Once daily", "5–10 mL", "10 mg"],
["Adult", "10 mg", "Once daily", "10 mL", "10 mg"],
]
cw5 = [W*0.18, W*0.13, W*0.22, W*0.26, W*0.15]
story.append(drug_block(
"CETIRIZINE",
"Zyrtec · Reactine",
"Allergic rhinitis · Urticaria · Allergic reactions",
cet_data, cw5,
notes="Less sedating antihistamine. Syrup: 5 mg/5 mL. Reduce dose in hepatic impairment.",
))
# ══════════════════════════════════════════════════════════════════════════════
# 6. CHLORPHENIRAMINE
# ══════════════════════════════════════════════════════════════════════════════
# Syrup: 2 mg/5 mL
chlor_data = [
["Age", "Dose", "Frequency", "Volume (2mg/5mL syrup)", "Max/24hr"],
["2–6 years", "1 mg", "Q4–6 hr", "2.5 mL", "6 mg"],
["6–12 years", "2 mg", "Q4–6 hr", "5 mL", "12 mg"],
["≥12 years/Adult", "4 mg", "Q4–6 hr", "10 mL", "24 mg"],
]
cw6 = [W*0.22, W*0.14, W*0.17, W*0.27, W*0.18]
story.append(drug_block(
"CHLORPHENIRAMINE",
"Chlor-Trimeton · Piriton · Generics",
"Allergic rhinitis · Urticaria · Anaphylaxis (adjunct)",
chlor_data, cw6,
notes="First-generation antihistamine. Syrup: 2 mg/5 mL. Causes sedation. NOT for infants <2 years.",
warn="Avoid in children <2 years — risk of paradoxical excitability and respiratory depression."
))
# ══════════════════════════════════════════════════════════════════════════════
# 7. SALBUTAMOL (Albuterol) - Nebulization
# ══════════════════════════════════════════════════════════════════════════════
# Nebuliser solution: 2.5 mg/2.5 mL unit dose or 5 mg/mL
salb_data = [
["Weight (kg)", "Age", "Nebuliser dose", "Volume (5mg/mL neb solution + NS)", "MDI puffs (100mcg/puff)", "Frequency"],
["<10", "<2 yr", "1.25 mg", "0.25 mL + 2 mL NS", "1–2 puffs via spacer", "Q4–6 hr"],
["10–20", "2–6 yr", "2.5 mg", "0.5 mL + 2 mL NS", "2–4 puffs via spacer", "Q4–6 hr"],
["20–30", "6–10 yr", "2.5 mg", "0.5 mL + 2 mL NS", "4–6 puffs via spacer", "Q4–6 hr"],
[">30", ">10 yr", "5 mg", "1 mL + 2 mL NS", "4–8 puffs via spacer", "Q4–6 hr"],
["Acute severe", "Any","2.5–5 mg","0.5–1 mL + 2 mL NS", "As directed", "Q20 min × 3 then reassess"],
]
cw7 = [W*0.10, W*0.09, W*0.14, W*0.22, W*0.21, W*0.21]
story.append(drug_block(
"SALBUTAMOL (ALBUTEROL)",
"Ventolin · Proventil · AccuNeb",
"Acute asthma / Bronchospasm / Wheeze",
salb_data, cw7,
notes="Nebulizer solution: 5 mg/mL. Always dilute to 2.5–3 mL total with NS. MDI: use with spacer in all children. "
"Continuous nebulization may be used in severe acute asthma (ICU setting).",
warn="Monitor heart rate — tachycardia and tremor are common. Hypokalaemia with high doses."
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 8. PREDNISOLONE / PREDNISONE
# ══════════════════════════════════════════════════════════════════════════════
pred_data = [
["Indication", "Dose", "Duration", "Notes"],
["Acute asthma / croup", "1–2 mg/kg/day", "3–5 days", "Max 40–60 mg/day"],
["Nephrotic syndrome (induction)", "2 mg/kg/day", "4–6 wk", "Max 80 mg/day; specialist guidance"],
["Severe allergic reaction", "1–2 mg/kg/day", "3–5 days", "Max 60 mg/day"],
["Anti-inflammatory", "0.5–1 mg/kg/day", "As needed", "Taper if >7 days"],
["Immunosuppressive", "1–2 mg/kg/day", "Varies", "Specialist supervision required"],
]
# mL reference for syrup 5 mg/mL
pred_data2 = [
["Weight (kg)", "Dose (1 mg/kg)", "Volume\n5mg/5mL syrup (1mg/kg)", "Volume\n5mg/mL sol (1mg/kg)"],
["5 kg", "5 mg", "5 mL", "1 mL"],
["10 kg", "10 mg", "10 mL", "2 mL"],
["15 kg", "15 mg", "15 mL", "3 mL"],
["20 kg", "20 mg", "20 mL", "4 mL"],
["30 kg", "30 mg", "30 mL", "6 mL"],
["≥40 kg", "40 mg (max)", "—", "8 mL (use tabs)"],
]
cwpred = [W*0.24, W*0.18, W*0.24, W*0.34]
cwpred2 = [W*0.17, W*0.2, W*0.31, W*0.32]
story.append(drug_block(
"PREDNISOLONE / PREDNISONE",
"Deltacortril · Prelone · Pediapred",
"Asthma · Croup · Allergic reactions · Nephrotic syndrome",
pred_data, cwpred,
notes="Syrup: 5 mg/5 mL. Soluble: 5 mg/mL. Give with food. If >7 day course, taper dose gradually."
))
t2 = Table(
[[Paragraph("mL Volume Reference (1 mg/kg dose, Prednisolone 5 mg/5 mL syrup / 5 mg/mL solution)", section_hdr)]],
colWidths=[W]
)
t2.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 6),
]))
story.append(t2)
formatted2 = []
for i, row in enumerate(pred_data2):
if i == 0:
formatted2.append([Paragraph(str(c), cell_hdr) for c in row])
else:
formatted2.append([Paragraph(str(c), cell_style) for c in row])
t3 = Table(formatted2, colWidths=cwpred2, repeatRows=1)
t3.setStyle(drug_table_style(len(formatted2), 4))
story.append(t3)
story.append(Spacer(1, 8))
# ══════════════════════════════════════════════════════════════════════════════
# 9. ORS (Oral Rehydration Solution)
# ══════════════════════════════════════════════════════════════════════════════
ors_data = [
["Severity", "Age / Weight", "Volume of ORS", "Method", "Duration"],
["Mild dehydration\n(3–5%)", "All ages", "50 mL/kg", "Sips every 5 min", "Over 4 hours"],
["Moderate dehydration\n(5–10%)", "All ages", "100 mL/kg", "Frequent small sips", "Over 4 hours"],
["Maintenance\n(ongoing losses)", "Infant", "10 mL/kg per stool\nor 2 mL/kg per vomit", "After each loss", "Ongoing"],
["Maintenance", "Child >1 yr", "100–200 mL per stool", "After each loss", "Ongoing"],
["Severe dehydration\n(>10%)", "Any", "IV FLUIDS — not ORS alone", "Urgent IV access", "Immediate"],
]
cwors = [W*0.17, W*0.14, W*0.22, W*0.22, W*0.18]
story.append(drug_block(
"ORAL REHYDRATION SOLUTION (ORS)",
"ORS · Pedialyte · Dioralyte",
"Diarrhoea · Vomiting · Dehydration",
ors_data, cwors,
notes="WHO-ORS: 75 mmol/L Na, 75 mmol/L glucose, 245 mOsm/L. Do not use plain water, juices, or sports drinks.",
warn="Severe dehydration (>10%, shock) requires immediate IV fluid resuscitation — ORS alone is insufficient."
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 10. DIAZEPAM - Febrile/Acute Seizures
# ══════════════════════════════════════════════════════════════════════════════
diaz_data = [
["Route", "Age / Weight", "Dose", "Volume / Notes", "Max dose"],
["Rectal (Diastat)", "< 5 yr", "0.5 mg/kg", "Rectal gel, round to 2.5 mg", "5 mg"],
["Rectal (Diastat)", "5–12 yr", "0.3 mg/kg", "Rectal gel, round to 5 mg", "10 mg"],
["IV / IO", "Neonate", "0.1–0.3 mg/kg IV", "5 mg/mL solution; give slowly over 2–3 min", "2 mg"],
["IV / IO", "Infant/Child", "0.1–0.3 mg/kg IV", "Dilute to 1 mg/mL; give over 2 min", "5 mg (<5yr)\n10 mg (>5yr)"],
["IV / IO", "Adolescent/Adult", "5–10 mg IV", "Give slowly; may repeat Q5 min", "30 mg"],
["Intranasal (off-label)", "All ages", "0.5 mg/kg IN", "Use IV formulation intranasally", "20 mg"],
]
cwdiaz = [W*0.13, W*0.17, W*0.16, W*0.30, W*0.17]
story.append(drug_block(
"DIAZEPAM",
"Valium · Diastat · Stesolid",
"Febrile seizures · Status epilepticus",
diaz_data, cwdiaz,
notes="IV formulation: 5 mg/mL. Rectal gel: 2.5 mg, 5 mg, 10 mg unit doses. "
"Lorazepam (0.1 mg/kg IV) preferred in hospital setting for status epilepticus.",
warn="RESPIRATORY DEPRESSION RISK. Have bag-mask ventilation immediately available. Do not give fast IV push."
))
# ══════════════════════════════════════════════════════════════════════════════
# 11. PAEDIATRIC FLUID RESUSCITATION (Bonus)
# ══════════════════════════════════════════════════════════════════════════════
fluid_data = [
["Indication", "Fluid", "Volume", "Rate", "Notes"],
["Septic shock / hypovolaemia", "0.9% NaCl or Ringers Lactate", "10–20 mL/kg bolus", "As fast as possible (over 5–15 min)", "Reassess after each bolus; max 40–60 mL/kg in first hour"],
["Maintenance (Holliday-Segar)", "0.9% NaCl + 5% Dextrose", "100 mL/kg/day (first 10 kg)", "4 mL/kg/hr (0–10 kg)", "Add 50 mL/kg/day for 10–20 kg; 20 mL/kg/day for >20 kg"],
["Maintenance", "—", "1000 mL + 50 mL/kg for each kg 10–20 kg", "—", "e.g. 20 kg child: 1500 mL/day = 62.5 mL/hr"],
["DKA", "0.9% NaCl", "10 mL/kg over 1hr, then deficit over 48hr", "Slow", "Avoid aggressive fluid — risk of cerebral oedema"],
]
cwfl = [W*0.18, W*0.18, W*0.20, W*0.20, W*0.24]
story.append(drug_block(
"PAEDIATRIC IV FLUID GUIDE",
"Emergency & Maintenance Fluids",
"Shock · Dehydration · Maintenance",
fluid_data, cwfl,
notes="Holliday-Segar formula: 4 mL/kg/hr for first 10 kg + 2 mL/kg/hr for 10–20 kg + 1 mL/kg/hr for >20 kg.",
warn="CAUTION in DKA, cardiac disease, hyponatraemia — seek senior/specialist guidance before fluid type and rate."
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# QUICK SUMMARY TABLE
# ══════════════════════════════════════════════════════════════════════════════
story.append(Table([[Paragraph(" QUICK SUMMARY — Common Paediatric Doses at a Glance", drug_hdr)]],
colWidths=[W]))
story[-1].setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_BLUE),
('TOPPADDING', (0,0), (-1,-1), 7),
('BOTTOMPADDING', (0,0), (-1,-1), 7),
('LEFTPADDING', (0,0), (-1,-1), 6),
]))
story.append(Spacer(1, 4))
summary_data = [
["Drug", "Dose (per kg)", "Formulation", "Usual mL/dose (10 kg child)", "Frequency", "Max/dose"],
["Paracetamol", "10–15 mg/kg", "120 mg/5 mL syrup", "4.2–6.3 mL", "Q4–6 hr", "1 g"],
["Ibuprofen", "5–10 mg/kg", "100 mg/5 mL susp", "2.5–5 mL", "Q6–8 hr", "400 mg"],
["Amoxicillin (std)", "25–50 mg/kg/day", "125 mg/5 mL susp", "10–20 mL/day ÷ Q8–12hr", "Q8–12 hr", "—"],
["Amoxicillin (high)", "80–90 mg/kg/day", "250 mg/5 mL susp", "16–18 mL/day ÷ Q8hr", "Q8 hr", "3 g/day"],
["Amox-Clav (std)", "25–45 mg/kg/day", "125/31.25 mg/5 mL", "10–18 mL/day ÷ Q12hr", "Q12 hr", "—"],
["Amox-Clav (high)", "90 mg/kg/day", "ES-600", "Per label", "Q8–12 hr", "3 g/day"],
["Cetirizine", "—", "5 mg/5 mL syrup", "2.5–5 mL", "Once daily", "10 mg"],
["Chlorpheniramine", "0.35 mg/kg/day", "2 mg/5 mL syrup", "4.4 mL/day ÷ Q6hr", "Q4–6 hr", "24 mg/day"],
["Prednisolone", "1–2 mg/kg/day", "5 mg/5 mL syrup", "10–20 mL/day", "Once–BID", "60 mg/day"],
["Salbutamol (neb)", "—", "5 mg/mL neb solution", "0.5 mL + 2 mL NS", "Q4–6 hr", "5 mg/neb"],
["Diazepam (rectal)", "0.3–0.5 mg/kg", "2.5/5/10 mg rectal gel", "Rectal gel unit dose", "Once; repeat × 1", "10 mg"],
]
cws = [W*0.15, W*0.12, W*0.16, W*0.21, W*0.12, W*0.12]
formatted_s = []
for i, row in enumerate(summary_data):
if i == 0:
formatted_s.append([Paragraph(str(c), cell_hdr) for c in row])
else:
formatted_s.append([Paragraph(str(c), cell_style) for c in row])
ts = Table(formatted_s, colWidths=cws, repeatRows=1)
ts.setStyle(drug_table_style(len(formatted_s), len(cws)))
story.append(ts)
story.append(Spacer(1, 10))
# ── FOOTER ───────────────────────────────────────────────────────────────────
story.append(HRFlowable(width=W, thickness=0.5, color=MID_BLUE))
story.append(Spacer(1, 4))
story.append(Paragraph(
"Source: Harriet Lane Handbook 23rd Ed. (Johns Hopkins Hospital) | "
"Doses shown for standard concentrations — verify formulation before administering | "
"This reference is a clinical aid only — clinical judgement and local formulary always take precedence.",
footer_style
))
# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF generated: {OUTPUT}")
cd /home/daytona/workspace/pediatric-drug-ref && python generate_pdf.py 2>&1
ls -lh /home/daytona/workspace/pediatric-drug-ref/Pediatric_Drug_Quick_Reference.pdf
Pediatric Drug Quick Reference
PDF Document · PDF
| Drug | Coverage |
|---|---|
| Paracetamol | Full age/weight table with mL in 120 mg/5 mL and 250 mg/5 mL suspensions |
| Ibuprofen | Doses from 6 months to adult with mL in 100 mg/5 mL suspension |
| Amoxicillin | Standard and high-dose regimens with mL volumes |
| Amoxicillin-Clavulanate | Standard and high-dose (Augmentin ES) with mL volumes |
| Cetirizine | Age-based with mL in 5 mg/5 mL syrup |
| Chlorpheniramine | Age-based with mL in 2 mg/5 mL syrup |
| Salbutamol | Nebuliser doses (mL to dilute) + MDI puffs via spacer |
| Prednisolone | By indication + weight-based mL table |
| ORS | Mild/moderate/severe dehydration volumes |
| Diazepam | Rectal gel + IV doses for seizures |
| IV Fluid Guide | Resuscitation + Holliday-Segar maintenance formula |
| Quick Summary Table | All drugs at a glance on the final page |