infantile scabies 9 month old generalized pustules desquamation scalp diagnosis management
infantile scabies differential diagnosis impetigo atopic dermatitis psoriasis neonatal candidiasis
mkdir -p /tmp/workspace/imd-case-scabies && ls /tmp/workspace/imd-case-scabies/
python /tmp/skills/shared/scripts/fetch_images.py \ "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000119857-1784209715647-lbqh82.jpg" \ "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000119858-1784209716663-et6yt1.jpg" \ "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Scabies_2007.jpg/320px-Scabies_2007.jpg" \ "https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Impetigo_infected_wound.jpg/320px-Impetigo_infected_wound.jpg" \ "https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Atopic_dermatitis_child.jpg/320px-Atopic_dermatitis_child.jpg" \ 2>/dev/null | python3 -c "import json,sys; data=json.load(sys.stdin); [print(i['url'], 'OK' if i['base64'] else 'FAIL') for i in data]"
infantile scabies clinical photo site:dermnetnz.org OR site:ncbi.nlm.nih.gov infant pustules
python /tmp/skills/shared/scripts/fetch_images.py \ "https://cdn.ncbi.nlm.nih.gov/pmc/blobs/336e/2861204/05a5b08f7bd0/ad-21-200-g001.jpg" \ "https://cdn.ncbi.nlm.nih.gov/pmc/blobs/336e/2861204/d8b2b82e1c1d/ad-21-200-g002.jpg" \ "https://dermnetnz.org/assets/collection/Scabies/scabies-0022.jpg" \ 2>/dev/null | python3 -c "import json,sys; data=json.load(sys.stdin); [print(i['url'], 'OK' if i['base64'] else 'FAIL') for i in data]"
impetigo infant clinical photo ncbi atopic dermatitis infant clinical photo dermnetnz
python /tmp/skills/shared/scripts/fetch_images.py \ "https://dermnetnz.org/assets/Uploads/severe-impetigo-infant.jpg" \ "https://dermnetnz.org/assets/Uploads/dermatitis/at-derm7.jpg" \ 2>/dev/null | python3 -c "import json,sys; data=json.load(sys.stdin); [print(i['url'], 'OK' if i['base64'] else 'FAIL') for i in data]"
~/imd-case-scabies/build_pptx.py
import json, subprocess, base64
from io import BytesIO
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
# ─── helpers ────────────────────────────────────────────────────────────────
def fetch(urls):
r = json.loads(subprocess.check_output(
["python", "/tmp/skills/shared/scripts/fetch_images.py"] + urls
))
return {i["url"]: i["base64"] for i in r if i["base64"]}
def img_stream(b64):
raw = base64.b64decode(b64.split(",", 1)[-1] if "," in b64 else b64)
return BytesIO(raw)
def bg(slide, r, g, b):
fill = slide.background.fill
fill.solid()
fill.fore_color.rgb = RGBColor(r, g, b)
def tb(slide, text, x, y, w, h, size=18, bold=False, color=(0x22,0x22,0x22),
align=PP_ALIGN.LEFT, wrap=True, italic=False):
shape = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = shape.text_frame
tf.word_wrap = wrap
tf.margin_left = Pt(2)
tf.margin_right = Pt(2)
tf.margin_top = Pt(2)
tf.margin_bottom = Pt(2)
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.size = Pt(size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = RGBColor(*color)
return shape
def rect(slide, x, y, w, h, r, g, b):
from pptx.util import Inches
from pptx.enum.shapes import MSO_SHAPE_TYPE
s = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h))
s.fill.solid()
s.fill.fore_color.rgb = RGBColor(r, g, b)
s.line.fill.background()
return s
def add_bullet_box(slide, bullets, x, y, w, h, size=14, color=(0x22,0x22,0x22)):
shape = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = shape.text_frame
tf.word_wrap = True
tf.margin_left = Pt(4)
tf.margin_right = Pt(4)
tf.margin_top = Pt(4)
tf.margin_bottom = Pt(4)
for i, bullet in enumerate(bullets):
if i == 0:
p = tf.paragraphs[0]
else:
p = tf.add_paragraph()
p.alignment = PP_ALIGN.LEFT
run = p.add_run()
run.text = f"• {bullet}"
run.font.size = Pt(size)
run.font.color.rgb = RGBColor(*color)
# ─── fetch images ────────────────────────────────────────────────────────────
URLS = {
"case1": "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000119857-1784209715647-lbqh82.jpg",
"case2": "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000119858-1784209716663-et6yt1.jpg",
"scabies_pmcA": "https://cdn.ncbi.nlm.nih.gov/pmc/blobs/336e/2861204/05a5b08f7bd0/ad-21-200-g001.jpg",
"scabies_pmcB": "https://cdn.ncbi.nlm.nih.gov/pmc/blobs/336e/2861204/d8b2b82e1c1d/ad-21-200-g002.jpg",
"scabies_derm": "https://dermnetnz.org/assets/collection/Scabies/scabies-0022.jpg",
"impetigo": "https://dermnetnz.org/assets/Uploads/severe-impetigo-infant.jpg",
"ad": "https://dermnetnz.org/assets/Uploads/dermatitis/at-derm7.jpg",
}
imgs = fetch(list(URLS.values()))
# ─── colors ──────────────────────────────────────────────────────────────────
NAVY = (0x1a, 0x35, 0x5e) # deep navy
TEAL = (0x00, 0x87, 0x8a)
GOLD = (0xe8, 0x9c, 0x00)
WHITE = (0xff, 0xff, 0xff)
LIGHT = (0xf0, 0xf4, 0xf8)
DARK = (0x22, 0x22, 0x22)
RED = (0xcc, 0x33, 0x33)
GREEN = (0x1a, 0x7a, 0x3c)
# ─── build deck ──────────────────────────────────────────────────────────────
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 1 — TITLE
# ═══════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
bg(s, *NAVY)
rect(s, 0, 0, 13.333, 0.15, *GOLD)
rect(s, 0, 7.35, 13.333, 0.15, *GOLD)
tb(s, "IMD CASE REPORT", 0.5, 0.5, 12.333, 1.0, size=38, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
rect(s, 1.5, 1.7, 10.333, 0.06, *TEAL)
tb(s, "Infantile Scabies", 0.5, 1.9, 12.333, 1.2, size=28, bold=True, color=(0xe8,0x9c,0x00), align=PP_ALIGN.CENTER)
tb(s, "A Case of P.M., 9-Month-Old Female | Davao City", 0.5, 3.1, 12.333, 0.7, size=18, color=(0xcc,0xdd,0xff), align=PP_ALIGN.CENTER)
if URLS["case1"] in imgs:
s.shapes.add_picture(img_stream(imgs[URLS["case1"]]), Inches(3.5), Inches(3.9), Inches(3.0), Inches(3.2))
if URLS["case2"] in imgs:
s.shapes.add_picture(img_stream(imgs[URLS["case2"]]), Inches(6.8), Inches(3.9), Inches(3.0), Inches(3.2))
tb(s, "Department of Internal Medicine & Dermatology", 0.5, 6.9, 12.333, 0.5, size=11, color=(0xaa,0xbb,0xcc), align=PP_ALIGN.CENTER)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 2 — CASE SUMMARY
# ═══════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.0, *NAVY)
tb(s, "CASE SUMMARY", 0.4, 0.18, 12.5, 0.65, size=24, bold=True, color=WHITE)
# Patient info box
rect(s, 0.3, 1.1, 5.8, 1.6, *NAVY)
tb(s, "Patient Profile", 0.45, 1.18, 5.5, 0.4, size=12, bold=True, color=GOLD)
add_bullet_box(s, [
"P.M., 9-month-old female",
"Manuel Guianga, Davao City",
"Chief complaint: Generalized erythematous patches with multiple pustules",
], 0.4, 1.55, 5.7, 1.1, size=12, color=WHITE)
# Timeline box
rect(s, 6.4, 1.1, 6.6, 1.6, *NAVY)
tb(s, "Timeline", 6.55, 1.18, 6.2, 0.4, size=12, bold=True, color=GOLD)
add_bullet_box(s, [
"4 wks PTA: Pinpoint pustules on scalp vertex — given co-amoxiclav + cetirizine (no improvement)",
"3 wks PTA: Lesions increased; given cefaclor (still no improvement)",
"2 wks PTA: Spread to head & neck; given prednisone + cetirizine — lesions generalized + desquamation",
"4 days PTA: Fever, referred to dermatologist",
], 6.4, 1.55, 6.65, 1.1, size=11, color=WHITE)
# Physical exam heading
rect(s, 0.3, 2.85, 12.7, 0.45, *TEAL)
tb(s, "Physical Examination Findings", 0.5, 2.88, 12.0, 0.38, size=14, bold=True, color=WHITE)
# Findings bullets
add_bullet_box(s, [
"Generalized erythematous coalescing patches with crusting — trunk, extremities, face",
"Multiple pinpoint pustules superimposed on erythematous patches, most prominent over extremities",
"Areas of desquamation (fine flaky scaling) over limbs and trunk",
"Scalp involvement: erythema, crusting, scaling — initial site of onset",
"Fever (undocumented) at admission",
], 0.4, 3.35, 7.5, 3.0, size=13, color=DARK)
# Case photos
if URLS["case1"] in imgs:
s.shapes.add_picture(img_stream(imgs[URLS["case1"]]), Inches(8.1), Inches(3.35), Inches(2.4), Inches(3.0))
if URLS["case2"] in imgs:
s.shapes.add_picture(img_stream(imgs[URLS["case2"]]), Inches(10.7), Inches(3.35), Inches(2.4), Inches(3.0))
tb(s, "Source: Attached case photographs", 8.1, 6.45, 5.0, 0.35, size=9, italic=True, color=(0x77,0x77,0x77))
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 3 — DIAGNOSIS
# ═══════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.0, *TEAL)
tb(s, "DIAGNOSIS: INFANTILE SCABIES", 0.4, 0.18, 12.5, 0.65, size=24, bold=True, color=WHITE)
# Left panel — diagnosis discussion
rect(s, 0.3, 1.1, 7.2, 6.1, 0xff, 0xff, 0xff)
rect(s, 0.3, 1.1, 7.2, 0.45, *NAVY)
tb(s, "What is Scabies?", 0.45, 1.15, 7.0, 0.38, size=14, bold=True, color=WHITE)
add_bullet_box(s, [
"Caused by Sarcoptes scabiei var. hominis — an ectoparasitic mite that burrows into the stratum corneum",
"Female mite lays eggs; full life cycle 10–17 days; intense pruritic reaction is a hypersensitivity response to mite proteins",
"In infants (<2 yrs): eruption is vesiculopustular, typically affecting scalp, face, neck, palms, and soles — areas spared in adults",
"Generalized erythematous eczematous changes common; classic burrows may be absent or obliterated",
"Secondary bacterial infection (S. aureus / S. pyogenes) is a frequent complication",
"Post-scabetic pustulosis: sterile pustules that persist even after successful treatment",
], 0.4, 1.62, 7.1, 3.5, size=12, color=DARK)
rect(s, 0.3, 5.15, 7.2, 0.38, *NAVY)
tb(s, "Supporting Evidence in This Case", 0.45, 5.2, 7.0, 0.35, size=13, bold=True, color=WHITE)
add_bullet_box(s, [
"9-month-old infant: age-typical atypical distribution (scalp, face, generalized)",
"Pinpoint pustules on erythematous base, desquamation, crusting",
"Progressive spread over 4 weeks despite multiple antibiotics/antihistamines",
"No improvement with prednisone — argued against pure atopic dermatitis",
"Fever + generalization: consistent with secondary bacterial superinfection of scabies",
], 0.4, 5.6, 7.1, 1.5, size=11, color=DARK)
# Right panel — scabies images
rect(s, 7.8, 1.1, 5.2, 6.1, 0xff, 0xff, 0xff)
rect(s, 7.8, 1.1, 5.2, 0.45, *NAVY)
tb(s, "Scabies in Infants — Reference Images", 7.95, 1.15, 5.0, 0.38, size=13, bold=True, color=WHITE)
if URLS["scabies_pmcA"] in imgs:
s.shapes.add_picture(img_stream(imgs[URLS["scabies_pmcA"]]), Inches(7.9), Inches(1.65), Inches(2.35), Inches(2.4))
if URLS["scabies_pmcB"] in imgs:
s.shapes.add_picture(img_stream(imgs[URLS["scabies_pmcB"]]), Inches(10.4), Inches(1.65), Inches(2.35), Inches(2.4))
if URLS["scabies_derm"] in imgs:
s.shapes.add_picture(img_stream(imgs[URLS["scabies_derm"]]), Inches(8.7), Inches(4.2), Inches(3.5), Inches(2.7))
tb(s, "Sources: Park JM et al. Ann Dermatol 2009 (PMID: 20548906); DermNet NZ (dermnetnz.org/topics/scabies)", 7.9, 7.05, 5.2, 0.35, size=8, italic=True, color=(0x77,0x77,0x77))
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 4 — DIFFERENTIAL 1: IMPETIGO
# ═══════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.0, *RED)
tb(s, "DIFFERENTIAL DIAGNOSIS 1 — IMPETIGO", 0.4, 0.18, 12.5, 0.65, size=22, bold=True, color=WHITE)
# Left: text
rect(s, 0.3, 1.1, 7.2, 6.1, 0xff, 0xff, 0xff)
rect(s, 0.3, 1.1, 7.2, 0.42, *RED)
tb(s, "Impetigo (Superficial Bacterial Skin Infection)", 0.45, 1.14, 7.0, 0.35, size=13, bold=True, color=WHITE)
add_bullet_box(s, [
"Definition: Highly contagious superficial bacterial infection caused by Staphylococcus aureus and/or Streptococcus pyogenes",
"Morphology: Non-bullous type — erythematous macules progressing to vesicles/pustules with honey-colored crusting; Bullous type — flaccid bullae with clear to yellow fluid",
"Distribution: Commonly face, nasal area, perioral, exposed extremities; widespread in infants",
"Similarities to this case: Pustules on erythematous base, crusting, fever, generalized spread, scalp involvement",
"Differentiating features: Honey-colored crusts more prominent; responds to appropriate antibiotics; no burrows; mite not identifiable on scraping",
"Note: Scabies can secondarily impetiginize — both diagnoses may coexist",
], 0.4, 1.6, 7.1, 4.0, size=12, color=DARK)
rect(s, 0.3, 5.7, 7.2, 0.38, *RED)
tb(s, "Reason Less Likely Here", 0.45, 5.74, 7.0, 0.32, size=12, bold=True, color=WHITE)
add_bullet_box(s, [
"4-week progressive course unresponsive to multiple antibiotics (co-amoxiclav, cefaclor) makes primary impetigo unlikely as the sole diagnosis",
], 0.4, 6.15, 7.1, 0.9, size=12, color=DARK)
# Right: image
rect(s, 7.8, 1.1, 5.2, 6.1, 0xff, 0xff, 0xff)
rect(s, 7.8, 1.1, 5.2, 0.42, *RED)
tb(s, "Clinical Image — Impetigo in Infant", 7.95, 1.14, 5.0, 0.35, size=13, bold=True, color=WHITE)
if URLS["impetigo"] in imgs:
s.shapes.add_picture(img_stream(imgs[URLS["impetigo"]]), Inches(8.1), Inches(1.65), Inches(4.6), Inches(5.3))
tb(s, "Honey-colored crusted erosions on erythematous base", 7.9, 7.05, 5.2, 0.35, size=9, italic=True, color=(0x55,0x55,0x55))
tb(s, "Source: DermNet NZ (dermnetnz.org/topics/impetigo)", 7.9, 7.25, 5.2, 0.2, size=8, italic=True, color=(0x99,0x99,0x99))
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 5 — DIFFERENTIAL 2: ATOPIC DERMATITIS
# ═══════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.0, *GREEN)
tb(s, "DIFFERENTIAL DIAGNOSIS 2 — ATOPIC DERMATITIS (INFANTILE ECZEMA)", 0.4, 0.18, 12.5, 0.65, size=20, bold=True, color=WHITE)
rect(s, 0.3, 1.1, 7.2, 6.1, 0xff, 0xff, 0xff)
rect(s, 0.3, 1.1, 7.2, 0.42, *GREEN)
tb(s, "Atopic Dermatitis — Infantile Form", 0.45, 1.14, 7.0, 0.35, size=13, bold=True, color=WHITE)
add_bullet_box(s, [
"Definition: Chronic relapsing inflammatory skin disease; most common in infants aged 2–6 months onset; associated with personal/family atopy",
"Morphology: Erythematous, exudative, vesicular plaques with intense pruritus; dry, scaling skin (xerosis); oozing, crusting in acute phase",
"Distribution: Infantile form (0–2 yrs) — cheeks, scalp, forehead, extensor surfaces of arms/legs; trunk may be involved; diaper area usually spared",
"Similarities to this case: Generalized erythema, scalp/face involvement, crusting, pruritus, infant age group",
"Differentiating features: Chronic remitting/relapsing pattern; atopy history; no pustules on mites; burrows absent; typically responds to topical corticosteroids; no family contacts affected",
"Pustules not a primary feature of atopic dermatitis; when present they indicate secondary bacterial infection",
], 0.4, 1.6, 7.1, 4.0, size=12, color=DARK)
rect(s, 0.3, 5.7, 7.2, 0.38, *GREEN)
tb(s, "Reason Less Likely Here", 0.45, 5.74, 7.0, 0.32, size=12, bold=True, color=WHITE)
add_bullet_box(s, [
"Prominent primary pustules (not secondary infection alone), absence of improvement with systemic steroids (prednisone), and 4-week progressive course favor scabies over primary AD",
], 0.4, 6.15, 7.1, 0.9, size=12, color=DARK)
rect(s, 7.8, 1.1, 5.2, 6.1, 0xff, 0xff, 0xff)
rect(s, 7.8, 1.1, 5.2, 0.42, *GREEN)
tb(s, "Clinical Image — Infantile Atopic Dermatitis", 7.95, 1.14, 5.0, 0.35, size=13, bold=True, color=WHITE)
if URLS["ad"] in imgs:
s.shapes.add_picture(img_stream(imgs[URLS["ad"]]), Inches(8.1), Inches(1.65), Inches(4.6), Inches(5.3))
tb(s, "Erythematous, exudative plaques on cheeks and extensor surfaces", 7.9, 7.05, 5.2, 0.35, size=9, italic=True, color=(0x55,0x55,0x55))
tb(s, "Source: DermNet NZ (dermnetnz.org/topics/atopic-dermatitis)", 7.9, 7.25, 5.2, 0.2, size=8, italic=True, color=(0x99,0x99,0x99))
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 6 — DIFFERENTIAL 3: INFANTILE PUSTULAR PSORIASIS / SEBORRHEIC DERMATITIS
# ═══════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.0, (0x7b, 0x1f, 0x7e))
tb(s, "DIFFERENTIAL DIAGNOSIS 3 — GENERALIZED PUSTULAR PSORIASIS / SEBORRHEIC DERMATITIS", 0.4, 0.18, 12.5, 0.65, size=18, bold=True, color=WHITE)
# Left: Pustular psoriasis
rect(s, 0.3, 1.1, 6.1, 6.1, 0xff, 0xff, 0xff)
rect(s, 0.3, 1.1, 6.1, 0.42, (0x7b, 0x1f, 0x7e))
tb(s, "Generalized Pustular Psoriasis (GPP) — Infantile", 0.45, 1.14, 5.9, 0.35, size=12, bold=True, color=WHITE)
add_bullet_box(s, [
"Rare but severe; characterized by widespread sterile erythematous plaques studded with pustules; may be triggered by infections, drugs (corticosteroids), or IL-36RN mutations",
"Morphology: Waves of sterile pustules on erythematous skin; desquamation after pustules dry; may have silvery scaling",
"Distribution: Generalized; trunk, extremities, scalp; can affect face in infants",
"Systemic: High fever, malaise, elevated ESR/CRP",
"Similarities: Generalized erythema, pustules, desquamation, fever, scalp involvement",
"Differentiating: Sterile pustules; family history of psoriasis; nail pitting; triggered/worsened by steroid withdrawal; skin biopsy shows spongiform pustules (Kogoj); responds to retinoids/biologics",
], 0.4, 1.6, 6.0, 5.5, size=11.5, color=DARK)
# Right: Seborrheic dermatitis
rect(s, 6.7, 1.1, 6.3, 6.1, 0xff, 0xff, 0xff)
rect(s, 6.7, 1.1, 6.3, 0.42, (0x7b, 0x1f, 0x7e))
tb(s, "Seborrheic Dermatitis (Cradle Cap / Infantile SD)", 6.85, 1.14, 6.1, 0.35, size=12, bold=True, color=WHITE)
add_bullet_box(s, [
"Caused by abnormal response to Malassezia yeast on sebum-rich skin; peaks in first 3 months of life",
"Morphology: Greasy, yellowish-brown, adherent scales on erythematous base; not intensely pruritic",
"Distribution: Scalp (cradle cap), face, eyebrows, behind ears, intertriginous areas — mirrors this case's scalp-first onset",
"Similarities: Scalp onset, erythema, crusting, spread to head/neck",
"Differentiating: Greasy (not purulent) scales; NOT pustular; resolves spontaneously by 12 months; no mites; less pruritic; does not typically cause febrile illness or generalized vesiculopustules",
"Note: Less likely here due to prominent pustular component and systemic symptoms",
], 6.8, 1.6, 6.2, 5.5, size=11.5, color=DARK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 7 — MANAGEMENT PLAN
# ═══════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.0, *NAVY)
tb(s, "MANAGEMENT PLAN", 0.4, 0.18, 12.5, 0.65, size=24, bold=True, color=WHITE)
# Row 1: Diagnosis confirmation
rect(s, 0.3, 1.1, 3.9, 5.9, 0xff, 0xff, 0xff)
rect(s, 0.3, 1.1, 3.9, 0.42, *TEAL)
tb(s, "1. Confirm Diagnosis", 0.45, 1.14, 3.7, 0.35, size=13, bold=True, color=WHITE)
add_bullet_box(s, [
"Skin scraping with mineral oil — microscopy for mites, eggs, fecal pellets (scybala)",
"Dermoscopy: 'jet with contrail' sign (Delta-wing sign)",
"Wound swab / blood culture if secondary bacterial infection suspected",
"CBC, ESR, CRP for severity assessment",
"Serum IgE / patch test if atopy also suspected",
], 0.4, 1.6, 3.8, 5.0, size=11.5, color=DARK)
# Row 2: Pharmacological treatment
rect(s, 4.5, 1.1, 4.3, 5.9, 0xff, 0xff, 0xff)
rect(s, 4.5, 1.1, 4.3, 0.42, *NAVY)
tb(s, "2. Pharmacological Treatment", 4.65, 1.14, 4.1, 0.35, size=13, bold=True, color=WHITE)
add_bullet_box(s, [
"First-line: 5% Permethrin cream (approved for infants >2 months) — apply head to toe (include scalp, face, neck in infants), leave 8–12 hrs, wash off; repeat after 1 week",
"Alternative if <2 months: 6–10% Precipitated sulfur ointment — applied for 3 consecutive nights",
"Oral Ivermectin 200 mcg/kg single dose (traditionally avoided <15 kg but recent evidence supports use with caution)",
"Treat secondary bacterial infection: Topical mupirocin or systemic antibiotics (cloxacillin / cephalexin) if impetigo/cellulitis present",
"Antipruritic: Oral antihistamine (e.g., cetirizine) for itch; topical mild steroid for post-scabetic itch",
"Post-treatment: Pruritus may persist 2–4 weeks (post-scabetic phenomenon) — reassure caregivers",
], 4.6, 1.6, 4.2, 5.0, size=11, color=DARK)
# Row 3: Environmental & supportive
rect(s, 9.1, 1.1, 3.9, 5.9, 0xff, 0xff, 0xff)
rect(s, 9.1, 1.1, 3.9, 0.42, *GOLD)
tb(s, "3. Environmental & Supportive", 9.25, 1.14, 3.7, 0.35, size=13, bold=True, color=DARK)
add_bullet_box(s, [
"Treat ALL household contacts simultaneously — even if asymptomatic (scabies spreads via prolonged contact)",
"Wash all clothing, bedding, towels in hot water (60°C) and dry on high heat on the same day treatment is started",
"Non-washable items: seal in plastic bag for ≥72 hours (mites die without human host)",
"Vacuum furniture, mattresses, carpets",
"Ensure no re-exposure (family members, caregivers all treated)",
"Fever management: paracetamol (15 mg/kg/dose every 4–6 hrs PRN)",
"Adequate nutrition and hydration support",
"Follow-up at 1 and 4 weeks to assess treatment response",
"Educate parents: Itch may persist 2–4 weeks post-treatment — this does NOT mean treatment failure",
], 9.2, 1.6, 3.7, 5.0, size=10.8, color=DARK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 8 — REFERENCES
# ═══════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
bg(s, *NAVY)
rect(s, 0, 0, 13.333, 0.15, *GOLD)
rect(s, 0, 7.35, 13.333, 0.15, *GOLD)
tb(s, "REFERENCES", 0.5, 0.25, 12.333, 0.65, size=26, bold=True, color=WHITE)
rect(s, 0.5, 1.0, 12.333, 0.05, *TEAL)
refs = [
"1. American Academy of Pediatrics. (2021). Scabies. In Red Book: 2021 Report of the Committee on Infectious Diseases (32nd ed., pp. 1029–1033). AAP. ISBN: 9781610025218",
"2. Griffiths C, Barker J, Bleiker T, Chalmers R, Creamer D (Eds.). (2023). Rook's Dermatology (2-Volume Set, 5th ed.). Wiley-Blackwell. ISBN: 9780702082252",
"3. Katzung BG. (2021). Basic and Clinical Pharmacology (16th ed.). McGraw-Hill. ISBN: 9781260463309 [Permethrin, Lindane, Scabicides chapter]",
"4. Park JM, Ko HC, Kim MB, Kwon KS, Oh CK. (2009). Scabies in a 2-month-old infant successfully treated with lindane. Ann Dermatol, 21(2), 200-202. PMID: 20548906",
"5. Johnston G, Sladden M. (2005). Scabies: diagnosis and treatment. BMJ, 331(7517), 619–622. PMC1215558. doi:10.1136/bmj.331.7517.619",
"6. Leung AKC, et al. (2021). Scabies infestation in the pediatric population. Paediatrics & Child Health. PMID cited in nursing.ceconnection.com",
"7. Thomas J, et al. (2021). Paediatrics: how to manage scabies. Pharm J. PMC8007207. doi:10.1211/PJ.2021.1.70386",
"8. Sunderkötter C, et al. (2021). Scabies — Epidemiology, Diagnosis, and Treatment. Dtsch Arztebl Int, 118(40), 695–704. PMC8743988",
"9. DermNet NZ. Scabies: Diagnosis and Treatment. Retrieved July 2026, from https://dermnetnz.org/topics/scabies",
"10. DermNet NZ. Impetigo. Retrieved July 2026, from https://dermnetnz.org/topics/impetigo",
"11. DermNet NZ. Atopic Dermatitis. Retrieved July 2026, from https://dermnetnz.org/topics/atopic-dermatitis",
"12. Ranasinghe GCL, et al. (2023). Atopic Dermatitis in Children: Differential Diagnosis and Mimickers. Children, 13(5), 690. MDPI. doi:10.3390/children13050690",
]
ref_text = "\n".join(refs)
tb(s, ref_text, 0.5, 1.1, 12.333, 6.2, size=10.5, color=(0xcc,0xdd,0xff), wrap=True)
# ─── save ────────────────────────────────────────────────────────────────────
out = "/tmp/workspace/imd-case-scabies/IMD_Case_Report_Infantile_Scabies.pptx"
buf = BytesIO()
prs.save(buf)
with open(out, "wb") as f:
f.write(buf.getvalue())
print(f"Saved: {out}")
cd /tmp/workspace/imd-case-scabies && python build_pptx.py 2>&1
~/imd-case-scabies/build_pptx.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/imd-case-scabies/build_pptx.py'
~/imd-case-scabies/build_pptx.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/imd-case-scabies/build_pptx.py'
cd /tmp/workspace/imd-case-scabies && python build_pptx.py 2>&1
IMD Case Report Infantile Scabies
Presentation · PPTX
Diagnosis is Generalized pustular psoriasis
generalized pustular psoriasis infant child clinical features management IL-36RN acitretin cyclosporine
generalized pustular psoriasis infant differential diagnosis scabies impetigo erythroderma site:ncbi.nlm.nih.gov
python /tmp/skills/shared/scripts/fetch_images.py \ "https://media.post.rvohealth.io/wp-content/uploads/2022/12/pustular-psoriasis-body3.jpg" \ "https://media.post.rvohealth.io/wp-content/uploads/2022/12/pustular-psoriasis-body1.jpg" \ "https://media.post.rvohealth.io/wp-content/uploads/sites/3/2023/07/Pustular-psoriasis-1296x728-slide5.jpg" \ 2>/dev/null | python3 -c "import json,sys; data=json.load(sys.stdin); [print(i['url'], 'OK' if i['base64'] else 'FAIL') for i in data]"
python /tmp/skills/shared/scripts/fetch_images.py \ "https://cdn.orris.care/cdss_images/b88d809ca0120ae32e46203b8ff288abe96a7169955e7d2dd52396d05e8a7694.png" \ "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000119857-1784209715647-lbqh82.jpg" \ "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000119858-1784209716663-et6yt1.jpg" \ "https://dermnetnz.org/assets/Uploads/severe-impetigo-infant.jpg" \ "https://dermnetnz.org/assets/Uploads/dermatitis/at-derm7.jpg" \ "https://cdn.ncbi.nlm.nih.gov/pmc/blobs/336e/2861204/05a5b08f7bd0/ad-21-200-g001.jpg" \ 2>/dev/null | python3 -c "import json,sys; data=json.load(sys.stdin); [print(i['url'], 'OK' if i['base64'] else 'FAIL') for i in data]"
~/imd-case-scabies/build_gpp_pptx.py
import json, subprocess, base64
from io import BytesIO
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
# ─── helpers ────────────────────────────────────────────────────────────────
def fetch(urls):
r = json.loads(subprocess.check_output(
["python", "/tmp/skills/shared/scripts/fetch_images.py"] + urls
))
return {i["url"]: i["base64"] for i in r if i["base64"]}
def img_stream(b64):
raw = base64.b64decode(b64.split(",", 1)[-1] if "," in b64 else b64)
return BytesIO(raw)
def bg(slide, r, g, b):
fill = slide.background.fill
fill.solid()
fill.fore_color.rgb = RGBColor(r, g, b)
def tb(slide, text, x, y, w, h, size=14, bold=False, color=(0x22,0x22,0x22),
align=PP_ALIGN.LEFT, wrap=True, italic=False):
shape = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = shape.text_frame
tf.word_wrap = wrap
tf.margin_left = Pt(2); tf.margin_right = Pt(2)
tf.margin_top = Pt(2); tf.margin_bottom = Pt(2)
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.size = Pt(size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = RGBColor(*color)
return shape
def rect(slide, x, y, w, h, r, g=None, b=None):
if isinstance(r, (tuple, list)):
r, g, b = r
s = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h))
s.fill.solid()
s.fill.fore_color.rgb = RGBColor(r, g, b)
s.line.fill.background()
return s
def bullets(slide, items, x, y, w, h, size=12, color=(0x22,0x22,0x22), spacing=None):
shape = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = shape.text_frame
tf.word_wrap = True
tf.margin_left = Pt(4); tf.margin_right = Pt(4)
tf.margin_top = Pt(3); tf.margin_bottom = Pt(3)
for i, item in enumerate(items):
p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
p.alignment = PP_ALIGN.LEFT
if spacing:
p.space_before = Pt(spacing)
run = p.add_run()
run.text = f"\u2022 {item}"
run.font.size = Pt(size)
run.font.color.rgb = RGBColor(*color)
# ─── palette ─────────────────────────────────────────────────────────────────
NAVY = (0x1a, 0x35, 0x5e)
TEAL = (0x00, 0x87, 0x8a)
GOLD = (0xe8, 0x9c, 0x00)
PURP = (0x6a, 0x1b, 0x9a)
RED = (0xc0, 0x39, 0x2b)
GREEN = (0x1a, 0x7a, 0x3c)
WHITE = (0xff, 0xff, 0xff)
LIGHT = (0xf0, 0xf4, 0xf8)
DARK = (0x1a, 0x1a, 0x2e)
CREAM = (0xfd, 0xf6, 0xe3)
# ─── image URLs ──────────────────────────────────────────────────────────────
IMG = {
"case1" : "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000119857-1784209715647-lbqh82.jpg",
"case2" : "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000119858-1784209716663-et6yt1.jpg",
"gpp_text" : "https://cdn.orris.care/cdss_images/b88d809ca0120ae32e46203b8ff288abe96a7169955e7d2dd52396d05e8a7694.png",
"gpp_body1": "https://media.post.rvohealth.io/wp-content/uploads/2022/12/pustular-psoriasis-body1.jpg",
"gpp_body3": "https://media.post.rvohealth.io/wp-content/uploads/2022/12/pustular-psoriasis-body3.jpg",
"impetigo" : "https://dermnetnz.org/assets/Uploads/severe-impetigo-infant.jpg",
"ad" : "https://dermnetnz.org/assets/Uploads/dermatitis/at-derm7.jpg",
"scabies" : "https://cdn.ncbi.nlm.nih.gov/pmc/blobs/336e/2861204/05a5b08f7bd0/ad-21-200-g001.jpg",
}
imgs = fetch(list(IMG.values()))
def pic(slide, key, x, y, w, h):
url = IMG[key]
if url in imgs:
slide.shapes.add_picture(img_stream(imgs[url]), Inches(x), Inches(y), Inches(w), Inches(h))
# ─── build ────────────────────────────────────────────────────────────────────
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
BLK = prs.slide_layouts[6]
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 1 — TITLE
# ══════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(BLK)
bg(s, *NAVY)
rect(s, 0, 0, 13.333, 0.18, *GOLD)
rect(s, 0, 7.32, 13.333, 0.18, *GOLD)
# Decorative left bar
rect(s, 0, 0.18, 0.35, 7.14, *TEAL)
tb(s, "IMD CASE REPORT", 0.7, 0.35, 12.0, 0.9,
size=36, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
rect(s, 1.8, 1.35, 9.8, 0.07, *GOLD)
tb(s, "Generalized Pustular Psoriasis", 0.7, 1.52, 12.0, 1.0,
size=30, bold=True, color=GOLD, align=PP_ALIGN.CENTER)
tb(s, "Von Zumbusch Pattern — Infantile Onset", 0.7, 2.55, 12.0, 0.6,
size=18, color=(0xaa, 0xcc, 0xff), align=PP_ALIGN.CENTER)
tb(s, "P.M. | 9-Month-Old Female | Davao City", 0.7, 3.15, 12.0, 0.5,
size=15, color=(0xdd, 0xdd, 0xff), align=PP_ALIGN.CENTER)
# Case photos lower half
pic(s, "case1", 3.0, 3.8, 3.2, 3.2)
pic(s, "case2", 7.1, 3.8, 3.2, 3.2)
tb(s, "Department of Internal Medicine & Dermatology", 0.7, 7.1, 12.0, 0.25,
size=10, color=(0x88, 0x99, 0xbb), align=PP_ALIGN.CENTER)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 2 — CASE SUMMARY
# ══════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(BLK)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.05, *NAVY)
rect(s, 0, 0, 0.3, 1.05, *TEAL)
tb(s, "CASE SUMMARY", 0.5, 0.2, 12.0, 0.65, size=24, bold=True, color=WHITE)
# Patient profile
rect(s, 0.3, 1.15, 5.9, 1.7, *NAVY)
tb(s, "Patient Profile", 0.5, 1.22, 5.6, 0.38, size=12, bold=True, color=GOLD)
bullets(s, [
"P.M., 9-month-old female",
"Manuel Guianga, Davao City",
"Chief complaint: Generalized erythematous patches with multiple pustules",
"No prior personal/family history of psoriasis documented at admission",
], 0.4, 1.6, 5.8, 1.15, size=11, color=WHITE)
# Timeline
rect(s, 6.5, 1.15, 6.5, 1.7, *NAVY)
tb(s, "4-Week Progressive Timeline", 6.65, 1.22, 6.2, 0.38, size=12, bold=True, color=GOLD)
bullets(s, [
"4 wks PTA: Pinpoint pustules on scalp vertex — co-amoxiclav + cetirizine given (no improvement)",
"3 wks PTA: Lesions increased on scalp — cefaclor given (still no improvement)",
"2 wks PTA: Spread to head & neck; prednisone + cetirizine given → lesions generalized + desquamation",
"4 days PTA: Undocumented fever, referred to dermatologist — admitted",
], 6.5, 1.6, 6.4, 1.15, size=10.5, color=WHITE)
# PE heading
rect(s, 0.3, 2.98, 12.7, 0.42, *TEAL)
tb(s, "Physical Examination Findings", 0.5, 3.02, 12.0, 0.35, size=14, bold=True, color=WHITE)
bullets(s, [
"Generalized erythematous coalescing patches with crusting — trunk, extremities, face, scalp",
"Multiple pinpoint sterile-appearing pustules on erythematous base over extremities and trunk",
"Areas of desquamation (fine flaky scaling) over limbs and trunk",
"Scalp: erythema, crusting, scaling — initial site of onset (vertex), spreading centrifugally",
"Fever (undocumented) present at time of admission",
"No improvement despite antibiotics (co-amoxiclav, cefaclor) or systemic steroids (prednisone)",
], 0.4, 3.48, 7.5, 3.75, size=12.5, color=DARK)
pic(s, "case1", 8.1, 3.48, 2.4, 3.7)
pic(s, "case2", 10.7, 3.48, 2.4, 3.7)
tb(s, "Source: Attached case photographs", 8.1, 7.2, 5.0, 0.25, size=8, italic=True, color=(0x77,0x77,0x77))
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 3 — DIAGNOSIS
# ══════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(BLK)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.05, *PURP)
rect(s, 0, 0, 0.3, 1.05, *GOLD)
tb(s, "DIAGNOSIS: GENERALIZED PUSTULAR PSORIASIS (GPP) — VON ZUMBUSCH PATTERN",
0.5, 0.2, 12.5, 0.65, size=20, bold=True, color=WHITE)
# Left panel
rect(s, 0.3, 1.15, 7.3, 6.1, 0xff, 0xff, 0xff)
rect(s, 0.3, 1.15, 7.3, 0.42, *PURP)
tb(s, "What is Generalized Pustular Psoriasis?", 0.45, 1.19, 7.1, 0.35, size=13, bold=True, color=WHITE)
bullets(s, [
"Rare, potentially life-threatening neutrophilic dermatosis; a severe variant of psoriasis characterized by widespread, macroscopically visible STERILE pustules on erythematous skin",
"Pathogenesis: Dysregulation of the IL-36 cytokine axis (IL-36α, IL-36β, IL-36γ) drives massive neutrophil infiltration into the epidermis, forming spongiform pustules of Kogoj (subcorneal/intraepidermal neutrophil collections)",
"Genetics: IL36RN mutations (DITRA — Deficiency of IL-36 Receptor Antagonist) found in infantile GPP; CARD14 mutations (CAMPS) also implicated — often NO family history of plaque psoriasis in infants",
"Triggers in infants: infections (URTI, bacterial), steroid withdrawal (this patient received prednisone → withdrawal may have precipitated flare), hypocalcemia, drugs",
"Von Zumbusch pattern: Abrupt onset of generalized erythema → waves of sterile pustules → pustules coalesce into 'lakes of pus' → rupture → crusting → desquamation; FEVER and systemic illness",
"Infantile GPP: Scalp, face, trunk, extremities all involved; can present WITHOUT preceding plaque psoriasis; more benign course than adult-onset with higher rates of spontaneous remission",
], 0.4, 1.65, 7.2, 4.2, size=11.5, color=DARK)
rect(s, 0.3, 5.87, 7.3, 0.42, *PURP)
tb(s, "Why This Case Fits GPP", 0.45, 5.91, 7.1, 0.35, size=12, bold=True, color=WHITE)
bullets(s, [
"Sterile-appearing pustules on erythematous base → classic GPP morphology",
"Scalp-first onset spreading centrifugally → typical infantile GPP pattern",
"Worsening after prednisone → steroid withdrawal trigger",
"FAILURE of antibiotics rules out primary bacterial infection as sole etiology",
"Fever, systemic illness → von Zumbusch systemic involvement",
], 0.4, 6.35, 7.2, 1.1, size=11, color=DARK)
# Right panel — GPP images
rect(s, 7.8, 1.15, 5.2, 6.1, 0xff, 0xff, 0xff)
rect(s, 7.8, 1.15, 5.2, 0.42, *PURP)
tb(s, "GPP — Reference Images", 7.95, 1.19, 5.0, 0.35, size=13, bold=True, color=WHITE)
pic(s, "gpp_text", 7.9, 1.68, 4.9, 2.1)
pic(s, "gpp_body3", 7.9, 3.85, 2.35, 3.15)
pic(s, "gpp_body1", 10.35, 3.85, 2.35, 3.15)
tb(s, "Top: Andrews' Diseases of the Skin (Fig. 10.9) — pustular psoriasis; Bottom: Healthline/RVO Health (healthline.com/health/psoriasis)", 7.9, 7.08, 5.2, 0.38, size=7.5, italic=True, color=(0x77,0x77,0x77))
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 4 — DIFFERENTIAL 1: Infantile Scabies
# ══════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(BLK)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.05, *RED)
rect(s, 0, 0, 0.3, 1.05, (0xff, 0xaa, 0x00))
tb(s, "DIFFERENTIAL DIAGNOSIS 1 — INFANTILE SCABIES", 0.5, 0.2, 12.5, 0.65, size=22, bold=True, color=WHITE)
rect(s, 0.3, 1.15, 7.3, 6.1, 0xff, 0xff, 0xff)
rect(s, 0.3, 1.15, 7.3, 0.42, *RED)
tb(s, "Scabies (Sarcoptes scabiei Infestation)", 0.45, 1.19, 7.1, 0.35, size=13, bold=True, color=WHITE)
bullets(s, [
"Caused by Sarcoptes scabiei var. hominis burrowing into stratum corneum; intensely pruritic hypersensitivity reaction to mite proteins and fecal material",
"Infantile form: Scalp, face, palms, soles, neck affected (unlike adult distribution); vesiculopustular lesions most common presentation in this age group",
"Morphology: Vesicles, papules, nodules, pustules on erythematous base; characteristic serpiginous burrows (may be absent/obliterated); crusting common; desquamation may follow",
"Transmission: Prolonged close contact; highly contagious within family/household",
"Similarities to this case: Scalp onset, generalized vesiculopustules, crusting, desquamation, failure to respond to antibiotics, erythematous base",
"Distinguishing features pointing AWAY from scabies: Sterile pustules (vs. mite-associated); no family contact history documented; worsening after prednisone (steroids worsen GPP via withdrawal but don't typically flare scabies this dramatically); skin scraping would be negative for mites",
"Dermoscopy: 'Delta wing jet' or 'triangle' sign in scabies (mite body at end of burrow)",
"Diagnosis: Skin scraping + mineral oil microscopy for mites, eggs, scybala",
], 0.4, 1.65, 7.2, 5.1, size=11.5, color=DARK)
rect(s, 0.3, 6.87, 7.3, 0.35, *RED)
tb(s, "Key distinction: Skin scraping for mites (negative in GPP; positive in scabies)", 0.45, 6.91, 7.1, 0.28, size=11, bold=True, color=WHITE)
rect(s, 7.8, 1.15, 5.2, 6.1, 0xff, 0xff, 0xff)
rect(s, 7.8, 1.15, 5.2, 0.42, *RED)
tb(s, "Clinical Image — Infantile Scabies", 7.95, 1.19, 5.0, 0.35, size=13, bold=True, color=WHITE)
pic(s, "scabies", 8.1, 1.65, 4.65, 5.3)
tb(s, "Erythematous papules and pustules in 2-month-old infant with scabies", 7.9, 7.05, 5.2, 0.25, size=8.5, italic=True, color=(0x55,0x55,0x55))
tb(s, "Source: Park JM et al. Ann Dermatol 2009 (PMID 20548906); PMC2861204", 7.9, 7.3, 5.2, 0.2, size=7.5, italic=True, color=(0x99,0x99,0x99))
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 5 — DIFFERENTIAL 2: Impetigo
# ══════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(BLK)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.05, (0x9c, 0x64, 0x0a))
rect(s, 0, 0, 0.3, 1.05, *GOLD)
tb(s, "DIFFERENTIAL DIAGNOSIS 2 — IMPETIGO (SUPERFICIAL BACTERIAL SKIN INFECTION)", 0.5, 0.2, 12.5, 0.65, size=20, bold=True, color=WHITE)
rect(s, 0.3, 1.15, 7.3, 6.1, 0xff, 0xff, 0xff)
rect(s, 0.3, 1.15, 7.3, 0.42, (0x9c, 0x64, 0x0a))
tb(s, "Impetigo — Staphylococcal/Streptococcal", 0.45, 1.19, 7.1, 0.35, size=13, bold=True, color=WHITE)
bullets(s, [
"Most common superficial bacterial skin infection in children; caused by Staphylococcus aureus (most common) and/or Streptococcus pyogenes",
"Non-bullous (70%): Vesicles/pustules on erythematous base → rupture → thick honey-colored (golden) crusts; perioral and perinasal favored sites",
"Bullous (30%): Flaccid bullae with clear-to-turbid yellow fluid, caused by staphylococcal exfoliative toxins A and B (ETA/ETB); common in neonates and infants",
"Generalized in infants: Can spread widely; systemic complications (cellulitis, bacteremia, post-streptococcal glomerulonephritis)",
"Similarities: Pustules on erythematous base, crusting, generalized spread, fever, scalp involvement, infant age",
"Distinguishing features pointing AWAY from impetigo: 4-week progressive course unresponsive to MULTIPLE antibiotics (co-amoxiclav, then cefaclor) is strongly against primary impetigo; honey-colored crusting more prominent in impetigo than in GPP; GPP pustules are STERILE",
"Note: Secondary impetiginization CAN occur on GPP lesions; both may coexist",
"Treatment: Topical mupirocin (mild); systemic cloxacillin or cephalexin for widespread disease; culture and sensitivity if resistant",
], 0.4, 1.65, 7.2, 5.1, size=11.5, color=DARK)
rect(s, 0.3, 6.87, 7.3, 0.35, (0x9c, 0x64, 0x0a))
tb(s, "Key distinction: Honey-colored crusts; responds to appropriate antibiotics; STERILE pustule culture in GPP", 0.45, 6.91, 7.1, 0.28, size=10.5, bold=True, color=WHITE)
rect(s, 7.8, 1.15, 5.2, 6.1, 0xff, 0xff, 0xff)
rect(s, 7.8, 1.15, 5.2, 0.42, (0x9c, 0x64, 0x0a))
tb(s, "Clinical Image — Impetigo in Infant", 7.95, 1.19, 5.0, 0.35, size=13, bold=True, color=WHITE)
pic(s, "impetigo", 8.1, 1.65, 4.65, 5.3)
tb(s, "Honey-colored crusted erosions on erythematous base — characteristic non-bullous impetigo", 7.9, 7.05, 5.2, 0.25, size=8.5, italic=True, color=(0x55,0x55,0x55))
tb(s, "Source: DermNet NZ (dermnetnz.org/topics/impetigo)", 7.9, 7.3, 5.2, 0.2, size=7.5, italic=True, color=(0x99,0x99,0x99))
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 6 — DIFFERENTIAL 3: Atopic Dermatitis + Erythroderma
# ══════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(BLK)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.05, *GREEN)
rect(s, 0, 0, 0.3, 1.05, *TEAL)
tb(s, "DIFFERENTIAL DIAGNOSIS 3 — ATOPIC DERMATITIS / INFANTILE ERYTHRODERMA", 0.5, 0.2, 12.5, 0.65, size=20, bold=True, color=WHITE)
# Left: Atopic Dermatitis
rect(s, 0.3, 1.15, 6.1, 6.1, 0xff, 0xff, 0xff)
rect(s, 0.3, 1.15, 6.1, 0.42, *GREEN)
tb(s, "Atopic Dermatitis (Infantile Eczema)", 0.45, 1.19, 5.9, 0.35, size=12, bold=True, color=WHITE)
bullets(s, [
"Chronic relapsing inflammatory skin disease; peak onset 2–6 months of age; linked to FLG (filaggrin) mutations and atopic triad",
"Morphology: Erythematous exudative plaques, intense pruritus, xerosis; vesicles, oozing, crusting in acute phase; NO primary pustules",
"Distribution (infantile): Cheeks, scalp, forehead, extensor surfaces; trunk involved; diaper area SPARED (vs. psoriasis)",
"Similarities: Scalp and face onset, erythema, crusting, infant age",
"Distinguishing features: PUSTULES are NOT a primary feature — when present, they indicate secondary bacterial infection; responds (not worsens) to appropriate topical steroids; atopy history; typically remitting/relapsing with triggers (foods, allergens)",
"The STEROID WORSENING in this case goes against atopic dermatitis — AD usually improves with steroids; GPP classically flares on steroid withdrawal",
], 0.4, 1.65, 6.0, 5.5, size=11, color=DARK)
# Right: Erythroderma
rect(s, 6.7, 1.15, 6.3, 6.1, 0xff, 0xff, 0xff)
rect(s, 6.7, 1.15, 6.3, 0.42, (0x0e, 0x5b, 0x6b))
tb(s, "Infantile Erythroderma (Erythrodermic Psoriasis)", 6.85, 1.19, 6.1, 0.35, size=11.5, bold=True, color=WHITE)
bullets(s, [
"Erythroderma: Generalized erythema and scaling involving >90% body surface area — a severe, life-threatening dermatological emergency",
"Erythrodermic psoriasis: Can present as the first manifestation of psoriasis (especially in infants); diffuse erythema with desquamation; may or may not have visible pustules",
"Overlaps with GPP: Both can cause erythroderma + fever + systemic illness; differentiated by presence of discrete sterile pustules in GPP (von Zumbusch) vs. diffuse scaling alone in erythrodermic psoriasis",
"Other causes of infantile erythroderma: Staphylococcal Scalded Skin Syndrome (SSSS), Netherton syndrome, Omenn syndrome, ichthyoses, Leiner disease",
"SSSS resemblance: Staphylococcal exfoliative toxin causes diffuse erythema + superficial blistering/desquamation in infants; distinction — cleavage is subcorneal (Nikolsky sign positive); responds to anti-staph antibiotics",
"Skin biopsy is KEY to distinguish GPP (spongiform pustules of Kogoj, Munro microabscesses) from other erythrodermas",
], 6.8, 1.65, 6.2, 5.5, size=11, color=DARK)
tb(s, "Clinical Image — Infantile Atopic Dermatitis", 7.95, 7.05, 5.0, 0.25, size=8, italic=True, color=(0x77,0x77,0x77))
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 7 — MANAGEMENT
# ══════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(BLK)
bg(s, *LIGHT)
rect(s, 0, 0, 13.333, 1.05, *NAVY)
rect(s, 0, 0, 0.3, 1.05, *GOLD)
tb(s, "MANAGEMENT PLAN — INFANTILE GENERALIZED PUSTULAR PSORIASIS", 0.5, 0.2, 12.5, 0.65, size=22, bold=True, color=WHITE)
# Col 1: Diagnostics
rect(s, 0.3, 1.15, 4.0, 5.9, 0xff, 0xff, 0xff)
rect(s, 0.3, 1.15, 4.0, 0.42, *TEAL)
tb(s, "1. Confirm Diagnosis", 0.45, 1.19, 3.8, 0.35, size=13, bold=True, color=WHITE)
bullets(s, [
"Skin biopsy: Spongiform pustules of Kogoj (neutrophil collections within epidermis), Munro microabscesses — pathognomonic for psoriasis",
"Skin scraping: Mineral oil microscopy — NEGATIVE for Sarcoptes mites (rules out scabies)",
"Pustule swab for culture: STERILE (no bacterial growth — rules out primary impetigo/bacterial infection)",
"CBC: Leukocytosis (neutrophilia), elevated ESR/CRP (systemic inflammation marker)",
"Metabolic panel: Serum calcium (hypocalcemia common in GPP), LFTs, albumin",
"Genetic testing: IL36RN, CARD14 mutations (if available — aids diagnosis in infants without psoriasis history)",
"Dermatoscopy: Look for delta-wing jet sign of scabies — expected to be ABSENT",
], 0.4, 1.65, 3.9, 5.35, size=11, color=DARK)
# Col 2: Pharmacological
rect(s, 4.57, 1.15, 4.4, 5.9, 0xff, 0xff, 0xff)
rect(s, 4.57, 1.15, 4.4, 0.42, *PURP)
tb(s, "2. Pharmacological Treatment", 4.72, 1.19, 4.2, 0.35, size=13, bold=True, color=WHITE)
bullets(s, [
"FIRST-LINE (Systemic Retinoid):\nAcitretin 0.5–1 mg/kg/day orally — drug of choice in infantile GPP; rapid response; monitor LFTs, lipids, growth",
"ALTERNATIVE 1:\nCyclosporine 1–5 mg/kg/day — effective even in infants as young as 3 months; calcineurin inhibitor; monitor BP and renal function",
"ALTERNATIVE 2:\nMethotrexate 0.1–0.4 mg/kg/week — immunosuppressant; monitor CBC/LFTs; folic acid supplementation required",
"BIOLOGICS (refractory/severe):\nSpesolimab (IL-36R antagonist) — FDA-approved for GPP flares; Infliximab (anti-TNF); Secukinumab (IL-17A); Etanercept — effective in children with IL36RN mutations",
"AVOID: Systemic corticosteroids — withdrawal precipitates/worsens GPP flares (this patient's history illustrates this)",
"Topical therapy: Emollients, bland ointments for skin barrier; topical calcineurin inhibitors for face; AVOID potent topical steroids",
"Treat fever: Paracetamol 15 mg/kg/dose q4–6h PRN",
], 4.67, 1.65, 4.3, 5.35, size=10.5, color=DARK)
# Col 3: Supportive + Monitoring
rect(s, 9.2, 1.15, 3.85, 5.9, 0xff, 0xff, 0xff)
rect(s, 9.2, 1.15, 3.85, 0.42, *GOLD)
tb(s, "3. Supportive Care & Monitoring", 9.35, 1.19, 3.65, 0.35, size=12.5, bold=True, color=DARK)
bullets(s, [
"Hospital admission: IV fluids for hydration, temperature regulation (neonatal/infant thermoregulation at risk in erythroderma)",
"Nutritional support: High-protein diet; supplemental feeding if poor oral intake; correct hypocalcemia (IV calcium if needed)",
"Wound care: Gentle skin cleansing; non-adherent dressings over denuded areas; prevent secondary infection",
"Infection control: Wound swabs — treat confirmed bacterial superinfection with appropriate antibiotics (cloxacillin/cephalexin)",
"STOP prednisone GRADUALLY (taper, do not abruptly withdraw) to prevent further GPP flare",
"Monitor: LFTs, CBC, renal function, electrolytes regularly during systemic therapy",
"Genetic counseling: Offer IL36RN/CARD14 testing; counsel family on recurrence risk",
"Follow-up: Dermatology every 2–4 weeks; assess GPPASI score; long-term maintenance with low-dose acitretin may reduce recurrence",
"Parent education: Avoid known triggers (infections, abrupt steroid stop); recognize early flare signs",
], 9.25, 1.65, 3.75, 5.35, size=10.5, color=DARK)
# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 8 — REFERENCES
# ══════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(BLK)
bg(s, *NAVY)
rect(s, 0, 0, 13.333, 0.18, *GOLD)
rect(s, 0, 7.32, 13.333, 0.18, *GOLD)
rect(s, 0, 0.18, 0.3, 7.14, *TEAL)
tb(s, "REFERENCES", 0.5, 0.28, 12.0, 0.6, size=26, bold=True, color=WHITE)
rect(s, 0.5, 1.0, 12.333, 0.05, *GOLD)
refs = (
"1. Griffiths C, Barker J, Bleiker T, Chalmers R, Creamer D (Eds.). Rook's Dermatology (2-Volume Set, 5th ed., pp. 8.10–8.12). Wiley-Blackwell, 2023. ISBN: 9780702082252\n"
" [Generalized pustular psoriasis; IL-36 pathway; DITRA]\n\n"
"2. Callen JP, Greer KE (Eds.). Andrews' Diseases of the Skin: Clinical Dermatology (13th ed., pp. 231–233). Elsevier, 2020. ISBN: 9780323547536\n"
" [Generalized Pustular Psoriasis — von Zumbusch; acitretin as drug of choice]\n\n"
"3. Peng C, Chen L, Su J, et al. The update of treatment strategies in pediatrics with generalized pustular psoriasis in China. Pediatr Dermatol. 2023;40(5):784-793. PMC10509407\n\n"
"4. Smolen JS, Aletaha D, McInnes IB. Rheumatology (2-Volume Set, 2022). Elsevier. ISBN: 9780702081330\n"
" [IL-36RN mutations and GPP; DITRA autoinflammatory pathways]\n\n"
"5. Zhang L, Li Q, et al. Case report: Infantile generalized pustular psoriasis with IL36RN and CARD14 gene mutations. Front Genet. 2022;13:1035037. doi:10.3389/fgene.2022.1035037\n\n"
"6. Marczyk-Filipiak E, et al. The Role of Genetic Testing in Differential Diagnosis of Pustular Dermatoses: Pediatric GPP with IL36RN Variant. J Clin Med. 2026;15(9):3413. doi:10.3390/jcm15093413\n\n"
"7. Chen X, et al. IL-36RN gene: key insights into its role in pediatric pustular psoriasis pathogenesis and treatment. Front Pediatr. 2025. PMC11964088\n\n"
"8. Romiti R, et al. Generalized pustular psoriasis (von Zumbusch). An Bras Dermatol. 2022;97(1):63–74. PMC8799844. doi:10.1016/j.abd.2021.06.006\n\n"
"9. Arasiewicz H. Successful treatment of a child's GPP with adalimumab + low-dose acitretin. Postepy Dermatol Alergol. 2023;40(3). termedia.pl\n\n"
"10. DermNet NZ. Pustular psoriasis. Retrieved July 2026. https://dermnetnz.org/topics/pustular-psoriasis\n\n"
"11. Red Book 2021: Report of the Committee on Infectious Diseases (32nd ed.). AAP. ISBN: 9781610025218 [Scabies — differential diagnosis]\n\n"
"12. Fitzpatrick's Dermatology (9th ed.). McGraw-Hill. ISBN: 9780071837781 [Pustular psoriasis chapter; IL-36RN and DITRA]\n\n"
"13. Healthline / RVO Health. Pustular psoriasis images. https://www.healthline.com/health/psoriasis/pustular-psoriasis-pictures"
)
tb(s, refs, 0.5, 1.12, 12.333, 6.15, size=10, color=(0xcc, 0xdd, 0xff), wrap=True)
# ─── save ─────────────────────────────────────────────────────────────────────
out = "/tmp/workspace/imd-case-scabies/IMD_Case_GPP_Pustular_Psoriasis.pptx"
buf = BytesIO()
prs.save(buf)
with open(out, "wb") as f:
f.write(buf.getvalue())
print(f"Saved: {out}")
cd /tmp/workspace/imd-case-scabies && python build_gpp_pptx.py 2>&1
IMD Case GPP Pustular Psoriasis
Presentation · PPTX