Management of gestational diabetes mellitus
"gestational diabetes mellitus"[MeSH Terms] AND management
"gestational diabetes mellitus"[MeSH Terms] AND treatment
"gestational diabetes" AND insulin AND metformin
| Step | Test | Threshold |
|---|---|---|
| Step 1 | 50-g glucose challenge test (nonfasting), plasma glucose at 1 hour | ≥140 mg/dL (some use ≥130 mg/dL) |
| Step 2 (if Step 1 positive) | 100-g 3-hour OGTT (fasting) | See below |
| Time point | Abnormal value |
|---|---|
| Fasting | ≥95 mg/dL |
| 1 hour | ≥180 mg/dL |
| 2 hours | ≥155 mg/dL |
| 3 hours | ≥140 mg/dL |
| Time point | GDM threshold | Overt diabetes |
|---|---|---|
| Fasting | ≥92 mg/dL (5.1 mmol/L) | ≥126 mg/dL |
| 1 hour | ≥180 mg/dL (10.0 mmol/L) | - |
| 2 hours | ≥153 mg/dL (8.5 mmol/L) | ≥200 mg/dL |
| Measurement | Target |
|---|---|
| Fasting blood glucose | <95 mg/dL (<5.3 mmol/L) |
| 1-hour postprandial | <140 mg/dL (<7.8 mmol/L) |
| 2-hour postprandial | <120 mg/dL (<6.7 mmol/L) |
| Action | Timing |
|---|---|
| 75-g 2-hour OGTT to screen for T2DM or impaired glucose tolerance | 4-12 weeks postpartum |
| Annual glucose testing | Ongoing |
| Lifestyle intervention (weight loss, exercise) | Long-term |
| Metformin (if at high risk) | Reduces risk of progression to T2DM |
24-28 weeks → 50-g GCT
↓ if ≥140 mg/dL
100-g 3-hour OGTT
↓ if ≥2 values abnormal
GDM CONFIRMED
↓
MNT + Exercise (4 weeks)
↓ if targets not met
Add Insulin (preferred)
OR Metformin / Glyburide (if patient declines insulin)
↓
BG monitoring + Ultrasound q4-6 weeks
Antenatal testing (3rd trimester if insulin-requiring)
↓
Delivery at 37-39 weeks (or by OB indication)
↓
75-g OGTT at 4-12 weeks postpartum → Long-term follow-up
Give a pdf of this information p
mkdir -p /home/daytona/workspace/gdm-pdf && ls /home/daytona/workspace/gdm-pdf/
~/gdm-pdf/generate_gdm_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import PageBreak
OUTPUT = "/home/daytona/workspace/gdm-pdf/GDM_Management.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm,
leftMargin=2*cm,
topMargin=2.2*cm,
bottomMargin=2*cm,
title="Management of Gestational Diabetes Mellitus",
author="Orris Medical Reference"
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
"CustomTitle",
parent=styles["Title"],
fontSize=20,
textColor=colors.HexColor("#1a3a5c"),
spaceAfter=6,
spaceBefore=0,
leading=24,
fontName="Helvetica-Bold",
)
subtitle_style = ParagraphStyle(
"Subtitle",
parent=styles["Normal"],
fontSize=10,
textColor=colors.HexColor("#555555"),
spaceAfter=12,
alignment=TA_CENTER,
fontName="Helvetica-Oblique",
)
h1_style = ParagraphStyle(
"H1",
parent=styles["Heading1"],
fontSize=13,
textColor=colors.white,
spaceBefore=14,
spaceAfter=6,
fontName="Helvetica-Bold",
backColor=colors.HexColor("#1a3a5c"),
leftIndent=-0.3*cm,
rightIndent=-0.3*cm,
borderPad=5,
leading=16,
)
h2_style = ParagraphStyle(
"H2",
parent=styles["Heading2"],
fontSize=11,
textColor=colors.HexColor("#1a3a5c"),
spaceBefore=10,
spaceAfter=4,
fontName="Helvetica-Bold",
borderPadding=(0, 0, 2, 0),
leading=14,
)
body_style = ParagraphStyle(
"Body",
parent=styles["Normal"],
fontSize=9.5,
leading=14,
spaceAfter=5,
textColor=colors.HexColor("#222222"),
alignment=TA_JUSTIFY,
fontName="Helvetica",
)
bullet_style = ParagraphStyle(
"Bullet",
parent=body_style,
leftIndent=14,
bulletIndent=4,
spaceBefore=1,
spaceAfter=1,
leading=13,
)
note_style = ParagraphStyle(
"Note",
parent=body_style,
fontSize=8.5,
textColor=colors.HexColor("#555555"),
fontName="Helvetica-Oblique",
spaceAfter=6,
)
footer_style = ParagraphStyle(
"Footer",
parent=styles["Normal"],
fontSize=8,
textColor=colors.HexColor("#888888"),
alignment=TA_CENTER,
fontName="Helvetica-Oblique",
)
def h1(text):
return Paragraph(f" {text}", h1_style)
def h2(text):
return Paragraph(text, h2_style)
def body(text):
return Paragraph(text, body_style)
def bullet(text, level=1):
indent = 14 * level
s = ParagraphStyle(
"b", parent=bullet_style, leftIndent=indent+10, bulletIndent=indent
)
return Paragraph(f"• {text}", s)
def note(text):
return Paragraph(text, note_style)
def spacer(h=6):
return Spacer(1, h)
def make_table(header_row, data_rows, col_widths=None):
data = [header_row] + data_rows
if col_widths is None:
col_widths = [None] * len(header_row)
t = Table(data, colWidths=col_widths, hAlign="LEFT", repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), colors.HexColor("#1a3a5c")),
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 9),
("FONTSIZE", (0, 1), (-1, -1), 9),
("FONTNAME", (0, 1), (-1, -1), "Helvetica"),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.HexColor("#f0f4f8"), colors.white]),
("ALIGN", (0, 0), (-1, -1), "LEFT"),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#cccccc")),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING", (0, 0), (-1, -1), 5),
("LEFTPADDING", (0, 0), (-1, -1), 7),
("RIGHTPADDING", (0, 0), (-1, -1), 7),
]))
return t
# ---- PAGE HEADER/FOOTER ----
def on_first_page(canvas, doc):
canvas.saveState()
canvas.setFillColor(colors.HexColor("#1a3a5c"))
canvas.rect(0, A4[1]-1.2*cm, A4[0], 1.2*cm, fill=1, stroke=0)
canvas.setFillColor(colors.white)
canvas.setFont("Helvetica-Bold", 9)
canvas.drawString(2*cm, A4[1]-0.8*cm, "ORRIS MEDICAL REFERENCE")
canvas.setFont("Helvetica", 8)
canvas.drawRightString(A4[0]-2*cm, A4[1]-0.8*cm, "Generated: June 28, 2026")
# Footer
canvas.setFillColor(colors.HexColor("#888888"))
canvas.setFont("Helvetica-Oblique", 7.5)
canvas.drawCentredString(A4[0]/2, 1.2*cm,
"Sources: Creasy & Resnik's MFM | Harrison's IM 22e | Textbook of Family Medicine 9e | ACOG PB 190")
canvas.restoreState()
def on_later_pages(canvas, doc):
on_first_page(canvas, doc)
canvas.saveState()
canvas.setFont("Helvetica", 8)
canvas.setFillColor(colors.HexColor("#888888"))
canvas.drawRightString(A4[0]-2*cm, 1.2*cm, f"Page {doc.page}")
canvas.restoreState()
# ---- BUILD CONTENT ----
story = []
# Title block
story.append(spacer(8))
story.append(Paragraph("Management of Gestational Diabetes Mellitus", title_style))
story.append(Paragraph("A concise clinical reference | Orris Medical, 2026", subtitle_style))
story.append(HRFlowable(width="100%", thickness=1.5, color=colors.HexColor("#1a3a5c"), spaceAfter=10))
# ----- DEFINITION & PATHOPHYSIOLOGY -----
story.append(h1("1. Definition & Pathophysiology"))
story.append(body(
"Gestational diabetes mellitus (GDM) is defined as glucose intolerance first diagnosed during pregnancy "
"that is not clearly pre-existing diabetes. It affects 5–9% of pregnancies using the two-step US criteria "
"and approximately 8% overall. The core mechanism mirrors type 2 DM: an insufficient insulin secretory "
"response to the progressive insulin resistance of advancing gestation, driven by placental hormones — "
"primarily human placental lactogen — which increase with placental mass and gestational age. "
"A small subset (~6%) represent pre-type 1 diabetes unmasked by pregnancy."
))
# ----- SCREENING -----
story.append(h1("2. Screening"))
story.append(h2("Timing"))
story.append(body(
"Recommended at 24–28 weeks for all asymptomatic pregnant women (USPSTF Grade B). "
"Evidence is insufficient to recommend routine screening <24 weeks (USPSTF I statement). "
"High-risk women should be screened earlier; if negative, repeat in the second half of pregnancy."
))
story.append(h2("High-Risk Features"))
story.append(bullet("Obesity (BMI ≥30)"))
story.append(bullet("Prior GDM or macrosomic infant"))
story.append(bullet("Family history of type 2 DM"))
story.append(bullet("Glucosuria on routine testing"))
story.append(bullet("High-risk ethnicity: Hispanic, Native American, Asian, African American"))
story.append(bullet("Age >25 years"))
story.append(spacer(4))
# ----- DIAGNOSIS -----
story.append(h1("3. Diagnosis"))
story.append(h2("Two-Step Method (Standard in the United States)"))
story.append(body(
"<b>Step 1:</b> Non-fasting 50-g oral glucose challenge test (GCT). Plasma glucose at 1 hour. "
"If ≥140 mg/dL (some centres use ≥130 mg/dL), proceed to Step 2."
))
story.append(body(
"<b>Step 2:</b> 100-g 3-hour OGTT (after overnight fast of 8–14 h). "
"Two or more abnormal values = GDM (Carpenter-Coustan criteria, most widely used):"
))
t1 = make_table(
["Time Point", "Carpenter-Coustan (mg/dL)", "NDDG (mg/dL)"],
[
["Fasting", "≥95", "≥105"],
["1 hour", "≥180", "≥190"],
["2 hours", "≥155", "≥165"],
["3 hours", "≥140", "≥145"],
],
col_widths=[5.5*cm, 6*cm, 5.5*cm]
)
story.append(t1)
story.append(note("* ACOG 2018: women with 1 abnormal value may also be considered for treatment."))
story.append(h2("One-Step Method (IADPSG/WHO Criteria)"))
story.append(body(
"75-g OGTT at 24–28 weeks. GDM is diagnosed if ANY ONE value meets or exceeds the threshold:"
))
t2 = make_table(
["Time Point", "GDM Threshold", "Overt Diabetes"],
[
["Fasting", "≥92 mg/dL (5.1 mmol/L)", "≥126 mg/dL (7.0 mmol/L)"],
["1 hour", "≥180 mg/dL (10.0 mmol/L)", "—"],
["2 hours", "≥153 mg/dL (8.5 mmol/L)", "≥200 mg/dL (11.1 mmol/L)"],
["HbA1c", "—", "≥6.5%"],
],
col_widths=[4.5*cm, 6.5*cm, 6*cm]
)
story.append(t2)
story.append(spacer(4))
# ----- GLYCEMIC TARGETS -----
story.append(h1("4. Glycemic Targets During Pregnancy"))
t3 = make_table(
["Measurement", "Target"],
[
["Fasting blood glucose", "<95 mg/dL (<5.3 mmol/L)"],
["1-hour postprandial", "<140 mg/dL (<7.8 mmol/L)"],
["2-hour postprandial", "<120 mg/dL (<6.7 mmol/L)"],
],
col_widths=[8*cm, 9*cm]
)
story.append(t3)
story.append(note(
"HbA1c has limited monitoring utility in pregnancy due to higher red cell turnover causing falsely low values. "
"Self-monitoring of blood glucose (fasting + postprandial) is the standard."
))
# ----- MANAGEMENT -----
story.append(h1("5. Management"))
story.append(h2("Step 1: Medical Nutrition Therapy (MNT) — First Line"))
story.append(body(
"Effective in the majority of women with GDM. Key principles:"
))
story.append(bullet("Caloric target: 30–35 kcal/kg lean body weight per day"))
story.append(bullet("Distribute carbohydrates across 3 meals + 2–3 snacks; limit simple sugars"))
story.append(bullet("Gestational weight gain targets (National Academy of Medicine):"))
story.append(bullet("Normal weight (BMI 18.5–24.9): 25–35 lb", level=2))
story.append(bullet("Overweight (BMI 25–29.9): 15–25 lb", level=2))
story.append(bullet("Obese (BMI ≥30): 11–20 lb", level=2))
story.append(bullet("Involve a registered dietitian / diabetes educator"))
story.append(h2("Step 2: Exercise"))
story.append(bullet("Walking and moderate-intensity aerobic exercise improve insulin sensitivity"))
story.append(bullet("Recommended alongside dietary modification unless obstetric contraindication exists"))
story.append(spacer(4))
story.append(h2("Step 3: Pharmacotherapy"))
story.append(body(
"<b>Indications to initiate pharmacotherapy:</b> Fasting BG persistently ≥95 mg/dL OR "
"2-hour postprandial BG persistently ≥120 mg/dL, despite MNT."
))
story.append(spacer(4))
pharm_data = [
[
Paragraph("<b>Insulin</b>\n(Preferred)", ParagraphStyle("th", parent=body_style, fontName="Helvetica-Bold")),
Paragraph(
"• First-line; cannot cross placenta in significant amounts\n"
"• Established safety profile; lower treatment failure rates\n"
"• Dosing increases with gestational age:\n"
" – 1st trimester: 0.7–0.8 units/kg/day\n"
" – 2nd trimester: 0.8–1.0 units/kg/day\n"
" – 3rd trimester: 0.9–1.2 units/kg/day\n"
"• Basal + mealtime bolus strategy typical; CSII acceptable if pre-existing",
body_style
),
],
[
Paragraph("<b>Metformin</b>", ParagraphStyle("th", parent=body_style, fontName="Helvetica-Bold")),
Paragraph(
"• Alternative when patient declines/cannot reliably take insulin\n"
"• Advantages: lower birth weight, less gestational weight gain, lower preeclampsia rates vs. glyburide/insulin\n"
"• Concern: crosses placenta; uncertain long-term effects on offspring (higher childhood adiposity)\n"
"• Recent RCT (Dunne et al., JAMA 2023) evaluated early metformin use in GDM",
body_style
),
],
[
Paragraph("<b>Glyburide</b>", ParagraphStyle("th", parent=body_style, fontName="Helvetica-Bold")),
Paragraph(
"• Oral sulfonylurea; least preferred in contemporary practice\n"
"• Higher rates of neonatal hypoglycemia and macrosomia vs. metformin\n"
"• Use only if patient declines insulin AND metformin is contraindicated/not tolerated",
body_style
),
],
]
pharm_table = Table(
[["Agent", "Key Points"]] + [[r[0], r[1]] for r in pharm_data],
colWidths=[3.5*cm, 13.5*cm],
hAlign="LEFT"
)
pharm_table.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), colors.HexColor("#1a3a5c")),
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 9),
("FONTSIZE", (0, 1), (-1, -1), 9),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.HexColor("#eef3f8"), colors.white]),
("ALIGN", (0, 0), (-1, -1), "LEFT"),
("VALIGN", (0, 0), (-1, -1), "TOP"),
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#cccccc")),
("TOPPADDING", (0, 0), (-1, -1), 6),
("BOTTOMPADDING", (0, 0), (-1, -1), 6),
("LEFTPADDING", (0, 0), (-1, -1), 7),
("RIGHTPADDING", (0, 0), (-1, -1), 7),
]))
story.append(pharm_table)
story.append(spacer(6))
# ----- MONITORING -----
story.append(h1("6. Monitoring & Fetal Surveillance"))
story.append(bullet("Blood glucose monitoring: fasting + 1-hour or 2-hour postprandial, at minimum weekly (insulin resistance increases with gestational age)"))
story.append(bullet("HbA1c: every 4–6 weeks only if fasting hyperglycemia is present"))
story.append(bullet("Ultrasound: every 4–6 weeks to assess fetal growth; LGA fetus or polyhydramnios indicates suboptimal control"))
story.append(bullet("Continuous glucose monitoring (CGM): evidence-based in type 1 diabetes; role in GDM evolving"))
story.append(bullet("Antenatal testing (NST/BPP): in the third trimester for insulin-requiring GDM"))
story.append(bullet("Tight glycemic control at delivery minimizes neonatal hypoglycemia from fetal hyperinsulinemia"))
# ----- DELIVERY -----
story.append(h1("7. Delivery"))
story.append(bullet("Timing: induction recommended in early term period (37–39 weeks) for GDM"))
story.append(bullet("Cesarean section: reserved for suspected macrosomia with EFW ≥4,500 g (minimize shoulder dystocia / birth trauma)"))
story.append(bullet("Intrapartum glycemic control: tight BG management during labor to prevent neonatal hypoglycemia"))
# ----- NEONATAL COMPLICATIONS -----
story.append(h1("8. Neonatal Complications"))
story.append(body("Suboptimal glycemic control is associated with:"))
comp_data = [
["Hypoglycemia", "Macrosomia / LGA"],
["Hypocalcemia", "Shoulder dystocia"],
["Polycythemia", "Fetal distress / demise"],
["Hyperbilirubinemia (jaundice)", "Preeclampsia (maternal)"],
]
comp_table = Table(comp_data, colWidths=[8.5*cm, 8.5*cm], hAlign="LEFT")
comp_table.setStyle(TableStyle([
("FONTSIZE", (0, 0), (-1, -1), 9),
("FONTNAME", (0, 0), (-1, -1), "Helvetica"),
("ROWBACKGROUNDS", (0, 0), (-1, -1), [colors.HexColor("#f0f4f8"), colors.white]),
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#cccccc")),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING", (0, 0), (-1, -1), 5),
("LEFTPADDING", (0, 0), (-1, -1), 7),
]))
story.append(comp_table)
# ----- POSTPARTUM -----
story.append(h1("9. Postpartum Management"))
t4 = make_table(
["Action", "Timing"],
[
["75-g 2-hour OGTT (screen for T2DM or IGT)", "4–12 weeks postpartum"],
["Annual glucose tolerance testing", "Ongoing"],
["Lifestyle intervention: weight loss + exercise", "Long-term"],
["Consider metformin (high-risk patients)", "Reduces T2DM progression"],
],
col_widths=[10*cm, 7*cm]
)
story.append(t4)
story.append(spacer(4))
story.append(body(
"<b>Long-term risk:</b> GDM confers a 7- to 10-fold increased risk of type 2 DM. "
"Approximately 10% develop T2DM within 5 years of delivery; 30–60% lifetime risk. "
"Increased long-term cardiovascular disease risk also applies."
))
# ----- SUMMARY ALGORITHM -----
story.append(PageBreak())
story.append(h1("10. Summary Management Algorithm"))
algo_data = [
["Step", "Action"],
["24–28 weeks", "50-g glucose challenge test (nonfasting)"],
["If ≥140 mg/dL", "Perform 100-g 3-hour OGTT (fasting)"],
["If ≥2 values abnormal", "GDM CONFIRMED → begin management"],
["First-line", "Medical Nutrition Therapy + Exercise (target 4 weeks)"],
["If targets not met", "Initiate Insulin (preferred)\nOR Metformin / Glyburide if patient declines insulin"],
["Monitoring", "BG self-monitoring | Ultrasound q4–6 weeks | Antenatal testing (3rd trimester if insulin-requiring)"],
["Delivery", "Induction at 37–39 weeks | C-section if EFW ≥4,500 g"],
["Postpartum", "75-g OGTT at 4–12 weeks → Annual follow-up → Lifestyle modification"],
]
algo_table = Table(algo_data, colWidths=[5*cm, 12*cm], hAlign="LEFT", repeatRows=1)
algo_table.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), colors.HexColor("#1a3a5c")),
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 9),
("FONTNAME", (0, 1), (0, -1), "Helvetica-Bold"),
("FONTNAME", (1, 1), (1, -1), "Helvetica"),
("FONTSIZE", (0, 1), (-1, -1), 9),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.HexColor("#eef3f8"), colors.white]),
("ALIGN", (0, 0), (-1, -1), "LEFT"),
("VALIGN", (0, 0), (-1, -1), "TOP"),
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#cccccc")),
("TOPPADDING", (0, 0), (-1, -1), 6),
("BOTTOMPADDING", (0, 0), (-1, -1), 6),
("LEFTPADDING", (0, 0), (-1, -1), 7),
("RIGHTPADDING", (0, 0), (-1, -1), 7),
("BACKGROUND", (0, 4), (-1, 4), colors.HexColor("#d4e6f1")), # First-line highlight
("BACKGROUND", (0, 5), (-1, 5), colors.HexColor("#fef9e7")), # Pharmacotherapy highlight
]))
story.append(algo_table)
story.append(spacer(10))
# ----- SOURCES -----
story.append(HRFlowable(width="100%", thickness=0.8, color=colors.HexColor("#cccccc"), spaceAfter=6))
story.append(Paragraph("Key References", h2_style))
story.append(note("1. Creasy & Resnik's Maternal-Fetal Medicine: Principles and Practice — Chapter 59"))
story.append(note("2. Harrison's Principles of Internal Medicine 22e (2025, McGraw-Hill) — pp. 3943–3944"))
story.append(note("3. Textbook of Family Medicine 9e — pp. 491–492"))
story.append(note("4. ACOG Practice Bulletin No. 190: Gestational Diabetes Mellitus (2018)"))
story.append(note("5. Dunne F et al. Early Metformin in Gestational Diabetes. JAMA. 2023 Oct 24. PMID: 37786390"))
story.append(note("6. IADPSG Consensus Panel. Recommendations on diagnosis of hyperglycemia in pregnancy. Diabetes Care. 2010;33:676–682."))
# ---- BUILD ----
doc.build(story, onFirstPage=on_first_page, onLaterPages=on_later_pages)
print("PDF generated:", OUTPUT)
python /home/daytona/workspace/gdm-pdf/generate_gdm_pdf.py
GDM Management
PDF Document · PDF