create a powerpoint presentation
python3 -c " from pypdf import PdfReader reader = PdfReader('/home/daytona/workspace/attachments/e0197fee-4d3a-427f-b6da-66ed51a6a013/I now have comprehensive data from Lippincott Phar.pdf') print(f'Total pages: {len(reader.pages)}') # Extract first 5 pages to see structure for i in range(min(5, len(reader.pages))): text = reader.pages[i].extract_text() print(f'--- PAGE {i+1} ---') print(text[:800]) print() "
python3 -c " from pypdf import PdfReader reader = PdfReader('/home/daytona/workspace/attachments/e0197fee-4d3a-427f-b6da-66ed51a6a013/I now have comprehensive data from Lippincott Phar.pdf') print(f'Total pages: {len(reader.pages)}') for i in range(len(reader.pages)): text = reader.pages[i].extract_text() print(f'--- PAGE {i+1} ---') print(text) print() " 2>&1
mkdir -p /home/daytona/workspace/oral-hypoglycemics-pptx && ls /home/daytona/workspace/oral-hypoglycemics-pptx
~/oral-hypoglycemics-pptx/build.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Oral Hypoglycemic Agents - Complete Clinical Reference";
pres.author = "Lippincott Pharmacology";
// ─── PALETTE ───────────────────────────────────────────────────────────────
const C = {
navy: "0D1B4B", // dominant dark
teal: "0A8C8A", // accent 1
gold: "F0A500", // accent 2 / highlight
lightBlue: "D6EAF8", // content bg
white: "FFFFFF",
offWhite: "F4F7FB",
red: "C0392B",
green: "1A7A4A",
slate: "455A64",
grayLight: "ECF0F1",
};
// ─── HELPERS ───────────────────────────────────────────────────────────────
function addTitleSlide(title, subtitle) {
const s = pres.addSlide();
// Full dark background
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.navy } });
// Gold accent bar
s.addShape(pres.ShapeType.rect, { x: 0, y: 4.5, w: "100%", h: 0.08, fill: { color: C.gold } });
// Decorative left band
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: "100%", fill: { color: C.teal } });
// Circle decoration
s.addShape(pres.ShapeType.ellipse, { x: 7.8, y: -0.6, w: 3.2, h: 3.2, fill: { color: C.teal }, line: { color: C.teal } });
s.addShape(pres.ShapeType.ellipse, { x: 8.2, y: -0.2, w: 2.4, h: 2.4, fill: { color: C.navy }, line: { color: C.navy } });
s.addText(title, {
x: 0.5, y: 1.4, w: 9, h: 1.6,
fontSize: 36, bold: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle",
});
if (subtitle) {
s.addText(subtitle, {
x: 0.5, y: 3.1, w: 9, h: 0.8,
fontSize: 18, color: C.gold,
fontFace: "Calibri", align: "center", italic: true,
});
}
s.addText("Based on Lippincott Pharmacology | Washington Manual | Goldman-Cecil Medicine", {
x: 0.5, y: 5.1, w: 9, h: 0.35,
fontSize: 10, color: C.teal, fontFace: "Calibri", align: "center",
});
return s;
}
function addSectionDivider(label, color) {
const s = pres.addSlide();
const bg = color || C.teal;
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: bg } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 0.12, fill: { color: C.gold } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.5, w: "100%", h: 0.12, fill: { color: C.gold } });
s.addText(label, {
x: 0.5, y: 1.8, w: 9, h: 2,
fontSize: 40, bold: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle",
});
return s;
}
function contentSlide(title, items, options = {}) {
const s = pres.addSlide();
// Light background
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.offWhite } });
// Top header bar
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 1.05, fill: { color: C.navy } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 1.05, w: "100%", h: 0.07, fill: { color: C.gold } });
// Title
s.addText(title, {
x: 0.3, y: 0.12, w: 9.4, h: 0.8,
fontSize: 22, bold: true, color: C.white,
fontFace: "Calibri", valign: "middle", margin: 0,
});
// Build bullet array
const bullets = items.map((item, i) => {
if (typeof item === "string") {
return { text: item, options: { bullet: true, fontSize: options.fontSize || 15, color: C.slate, fontFace: "Calibri", breakLine: i < items.length - 1 } };
}
return item;
});
s.addText(bullets, {
x: 0.35, y: 1.22, w: 9.3, h: 4.2,
valign: "top",
});
return s;
}
function twoColSlide(title, leftItems, rightItems, leftHeader, rightHeader) {
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.offWhite } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 1.05, fill: { color: C.navy } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 1.05, w: "100%", h: 0.07, fill: { color: C.gold } });
s.addText(title, {
x: 0.3, y: 0.12, w: 9.4, h: 0.8,
fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle", margin: 0,
});
// divider
s.addShape(pres.ShapeType.rect, { x: 5.05, y: 1.2, w: 0.04, h: 4.3, fill: { color: C.teal } });
// left header
if (leftHeader) {
s.addText(leftHeader, { x: 0.3, y: 1.22, w: 4.5, h: 0.38, fontSize: 13, bold: true, color: C.teal, fontFace: "Calibri" });
}
// right header
if (rightHeader) {
s.addText(rightHeader, { x: 5.2, y: 1.22, w: 4.5, h: 0.38, fontSize: 13, bold: true, color: C.teal, fontFace: "Calibri" });
}
const makeItems = (arr) => arr.map((item, i) => ({
text: item,
options: { bullet: true, fontSize: 13.5, color: C.slate, fontFace: "Calibri", breakLine: i < arr.length - 1 },
}));
const yStart = leftHeader ? 1.68 : 1.22;
const hAvail = leftHeader ? 3.7 : 4.2;
s.addText(makeItems(leftItems), { x: 0.3, y: yStart, w: 4.6, h: hAvail, valign: "top" });
s.addText(makeItems(rightItems), { x: 5.2, y: yStart, w: 4.6, h: hAvail, valign: "top" });
return s;
}
function tableSlide(title, headers, rows, colW) {
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.offWhite } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 1.05, fill: { color: C.navy } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 1.05, w: "100%", h: 0.07, fill: { color: C.gold } });
s.addText(title, {
x: 0.3, y: 0.12, w: 9.4, h: 0.8,
fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle", margin: 0,
});
const tableData = [
headers.map(h => ({ text: h, options: { bold: true, color: C.white, fontSize: 12, fontFace: "Calibri", fill: C.navy, align: "center" } })),
...rows.map((row, ri) => row.map(cell => ({
text: String(cell),
options: { fontSize: 11.5, color: C.slate, fontFace: "Calibri", fill: ri % 2 === 0 ? C.lightBlue : C.white, align: "center" },
}))),
];
s.addTable(tableData, {
x: 0.3, y: 1.25, w: 9.4,
colW: colW || headers.map(() => 9.4 / headers.length),
border: { pt: 0.5, color: C.teal },
rowH: 0.42,
});
return s;
}
function highlightBoxSlide(title, mainText, boxes) {
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.offWhite } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 1.05, fill: { color: C.navy } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 1.05, w: "100%", h: 0.07, fill: { color: C.gold } });
s.addText(title, {
x: 0.3, y: 0.12, w: 9.4, h: 0.8,
fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle", margin: 0,
});
if (mainText) {
s.addText(mainText, { x: 0.35, y: 1.22, w: 9.3, h: 0.6, fontSize: 14, color: C.slate, fontFace: "Calibri", bold: true });
}
// boxes: [{label, value, color}]
const boxW = 9.3 / boxes.length;
boxes.forEach((b, i) => {
const bx = 0.35 + i * boxW;
const by = mainText ? 2.0 : 1.5;
s.addShape(pres.ShapeType.roundRect, {
x: bx + 0.08, y: by, w: boxW - 0.16, h: 3.0,
fill: { color: b.color || C.navy }, rectRadius: 0.12,
line: { color: b.color || C.navy },
});
s.addText(b.label, {
x: bx + 0.08, y: by + 0.15, w: boxW - 0.16, h: 0.5,
fontSize: 12, bold: true, color: C.gold, align: "center", fontFace: "Calibri",
});
s.addText(b.value, {
x: bx + 0.1, y: by + 0.7, w: boxW - 0.2, h: 2.1,
fontSize: 12, color: C.white, align: "left", fontFace: "Calibri", valign: "top",
});
});
return s;
}
function warningSlide(title, caveats) {
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.offWhite } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 1.05, fill: { color: C.red } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 1.05, w: "100%", h: 0.07, fill: { color: C.gold } });
s.addText(title, {
x: 0.3, y: 0.12, w: 9.4, h: 0.8,
fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle", margin: 0,
});
const items = caveats.map((c, i) => ({
text: c,
options: { bullet: { type: "number" }, fontSize: 13, color: C.slate, fontFace: "Calibri", breakLine: i < caveats.length - 1 },
}));
s.addText(items, { x: 0.35, y: 1.22, w: 9.3, h: 4.2, valign: "top" });
return s;
}
// ─── SLIDES ────────────────────────────────────────────────────────────────
// 1. Title Slide
addTitleSlide(
"Oral Hypoglycemic Agents",
"Complete Clinical Pharmacology Reference for Medical & Pharmacy Students"
);
// 2. Agenda / Overview
contentSlide("Lecture Overview", [
"Introduction & Pathophysiology of Type 2 Diabetes",
"Overview of Drug Classes (9 classes)",
"Biguanides - Metformin (first-line agent)",
"Sulfonylureas (SUs) - Mechanisms & Safety",
"Meglitinides (Glinides)",
"Thiazolidinediones (TZDs / Glitazones)",
"DPP-4 Inhibitors (Gliptins)",
"SGLT2 Inhibitors (Gliflozins) - Cardiorenal Focus",
"Alpha-Glucosidase Inhibitors",
"Other Agents: Bile Acid Sequestrants & Dopamine Agonists",
"Treatment Escalation Algorithm & Individualization",
"Monitoring Schedule & HbA1c Targets",
"Critical Clinical Caveats & High-Yield Exam Points",
], { fontSize: 13.5 });
// 3. Pathophysiology overview
contentSlide("Pathophysiology of T2DM - Drug Targets", [
"Insulin resistance: peripheral tissues (muscle, fat) and liver do not respond normally to insulin",
"Beta-cell dysfunction: progressive loss of insulin secretory capacity over years",
"Glucotoxicity: chronic hyperglycemia further impairs beta-cell function",
"Incretin deficiency: reduced GLP-1 / GIP effect, blunted post-meal insulin secretion",
"Increased glucagon: alpha-cell dysregulation raises hepatic glucose output",
"Renal glucose reabsorption: kidneys recover glucose that should be excreted",
"EACH drug class corrects one or more of these defects - understanding the target predicts efficacy, side effects, and contraindications",
]);
// 4. Drug Classes Overview
addSectionDivider("Drug Classes at a Glance", C.navy);
// 5. Classes summary table
tableSlide(
"9 Major Classes of Oral Hypoglycemic Agents",
["Class", "Key Drug(s)", "Main Mechanism", "HbA1c Reduction"],
[
["Biguanides", "Metformin", "Suppress hepatic gluconeogenesis (AMPK)", "1.5-2.0%"],
["Sulfonylureas", "Glipizide, Glimepiride, Glyburide", "Close KATP channels → insulin secretion", "1.0-2.0%"],
["Meglitinides", "Repaglinide, Nateglinide", "Short-acting KATP closure (postprandial)", "0.5-1.5%"],
["TZDs", "Pioglitazone, Rosiglitazone", "PPARγ agonist → insulin sensitizer", "0.7-1.0%"],
["DPP-4 Inhibitors", "Sitagliptin, Linagliptin", "Prolong incretin (GLP-1/GIP) action", "0.5-1.0%"],
["SGLT2 Inhibitors", "Empagliflozin, Dapagliflozin", "Block renal glucose reabsorption", "0.7-1.0%"],
["Alpha-Glucosidase Inhibitors", "Acarbose, Miglitol", "Delay carbohydrate digestion", "0.5-0.8%"],
["Bile Acid Sequestrants", "Colesevelam", "Unclear; also lowers LDL-C", "~0.5%"],
["Dopamine Agonists", "Bromocriptine", "Reset hypothalamic circadian rhythm", "~0.5%"],
],
[2.0, 2.2, 3.0, 2.2]
);
// ─── METFORMIN ───────────────────────────────────────────────────────────
addSectionDivider("1. Biguanides\nMetformin", C.navy);
// 6. Metformin mechanism
contentSlide("Metformin - Mechanism of Action", [
"Activates AMP-activated protein kinase (AMPK) in the liver",
" → Suppresses hepatic gluconeogenesis and glycogenolysis (primary effect)",
"Improves peripheral insulin sensitivity (muscle)",
"Reduces intestinal glucose absorption (minor contribution)",
"Does NOT stimulate insulin secretion - no hypoglycemia risk when used alone",
"Requires functional gut microbiota (gut-AMPK pathway is partly microbiome-mediated)",
"UKPDS legacy: reduces cardiovascular events, possible anti-cancer properties",
]);
// 7. Metformin dosing
contentSlide("Metformin - Dosing & Formulations", [
"Starting dose: 500 mg once or twice daily with meals (OR 850 mg once daily)",
"Titrate every 1-2 weeks to minimize GI side effects",
"Maximum effective dose: 2000-2550 mg/day",
"Extended-release (XR / ER) formulations: better GI tolerability, once-daily dosing",
"Always take with food to reduce GI side effects",
"Onset: glucose lowering within days; full effect 4-8 weeks",
"Key advantages: Weight neutral to modest weight loss | No hypoglycemia | Very low cost | CV benefit",
]);
// 8. Metformin contraindications
twoColSlide(
"Metformin - Contraindications & Adverse Effects",
[
"eGFR <30 mL/min/1.73m² - CONTRAINDICATED",
"eGFR 30-45 - use with caution / reduce dose",
"Active hepatic disease or alcohol abuse",
"Heart failure: stable mild-moderate CHF now acceptable (current guidelines)",
"Iodinated contrast: hold on procedure day + 48 h after",
"Metabolic acidosis",
],
[
"GI effects (nausea, diarrhea, cramps) - up to 30%; dose-related, usually resolve",
"Lactic acidosis - rare (0.03/1000 patient-years); risk highest with renal/hepatic impairment",
"Vitamin B12 depletion - check annually in long-term users",
"Metallic taste",
"NO weight gain, NO hypoglycemia (when used alone)",
],
"Contraindications / Cautions",
"Adverse Effects"
);
// 9. Metformin monitoring
contentSlide("Metformin - Monitoring", [
"eGFR at baseline, annually, or more frequently if declining renal function",
"Vitamin B12 levels: annually in long-term users (metformin reduces B12 absorption in ileum)",
"LFTs at baseline",
"HbA1c every 3 months until at target, then every 6 months",
"Contrast dye protocol: hold metformin for 48 hours before and after iodinated contrast when eGFR <60",
"SICK-DAY RULES (SADMAN): Stop Metformin during vomiting/diarrhea illness - risk of AKI and drug accumulation",
]);
// ─── SULFONYLUREAS ────────────────────────────────────────────────────────
addSectionDivider("2. Sulfonylureas (SUs)", C.teal);
// 10. SU mechanism
contentSlide("Sulfonylureas - Mechanism of Action", [
"Bind to sulfonylurea receptor 1 (SUR1) subunit of pancreatic beta-cell KATP channels",
"Channel closure → membrane depolarization → voltage-gated Ca²⁺ channels open → Ca²⁺ influx",
"Ca²⁺ influx triggers exocytosis of insulin-containing granules",
"Effect is GLUCOSE-INDEPENDENT - insulin secreted even when glucose is low → hypoglycemia risk",
"Require FUNCTIONAL beta cells - ineffective in type 1 DM or very late T2DM",
"Second generation (glipizide, glyburide, glimepiride) are more potent and selective than first generation",
]);
// 11. SU dosing table
tableSlide(
"Sulfonylureas - Drug Comparison",
["Drug (Brand)", "Starting Dose", "Max Dose", "Duration", "Renal Notes"],
[
["Glipizide (Glucotrol)", "5 mg daily", "40 mg/day", "12-24 h", "Preferred in CKD"],
["Glyburide (DiaBeta)", "2.5-5 mg daily", "20 mg/day", "16-24 h", "AVOID in elderly/CKD"],
["Glimepiride (Amaryl)", "1-2 mg daily", "8 mg/day", "24 h", "Use small doses in CKD"],
["Chlorpropamide (1st gen)", "100-250 mg daily", "500 mg/day", "24-72 h", "Avoid - obsolete"],
["Tolbutamide (1st gen)", "500 mg TID", "3 g/day", "6-12 h", "Short acting"],
],
[2.2, 1.8, 1.6, 1.5, 2.3]
);
// 12. SU safety
twoColSlide(
"Sulfonylureas - Key Clinical Points",
[
"Potent HbA1c reduction (1-2%)",
"Low cost, extensive clinical history",
"Take 30 min BEFORE meals",
"Glipizide XL - take with breakfast",
"Secondary failure: 5-10%/year as beta-cell mass declines",
"Sulfonamide allergy: theoretical cross-reactivity (clinical significance unclear)",
],
[
"HYPOGLYCEMIA - major risk, especially glyburide",
"Weight gain (2-5 kg)",
"Glyburide: AVOID in elderly and CKD (active metabolite accumulates)",
"Beta-blockers MASK hypoglycemia symptoms (tachycardia suppressed; sweating is preserved)",
"Contraindicated: Type 1 DM, severe renal/hepatic impairment",
"Discontinue when prandial insulin is added (hypoglycemia risk doubles)",
],
"Advantages & Administration",
"Risks & Precautions"
);
// ─── MEGLITINIDES ────────────────────────────────────────────────────────
addSectionDivider("3. Meglitinides (Glinides)", C.slate);
// 13. Meglitinides
twoColSlide(
"Meglitinides - Mechanism, Dosing & Clinical Notes",
[
"MECHANISM: Same target as SUs (SUR1/KATP channels) but different binding site",
"Shorter duration of action - designed to cover postprandial glucose spikes",
"Repaglinide: 0.5-4 mg before each meal (max 16 mg/day)",
"Nateglinide: 60-120 mg before each meal",
"KEY RULE: Take with meal; SKIP the dose if a meal is skipped",
"More flexible than SUs (meal-by-meal dosing)",
],
[
"ADVANTAGES over SUs:",
"Lower fasting hypoglycemia risk",
"Flexible meal-by-meal dosing",
"DISADVANTAGES:",
"Dosed 3x/day (adherence burden)",
"Expensive, modest HbA1c reduction",
"Weight gain",
"RENAL NOTE: Repaglinide safer in CKD (biliary excretion); Nateglinide - caution in renal impairment",
],
"Mechanism & Dosing",
"Clinical Comparison"
);
// ─── TZDs ────────────────────────────────────────────────────────────────
addSectionDivider("4. Thiazolidinediones\n(TZDs / Glitazones)", C.navy);
// 14. TZD mechanism
contentSlide("TZDs - Mechanism of Action", [
"Peroxisome proliferator-activated receptor-gamma (PPARγ) agonists",
"PPARγ is a nuclear transcription factor predominantly expressed in adipose tissue",
"Activation increases transcription of genes encoding GLUT4, adiponectin, and lipogenic enzymes",
"Net effect: redistribution of fat from visceral/ectopic to subcutaneous; improved insulin sensitivity",
"Reduce hepatic glucose output and improve peripheral glucose uptake",
"Onset of effect: WEEKS TO MONTHS (transcriptional mechanism - not acute)",
"Members: Pioglitazone (Actos) - widely available; Rosiglitazone (Avandia) - FDA REMS restriction",
]);
// 15. TZD clinical
twoColSlide(
"TZDs - Advantages & Major Concerns",
[
"Durable HbA1c reduction (0.7-1.0%)",
"No hypoglycemia when used alone",
"Pioglitazone improves lipids: raises HDL, lowers TG",
"PROactive trial: pioglitazone may reduce CV events",
"Pioglitazone: 15-45 mg once daily",
"Rosiglitazone: 2-8 mg daily (restricted)",
"May benefit NAFLD/NASH (off-label)",
],
[
"Heart failure (NYHA III-IV): ABSOLUTELY contraindicated - TZDs cause fluid retention",
"Bladder cancer: pioglitazone - avoid in active/prior bladder cancer",
"Bone fractures: increased risk especially in postmenopausal women (reduced bone density)",
"Rosiglitazone: increased MI risk (FDA REMS)",
"Hepatotoxicity: check LFTs at baseline; monitor periodically",
"TZD + insulin: significantly increases fluid retention and HF risk - use with GREAT caution",
],
"Advantages",
"Major Concerns (Contraindications)"
);
// ─── DPP-4 INHIBITORS ────────────────────────────────────────────────────
addSectionDivider("5. DPP-4 Inhibitors\n(Gliptins)", C.teal);
// 16. DPP-4 mechanism
contentSlide("DPP-4 Inhibitors - Mechanism of Action", [
"DPP-4 (dipeptidyl peptidase-4) is an enzyme that rapidly degrades GLP-1 and GIP (incretin hormones)",
"Incretin hormones are secreted by gut in response to food intake",
"DPP-4 inhibitors prevent incretin degradation → prolonged GLP-1 and GIP activity",
"Elevated GLP-1/GIP → glucose-dependent insulin secretion from beta cells",
"Elevated GLP-1/GIP → decreased glucagon from alpha cells (suppresses hepatic glucose output)",
"GLUCOSE-DEPENDENT mechanism: only active when glucose is elevated → minimal hypoglycemia risk",
"Modest effect on weight (weight neutral)",
"Oral once-daily dosing (most members)",
]);
// 17. DPP-4 dosing table
tableSlide(
"DPP-4 Inhibitors - Drug Comparison & Renal Dosing",
["Drug (Brand)", "Standard Dose", "eGFR 30-45", "eGFR <30", "Special Note"],
[
["Sitagliptin (Januvia)", "100 mg once daily", "50 mg once daily", "25 mg once daily", "Dose-adjust in CKD"],
["Saxagliptin (Onglyza)", "5 mg once daily", "2.5 mg once daily", "2.5 mg once daily", "Increased HF risk - caution"],
["Linagliptin (Tradjenta)", "5 mg once daily", "No adjustment", "No adjustment", "Biliary excretion - CKD-safe"],
["Alogliptin (Nesina)", "25 mg once daily", "12.5 mg once daily", "6.25 mg once daily", "Dose-adjust in CKD"],
],
[2.2, 2.0, 1.8, 1.8, 1.6]
);
// 18. DPP-4 safety
contentSlide("DPP-4 Inhibitors - Safety & Adverse Effects", [
"ADVANTAGES: Weight neutral | Low hypoglycemia risk | Well tolerated | Once-daily oral dosing",
"Saxagliptin (SAVOR-TIMI trial): INCREASED heart failure hospitalization - use with caution in HF or high HF risk patients",
"Possible pancreatitis and pancreatic cancer risk - causality NOT established; remain vigilant, report persistent abdominal pain",
"Nasopharyngitis and upper respiratory infections (class effect)",
"Arthralgia (joint pain) - class effect",
"Bullous pemphigoid (rare skin blistering disease) - FDA class-wide warning; monitor skin",
"GLP-1 RA + DPP-4 inhibitor combination: NOT recommended - both target incretin system; DPP-4 inhibitor adds NO benefit when GLP-1 RA is already given",
]);
// ─── SGLT2 INHIBITORS ─────────────────────────────────────────────────────
addSectionDivider("6. SGLT2 Inhibitors\n(Gliflozins)", C.green);
// 19. SGLT2 mechanism
contentSlide("SGLT2 Inhibitors - Mechanism of Action", [
"SGLT2 (sodium-glucose cotransporter 2) is located in the proximal renal tubule (S1 segment)",
"Normally responsible for ~90% of renal glucose reabsorption",
"SGLT2 inhibitors BLOCK this transporter → glucosuria (spill ~70-80 g glucose/day in urine)",
"Result: blood glucose reduced; osmotic diuresis (caloric loss)",
"Mechanism is INSULIN-INDEPENDENT - effective even with severe insulin deficiency",
"ADDITIONAL BENEFITS beyond glucose lowering:",
" → Osmotic diuresis reduces preload → hemodynamic benefit in heart failure",
" → Blood pressure reduction (3-5 mmHg systolic)",
" → Weight loss (1-3 kg)",
" → Direct cardiorenal protective effects (not fully explained by glucose lowering alone)",
]);
// 20. SGLT2 outcomes
tableSlide(
"SGLT2 Inhibitors - Key Outcome Trials",
["Drug", "Trial", "Key Finding", "FDA Indication Expanded"],
[
["Empagliflozin (Jardiance)", "EMPA-REG OUTCOME", "Reduced MACE, CV death, HF hospitalization", "Yes - CV & CKD"],
["Canagliflozin (Invokana)", "CANVAS / CREDENCE", "Reduced MACE, HF hosp; CKD progression", "Yes - CV & CKD"],
["Dapagliflozin (Farxiga)", "DECLARE, DAPA-HF, DAPA-CKD", "HFrEF benefit (without DM); CKD benefit", "Yes - HF & CKD (no DM required)"],
["Ertugliflozin (Steglatro)", "VERTIS CV", "CV safety confirmed; no MACE reduction", "Limited"],
],
[2.5, 2.3, 3.2, 1.4]
);
// 21. SGLT2 adverse effects
twoColSlide(
"SGLT2 Inhibitors - Adverse Effects & Precautions",
[
"Genital mycotic infections (candidiasis) - VERY COMMON, especially in women",
"Urinary tract infections (less clearly established than genital infections)",
"Volume depletion / hypotension - especially with diuretics or in elderly",
"Euglycemic DKA: glucose may be only mildly elevated (150-200 mg/dL); check ketones if nausea/vomiting on SGLT2",
"Fournier's gangrene (necrotizing fasciitis of genitalia) - rare class warning",
],
[
"Amputations: canagliflozin - increased risk (Charcot foot, PAD patients - caution)",
"Bone fractures: canagliflozin associated",
"Hold SGLT2 inhibitors perioperatively (48 hours before surgery) - DKA risk",
"SADMAN sick-day rules: stop SGLT2 inhibitors during vomiting/diarrhea illness",
"Require eGFR ≥30-45 for glycemic benefit; cardiorenal benefit may extend to lower eGFR",
"Counsel on genital hygiene",
],
"Common Side Effects",
"Serious Risks & Perioperative"
);
// ─── ALPHA-GLUCOSIDASE INHIBITORS ─────────────────────────────────────────
addSectionDivider("7. Alpha-Glucosidase\nInhibitors", C.slate);
// 22. AGI
contentSlide("Alpha-Glucosidase Inhibitors - Acarbose & Miglitol", [
"MECHANISM: Competitively inhibit intestinal brush border alpha-glucosidase enzymes",
" → Delayed digestion of complex carbohydrates and disaccharides",
" → Blunted postprandial glucose rise (targets postprandial hyperglycemia specifically)",
" → Act LOCALLY in gut; acarbose has minimal systemic absorption",
"DOSING: Acarbose 25-100 mg WITH each meal (titrate slowly); Miglitol 25-100 mg with meals",
"ADVANTAGES: No hypoglycemia (alone) | No systemic absorption (acarbose) | Modest weight benefit",
"DISADVANTAGES: GI side effects (flatulence, diarrhea, bloating) in ~50-70% - often limits use | Modest HbA1c reduction (~0.5-0.8%) | Three times daily dosing",
"CRITICAL CAVEAT: If hypoglycemia occurs while on acarbose + SU or insulin - treat with PURE GLUCOSE (dextrose) NOT sucrose/orange juice (acarbose blocks sucrose digestion!)",
]);
// ─── OTHER AGENTS ─────────────────────────────────────────────────────────
addSectionDivider("8. Other Agents", C.navy);
// 23. Other agents
twoColSlide(
"Bile Acid Sequestrants & Dopamine Agonists",
[
"Drug: Colesevelam (Welchol)",
"Class: Bile acid sequestrant",
"Mechanism: Unknown in DM; modestly reduces HbA1c (~0.5%); also lowers LDL-C",
"USE CASE: When glycemic + lipid management needed simultaneously",
"Adverse effects: GI side effects; reduces absorption of fat-soluble vitamins and some drugs (timing matters)",
"Advantage: Not absorbed systemically",
],
[
"Drug: Bromocriptine (Cycloset)",
"Class: Dopamine D2 agonist (CNS-acting)",
"Mechanism: Resets hypothalamic circadian rhythms → improves insulin sensitivity",
"Modest HbA1c reduction",
"May be continued when insulin is added",
"Adverse effects: Nausea, orthostatic hypotension, dizziness, fatigue",
"FDA approved for T2DM (Cycloset formulation only)",
],
"Colesevelam",
"Bromocriptine"
);
// ─── TREATMENT ALGORITHM ─────────────────────────────────────────────────
addSectionDivider("Treatment Escalation\nAlgorithm", C.teal);
// 24. First-line
contentSlide("First-Line & Escalation Steps (ADA/EASD Consensus)", [
"FIRST LINE: Metformin remains recommended first-line if tolerated (unless contraindicated)",
"EARLY CONSIDERATION: If HbA1c ≥9% at presentation → initiate dual therapy from start OR insulin directly",
"Individualized early first-line based on comorbidities (see next slide)",
"STEP 1: Monotherapy (metformin or preferred first-line agent based on comorbidities)",
"STEP 2: Dual therapy at 3 months if HbA1c not at goal (add agent from different class)",
"STEP 3: Triple therapy at 3 months if still not at goal",
"STEP 4: Injectable therapy - GLP-1 RA BEFORE basal insulin",
"STEP 5: Basal insulin + bolus insulin (full basal-bolus) if needed",
"Reassess every 3 months until targets are achieved",
]);
// 25. Preferred agents by clinical context table
tableSlide(
"Drug Selection by Clinical Context",
["Clinical Scenario", "Preferred Agent(s)", "Avoid"],
[
["Established ASCVD or high CV risk", "GLP-1 RA (liraglutide, semaglutide, dulaglutide); SGLT2 inhibitor", "TZDs if HF risk"],
["Heart failure (HFrEF)", "SGLT2 inhibitor (empagliflozin, dapagliflozin, canagliflozin)", "TZDs, saxagliptin"],
["CKD (eGFR 25-60, albuminuria)", "SGLT2 inhibitor; Linagliptin (DPP-4, no dose adj)", "Metformin if eGFR <30, Glyburide"],
["Weight loss priority", "GLP-1 RA (most weight loss), SGLT2 inhibitor", "TZDs, SUs"],
["Minimizing hypoglycemia", "DPP-4 inhibitor, GLP-1 RA, SGLT2 inhibitor, TZD", "SUs, Meglitinides"],
["Cost concern", "Metformin, Sulfonylurea, TZD (pioglitazone)", "GLP-1 RA, SGLT2 inhibitors"],
["Elderly (>65 years)", "DPP-4 inhibitors (well tolerated)", "Glyburide (prolonged hypoglycemia)"],
["Obesity", "GLP-1 RA, SGLT2 inhibitor", "TZDs, SUs"],
],
[2.5, 4.0, 2.9]
);
// 26. Individualization
contentSlide("Individualization of Therapy - Special Populations", [
"Elderly (>65 yr): Avoid glyburide; target HbA1c 7.5-8.5% based on frailty; DPP-4 inhibitors well tolerated",
"CKD stage 3b-5: Avoid metformin (eGFR <30); avoid SUs except glipizide/small dose glimepiride; SGLT2 inhibitors lose glycemic efficacy at eGFR <45 but retain cardiorenal benefit; linagliptin preferred DPP-4 (no dose adjustment)",
"Heart failure: Avoid TZDs; prefer SGLT2 inhibitors; avoid saxagliptin",
"ASCVD: GLP-1 RA or SGLT2 inhibitor as early add-on",
"Liver disease: Avoid metformin (severe hepatic impairment); avoid TZDs; SUs unpredictable; DPP-4 inhibitors generally safe",
"Pregnancy: Insulin is PREFERRED; metformin and glyburide used but cross placenta; ALL SGLT2/DPP-4/GLP-1 agents - AVOID",
"Low adherence: Long-acting, once-daily or once-weekly agents (semaglutide weekly, dulaglutide weekly)",
"Hypoglycemia history: Avoid SUs and meglitinides; prefer GLP-1 RA, SGLT2 inhibitors, DPP-4 inhibitors, TZDs",
]);
// ─── HBA1C TARGETS ────────────────────────────────────────────────────────
addSectionDivider("HbA1c Targets &\nMonitoring", C.navy);
// 27. HbA1c targets
tableSlide(
"HbA1c Targets - Individualized Goals",
["Patient Population", "HbA1c Target", "Rationale"],
[
["Most non-elderly adults", "<7.0%", "Reduces microvascular complications"],
["Short disease duration, no CVD, long life expectancy", "<6.5%", "Tight control if achievable without hypoglycemia"],
["Elderly, limited life expectancy, hypoglycemia unawareness, multiple comorbidities", "7.5-8.5% (or <9%)", "Prevent hypoglycemia > tight control"],
["Pregnant (2nd-3rd trimester)", "<6.0-6.5%", "Prevent fetal macrosomia and complications"],
],
[3.0, 2.2, 4.8]
);
// 28. Monitoring schedule
tableSlide(
"Comprehensive Monitoring Schedule",
["Parameter", "Frequency", "Notes"],
[
["HbA1c", "Every 3 months until at goal; then every 6 months", "Primary glycemic target"],
["Fasting blood glucose (SMBG)", "Daily to weekly depending on regimen", "More frequent if on SU or insulin"],
["eGFR / Serum creatinine", "Baseline, then annually (or more with declining function)", "Critical for dose adjustments"],
["Urine albumin-to-creatinine ratio", "Annually", "Early CKD detection"],
["Lipid panel", "Annually", "Part of CV risk management"],
["Liver function tests", "Baseline for TZDs; periodically", "Especially for TZDs"],
["Vitamin B12", "Annually in patients on long-term metformin", "Ileal absorption reduced by metformin"],
["Blood pressure", "Every visit", "CV risk factor"],
["Foot examination", "Annually", "Peripheral neuropathy/PAD screening"],
["Retinal screening", "At diagnosis (T2DM), then annually or biannually", "Diabetic retinopathy detection"],
],
[2.3, 3.5, 3.6]
);
// ─── CLINICAL CAVEATS ─────────────────────────────────────────────────────
addSectionDivider("Critical Clinical\nCaveats", C.red);
// 29. Key caveats 1
warningSlide("High-Yield Clinical Caveats (1-6)", [
"Metformin + contrast: Hold for 48 h before AND after iodinated contrast when eGFR <60 (risk: contrast nephropathy → metformin accumulation → lactic acidosis)",
"Euglycemic DKA with SGLT2 inhibitors: Glucose may be only 150-200 mg/dL - normal glucose does NOT rule out DKA. Check ketones if patient on SGLT2i presents with nausea/vomiting/malaise. Hold perioperatively (48 h before surgery).",
"SADMAN sick-day rule: Stop Metformin, ACEi, Diuretics, NSAIDs, and SGLT2 inhibitors during vomiting/diarrhea illness to prevent AKI and drug accumulation.",
"Beta-blockers mask hypoglycemia symptoms (tachycardia and tremor suppressed). SWEATING IS PRESERVED and is the main warning sign to counsel patients on.",
"Hypoglycemia on acarbose: MUST treat with pure glucose (dextrose tablets, IV glucose, glucagon) - NOT orange juice or sucrose (acarbose blocks sucrose hydrolysis).",
"Sulfonylurea secondary failure: SU efficacy declines 5-10%/year as beta-cell mass decreases. Do not keep escalating dose. Switch strategy.",
]);
// 30. Key caveats 2
warningSlide("High-Yield Clinical Caveats (7-12)", [
"GLP-1 RA and pancreatitis: Contraindicated with history of pancreatitis, medullary thyroid carcinoma (MTC), or MEN2. Advise patients to report persistent abdominal pain.",
"TZD + insulin combination: Increases fluid retention and HF risk significantly. Avoid or use with great caution.",
"When adding insulin: Discontinue SUs and meglitinides when prandial insulin is added (hypoglycemia risk). Metformin, DPP-4i, SGLT2i, and GLP-1 RA can generally be continued.",
"CVOTs summary: DPP-4 inhibitors - CV safety confirmed but no benefit. GLP-1 RAs (liraglutide, semaglutide, dulaglutide) and SGLT2 inhibitors showed MACE reduction. SGLT2i showed strongest HF hospitalization reduction.",
"GLP-1 RA + DPP-4 inhibitor: NOT recommended - both target incretin system; DPP-4i adds no benefit when GLP-1 RA already given.",
"Renal function armamentarium: As eGFR falls: Linagliptin (no renal dose adj) | Repaglinide safer than SUs in CKD | SGLT2i lose glycemic efficacy at eGFR <45 (cardiorenal benefit extends lower) | Insulin effective at all eGFR levels but hypoglycemia risk rises.",
]);
// 31. Drug comparison (advantages/disadvantages summary)
highlightBoxSlide(
"Class-by-Class Summary: Advantage vs. Concern",
null,
[
{
label: "Metformin",
value: "✓ CV benefit\n✓ Weight neutral\n✓ Low cost\n✓ No hypoglycemia\n\n⚠ eGFR <30\n⚠ GI side effects\n⚠ B12 depletion",
color: C.navy,
},
{
label: "Sulfonylureas",
value: "✓ Potent (1-2% HbA1c)\n✓ Low cost\n\n⚠ HYPOGLYCEMIA\n⚠ Weight gain\n⚠ Secondary failure\n⚠ Avoid glyburide in elderly/CKD",
color: C.teal,
},
{
label: "TZDs",
value: "✓ Durable effect\n✓ Lipid benefit\n✓ No hypoglycemia\n\n⚠ HF risk\n⚠ Fluid retention\n⚠ Fractures\n⚠ Bladder cancer (pio)",
color: C.slate,
},
{
label: "DPP-4i",
value: "✓ Well tolerated\n✓ Weight neutral\n✓ Glucose-dependent\n\n⚠ Saxagliptin & HF\n⚠ Bullous pemphigoid\n⚠ Pancreatitis risk",
color: "1A5276",
},
]
);
// 32. SGLT2 vs GLP-1 RA highlights
twoColSlide(
"SGLT2 Inhibitors vs GLP-1 RAs - Head-to-Head",
[
"Route: ORAL once daily",
"Mechanism: Renal glucose excretion",
"CV benefit: MACE reduction + strong HF benefit",
"HF hospitalization: Best in class",
"CKD benefit: Strong (CREDENCE, DAPA-CKD)",
"Weight loss: 1-3 kg",
"BP reduction: Yes (osmotic diuresis)",
"Hypoglycemia: No",
"Key risk: Genital infections, euglycemic DKA",
"Cost: High",
],
[
"Route: SUBCUTANEOUS injection (most) or oral semaglutide",
"Mechanism: Incretin receptor agonist (GLP-1R)",
"CV benefit: MACE reduction + atherosclerosis benefit",
"HF hospitalization: Less pronounced than SGLT2i",
"GI effects: Significant nausea, vomiting",
"Weight loss: 3-5 kg (semaglutide > 5 kg)",
"BP reduction: Modest",
"Hypoglycemia: No",
"Key risk: Pancreatitis, MTC history contraindication",
"Cost: Very high",
],
"SGLT2 Inhibitors",
"GLP-1 Receptor Agonists"
);
// 33. Exam high-yield summary
contentSlide("Exam High-Yield: Quick-Fire Review", [
"First-line T2DM drug: Metformin (unless contraindicated)",
"Safest DPP-4 inhibitor in CKD: Linagliptin (no renal dose adjustment)",
"Safest meglitinide in CKD: Repaglinide (biliary excretion)",
"Avoid in elderly/CKD: Glyburide (prolonged hypoglycemia from active metabolite)",
"Contraindicated in HF: TZDs (fluid retention worsens HF)",
"Euglycemic DKA risk: SGLT2 inhibitors (hold perioperatively)",
"Hypoglycemia treatment on acarbose: Dextrose/glucose ONLY - not sucrose",
"GLP-1 RA + DPP-4i: Do NOT combine (no added incretin benefit)",
"Best agent for HFrEF: SGLT2 inhibitor (empagliflozin or dapagliflozin)",
"Hold before contrast: Metformin (48 h if eGFR <60)",
"Annual B12 monitoring: Long-term metformin users",
"Beta-blocker + SU: Masks hypoglycemia symptoms; sweating preserved",
]);
// 34. Closing slide
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.navy } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 2.2, w: "100%", h: 0.08, fill: { color: C.gold } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 3.4, w: "100%", h: 0.08, fill: { color: C.teal } });
s.addText("Oral Hypoglycemic Agents", {
x: 0.5, y: 0.5, w: 9, h: 1.5, fontSize: 34, bold: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle",
});
s.addText("Complete Clinical Pharmacology Reference", {
x: 0.5, y: 2.4, w: 9, h: 0.8, fontSize: 18, color: C.gold,
fontFace: "Calibri", align: "center", italic: true,
});
s.addText("Sources: Lippincott Illustrated Reviews: Pharmacology 7th Ed.\nWashington Manual of Medical Therapeutics | Goldman-Cecil Medicine\nTextbook of Family Medicine 9th Ed. | Comprehensive Clinical Nephrology 7th Ed.", {
x: 0.5, y: 3.6, w: 9, h: 1.4, fontSize: 13, color: C.teal,
fontFace: "Calibri", align: "center",
});
s.addText("For educational use | Medical & Pharmacy Students", {
x: 0.5, y: 5.1, w: 9, h: 0.35, fontSize: 11, color: "888888",
fontFace: "Calibri", align: "center",
});
}
// ─── WRITE FILE ────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/oral-hypoglycemics-pptx/Oral_Hypoglycemic_Agents.pptx" })
.then(() => console.log("SUCCESS: /home/daytona/workspace/oral-hypoglycemics-pptx/Oral_Hypoglycemic_Agents.pptx"))
.catch(e => { console.error("ERROR:", e); process.exit(1); });
cd /home/daytona/workspace/oral-hypoglycemics-pptx && node build.js 2>&1
ls -lh /home/daytona/workspace/oral-hypoglycemics-pptx/Oral_Hypoglycemic_Agents.pptx && python3 -c " from pptx import Presentation prs = Presentation('/home/daytona/workspace/oral-hypoglycemics-pptx/Oral_Hypoglycemic_Agents.pptx') print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides): texts = [shape.text_frame.text[:60] for shape in slide.shapes if shape.has_text_frame and shape.text_frame.text.strip()] print(f'Slide {i+1}: {texts[0] if texts else \"(no text)\"}') "
python3 -m markitdown /home/daytona/workspace/oral-hypoglycemics-pptx/Oral_Hypoglycemic_Agents.pptx 2>&1 | head -80
node -e " const pptxgen = require('pptxgenjs'); // Count addSlide calls in the file const fs = require('fs'); const src = fs.readFileSync('/home/daytona/workspace/oral-hypoglycemics-pptx/build.js', 'utf8'); const matches = src.match(/pres\.addSlide\(\)/g); console.log('Slides created:', matches ? matches.length : 0); "
node -e " const fs = require('fs'); const src = fs.readFileSync('/home/daytona/workspace/oral-hypoglycemics-pptx/build.js', 'utf8'); // Count all .addSlide() calls including those in helper functions const allMatches = src.match(/\.addSlide\(\)/g); // Also count helper function calls that each generate a slide const contentSlides = src.match(/contentSlide\(/g); const twoColSlides = src.match(/twoColSlide\(/g); const tableSlides = src.match(/tableSlide\(/g); const titleSlides = src.match(/addTitleSlide\(/g); const sectionSlides = src.match(/addSectionDivider\(/g); const warningSlides = src.match(/warningSlide\(/g); const highlightSlides = src.match(/highlightBoxSlide\(/g); console.log('pres.addSlide() calls:', allMatches ? allMatches.length : 0); console.log('addTitleSlide calls:', titleSlides ? titleSlides.length : 0); console.log('addSectionDivider calls:', sectionSlides ? sectionSlides.length : 0); console.log('contentSlide calls:', contentSlides ? contentSlides.length : 0); console.log('twoColSlide calls:', twoColSlides ? twoColSlides.length : 0); console.log('tableSlide calls:', tableSlides ? tableSlides.length : 0); console.log('warningSlide calls:', warningSlides ? warningSlides.length : 0); console.log('highlightBoxSlide calls:', highlightSlides ? highlightSlides.length : 0); // Note: each helper function creates 1 slide (via pres.addSlide() internally) // plus the closing slide adds 1 directly "
continue