My topic is breast in surgery 1.Introduction 2.Anatomy - 3.Investigations - 3.Diseases of the nipple 4.Pagets disease - 5.Treatment for pagets disease 6. Discharges from the nipple 7. Treatment for discharge from the nipple 8. Congenital abnormalities 9. Conclusion These are my topic can you make a impressive ppt with image uses and content well represented accordingly to topic We have to speak for 30 min atleast so can you make an ppt Giving the intro page of the topic i mentioned before to you Also give me what to speak for 30 min according to the topic we are 10 members divide among us
breast anatomy diagram female
Paget disease nipple clinical appearance
nipple discharge types causes
congenital breast abnormalities polythelia supernumerary nipple
breast surgery investigation mammography ultrasound
Paget disease breast histology microscopy Paget cells
ls /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace/breast-surgery-ppt
mkdir -p /home/daytona/workspace/breast-surgery-ppt && ls /home/daytona/workspace/breast-surgery-ppt
~/breast-surgery-ppt/build_ppt.js
const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");
// ─── Colour Palette ───────────────────────────────────────────────
const C = {
navy: "0B1F3A", // dominant dark bg
teal: "0E7C7B", // accent headers
gold: "E8B84B", // highlight accent
white: "FFFFFF",
offwhite:"F0F4F8",
light: "D6E4F0",
muted: "8FA8C0",
dark: "0A0A0A",
};
// Helper to fetch images as base64
function fetchImages(urls) {
try {
const result = execSync(
`node /home/daytona/skills/shared/scripts/fetch_images.js ${urls.map(u => `"${u}"`).join(" ")}`,
{ maxBuffer: 50 * 1024 * 1024 }
);
return JSON.parse(result.toString());
} catch(e) {
console.error("Image fetch error:", e.message);
return urls.map(u => ({ url: u, base64: null, error: e.message }));
}
}
// ─── FETCH ALL IMAGES ─────────────────────────────────────────────
console.log("Fetching images...");
const imageUrls = [
// Anatomy
"https://cdn.orris.care/cdss_images/BAILY_1760544538998_9e3f7096-e11f-42a6-af86-e3980ee4d060.png",
// Blood supply / vascular
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_24348363da0ea019115c14371ab50f9cef8c4d4012ceb85a196085a0b07a7963.jpg",
// Mammography / investigations
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_8adbb935f8e23498f42a61a67fdae5488efe68374dffb869b898de7a4e27c7ce.jpg",
// Paget clinical photo 1
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_768f8bbe54b7bf9cbd33dbe6ba53d61951f513253d6ff754036e2643b13d7560.jpg",
// Paget gross path
"https://cdn.orris.care/cdss_images/Pathology_1760046308106_064d80fa-6861-425b-8386-771852f124b7.jpg",
// Paget histology
"https://cdn.orris.care/cdss_images/Pathology_1760046325023_3c2d372a-662b-47d4-b75f-cba16d3f3ba0.jpg",
// Paget histology 2
"https://cdn.orris.care/cdss_images/Pathology_1760046316258_91a977c7-cdfe-413d-824c-7a9bcaec017e.jpg",
// Nipple discharge types
"https://cdn.orris.care/cdss_images/BAILY_1760544510978_88bb767f-701c-4fb3-a131-878758c36ce9.png",
// Galactography
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_33cd2596ce7536c363c5b821da07720ce78773bdcbc55648b32360b0ffade72d.jpg",
// Congenital - polythelia
"https://cdn.orris.care/cdss_images/DermNetNZ_1760031084522_6fb41c3a-98d3-4b46-bae1-b8070facecc0.jpg",
// Congenital - supernumerary nipple
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_3d8c5f604daf24f0dd4638f6ca90cbb7b3e285de7b1f470a3100e025cd83c162.jpg",
// Surgical anatomy
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_a686f7592d07c83536f1ca585bad049fabdfd4d8dae5079a68caab176f9b3dda.jpg",
];
const imgs = fetchImages(imageUrls);
// Map to named variables
const [
imgAnatomy, imgVascular, imgMammo, imgPagetClinical, imgPagetGross,
imgPagetHisto1, imgPagetHisto2, imgNippleDischarge, imgGalacto,
imgPolythelia, imgSupernumerary, imgSurgAnatomy
] = imgs;
console.log("Images fetched. Building PPT...");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.author = "Surgical Seminar Group";
pres.title = "Breast in Surgery";
// ══════════════════════════════════════════════════════════════════
// HELPER FUNCTIONS
// ══════════════════════════════════════════════════════════════════
function addBg(slide, color) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: "100%",
fill: { color: color || C.navy },
line: { type: "none" }
});
}
function accentBar(slide, y, color) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: y, w: "100%", h: 0.06,
fill: { color: color || C.teal }, line: { type: "none" }
});
}
function sectionTag(slide, text) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 2.5, h: 0.42,
fill: { color: C.teal }, line: { type: "none" }
});
slide.addText(text.toUpperCase(), {
x: 0, y: 0, w: 2.5, h: 0.42,
fontSize: 9, bold: true, color: C.white, align: "center", valign: "middle",
charSpacing: 2, margin: 0
});
}
function slideTitle(slide, title, subtitle) {
slide.addText(title, {
x: 0.45, y: 0.55, w: 9.1, h: 0.7,
fontSize: 26, bold: true, color: C.gold, fontFace: "Calibri",
margin: 0
});
if (subtitle) {
slide.addText(subtitle, {
x: 0.45, y: 1.2, w: 9.1, h: 0.38,
fontSize: 13, color: C.light, fontFace: "Calibri", italic: true, margin: 0
});
}
accentBar(slide, 1.55, C.teal);
}
function bullets(slide, items, opts) {
const o = Object.assign({ x: 0.45, y: 1.75, w: 5.1, h: 3.5, fontSize: 14 }, opts);
slide.addText(
items.map((t, i) => ({
text: t,
options: { bullet: { code: "2022" }, breakLine: i < items.length - 1, color: C.offwhite, fontSize: o.fontSize, fontFace: "Calibri" }
})),
{ x: o.x, y: o.y, w: o.w, h: o.h, valign: "top", lineSpacingMultiple: 1.3 }
);
}
function addImg(slide, imgObj, x, y, w, h) {
if (imgObj && imgObj.base64) {
slide.addImage({ data: imgObj.base64, x, y, w, h });
}
}
function imgCaption(slide, text, x, y, w) {
slide.addText(text, {
x, y, w, h: 0.3,
fontSize: 8, color: C.muted, align: "center", italic: true, margin: 0
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE SLIDE
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
// Gold gradient bar left
s.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.12, h: "100%",
fill: { color: C.gold }, line: { type: "none" }
});
s.addShape(pres.ShapeType.rect, {
x: 0.12, y: 0, w: 0.08, h: "100%",
fill: { color: C.teal }, line: { type: "none" }
});
// Anatomy image on right
addImg(s, imgAnatomy, 5.5, 0.3, 4.3, 5.0);
// Dark overlay on image
s.addShape(pres.ShapeType.rect, {
x: 5.5, y: 0.3, w: 4.3, h: 5.0,
fill: { color: "000000", transparency: 55 }, line: { type: "none" }
});
s.addText("BREAST", {
x: 0.4, y: 0.8, w: 5.0, h: 1.0,
fontSize: 56, bold: true, color: C.white, fontFace: "Calibri",
charSpacing: 8, margin: 0
});
s.addText("IN SURGERY", {
x: 0.4, y: 1.7, w: 5.0, h: 0.75,
fontSize: 34, bold: true, color: C.gold, fontFace: "Calibri",
charSpacing: 4, margin: 0
});
accentBar(s, 2.55, C.teal);
s.addText("A Comprehensive Surgical Seminar", {
x: 0.4, y: 2.75, w: 5.0, h: 0.45,
fontSize: 14, color: C.light, italic: true, fontFace: "Calibri", margin: 0
});
// Topic list on slide 1
const topics = [
"1. Introduction",
"2. Anatomy",
"3. Investigations",
"4. Diseases of the Nipple",
"5. Paget's Disease",
"6. Treatment of Paget's Disease",
"7. Nipple Discharge",
"8. Treatment for Discharge",
"9. Congenital Abnormalities",
"10. Conclusion",
];
s.addText(
topics.map((t, i) => ({
text: t,
options: { breakLine: i < topics.length - 1, fontSize: 11, color: C.offwhite, fontFace: "Calibri" }
})),
{ x: 0.4, y: 3.3, w: 4.8, h: 2.1, valign: "top", lineSpacingMultiple: 1.4 }
);
s.addText("Presented by a Team of 10 | 30-Minute Seminar", {
x: 0.3, y: 5.2, w: 9.4, h: 0.32,
fontSize: 9.5, color: C.muted, align: "center", fontFace: "Calibri", margin: 0
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 2 — INTRODUCTION
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Introduction");
slideTitle(s, "Introduction to the Breast in Surgery");
bullets(s, [
"The breast is a vital organ in surgical practice — both for benign and malignant conditions",
"Breast disease accounts for a significant proportion of outpatient surgical referrals worldwide",
"Conditions range from congenital anomalies to life-threatening malignancies",
"Surgical management requires thorough knowledge of anatomy, pathology, and investigations",
"Key clinical topics: nipple diseases, Paget's disease, nipple discharge, and congenital defects",
"Early diagnosis and multidisciplinary management are the cornerstones of breast surgery",
], { x: 0.45, y: 1.75, w: 5.5, h: 3.6, fontSize: 13.5 });
// Box on right
s.addShape(pres.ShapeType.rect, {
x: 6.2, y: 1.75, w: 3.55, h: 3.6,
fill: { color: "0E3A58" }, line: { color: C.teal, w: 1.5 }
});
s.addText("Key Facts", {
x: 6.2, y: 1.75, w: 3.55, h: 0.4,
fontSize: 12, bold: true, color: C.gold, align: "center", fontFace: "Calibri", margin: 0
});
s.addText([
{ text: "• 1 in 8 women develop breast cancer\n", options: { fontSize: 12, color: C.offwhite } },
{ text: "• Most common cancer in women globally\n", options: { fontSize: 12, color: C.offwhite } },
{ text: "• Benign conditions are 3x more common than malignant\n", options: { fontSize: 12, color: C.offwhite } },
{ text: "• Paget's disease = 1–3% of all breast cancers\n", options: { fontSize: 12, color: C.offwhite } },
{ text: "• Nipple discharge is the 3rd most common breast complaint", options: { fontSize: 12, color: C.offwhite } },
], { x: 6.3, y: 2.25, w: 3.35, h: 2.9, valign: "top", lineSpacingMultiple: 1.4 });
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 3 — ANATOMY (Structure)
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Anatomy");
slideTitle(s, "Anatomy of the Breast", "Structure, Boundaries & Quadrants");
bullets(s, [
"Location: Anterior chest wall, 2nd–6th rib vertically; sternum to mid-axillary line",
"Structure: Glandular tissue (15–20 lobes), fibrous stroma, adipose tissue",
"Each lobe drains via a lactiferous duct → lactiferous sinus → nipple",
"Cooper's ligaments: fibrous suspensory bands connecting skin to deep fascia",
"Nipple-Areola Complex (NAC): circular pigmented area; contains smooth muscle",
"4 quadrants + axillary tail of Spence (upper outer quadrant most common cancer site)",
"Extends into axilla as axillary tail — clinically important in staging",
], { x: 0.45, y: 1.75, w: 5.2, h: 3.7, fontSize: 13 });
addImg(s, imgAnatomy, 5.7, 1.65, 4.1, 3.8);
imgCaption(s, "Cross-section: breast anatomy with abscess location (Bailey & Love)", 5.7, 5.45, 4.1);
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 4 — ANATOMY (Blood Supply & Lymphatics)
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Anatomy");
slideTitle(s, "Blood Supply, Lymphatics & Nerve Supply");
const col1 = [
"ARTERIAL SUPPLY:",
"• Internal thoracic artery (medial breast) — perforators via 2nd–4th intercostals",
"• Lateral thoracic artery (lateral breast)",
"• Thoracoacromial artery",
"• Posterior intercostal arteries",
"",
"VENOUS DRAINAGE:",
"• Axillary vein, internal thoracic vein",
"• Intercostal veins (route for haematogenous spread to spine)",
];
const col2 = [
"LYMPHATIC DRAINAGE:",
"• Axillary nodes (75%) — main clinical pathway",
"• Internal mammary nodes (medial breast)",
"• Supraclavicular nodes (advanced disease)",
"",
"NERVE SUPPLY:",
"• Anterior & lateral cutaneous branches of intercostal nerves T4–T6",
"• Nipple sensation: 4th intercostal nerve (key in surgery)",
];
s.addText(
col1.map((t, i) => ({ text: t, options: { breakLine: i < col1.length - 1, fontSize: 11.5, color: t.endsWith(":") ? C.gold : C.offwhite, bold: t.endsWith(":"), fontFace: "Calibri" } })),
{ x: 0.4, y: 1.75, w: 4.6, h: 3.7, valign: "top", lineSpacingMultiple: 1.35 }
);
s.addText(
col2.map((t, i) => ({ text: t, options: { breakLine: i < col2.length - 1, fontSize: 11.5, color: t.endsWith(":") ? C.gold : C.offwhite, bold: t.endsWith(":"), fontFace: "Calibri" } })),
{ x: 5.15, y: 1.75, w: 4.6, h: 3.7, valign: "top", lineSpacingMultiple: 1.35 }
);
// Divider line
s.addShape(pres.ShapeType.line, {
x: 5.0, y: 1.75, w: 0, h: 3.6,
line: { color: C.teal, w: 1, dashType: "dash" }
});
addImg(s, imgVascular, 7.2, 2.0, 2.6, 2.8);
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 5 — INVESTIGATIONS
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Investigations");
slideTitle(s, "Investigations of Breast Disease", "The Triple Assessment Approach");
// Triple assessment box
s.addShape(pres.ShapeType.rect, {
x: 0.35, y: 1.7, w: 9.3, h: 0.7,
fill: { color: C.teal }, line: { type: "none" }
});
s.addText("TRIPLE ASSESSMENT = Clinical Examination + Imaging + Pathology", {
x: 0.35, y: 1.7, w: 9.3, h: 0.7,
fontSize: 14, bold: true, color: C.white, align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
// Three columns
const cols = [
{ title: "1. Clinical", items: ["History & physical exam", "Lump characterization", "Skin & nipple changes", "Lymph node assessment", "BIRADS classification"] },
{ title: "2. Imaging", items: ["Mammography: gold standard in >35 yrs", "Ultrasound: first-line in <35 yrs", "MRI: extent of disease, high-risk patients", "Ductography: nipple discharge workup", "CT/PET: staging in malignancy"] },
{ title: "3. Pathology", items: ["FNAC: rapid cytology", "Core needle biopsy (CNB): histology", "Excision biopsy: diagnostic + therapeutic", "Sentinel lymph node biopsy", "IHC: ER, PR, HER2 status"] },
];
cols.forEach((col, i) => {
const x = 0.35 + i * 3.15;
s.addShape(pres.ShapeType.rect, {
x, y: 2.5, w: 3.05, h: 2.9,
fill: { color: "0E2A45" }, line: { color: C.teal, w: 1 }
});
s.addText(col.title, {
x, y: 2.5, w: 3.05, h: 0.42,
fontSize: 13, bold: true, color: C.gold, align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
s.addText(
col.items.map((t, j) => ({ text: "• " + t, options: { breakLine: j < col.items.length - 1, fontSize: 11, color: C.offwhite, fontFace: "Calibri" } })),
{ x: x + 0.1, y: 3.0, w: 2.85, h: 2.3, valign: "top", lineSpacingMultiple: 1.35 }
);
});
addImg(s, imgMammo, 3.5, 2.5, 3.0, 2.9);
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 6 — DISEASES OF THE NIPPLE (overview)
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Nipple Diseases");
slideTitle(s, "Diseases of the Nipple", "Classification & Overview");
const categories = [
{ hd: "Congenital", items: ["Inverted nipple (grades I–III)", "Supernumerary nipple (polythelia)", "Absent nipple (athelia)", "Accessory breast tissue (polymastia)"] },
{ hd: "Inflammatory / Infective", items: ["Periductal mastitis", "Duct ectasia", "Subareolar abscess", "Lactational mastitis"] },
{ hd: "Neoplastic", items: ["Paget's disease of nipple", "Nipple adenoma", "Syringomatous adenoma", "Metastatic disease to nipple"] },
{ hd: "Discharge-Related", items: ["Duct papilloma (most common benign)", "Fibrocystic change", "Galactorrhoea", "Duct carcinoma in situ (DCIS)"] },
];
categories.forEach((cat, i) => {
const x = 0.35 + (i % 2) * 4.75;
const y = i < 2 ? 1.85 : 3.7;
s.addShape(pres.ShapeType.rect, {
x, y, w: 4.55, h: 1.65,
fill: { color: i % 2 === 0 ? "0E2A45" : "0A1F35" }, line: { color: C.teal, w: 1 }
});
s.addText(cat.hd, {
x, y, w: 4.55, h: 0.38,
fontSize: 12.5, bold: true, color: C.gold, align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
s.addText(
cat.items.map((t, j) => ({ text: "• " + t, options: { breakLine: j < cat.items.length - 1, fontSize: 11, color: C.offwhite, fontFace: "Calibri" } })),
{ x: x + 0.15, y: y + 0.4, w: 4.25, h: 1.15, valign: "top", lineSpacingMultiple: 1.25 }
);
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 7 — PAGET'S DISEASE (Clinical)
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Paget's Disease");
slideTitle(s, "Paget's Disease of the Nipple", "Definition, Pathogenesis & Clinical Features");
bullets(s, [
"Definition: Intraepidermal adenocarcinoma of the nipple-areola complex (NAC)",
"Incidence: 1–3% of all breast cancers; predominantly women >40 yrs",
"Pathogenesis: Migration of malignant ductal cells (Paget cells) from underlying DCIS/invasive cancer to epidermis",
"Associated with underlying carcinoma in 82–95% of cases",
"Clinical: Eczematoid rash → erythema, scaling, crusting, ulceration, bloody discharge",
"Key differentials: Eczema, contact dermatitis, Bowen's disease",
"Diagnosis: Nipple biopsy (wedge/punch); immunohistochemistry CK7+, HER2+",
"Imaging: Mammography ± MRI to detect underlying tumour",
], { x: 0.45, y: 1.75, w: 5.3, h: 3.7, fontSize: 12.5 });
addImg(s, imgPagetClinical, 5.9, 1.75, 3.9, 2.6);
imgCaption(s, "Clinical: Paget's disease — eczematoid NAC ulceration", 5.9, 4.35, 3.9);
addImg(s, imgPagetGross, 5.9, 4.45, 3.9, 1.0);
imgCaption(s, "Gross pathology: mastectomy specimen (nipple involvement)", 5.9, 5.4, 3.9);
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 8 — PAGET'S DISEASE (Histology)
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Paget's Disease");
slideTitle(s, "Paget's Disease — Histopathology");
s.addText("Paget Cells — H&E Features", {
x: 0.45, y: 1.75, w: 4.6, h: 0.4,
fontSize: 14, bold: true, color: C.gold, fontFace: "Calibri", margin: 0
});
bullets(s, [
"Large, round cells with pale/clear cytoplasm",
"Enlarged, hyperchromatic nuclei with prominent nucleoli",
"Arranged singly or in clusters within epidermis",
"Pagetoid spread along basal layer upwards",
"Mucin production (PAS+); unlike melanoma (S100−)",
"IHC: CK7+, GCDFP-15+, HER2 overexpression",
"Often associated with underlying DCIS or invasive ductal carcinoma",
"Differential: Melanoma (HMB-45+), Bowen's disease (CK5/6+)",
], { x: 0.45, y: 2.2, w: 4.6, h: 3.1, fontSize: 12.5 });
addImg(s, imgPagetHisto1, 5.2, 1.68, 4.55, 2.5);
imgCaption(s, "H&E: Paget cells with pale cytoplasm and prominent nuclei", 5.2, 4.15, 4.55);
addImg(s, imgPagetHisto2, 5.2, 4.3, 4.55, 1.1);
imgCaption(s, "Paget disease + underlying invasive ductal carcinoma", 5.2, 5.37, 4.55);
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 9 — TREATMENT FOR PAGET'S DISEASE
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Paget's Disease");
slideTitle(s, "Treatment of Paget's Disease", "Surgical & Adjuvant Strategies");
const rows = [
["Clinical Scenario", "Preferred Treatment"],
["Paget's + no underlying mass (DCIS only)", "Central lumpectomy (NAC excision) + RT OR mastectomy"],
["Paget's + underlying DCIS", "Breast-conserving surgery (BCS) + radiotherapy if margins clear"],
["Paget's + invasive carcinoma (unifocal)", "Wide local excision (WLE) + sentinel lymph node biopsy + RT"],
["Paget's + invasive carcinoma (multifocal)", "Modified radical mastectomy (MRM) + axillary clearance"],
["HER2+ tumours", "Trastuzumab (Herceptin) ± pertuzumab + chemotherapy"],
["ER+ tumours", "Adjuvant hormonal therapy (tamoxifen / aromatase inhibitors)"],
];
s.addTable(rows, {
x: 0.35, y: 1.75, w: 9.3, h: 3.5,
border: { pt: 1, color: C.teal },
fill: C.navy,
fontSize: 11.5,
fontFace: "Calibri",
color: C.offwhite,
align: "left",
rowH: 0.42,
firstRowCols: { fill: { color: C.teal }, bold: true, color: C.white, align: "center" },
});
s.addText("• Surgery is the mainstay. Radiotherapy is mandatory after BCS to reduce local recurrence.", {
x: 0.35, y: 5.35, w: 9.3, h: 0.25,
fontSize: 10.5, color: C.muted, italic: true, fontFace: "Calibri", margin: 0
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 10 — NIPPLE DISCHARGE (types)
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Nipple Discharge");
slideTitle(s, "Discharge from the Nipple", "Classification & Causes");
bullets(s, [
"Defined as: Fluid expressed from the nipple either spontaneously or on pressure",
"3rd most common breast symptom after lump and pain",
"",
"PHYSIOLOGICAL: Milky (galactorrhoea) — pregnancy, prolactinoma, drugs (haloperidol, metoclopramide)",
"",
"PATHOLOGICAL (requires investigation):",
"• Serous — duct ectasia, fibrocystic disease",
"• Bloodstained / serosanguinous — intraductal papilloma (#1 cause), DCIS, carcinoma",
"• Purulent — infection / abscess",
"• Cheesy — duct ectasia, periductal mastitis",
"• Green / multicoloured — fibrocystic change",
"• Watery / clear — malignancy until proven otherwise",
], { x: 0.45, y: 1.75, w: 5.2, h: 3.7, fontSize: 12 });
addImg(s, imgNippleDischarge, 5.75, 1.65, 4.0, 3.0);
imgCaption(s, "Types of nipple discharge: (a) serous (b) pus (c) bloody (d) cheesy (e) greenish (f) watery — Bailey & Love", 5.75, 4.65, 4.0);
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 11 — NIPPLE DISCHARGE (Investigation)
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Nipple Discharge");
slideTitle(s, "Investigations for Nipple Discharge");
const steps = [
{ num: "01", title: "History & Exam", body: "Unilateral vs bilateral; spontaneous vs expressed; single vs multi-duct; colour; associated mass" },
{ num: "02", title: "Cytology", body: "Discharge smear cytology (sensitivity ~50%) — detect malignant cells; limited by low sensitivity" },
{ num: "03", title: "Mammography", body: "Standard in women >35; detect underlying mass, microcalcifications (DCIS)" },
{ num: "04", title: "Ultrasound", body: "First-line in <35 yrs; detect intraductal lesions, papillomas, dilated ducts" },
{ num: "05", title: "Ductography (Galactography)", body: "Contrast injection into discharging duct — filling defect = papilloma; 'trunk sign' = malignancy" },
{ num: "06", title: "Ductoscopy (Fiberoptic)", body: "Direct visualisation; biopsy of intraductal lesions; increasingly used" },
];
steps.forEach((step, i) => {
const x = 0.35 + (i % 3) * 3.2;
const y = i < 3 ? 1.75 : 3.55;
s.addShape(pres.ShapeType.rect, {
x, y, w: 3.1, h: 1.6,
fill: { color: "0E2A45" }, line: { color: C.teal, w: 1 }
});
s.addText(step.num, {
x, y, w: 0.55, h: 1.6,
fontSize: 20, bold: true, color: C.teal, align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
s.addShape(pres.ShapeType.line, {
x: x + 0.55, y: y + 0.2, w: 0, h: 1.2,
line: { color: C.teal, w: 1 }
});
s.addText(step.title, {
x: x + 0.65, y, w: 2.38, h: 0.4,
fontSize: 12, bold: true, color: C.gold, valign: "middle", fontFace: "Calibri", margin: 0
});
s.addText(step.body, {
x: x + 0.65, y: y + 0.4, w: 2.38, h: 1.12,
fontSize: 10.5, color: C.offwhite, fontFace: "Calibri", valign: "top", lineSpacingMultiple: 1.25, margin: 0
});
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 12 — TREATMENT FOR NIPPLE DISCHARGE
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Nipple Discharge");
slideTitle(s, "Treatment of Nipple Discharge", "Conservative to Surgical Approaches");
bullets(s, [
"PHYSIOLOGICAL / BILATERAL DISCHARGE:",
" → Reassurance; treat underlying cause (e.g., stop offending drug, treat prolactinoma with bromocriptine)",
"",
"SINGLE DUCT DISCHARGE (benign likely — papilloma):",
" → Microdochectomy: excision of single discharging duct (Hadfield's operation)",
" → Sent for histopathology",
"",
"MULTIPLE DUCT DISCHARGE (duct ectasia, fibrocystic):",
" → Hadfield's procedure: total duct excision (Adair-Urban operation)",
" → Antibiotics if periductal mastitis",
"",
"BLOODSTAINED / SUSPICIOUS DISCHARGE:",
" → Core biopsy / excision biopsy to exclude malignancy",
" → If malignancy confirmed → Treat as per cancer protocol (BCS / mastectomy)",
"",
"Ductoscopy-guided resection: Increasingly preferred for precision excision",
], { x: 0.45, y: 1.75, w: 5.5, h: 3.6, fontSize: 11.8 });
addImg(s, imgGalacto, 6.15, 1.78, 3.6, 2.0);
imgCaption(s, "Galactography: tree pattern (benign), filling defect (papilloma), trunk sign (malignancy)", 6.15, 3.78, 3.6);
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 13 — CONGENITAL ABNORMALITIES
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Congenital Abnormalities");
slideTitle(s, "Congenital Abnormalities of the Breast", "Embryology & Classification");
// Embryology box
s.addShape(pres.ShapeType.rect, {
x: 0.35, y: 1.72, w: 9.3, h: 0.62,
fill: { color: "0E3A58" }, line: { color: C.gold, w: 1 }
});
s.addText("Embryology: Breast develops from ectodermal milk line (axilla → groin) by 6th week. Regression occurs except at 4th intercostal space.", {
x: 0.45, y: 1.72, w: 9.1, h: 0.62,
fontSize: 11.5, color: C.offwhite, valign: "middle", fontFace: "Calibri", italic: true, margin: 0
});
const abnormalities = [
{ name: "Polythelia", desc: "Supernumerary nipple(s) along milk line — most common (1 in 50); usually benign; associated with urinary tract anomalies" },
{ name: "Polymastia", desc: "Accessory breast tissue — most common in axilla; may lactate; excision if symptomatic" },
{ name: "Athelia", desc: "Absence of nipple; isolated or with amastia; associated with Poland syndrome" },
{ name: "Amastia", desc: "Complete absence of breast tissue; Poland syndrome (+ pectoralis hypoplasia, limb defects)" },
{ name: "Inverted Nipple", desc: "Grade I: can be everted manually; Grade II: reduced evertibility; Grade III: cannot be everted. Surgery for grade III" },
{ name: "Tuberous Breast", desc: "Hernia-type deformity — narrow base, areolar enlargement, ptosis; surgical correction (augmentation + areolaplasty)" },
];
abnormalities.forEach((ab, i) => {
const x = 0.35 + (i % 3) * 3.2;
const y = i < 3 ? 2.5 : 4.05;
s.addShape(pres.ShapeType.rect, {
x, y, w: 3.1, h: 1.4,
fill: { color: "0A1F35" }, line: { color: i < 3 ? C.teal : C.gold, w: 1 }
});
s.addText(ab.name, {
x, y, w: 3.1, h: 0.36,
fontSize: 12.5, bold: true, color: i < 3 ? C.teal : C.gold, align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
s.addText(ab.desc, {
x: x + 0.1, y: y + 0.38, w: 2.9, h: 0.95,
fontSize: 10.5, color: C.offwhite, fontFace: "Calibri", valign: "top", lineSpacingMultiple: 1.2, margin: 0
});
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 14 — CONGENITAL (with images)
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
sectionTag(s, "Congenital Abnormalities");
slideTitle(s, "Polythelia & Supernumerary Nipple — Clinical Images");
addImg(s, imgPolythelia, 0.35, 1.75, 4.5, 3.2);
imgCaption(s, "Polythelia: Supernumerary nipple along the milk line (DermNet NZ)", 0.35, 4.95, 4.5);
addImg(s, imgSupernumerary, 5.2, 1.75, 4.5, 3.2);
imgCaption(s, "Bilateral polythelia on the abdominal wall — congenital milk line remnant", 5.2, 4.95, 4.5);
s.addText("Management: Usually conservative (reassurance). Surgical excision if: cosmetically bothersome, associated accessory glandular tissue, diagnostic uncertainty.", {
x: 0.35, y: 5.1, w: 9.3, h: 0.38,
fontSize: 11, color: C.muted, italic: true, fontFace: "Calibri", align: "center", margin: 0
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 15 — CONCLUSION
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBg(s, C.navy);
// Gold left bar
s.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.12, h: "100%",
fill: { color: C.gold }, line: { type: "none" }
});
s.addText("CONCLUSION", {
x: 0.4, y: 0.3, w: 9.2, h: 0.6,
fontSize: 30, bold: true, color: C.gold, fontFace: "Calibri", charSpacing: 5, margin: 0
});
accentBar(s, 0.95, C.teal);
const summaryPoints = [
["Anatomy", "Thorough knowledge of quadrants, blood supply, lymphatics and nerve supply is essential for all breast surgery"],
["Investigations", "Triple assessment (clinical + imaging + pathology) is the gold standard; always use it before treatment"],
["Diseases of Nipple", "Broad range from benign inflammatory conditions to malignancy; history and examination guide workup"],
["Paget's Disease", "Rare but important — associated with underlying carcinoma in >80%; requires biopsy + imaging for staging"],
["Treatment (Paget's)", "Surgery ± radiotherapy ± systemic therapy based on extent; BCS increasingly favored over mastectomy"],
["Nipple Discharge", "Bloodstained / spontaneous single-duct = investigate urgently; bilateral milky = usually physiological"],
["Treatment (Discharge)", "Microdochectomy for single duct; total duct excision for multiple duct; biopsy any suspicious lesion"],
["Congenital", "Polythelia most common; Poland syndrome most complex; management usually conservative unless symptomatic"],
];
summaryPoints.forEach(([topic, desc], i) => {
const x = 0.4 + (i % 2) * 4.75;
const y = 1.1 + Math.floor(i / 2) * 1.05;
s.addShape(pres.ShapeType.rect, {
x, y, w: 4.6, h: 0.92,
fill: { color: "0E2A45" }, line: { color: i % 2 === 0 ? C.teal : C.gold, w: 1 }
});
s.addText(topic + ": ", {
x: x + 0.12, y, w: 4.38, h: 0.38,
fontSize: 12, bold: true, color: i % 2 === 0 ? C.teal : C.gold, valign: "middle", fontFace: "Calibri", margin: 0
});
s.addText(desc, {
x: x + 0.12, y: y + 0.38, w: 4.38, h: 0.5,
fontSize: 10.5, color: C.offwhite, fontFace: "Calibri", valign: "top", lineSpacingMultiple: 1.2, margin: 0
});
});
s.addText("Thank You | Questions Welcome", {
x: 0.35, y: 5.25, w: 9.3, h: 0.35,
fontSize: 13, bold: true, color: C.gold, align: "center", fontFace: "Calibri", margin: 0
});
}
// ══════════════════════════════════════════════════════════════════
// WRITE FILE
// ══════════════════════════════════════════════════════════════════
const outPath = "/home/daytona/workspace/breast-surgery-ppt/Breast_in_Surgery.pptx";
pres.writeFile({ fileName: outPath }).then(() => {
console.log("PPT written to: " + outPath);
}).catch(err => {
console.error("Error writing PPT:", err);
process.exit(1);
});
cd /home/daytona/workspace/breast-surgery-ppt && node build_ppt.js 2>&1