I'm 29 year female. I have epigastric, uh, tenderness and, uh, rigidity. What can be the diagnosis per se?
"A rigid abdomen consistent with peritonitis in perforation" is a hallmark physical finding. Abrupt onset of severe or generalized pain may indicate perforation with peritoneal spillage of gastric or duodenal contents.
"With mild pancreatitis...only mild epigastric tenderness. Significant abdominal distention associated with generalized rebound and abdominal rigidity is present in severe pancreatitis."
"The only positive finding in patients with uncomplicated peptic ulcer disease may be epigastric tenderness."
| Test | Reason |
|---|---|
| Urine/serum beta-hCG | Exclude ectopic pregnancy |
| Serum lipase & amylase | Rule out pancreatitis |
| CBC, CRP | Infection/inflammation |
| LFTs, bilirubin | Biliary cause |
| Erect CXR | Free air under diaphragm = perforation |
| Abdominal ultrasound | Gallstones, biliary pathology, free fluid |
| CT abdomen (if needed) | Pancreatitis severity, perforation, appendicitis |
Disclaimer: This is educational information only and does not replace a clinical evaluation. Please seek immediate medical attention given the presence of abdominal rigidity.
Create a quick reference guide to abdominal pain differentials by location
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace not found"
mkdir -p /home/daytona/workspace/abdominal-pain-guide && ls /home/daytona/worksp…
~/abdominal-pain-guide/build.js
const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");
// Fetch images
const imgUrls = [
"https://cdn.orris.care/cdss_images/fd750a7babe2137e9f05ac73ded16b78172d8b99f276e194f462d8335bf009c7.png",
"https://cdn.orris.care/cdss_images/284112988191d7d30e4aab0ba4da27a72827fe8efd68904c0b428e3107a33794.png"
];
const images = JSON.parse(execSync(
`node /home/daytona/skills/shared/scripts/fetch_images.js ${imgUrls.map(u => `"${u}"`).join(" ")}`
).toString());
const img1 = images[0].base64; // Tintinalli quadrant diagram
const img2 = images[1].base64; // Goldman-Cecil region diagram
// ── Color palette ──────────────────────────────────────────────────────────
const NAVY = "0A2342";
const TEAL = "1A7A8A";
const CREAM = "F8F5F0";
const WHITE = "FFFFFF";
const ORANGE = "E85D2E";
const GOLD = "F4A51A";
const LTGRAY = "E8EDF2";
const DARKGRAY= "4A4A5A";
let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Abdominal Pain Differentials by Location";
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — Title
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
// Full dark background
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY } });
// Accent bar
slide.addShape(pres.ShapeType.rect, { x: 0, y: 3.85, w: 10, h: 0.08, fill: { color: ORANGE } });
// Main title
slide.addText("Abdominal Pain", {
x: 0.6, y: 0.8, w: 8.8, h: 1.2,
fontSize: 48, bold: true, color: WHITE, fontFace: "Calibri",
align: "center"
});
slide.addText("DIFFERENTIALS BY LOCATION", {
x: 0.6, y: 1.9, w: 8.8, h: 0.7,
fontSize: 22, bold: false, color: GOLD, fontFace: "Calibri",
align: "center", charSpacing: 4
});
// Subtitle / audience
slide.addText("Quick Reference Guide for Nursing Staff", {
x: 0.6, y: 3.0, w: 8.8, h: 0.55,
fontSize: 16, color: "AABCCF", fontFace: "Calibri", align: "center", italic: true
});
// Bottom note
slide.addText("Source: Tintinalli's Emergency Medicine | Goldman-Cecil Medicine", {
x: 0.6, y: 4.9, w: 8.8, h: 0.4,
fontSize: 10, color: "667788", fontFace: "Calibri", align: "center"
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — Overview Anatomy Diagram (Tintinalli)
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: CREAM } });
// Header bar
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.7, fill: { color: NAVY } });
slide.addText("OVERVIEW: ABDOMINAL PAIN BY REGION", {
x: 0.3, y: 0, w: 9.4, h: 0.7,
fontSize: 18, bold: true, color: WHITE, fontFace: "Calibri",
align: "left", valign: "middle", charSpacing: 2
});
// Diagram image
slide.addImage({ data: img1, x: 0.3, y: 0.8, w: 5.0, h: 4.5 });
// Right side key callouts
const callouts = [
{ label: "RUQ", color: "D4E6F1", desc: "Cholecystitis, Biliary colic, Hepatitis, Pneumonia (RLL)" },
{ label: "LUQ", color: "D5F5E3", desc: "Gastric ulcer, Pancreatitis, Splenic rupture, Pneumonia (LLL)" },
{ label: "RLQ", color: "FADBD8", desc: "Appendicitis, Ectopic pregnancy, Inguinal hernia, Ovarian torsion" },
{ label: "LLQ", color: "FCF3CF", desc: "Diverticulitis, Ectopic pregnancy, Inguinal hernia, Sigmoid volvulus" },
{ label: "DIFFUSE", color: "E8DAEF", desc: "Peritonitis, Pancreatitis, Bowel obstruction, Aortic rupture, Gastroenteritis" },
];
callouts.forEach((c, i) => {
const yPos = 0.85 + i * 0.88;
slide.addShape(pres.ShapeType.rect, {
x: 5.55, y: yPos, w: 4.1, h: 0.78,
fill: { color: c.color }, line: { color: DARKGRAY, width: 0.5 }, rectRadius: 0.05
});
slide.addText([
{ text: c.label + " ", options: { bold: true, fontSize: 11, color: NAVY } },
{ text: c.desc, options: { bold: false, fontSize: 9.5, color: DARKGRAY } }
], { x: 5.65, y: yPos + 0.05, w: 3.9, h: 0.68, valign: "middle", margin: 4 });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — Goldman-Cecil Region Diagram
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: CREAM } });
// Header bar
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.7, fill: { color: TEAL } });
slide.addText("DETAILED DIFFERENTIALS BY ABDOMINAL REGION", {
x: 0.3, y: 0, w: 9.4, h: 0.7,
fontSize: 17, bold: true, color: WHITE, fontFace: "Calibri",
align: "left", valign: "middle", charSpacing: 2
});
// Full-width diagram
slide.addImage({ data: img2, x: 0.3, y: 0.8, w: 9.4, h: 4.6 });
// Source caption
slide.addText("Goldman-Cecil Medicine, 27th Ed.", {
x: 0, y: 5.35, w: 10, h: 0.25,
fontSize: 9, color: "999999", fontFace: "Calibri", align: "center", italic: true
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — RUQ & LUQ detail
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: "F0F4F8" } });
// Header
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: NAVY } });
slide.addText("UPPER ABDOMINAL PAIN", {
x: 0.3, y: 0, w: 9.4, h: 0.65,
fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle", charSpacing: 2
});
// RUQ Box
slide.addShape(pres.ShapeType.rect, { x: 0.3, y: 0.8, w: 4.4, h: 4.5, fill: { color: "D6EAF8" }, line: { color: "2E86C1", width: 1.5 } });
slide.addShape(pres.ShapeType.rect, { x: 0.3, y: 0.8, w: 4.4, h: 0.5, fill: { color: "2E86C1" } });
slide.addText("RIGHT UPPER QUADRANT (RUQ)", { x: 0.35, y: 0.8, w: 4.3, h: 0.5, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle" });
const ruqItems = [
["Biliary", "Cholecystitis, Biliary colic, Choledocholithiasis, Cholangitis"],
["Liver", "Hepatitis, Hepatic abscess, Hepatic congestion, Neoplasia"],
["GI", "Perforated duodenal ulcer, Peptic ulcer disease"],
["Pulmonary", "Pneumonia (RLL), Pulmonary embolism, Pleural effusion"],
["Cardiac", "Myocardial ischemia / MI (referred pain)"],
["Vascular", "Aortic aneurysm (leaking)"],
];
ruqItems.forEach((item, i) => {
slide.addText([
{ text: item[0] + ": ", options: { bold: true, color: "1A5276", fontSize: 10 } },
{ text: item[1], options: { color: DARKGRAY, fontSize: 10 } }
], { x: 0.45, y: 1.42 + i * 0.53, w: 4.1, h: 0.48, valign: "top" });
});
// LUQ Box
slide.addShape(pres.ShapeType.rect, { x: 5.3, y: 0.8, w: 4.4, h: 4.5, fill: { color: "D5F5E3" }, line: { color: "1E8449", width: 1.5 } });
slide.addShape(pres.ShapeType.rect, { x: 5.3, y: 0.8, w: 4.4, h: 0.5, fill: { color: "1E8449" } });
slide.addText("LEFT UPPER QUADRANT (LUQ)", { x: 5.35, y: 0.8, w: 4.3, h: 0.5, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle" });
const luqItems = [
["Stomach", "Gastric ulcer, Gastritis, Perforated ulcer"],
["Pancreas", "Pancreatitis, Pseudocyst, Pancreatic cancer"],
["Spleen", "Splenic rupture, Splenic abscess, Splenomegaly"],
["Pulmonary", "Pneumonia (LLL), Pleural effusion, Empyema"],
["Cardiac", "Myocardial ischemia / MI (referred pain)"],
["Other", "Herpes zoster (shingles), Aortic aneurysm"],
];
luqItems.forEach((item, i) => {
slide.addText([
{ text: item[0] + ": ", options: { bold: true, color: "145A32", fontSize: 10 } },
{ text: item[1], options: { color: DARKGRAY, fontSize: 10 } }
], { x: 5.45, y: 1.42 + i * 0.53, w: 4.1, h: 0.48, valign: "top" });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — RLQ & LLQ detail
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: "F0F4F8" } });
// Header
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: ORANGE } });
slide.addText("LOWER ABDOMINAL PAIN", {
x: 0.3, y: 0, w: 9.4, h: 0.65,
fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle", charSpacing: 2
});
// RLQ Box
slide.addShape(pres.ShapeType.rect, { x: 0.3, y: 0.8, w: 4.4, h: 4.5, fill: { color: "FADBD8" }, line: { color: "C0392B", width: 1.5 } });
slide.addShape(pres.ShapeType.rect, { x: 0.3, y: 0.8, w: 4.4, h: 0.5, fill: { color: "C0392B" } });
slide.addText("RIGHT LOWER QUADRANT (RLQ)", { x: 0.35, y: 0.8, w: 4.3, h: 0.5, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle" });
const rlqItems = [
["GI", "Appendicitis, Crohn's disease (ileitis), Mesenteric adenitis"],
["Gynecologic", "Ectopic pregnancy ⚠, Ovarian torsion, Salpingitis, Endometriosis, TOA"],
["Urologic", "Ureteral stone / calculi, Pyelonephritis"],
["Vascular", "Aortic aneurysm (leaking), Ischemic colitis"],
["Hernia", "Inguinal hernia (incarcerated/strangulated)"],
["Other", "Psoas abscess, Herpes zoster, Meckel's diverticulum"],
];
rlqItems.forEach((item, i) => {
slide.addText([
{ text: item[0] + ": ", options: { bold: true, color: "922B21", fontSize: 10 } },
{ text: item[1], options: { color: DARKGRAY, fontSize: 10 } }
], { x: 0.45, y: 1.42 + i * 0.53, w: 4.1, h: 0.48, valign: "top" });
});
// LLQ Box
slide.addShape(pres.ShapeType.rect, { x: 5.3, y: 0.8, w: 4.4, h: 4.5, fill: { color: "FEF9E7" }, line: { color: "D4AC0D", width: 1.5 } });
slide.addShape(pres.ShapeType.rect, { x: 5.3, y: 0.8, w: 4.4, h: 0.5, fill: { color: "D4AC0D" } });
slide.addText("LEFT LOWER QUADRANT (LLQ)", { x: 5.35, y: 0.8, w: 4.3, h: 0.5, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle" });
const llqItems = [
["GI", "Diverticulitis, Sigmoid volvulus, IBD (Crohn's/UC), IBS"],
["Gynecologic", "Ectopic pregnancy ⚠, Ovarian torsion, Salpingitis, Endometriosis, TOA"],
["Urologic", "Ureteral stone / calculi, Pyelonephritis"],
["Vascular", "Aortic aneurysm, Ischemic colitis"],
["Hernia", "Inguinal hernia (incarcerated/strangulated)"],
["Other", "Psoas abscess, Herpes zoster, Mittelschmerz"],
];
llqItems.forEach((item, i) => {
slide.addText([
{ text: item[0] + ": ", options: { bold: true, color: "7D6608", fontSize: 10 } },
{ text: item[1], options: { color: DARKGRAY, fontSize: 10 } }
], { x: 5.45, y: 1.42 + i * 0.53, w: 4.1, h: 0.48, valign: "top" });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — Epigastric / Periumbilical / Hypogastric / Flanks
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: "F5F5F5" } });
// Header
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: TEAL } });
slide.addText("CENTRAL, FLANK & PELVIC PAIN", {
x: 0.3, y: 0, w: 9.4, h: 0.65,
fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle", charSpacing: 2
});
// 4 smaller boxes in 2x2 grid
const zones = [
{
label: "EPIGASTRIC",
color: "FDEDEC", lineColor: "E74C3C",
x: 0.2, y: 0.75, w: 4.6, h: 2.3,
items: ["Cardiac: MI, Ischemia, Pericarditis", "GI: Gastritis, PUD, Esophagitis, GERD", "Pancreas: Pancreatitis, Pseudocyst, Cancer", "Biliary: Cholecystitis, Choledocholithiasis", "Vascular: Aortic aneurysm"]
},
{
label: "PERIUMBILICAL",
color: "EBF5FB", lineColor: "2980B9",
x: 5.2, y: 0.75, w: 4.6, h: 2.3,
items: ["Early appendicitis (migrates to RLQ)", "Small bowel obstruction / ileus", "Infectious gastroenteritis", "Mesenteric ischemia / ischemia", "Aortic aneurysm (AAA)"]
},
{
label: "HYPOGASTRIC (Suprapubic)",
color: "EAFAF1", lineColor: "27AE60",
x: 0.2, y: 3.15, w: 4.6, h: 2.2,
items: ["Bladder: Cystitis, Acute urinary retention", "Gynecologic: Ectopic pregnancy ⚠, PID, Uterine pathology", "GI: Diverticulitis, IBD, Colitis, IBS"]
},
{
label: "FLANKS (R or L)",
color: "FEF9E7", lineColor: "F39C12",
x: 5.2, y: 3.15, w: 4.6, h: 2.2,
items: ["Renal: Pyelonephritis, Renal abscess, Renal infarct", "Ureter: Ureteral stone (renal colic) ⚠", "Spleen (left): Abscess, Rupture, Process"]
}
];
zones.forEach(z => {
slide.addShape(pres.ShapeType.rect, { x: z.x, y: z.y, w: z.w, h: z.h, fill: { color: z.color }, line: { color: z.lineColor, width: 1.5 } });
slide.addShape(pres.ShapeType.rect, { x: z.x, y: z.y, w: z.w, h: 0.42, fill: { color: z.lineColor } });
slide.addText(z.label, { x: z.x + 0.08, y: z.y, w: z.w - 0.1, h: 0.42, fontSize: 11, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle" });
const bulletTexts = z.items.map((t, i) => ({
text: "• " + t,
options: { fontSize: 9.5, color: DARKGRAY, breakLine: i < z.items.length - 1 }
}));
slide.addText(bulletTexts, { x: z.x + 0.1, y: z.y + 0.46, w: z.w - 0.2, h: z.h - 0.55, valign: "top" });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — Diffuse Pain
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: "F4F6F7" } });
// Header
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: "7D3C98" } });
slide.addText("DIFFUSE ABDOMINAL PAIN", {
x: 0.3, y: 0, w: 9.4, h: 0.65,
fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle", charSpacing: 2
});
// Intro note
slide.addText("Pain that is non-localized or involves the entire abdomen — often indicates peritoneal involvement or systemic/metabolic cause.", {
x: 0.4, y: 0.75, w: 9.2, h: 0.55,
fontSize: 11, color: DARKGRAY, fontFace: "Calibri", italic: true
});
// Two column layout
const left = [
["Surgical Emergencies", "Perforated viscus (ulcer, bowel), Ruptured aortic aneurysm, Bowel obstruction, Volvulus, Abdominal compartment syndrome"],
["Inflammation", "Peritonitis (any cause), Pancreatitis, Mesenteric ischemia, Gastroenteritis"],
["Infection", "Peritonitis, Sepsis, Typhoid fever, Malaria"],
];
const right = [
["Metabolic/Systemic", "Diabetic ketoacidosis (DKA), Addisonian crisis, Porphyria, Uremia, Sickle cell crisis, Hypercalcemia"],
["Other Causes", "Narcotic/drug withdrawal, Heavy metal poisoning, Familial Mediterranean fever, Hereditary angioedema, Early appendicitis"],
];
left.forEach((item, i) => {
slide.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.4 + i * 1.3, w: 4.5, h: 1.2, fill: { color: "EBE0F5" }, line: { color: "7D3C98", width: 0.8 } });
slide.addText([
{ text: item[0] + "\n", options: { bold: true, fontSize: 10.5, color: "6C3483", breakLine: true } },
{ text: item[1], options: { fontSize: 9.5, color: DARKGRAY } }
], { x: 0.45, y: 1.45 + i * 1.3, w: 4.2, h: 1.1, valign: "top" });
});
right.forEach((item, i) => {
slide.addShape(pres.ShapeType.rect, { x: 5.2, y: 1.4 + i * 1.55, w: 4.5, h: 1.4, fill: { color: "EBE0F5" }, line: { color: "7D3C98", width: 0.8 } });
slide.addText([
{ text: item[0] + "\n", options: { bold: true, fontSize: 10.5, color: "6C3483", breakLine: true } },
{ text: item[1], options: { fontSize: 9.5, color: DARKGRAY } }
], { x: 5.35, y: 1.45 + i * 1.55, w: 4.2, h: 1.3, valign: "top" });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — Nursing Clinical Pearls & Red Flags
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: WHITE } });
// Header
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: ORANGE } });
slide.addText("NURSING CLINICAL PEARLS & RED FLAGS", {
x: 0.3, y: 0, w: 9.4, h: 0.65,
fontSize: 18, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle", charSpacing: 2
});
// Red flags box
slide.addShape(pres.ShapeType.rect, { x: 0.3, y: 0.75, w: 4.4, h: 4.6, fill: { color: "FFF0F0" }, line: { color: "E74C3C", width: 1.5 } });
slide.addShape(pres.ShapeType.rect, { x: 0.3, y: 0.75, w: 4.4, h: 0.48, fill: { color: "E74C3C" } });
slide.addText("🚨 RED FLAGS — Report Immediately", { x: 0.35, y: 0.75, w: 4.3, h: 0.48, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle" });
const redFlags = [
"Rigid / board-like abdomen",
"Absent bowel sounds",
"Hemodynamic instability (hypotension, tachycardia)",
"Sudden severe 'worst of life' pain",
"Positive pregnancy test + abdominal pain",
"High fever + jaundice + abdominal pain (Charcot's triad)",
"Rebound tenderness / guarding",
"Vomiting blood (hematemesis) or bloody stool",
"Syncope or near-syncope with pain",
];
redFlags.forEach((f, i) => {
slide.addText("⚠ " + f, {
x: 0.45, y: 1.28 + i * 0.38, w: 4.1, h: 0.35,
fontSize: 10, color: "922B21", fontFace: "Calibri", bold: i < 4
});
});
// Pearls box
slide.addShape(pres.ShapeType.rect, { x: 5.3, y: 0.75, w: 4.4, h: 4.6, fill: { color: "F0FFF4" }, line: { color: "27AE60", width: 1.5 } });
slide.addShape(pres.ShapeType.rect, { x: 5.3, y: 0.75, w: 4.4, h: 0.48, fill: { color: "27AE60" } });
slide.addText("✅ Clinical Pearls for Nurses", { x: 5.35, y: 0.75, w: 4.3, h: 0.48, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle" });
const pearls = [
["Always check beta-hCG", "in any reproductive-age female with abdominal pain"],
["Epigastric pain ≠ only GI", "can be MI, especially in women / diabetics"],
["Appendicitis migrates", "starts periumbilical → moves to RLQ over hours"],
["Do NOT delay analgesia", "opioids safe and do not mask exam findings"],
["Renal colic", "patient is restless / writhing; peritonitis patient lies still"],
["Charcot's triad", "RUQ pain + fever + jaundice = cholangitis (sepsis risk)"],
["Murphy's sign", "RUQ pain on deep inspiration = cholecystitis"],
["McBurney's point", "1/3 from ASIS to umbilicus — tender = appendicitis"],
];
pearls.forEach((p, i) => {
slide.addText([
{ text: p[0] + ": ", options: { bold: true, color: "1E8449", fontSize: 10 } },
{ text: p[1], options: { color: DARKGRAY, fontSize: 10 } }
], { x: 5.45, y: 1.28 + i * 0.42, w: 4.1, h: 0.38, valign: "middle" });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — Quick Summary Table
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: CREAM } });
// Header
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: NAVY } });
slide.addText("AT-A-GLANCE SUMMARY TABLE", {
x: 0.3, y: 0, w: 9.4, h: 0.65,
fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle", charSpacing: 2
});
// Table headers
const headers = ["Location", "Top Diagnoses", "Key Clue / Finding"];
const hColors = [NAVY, NAVY, NAVY];
const rows = [
["RUQ", "Cholecystitis, Biliary colic, Hepatitis, MI, Pneumonia", "Murphy's sign, RUQ tenderness, jaundice"],
["LUQ", "Gastric ulcer, Pancreatitis, Splenic rupture, MI", "Pain radiates to back, LUQ tenderness, Kehr's sign"],
["Epigastric", "PUD, Pancreatitis, GERD, Gastritis, MI", "Burning pain, worse lying, radiates to back"],
["Periumbilical", "Early appendicitis, Small bowel obstruction, Mesenteric ischemia", "Pain migrates, distension, absent bowel sounds"],
["RLQ", "Appendicitis, Ectopic pregnancy, Ovarian torsion, Crohn's", "McBurney's tenderness, + beta-hCG, fever"],
["LLQ", "Diverticulitis, Sigmoid volvulus, Ectopic, IBD", "Older age, constipation, fever, LLQ tenderness"],
["Hypogastric", "Cystitis, PID, Uterine, IBS", "Dysuria, vaginal discharge, + beta-hCG"],
["Flank", "Renal colic, Pyelonephritis, Renal infarct", "CVA tenderness, hematuria, writhing patient"],
["Diffuse", "Peritonitis, Ruptured AAA, Pancreatitis, DKA", "Board-like abdomen, hemodynamic instability"],
];
const colW = [1.5, 4.5, 3.6];
const colX = [0.2, 1.72, 6.24];
const rowH = 0.48;
// Header row
headers.forEach((h, col) => {
slide.addShape(pres.ShapeType.rect, { x: colX[col], y: 0.7, w: colW[col], h: 0.42, fill: { color: TEAL }, line: { color: WHITE, width: 0.5 } });
slide.addText(h, { x: colX[col] + 0.05, y: 0.7, w: colW[col] - 0.1, h: 0.42, fontSize: 10, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle" });
});
// Data rows
rows.forEach((row, r) => {
const yPos = 1.12 + r * rowH;
const bg = r % 2 === 0 ? WHITE : "EBF5FB";
row.forEach((cell, col) => {
slide.addShape(pres.ShapeType.rect, { x: colX[col], y: yPos, w: colW[col], h: rowH, fill: { color: bg }, line: { color: "CCCCCC", width: 0.3 } });
slide.addText(cell, {
x: colX[col] + 0.05, y: yPos + 0.02, w: colW[col] - 0.1, h: rowH - 0.04,
fontSize: col === 0 ? 10 : 9, bold: col === 0, color: col === 0 ? NAVY : DARKGRAY,
fontFace: "Calibri", valign: "middle"
});
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// WRITE FILE
// ══════════════════════════════════════════════════════════════════════════════
const outPath = "/home/daytona/workspace/abdominal-pain-guide/Abdominal_Pain_Differentials_Guide.pptx";
pres.writeFile({ fileName: outPath }).then(() => {
console.log("SUCCESS: " + outPath);
}).catch(err => {
console.error("ERROR:", err);
process.exit(1);
});
cd /home/daytona/workspace/abdominal-pain-guide && node build.js 2>&1
cd /home/daytona/workspace/abdominal-pain-guide && curl -s -o img1.png "https://…
~/abdominal-pain-guide/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/abdominal-pain-guide/build.js'
cd /home/daytona/workspace/abdominal-pain-guide && node build.js 2>&1
~/abdominal-pain-guide/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/abdominal-pain-guide/build.js'
cd /home/daytona/workspace/abdominal-pain-guide && node build.js 2>&1
ls -lh /home/daytona/workspace/abdominal-pain-guide/Abdominal_Pain_Differentials…
Abdominal Pain Differentials Guide
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title slide |
| 2 | Overview anatomy diagram (Tintinalli's) with color-coded quadrant callouts |
| 3 | Full Goldman-Cecil regional differentials diagram |
| 4 | RUQ & LUQ detailed differentials |
| 5 | RLQ & LLQ detailed differentials |
| 6 | Epigastric, Periumbilical, Hypogastric & Flank pain |
| 7 | Diffuse abdominal pain (surgical emergencies, metabolic, systemic) |
| 8 | Nursing Red Flags (report immediately) + Clinical Pearls |
| 9 | At-a-glance summary table (all 9 regions, top diagnoses, key clues) |