hi,... i am looking for specific product characteristics of newly approved insulin icodec, [awikly]from a clinician pov
insulin icodec once weekly basal insulin
insulin icodec FDA approved product characteristics clinician 2025 2026
PMID: 40802020
PMID: 38224978
https://www.drugs.com/newdrugs/fda-approves-awiqli-insulin-i…
| Parameter | Detail |
|---|---|
| Concentration | U-700 (700 units/mL) - this is 7x more concentrated than standard U-100 |
| Delivery | Awiqli FlexTouch pen (subcutaneous injection) |
| Injection frequency | Once weekly, same day each week |
| Injection sites | Abdomen, thigh, upper arm (standard subcutaneous sites) |
| Pen type | Pre-filled, disposable - specifically designed for U-700 |
Clinical note on U-700 concentration: The pen is dose-locked to prevent unit confusion. Do NOT attempt to draw up in a syringe - this would result in massive dosing error (7x overdose). Only use the dedicated Awiqli FlexTouch.
| Switching From | Conversion Factor | Notes |
|---|---|---|
| Once-daily glargine U-100/U-300 or degludec | Total weekly dose = daily dose × 7 × 0.8 (i.e., 80%) | 20% reduction to account for the flatter profile and reduced hypoglycemia risk during initiation |
| Twice-daily NPH or premixed | Convert total daily dose × 7 × 0.8 | Expect slower onset of full steady-state effect |
| Trial | Comparator | Background therapy | Key finding |
|---|---|---|---|
| ONWARDS 1 | Glargine U-300 | OADs ± GLP-1 RA | Non-inferior HbA1c reduction; icodec superior at week 52 in insulin-naive |
| ONWARDS 2 | Degludec | Basal insulin (switching) | Non-inferior HbA1c |
| ONWARDS 3 | Glargine U-100 | Insulin-naive + OADs | Non-inferior HbA1c |
| ONWARDS 5 | Daily basal analogues | Insulin-naive, with dosing app | Non-inferior; improved treatment satisfaction |
| Population | Guidance |
|---|---|
| Elderly | Use with caution; hypoglycemia may be prolonged - consider lower starting dose |
| Renal impairment | Increased hypoglycemia sensitivity - more frequent glucose monitoring; dose adjust as needed |
| Hepatic impairment | Similar caution - reduced gluconeogenesis amplifies hypo risk |
| Pregnancy | Not recommended - insufficient data; switch to well-studied daily insulins (NPH or glargine U-100) |
| Hospitalized patients | Switch to daily insulin during acute illness/surgery - weekly dosing is NOT appropriate in ICU or perioperative settings due to unpredictable eating/activity changes and inability to rapidly adjust |
| T1D | Used in some markets (EU-approved for T1D); US label is T2D only; requires co-administration with bolus insulin; slightly higher hypoglycemia rate in T1D vs T2D |
Create a practical quick-reference PDF on icodec dosing & conversion for clinician use
mkdir -p /tmp/workspace/icodec-pdf && ls /tmp/workspace/icodec-pdf/
~/icodec-pdf/build_icodec_pdf.py
"""
Insulin Icodec (Awiqli) Clinician Quick-Reference PDF
Built with ReportLab
"""
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm, cm
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import PageBreak
# ─────────────────────────────────────────────
# Colour palette (navy / teal / amber / white)
# ─────────────────────────────────────────────
NAVY = colors.HexColor("#1B3A5C")
TEAL = colors.HexColor("#0D7A8A")
AMBER = colors.HexColor("#E07B39")
LTBLUE = colors.HexColor("#D6EAF8")
LTGREY = colors.HexColor("#F2F4F4")
MIDGREY = colors.HexColor("#BDC3C7")
WHITE = colors.white
RED = colors.HexColor("#C0392B")
GREEN = colors.HexColor("#1A7A4A")
OUTPUT = "/tmp/workspace/icodec-pdf/Icodec_Clinician_QuickRef.pdf"
PAGE_W, PAGE_H = A4
MARGIN = 15 * mm
# ─────────────────────────────────────────────
# Styles
# ─────────────────────────────────────────────
def make_styles():
base = getSampleStyleSheet()
styles = {}
styles["banner_title"] = ParagraphStyle(
"banner_title", fontName="Helvetica-Bold", fontSize=18,
textColor=WHITE, alignment=TA_CENTER, leading=22, spaceAfter=2
)
styles["banner_sub"] = ParagraphStyle(
"banner_sub", fontName="Helvetica", fontSize=9,
textColor=colors.HexColor("#AED6F1"), alignment=TA_CENTER, leading=12
)
styles["section_hdr"] = ParagraphStyle(
"section_hdr", fontName="Helvetica-Bold", fontSize=10,
textColor=WHITE, alignment=TA_LEFT, leading=13, spaceAfter=1,
spaceBefore=4
)
styles["body"] = ParagraphStyle(
"body", fontName="Helvetica", fontSize=8.5,
textColor=colors.HexColor("#1C1C1C"), leading=12, spaceAfter=2
)
styles["body_bold"] = ParagraphStyle(
"body_bold", fontName="Helvetica-Bold", fontSize=8.5,
textColor=NAVY, leading=12, spaceAfter=2
)
styles["small"] = ParagraphStyle(
"small", fontName="Helvetica", fontSize=7.5,
textColor=colors.HexColor("#555555"), leading=10
)
styles["warning"] = ParagraphStyle(
"warning", fontName="Helvetica-Bold", fontSize=8,
textColor=RED, leading=11
)
styles["green"] = ParagraphStyle(
"green", fontName="Helvetica-Bold", fontSize=8,
textColor=GREEN, leading=11
)
styles["tbl_hdr"] = ParagraphStyle(
"tbl_hdr", fontName="Helvetica-Bold", fontSize=8,
textColor=WHITE, alignment=TA_CENTER, leading=10
)
styles["tbl_cell"] = ParagraphStyle(
"tbl_cell", fontName="Helvetica", fontSize=8,
textColor=colors.HexColor("#1C1C1C"), leading=10, alignment=TA_LEFT
)
styles["tbl_cell_bold"] = ParagraphStyle(
"tbl_cell_bold", fontName="Helvetica-Bold", fontSize=8,
textColor=NAVY, leading=10, alignment=TA_LEFT
)
styles["tbl_cell_c"] = ParagraphStyle(
"tbl_cell_c", fontName="Helvetica", fontSize=8,
textColor=colors.HexColor("#1C1C1C"), leading=10, alignment=TA_CENTER
)
styles["tbl_cell_bold_c"] = ParagraphStyle(
"tbl_cell_bold_c", fontName="Helvetica-Bold", fontSize=9,
textColor=AMBER, leading=10, alignment=TA_CENTER
)
styles["footnote"] = ParagraphStyle(
"footnote", fontName="Helvetica-Oblique", fontSize=7,
textColor=colors.HexColor("#777777"), leading=9
)
styles["pill_label"] = ParagraphStyle(
"pill_label", fontName="Helvetica-Bold", fontSize=7.5,
textColor=WHITE, alignment=TA_CENTER, leading=9
)
return styles
# ─────────────────────────────────────────────
# Helper: section header row for a table-like block
# ─────────────────────────────────────────────
def section_header(text, styles, color=NAVY, colspan=4):
return Table(
[[Paragraph(text, styles["section_hdr"])]],
colWidths=[PAGE_W - 2 * MARGIN],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("ROUNDEDCORNERS", [3,3,3,3]),
])
)
def hr(color=MIDGREY, thickness=0.5):
return HRFlowable(width="100%", thickness=thickness, color=color, spaceAfter=3, spaceBefore=3)
def sp(h=3):
return Spacer(1, h * mm)
# ─────────────────────────────────────────────
# Page background canvas callback
# ─────────────────────────────────────────────
def draw_page_bg(canvas, doc):
canvas.saveState()
# Top banner background
canvas.setFillColor(NAVY)
canvas.rect(0, PAGE_H - 32 * mm, PAGE_W, 32 * mm, fill=1, stroke=0)
# Teal accent stripe
canvas.setFillColor(TEAL)
canvas.rect(0, PAGE_H - 34.5 * mm, PAGE_W, 2.5 * mm, fill=1, stroke=0)
# Bottom footer bar
canvas.setFillColor(NAVY)
canvas.rect(0, 0, PAGE_W, 10 * mm, fill=1, stroke=0)
# Footer text
canvas.setFillColor(colors.HexColor("#AED6F1"))
canvas.setFont("Helvetica", 7)
canvas.drawString(MARGIN, 3.5 * mm,
"Awiqli® (insulin icodec-abae) 700 units/mL | FDA Approved March 26, 2026 | For adult T2D only")
canvas.setFont("Helvetica", 7)
page_num = canvas.getPageNumber()
canvas.drawRightString(PAGE_W - MARGIN, 3.5 * mm, f"Page {page_num}")
# Amber left accent bar
canvas.setFillColor(AMBER)
canvas.rect(0, 10 * mm, 4 * mm, PAGE_H - 44 * mm, fill=1, stroke=0)
canvas.restoreState()
# ─────────────────────────────────────────────
# MAIN BUILD
# ─────────────────────────────────────────────
def build():
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=MARGIN + 6 * mm,
rightMargin=MARGIN,
topMargin=34 * mm,
bottomMargin=14 * mm,
title="Insulin Icodec (Awiqli) Clinician Quick Reference",
author="Orris Medical Reference",
subject="Once-Weekly Basal Insulin Dosing & Conversion",
)
styles = make_styles()
S = styles # shorthand
elems = []
# ── BANNER (drawn by canvas; add a spacer to clear it) ──
# Overlay on the canvas-drawn banner
banner_data = [[
Paragraph("AWIQLI<sup>®</sup> (Insulin Icodec)", S["banner_title"]),
],[
Paragraph(
"Once-Weekly Basal Insulin · U-700 · FDA Approved March 26 2026 · Clinician Quick Reference",
S["banner_sub"]
),
]]
banner_tbl = Table(banner_data, colWidths=[PAGE_W - 2*MARGIN - 6*mm])
banner_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.transparent),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING", (0,0), (-1,-1), 0),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
# We actually just put text in canvas; add spacer matching banner height
# (the canvas draws the banner at top, so we need top-margin content)
# ─────────────────────────────
# SECTION 1: Key Facts at a Glance
# ─────────────────────────────
elems.append(section_header(" KEY FACTS AT A GLANCE", S, color=NAVY))
elems.append(sp(2))
facts = [
["Class:", "First-in-class once-weekly basal insulin analogue",
"Half-life:", "~196 h (~8 days)"],
["Formulation:", "U-700 (700 units/mL) — 7× more concentrated than U-100",
"Steady state:", "~3–4 weeks (2–4 doses)"],
["Device:", "Awiqli FlexTouch® pen — ONLY approved delivery device",
"Approval:", "FDA Mar 2026 | EU approved | Adults T2D only"],
["Dosing interval:", "Once weekly — same day each week",
"Not approved:", "Paediatrics | T1D (US) | IV use"],
]
facts_tbl = Table(
[[Paragraph(c, S["tbl_cell_bold"] if i % 2 == 0 else S["tbl_cell"])
for i, c in enumerate(row)]
for row in facts],
colWidths=[28*mm, 62*mm, 26*mm, 62*mm]
)
facts_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LTGREY),
("BACKGROUND", (0,0), (0,-1), LTBLUE),
("BACKGROUND", (2,0), (2,-1), LTBLUE),
("ROWBACKGROUNDS",(0,0), (-1,-1), [LTGREY, WHITE]),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("GRID", (0,0), (-1,-1), 0.25, MIDGREY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
elems.append(facts_tbl)
elems.append(sp(3))
# ─────────────────────────────
# SECTION 2: Dosing — two columns (Initiation | Titration)
# ─────────────────────────────
elems.append(section_header(" DOSING — INITIATION & TITRATION", S, color=TEAL))
elems.append(sp(2))
# --- 2a: Starting dose table ---
init_hdr = [
Paragraph("STARTING DOSE", S["tbl_hdr"]),
Paragraph("RECOMMENDED WEEKLY DOSE", S["tbl_hdr"]),
Paragraph("NOTES", S["tbl_hdr"]),
]
init_rows = [
[Paragraph("Insulin-naive T2D", S["tbl_cell_bold"]),
Paragraph("70 units once weekly", S["tbl_cell_bold_c"]),
Paragraph("Adjust every week based on fasting glucose", S["tbl_cell"])],
[Paragraph("On OADs + GLP-1 RA", S["tbl_cell_bold"]),
Paragraph("70 units once weekly", S["tbl_cell_bold_c"]),
Paragraph("Continue OADs; monitor for hypo with sulfonylureas", S["tbl_cell"])],
[Paragraph("On basal-bolus (T2D)", S["tbl_cell_bold"]),
Paragraph("See conversion table below", S["tbl_cell_bold_c"]),
Paragraph("Replace basal component only; maintain mealtime insulin", S["tbl_cell"])],
]
init_tbl = Table([init_hdr] + init_rows, colWidths=[48*mm, 50*mm, 80*mm])
init_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LTGREY, WHITE]),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("GRID", (0,0), (-1,-1), 0.25, MIDGREY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
elems.append(init_tbl)
elems.append(sp(3))
# --- 2b: Titration algorithm ---
titration_hdr = [
Paragraph("FASTING GLUCOSE\n(mean of past 3 readings)", S["tbl_hdr"]),
Paragraph("DOSE ADJUSTMENT\n(next weekly dose)", S["tbl_hdr"]),
Paragraph("ACTION", S["tbl_hdr"]),
]
titration_rows = [
[Paragraph("< 80 mg/dL (< 4.4 mmol/L)", S["tbl_cell"]),
Paragraph("DECREASE by 20 units", S["warning"]),
Paragraph("Review for hypoglycaemia; check for missed meals", S["tbl_cell"])],
[Paragraph("80 – 130 mg/dL (4.4 – 7.2 mmol/L)", S["tbl_cell"]),
Paragraph("NO CHANGE ✓ Target", S["green"]),
Paragraph("Continue current dose", S["tbl_cell"])],
[Paragraph("131 – 180 mg/dL (7.3 – 10.0 mmol/L)", S["tbl_cell"]),
Paragraph("INCREASE by 20 units", S["tbl_cell_bold"]),
Paragraph("Reassess at next weekly contact", S["tbl_cell"])],
[Paragraph("> 180 mg/dL (> 10.0 mmol/L)", S["tbl_cell"]),
Paragraph("INCREASE by 40 units", S["tbl_cell_bold"]),
Paragraph("Consider earlier review; check adherence & injection technique", S["tbl_cell"])],
]
titration_tbl = Table([titration_hdr] + titration_rows, colWidths=[55*mm, 50*mm, 73*mm])
titration_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LTGREY, WHITE, LTGREY, WHITE]),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("GRID", (0,0), (-1,-1), 0.25, MIDGREY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
elems.append(titration_tbl)
elems.append(sp(2))
elems.append(Paragraph(
"* Minimum dose: 50 units/week. Adjust no more than once per week. "
"Steady state reached after ~3–4 doses — avoid aggressive uptitration in first month.",
S["footnote"]
))
elems.append(sp(3))
# ─────────────────────────────
# SECTION 3: CONVERSION TABLE
# ─────────────────────────────
elems.append(section_header(" CONVERSION TO ICODEC (Awiqli)", S, color=AMBER))
elems.append(sp(2))
conv_hdr = [
Paragraph("SWITCHING FROM", S["tbl_hdr"]),
Paragraph("CONVERSION FORMULA", S["tbl_hdr"]),
Paragraph("EXAMPLE\n(Daily dose 20 u → Weekly icodec)", S["tbl_hdr"]),
Paragraph("FIRST-DOSE\nADJUSTMENT", S["tbl_hdr"]),
]
conv_rows = [
[Paragraph("Once-daily glargine U-100\nor glargine U-300", S["tbl_cell_bold"]),
Paragraph("Daily dose × 7 × 0.8", S["tbl_cell_bold_c"]),
Paragraph("20 × 7 × 0.8 = 112 units", S["tbl_cell_c"]),
Paragraph("No loading dose\n(start at 80% weekly)", S["tbl_cell"])],
[Paragraph("Once-daily degludec", S["tbl_cell_bold"]),
Paragraph("Daily dose × 7 × 0.8", S["tbl_cell_bold_c"]),
Paragraph("20 × 7 × 0.8 = 112 units", S["tbl_cell_c"]),
Paragraph("No loading dose\n(start at 80% weekly)", S["tbl_cell"])],
[Paragraph("Twice-daily NPH\nor premixed insulin", S["tbl_cell_bold"]),
Paragraph("Total daily dose × 7 × 0.8", S["tbl_cell_bold_c"]),
Paragraph("(10+10) × 7 × 0.8 = 112 units", S["tbl_cell_c"]),
Paragraph("No loading dose;\nmonitor closely for hypo", S["tbl_cell"])],
[Paragraph("Insulin naive\n(starting de novo)", S["tbl_cell_bold"]),
Paragraph("Start at 70 units/week\n(fixed initiation)", S["tbl_cell_bold_c"]),
Paragraph("—", S["tbl_cell_c"]),
Paragraph("N/A — standard\ninitiation dose", S["tbl_cell"])],
]
col_w = [42*mm, 42*mm, 54*mm, 40*mm]
conv_tbl = Table([conv_hdr] + conv_rows, colWidths=col_w)
conv_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), AMBER),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LTGREY, WHITE, LTGREY, WHITE]),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("GRID", (0,0), (-1,-1), 0.25, MIDGREY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
elems.append(conv_tbl)
elems.append(sp(2))
elems.append(Paragraph(
"⚠ The 20% dose reduction (0.8 factor) is intentional. Do NOT correct upward in the first 3–4 weeks — "
"steady state has not yet been reached and early uptitration risks hypoglycaemia.",
S["warning"]
))
elems.append(sp(3))
# ─────────────────────────────
# SECTION 4: Missed Dose Rules
# ─────────────────────────────
elems.append(section_header(" MISSED DOSE MANAGEMENT", S, color=NAVY))
elems.append(sp(2))
missed_hdr = [
Paragraph("SCENARIO", S["tbl_hdr"]),
Paragraph("TIME UNTIL NEXT SCHEDULED DOSE", S["tbl_hdr"]),
Paragraph("ACTION", S["tbl_hdr"]),
]
missed_rows = [
[Paragraph("Patient forgot to inject", S["tbl_cell_bold"]),
Paragraph("≥ 3 days (72 hours) remaining", S["tbl_cell"]),
Paragraph("✔ Administer the missed dose NOW — then resume usual weekly schedule", S["green"])],
[Paragraph("Patient forgot to inject", S["tbl_cell_bold"]),
Paragraph("< 3 days (72 hours) remaining", S["tbl_cell"]),
Paragraph("✘ SKIP the missed dose — inject next dose on usual scheduled day", S["warning"])],
[Paragraph("Wrong day injected\n(1–2 days early/late)", S["tbl_cell_bold"]),
Paragraph("Flexible window", S["tbl_cell"]),
Paragraph("Administer on the off-day; reset next dose to 7 days later", S["tbl_cell"])],
]
missed_tbl = Table([missed_hdr] + missed_rows, colWidths=[48*mm, 58*mm, 72*mm])
missed_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LTGREY, WHITE, LTGREY]),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("GRID", (0,0), (-1,-1), 0.25, MIDGREY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
elems.append(missed_tbl)
elems.append(sp(3))
# ─────────────────────────────
# SECTION 5: Special Populations & Cautions
# ─────────────────────────────
elems.append(section_header(" SPECIAL POPULATIONS & CLINICAL CAUTIONS", S, color=TEAL))
elems.append(sp(2))
pop_hdr = [
Paragraph("POPULATION / SITUATION", S["tbl_hdr"]),
Paragraph("GUIDANCE", S["tbl_hdr"]),
Paragraph("RISK FLAG", S["tbl_hdr"]),
]
pop_rows = [
[Paragraph("Elderly (≥ 65 yrs)", S["tbl_cell_bold"]),
Paragraph("Consider lower starting dose (e.g. 50–60 u/wk); more frequent BG monitoring", S["tbl_cell"]),
Paragraph("⚠ Prolonged hypo risk", S["warning"])],
[Paragraph("Renal impairment", S["tbl_cell_bold"]),
Paragraph("Use with caution; reduced gluconeogenesis amplifies hypo risk; dose titrate slowly", S["tbl_cell"]),
Paragraph("⚠ Hypo risk ↑", S["warning"])],
[Paragraph("Hepatic impairment", S["tbl_cell_bold"]),
Paragraph("Start at lower dose; monitor closely — impaired glycogen storage", S["tbl_cell"]),
Paragraph("⚠ Hypo risk ↑", S["warning"])],
[Paragraph("Pregnancy / planning pregnancy", S["tbl_cell_bold"]),
Paragraph("NOT recommended — insufficient data. Switch to daily NPH or glargine U-100", S["warning"]),
Paragraph("✘ Do NOT use", S["warning"])],
[Paragraph("Hospitalised / perioperative / ICU", S["tbl_cell_bold"]),
Paragraph("Discontinue icodec on admission. Switch to daily basal insulin for flexible dose management", S["warning"]),
Paragraph("✘ Not appropriate inpatient", S["warning"])],
[Paragraph("Type 1 Diabetes (T1D)", S["tbl_cell_bold"]),
Paragraph("Not FDA-approved for T1D in US (EU-approved). Use with bolus insulin. Higher hypo risk than T2D.", S["tbl_cell"]),
Paragraph("⚠ Off-label US use", S["warning"])],
[Paragraph("Paediatrics", S["tbl_cell_bold"]),
Paragraph("Not approved — safety & efficacy not established", S["warning"]),
Paragraph("✘ Contraindicated", S["warning"])],
]
pop_tbl = Table([pop_hdr] + pop_rows, colWidths=[52*mm, 90*mm, 36*mm])
pop_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LTGREY, WHITE] * 5),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("GRID", (0,0), (-1,-1), 0.25, MIDGREY),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
elems.append(pop_tbl)
elems.append(sp(3))
# ─────────────────────────────
# SECTION 6: Safety & Hypoglycaemia Box
# ─────────────────────────────
elems.append(section_header(" HYPOGLYCAEMIA — KEY CONSIDERATIONS", S, color=RED))
elems.append(sp(2))
hypo_bullets = [
("Risk period:", "Highest in first 4–8 weeks (loading phase while reaching steady state)"),
("Severity concern:", "Long half-life (~8 days) means hypoglycaemia can be PROLONGED and harder to self-correct"),
("Threshold:", "Clinically significant hypo defined as < 54 mg/dL (< 3.0 mmol/L)"),
("ONWARDS data:", "Overall hypo rates similar to daily basal analogues; slightly higher clinically significant hypo early on"),
("Patient education:", "Ensure glucagon kit (or nasal glucagon) prescribed and patient/carer trained BEFORE first dose"),
("Masking risk:", "Counsel on beta-blocker use masking adrenergic symptoms of hypoglycaemia"),
("Driving/work:", "Advise caution with driving or operating machinery during titration phase"),
]
hypo_data = [
[Paragraph(b[0], S["tbl_cell_bold"]),
Paragraph(b[1], S["tbl_cell"])]
for b in hypo_bullets
]
hypo_tbl = Table(hypo_data, colWidths=[38*mm, 140*mm])
hypo_tbl.setStyle(TableStyle([
("ROWBACKGROUNDS",(0,0), (-1,-1), [colors.HexColor("#FEF9F9"), WHITE]),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("GRID", (0,0), (-1,-1), 0.25, MIDGREY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("LINEABOVE", (0,0), (-1,0), 1.5, RED),
("LINEBELOW", (0,-1), (-1,-1), 1.5, RED),
]))
elems.append(hypo_tbl)
elems.append(sp(3))
# ─────────────────────────────
# SECTION 7: Clinical Pearls
# ─────────────────────────────
elems.append(section_header(" 10 CLINICAL PEARLS", S, color=NAVY))
elems.append(sp(2))
pearls = [
("1", "U-700 ONLY via FlexTouch pen",
"NEVER draw up in syringe — a U-100 syringe delivers 7× the intended dose → life-threatening overdose"),
("2", "80% dose rule is intentional",
"The 20% reduction on switching is evidence-based. Resist pressure to correct upward before steady state"),
("3", "Steady state = 3–4 weeks",
"Full pharmacodynamic effect not seen until after 3rd or 4th dose. Patience during initiation is key"),
("4", "Hypo is prolonged",
"A single glucose correction may be insufficient. Monitor for recurrence over 24–48 h after a hypo episode"),
("5", "Same-day flexibility is a feature",
"Injecting 1–2 days early or late rarely causes meaningful glycaemic disruption — a practical adherence advantage"),
("6", "Discharge = switch",
"Do not send patients home from hospital on icodec. Restart only when outpatient setting with stable routine"),
("7", "GLP-1 RA combination is fine",
"Icodec + GLP-1 RA (e.g. semaglutide) is safe and studied — monitor for additive hypoglycaemia if sulfonylurea co-prescribed"),
("8", "Sulfonylurea — consider dose reduction",
"Initiating icodec alongside a sulfonylurea increases hypo risk. Consider halving or stopping SU at start"),
("9", "Awiqli dosing app available",
"Novo Nordisk provides a free clinician/patient dosing guide app — useful for titration tracking"),
("10", "Review at 4 weeks",
"Schedule a 4-week post-initiation review to assess BG logs, titration, hypo events and injection technique"),
]
pearl_hdr = [
Paragraph("#", S["tbl_hdr"]),
Paragraph("PEARL", S["tbl_hdr"]),
Paragraph("WHY IT MATTERS", S["tbl_hdr"]),
]
pearl_rows = [
[Paragraph(p[0], S["tbl_cell_bold_c"]),
Paragraph(p[1], S["tbl_cell_bold"]),
Paragraph(p[2], S["tbl_cell"])]
for p in pearls
]
pearl_tbl = Table([pearl_hdr] + pearl_rows, colWidths=[10*mm, 56*mm, 112*mm])
pearl_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LTBLUE, WHITE] * 6),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("GRID", (0,0), (-1,-1), 0.25, MIDGREY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("ALIGN", (0,0), (0,-1), "CENTER"),
]))
elems.append(pearl_tbl)
elems.append(sp(3))
# ─────────────────────────────
# SECTION 8: Evidence Base & References
# ─────────────────────────────
elems.append(section_header(" EVIDENCE BASE (ONWARDS PROGRAMME)", S, color=TEAL))
elems.append(sp(2))
ev_hdr = [
Paragraph("TRIAL", S["tbl_hdr"]),
Paragraph("n", S["tbl_hdr"]),
Paragraph("COMPARATOR", S["tbl_hdr"]),
Paragraph("POPULATION", S["tbl_hdr"]),
Paragraph("KEY FINDING", S["tbl_hdr"]),
]
ev_rows = [
[Paragraph("ONWARDS 1", S["tbl_cell_bold"]),
Paragraph("~582", S["tbl_cell_c"]),
Paragraph("Glargine U-300", S["tbl_cell"]),
Paragraph("T2D on OADs, insulin-naive", S["tbl_cell"]),
Paragraph("Icodec superior HbA1c at 52 wks; similar hypo", S["tbl_cell"])],
[Paragraph("ONWARDS 2", S["tbl_cell_bold"]),
Paragraph("~526", S["tbl_cell_c"]),
Paragraph("Degludec U-100", S["tbl_cell"]),
Paragraph("T2D switching from daily basal", S["tbl_cell"]),
Paragraph("Non-inferior HbA1c; slightly ↑ hypo (NS)", S["tbl_cell"])],
[Paragraph("ONWARDS 3", S["tbl_cell_bold"]),
Paragraph("~588", S["tbl_cell_c"]),
Paragraph("Glargine U-100", S["tbl_cell"]),
Paragraph("T2D insulin-naive + OADs", S["tbl_cell"]),
Paragraph("Non-inferior HbA1c; similar safety", S["tbl_cell"])],
[Paragraph("ONWARDS 5", S["tbl_cell_bold"]),
Paragraph("~1085", S["tbl_cell_c"]),
Paragraph("Daily basal (clinician choice)", S["tbl_cell"]),
Paragraph("T2D insulin-naive; with dosing app", S["tbl_cell"]),
Paragraph("Non-inferior; improved treatment satisfaction", S["tbl_cell"])],
[Paragraph("ONWARDS 6*", S["tbl_cell_bold"]),
Paragraph("~582", S["tbl_cell_c"]),
Paragraph("Degludec U-100", S["tbl_cell"]),
Paragraph("T1D basal-bolus regimen", S["tbl_cell"]),
Paragraph("Non-inferior HbA1c; hypo rate slightly ↑ with icodec", S["tbl_cell"])],
]
ev_tbl = Table([ev_hdr] + ev_rows, colWidths=[26*mm, 12*mm, 32*mm, 46*mm, 62*mm])
ev_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LTGREY, WHITE] * 4),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("GRID", (0,0), (-1,-1), 0.25, MIDGREY),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
elems.append(ev_tbl)
elems.append(sp(1))
elems.append(Paragraph(
"* ONWARDS 6 is EU evidence; not part of US FDA approval package (US indication is T2D only). "
"All T2D trials (ONWARDS 1, 2, 3, 5) form the basis of the FDA-approved label.",
S["footnote"]
))
elems.append(sp(2))
elems.append(Paragraph(
"Key references: Philis-Tsimikas A et al. Drugs 2025 (PMID 40802020) | "
"Rosenstock J et al. N Engl J Med 2023 (PMID 37356066) | "
"Bajaj HS et al. Ann Intern Med 2023 (PMID 37748181) | "
"Russell-Jones D et al. Lancet 2023 (PMID 37863084) | "
"Awiqli® Prescribing Information, Novo Nordisk, March 2026",
S["footnote"]
))
elems.append(sp(3))
# ─────────────────────────────
# SECTION 9: Disclaimer
# ─────────────────────────────
disclaimer_box = Table(
[[Paragraph(
"DISCLAIMER: This quick-reference is for educational purposes only and is not a substitute "
"for the full Awiqli® (insulin icodec-abae) Prescribing Information. Always refer to the approved "
"label and current institutional guidelines. Dosing decisions must be individualised. "
"Prepared by Orris Medical Reference | July 2026.",
S["footnote"]
)]],
colWidths=[PAGE_W - 2*MARGIN - 6*mm]
)
disclaimer_box.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#F8F9FA")),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("BOX", (0,0), (-1,-1), 0.5, MIDGREY),
]))
elems.append(disclaimer_box)
# ─── Build the PDF ───
doc.build(elems, onFirstPage=draw_page_bg, onLaterPages=draw_page_bg)
print(f"PDF written to: {OUTPUT}")
if __name__ == "__main__":
build()
cd /tmp/workspace/icodec-pdf && python build_icodec_pdf.py 2>&1
ls -lh /tmp/workspace/icodec-pdf/
Icodec Clinician QuickRef
PDF Document · PDF
| Section | Content |
|---|---|
| Key Facts at a Glance | Class, formulation (U-700), device, half-life, steady state, approval status |
| Dosing - Initiation & Titration | Starting doses by scenario + full titration algorithm (4-step fasting glucose targets with exact dose adjustments) |
| Conversion Table | Glargine / degludec / NPH → icodec with the ×7 ×0.8 formula, worked examples, and first-dose guidance |
| Missed Dose Rules | The 72-hour decision rule clearly laid out with colour-coded go/no-go |
| Special Populations | 7 groups (elderly, renal, hepatic, pregnancy, hospital, T1D, paediatric) with individual risk flags |
| Hypoglycaemia Considerations | 7 bullet points on risk periods, prolonged hypo concern, ONWARDS data, prescribing glucagon |
| 10 Clinical Pearls | Practical "must-know" points including U-700 syringe danger warning |
| ONWARDS Evidence Table | All 5 trials with n, comparator, population, key finding |
| References & Disclaimer | PubMed-linked citations + prescribing info reference |