Make detail and easy to understand notes as a nursing student in 3 - 4 point s in each topic
Quick Memory Aid - OXYGENATION ABCs for Nurses:
- A = Airway patent? Position patient upright
- B = Breathing - rate, rhythm, effort, SpOβ
- C = Circulation - pulse, skin color, capillary refill
- D = Devices - correct Oβ delivery device and flow rate?
- E = Educate - breathing exercises, coughing, hydration, smoking cessation
Generate a quick reference summary card covering SpOβ interpretation and oxygen devices
A clean, professional nursing quick reference summary card titled "SpOβ Interpretation & Oxygen Devices". Top section: "SpOβ Interpretation" table with color-coded rows: - 95β100%: Green background, "NORMAL β No intervention needed" - 91β94%: Yellow background, "MILD HYPOXIA β Monitor closely, consider Oβ" - 86β90%: Orange background, "MODERATE HYPOXIA β Start Oβ therapy, notify MD" - Below 85%: Red background, "SEVERE HYPOXIA β Urgent intervention, high-flow Oβ" Middle section: "Oxygen Delivery Devices" table with 5 rows: Row 1: Nasal Cannula | 1β6 L/min | 24β44% FiOβ | Mild hypoxia, comfortable Row 2: Simple Face Mask | 6β10 L/min | 35β50% FiOβ | Moderate hypoxia Row 3: Non-Rebreather Mask | 10β15 L/min | 60β90% FiOβ | Emergency/severe hypoxia Row 4: Venturi Mask | Variable | 24β60% FiOβ (precise) | COPD, controlled Oβ Row 5: Bag-Valve Mask | 15 L/min | ~100% FiOβ | Respiratory arrest Bottom section: "Factors Causing FALSE SpOβ Readings" in a warning box: β Low perfusion/cold hands | Dark nail polish | CO poisoning (reads HIGH) | Methemoglobinemia (reads ~85%) | Severe anemia | Patient movement Footer: "Remember: SpOβ does NOT measure COβ β always assess the patient clinically!" Clean white background, medical blue and teal color scheme, bold headings, easy to read fonts, suitable for a nursing student reference card.

| SpOβ Level | Status | Action |
|---|---|---|
| 95 - 100% | π’ Normal | No intervention needed |
| 91 - 94% | π‘ Mild Hypoxia | Monitor closely, consider Oβ |
| 86 - 90% | π Moderate Hypoxia | Start Oβ, notify doctor |
| β€ 85% | π΄ Severe Hypoxia | Urgent - high-flow Oβ immediately |
| Device | Flow Rate | FiOβ Delivered | Best Used For |
|---|---|---|---|
| Nasal Cannula | 1-6 L/min | 24-44% | Mild hypoxia, comfort |
| Simple Face Mask | 6-10 L/min | 35-50% | Moderate hypoxia |
| Non-Rebreather Mask | 10-15 L/min | 60-90% | Emergency/severe hypoxia |
| Venturi Mask | Variable | 24-60% (precise) | COPD - controlled Oβ |
| Bag-Valve Mask | 15 L/min | ~100% | Respiratory arrest |
Golden Rule: SpOβ only measures oxygen saturation - it does NOT detect COβ retention. Always assess the patient clinically alongside the monitor!
Create a PDF reference card I can print and carry
ls /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace
mkdir -p /home/daytona/workspace/oxygenation-card && python3 -c "from reportlab.lib import colors; print('reportlab ok')"
~/oxygenation-card/build_card.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, HRFlowable
)
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import KeepTogether
OUTPUT = "/home/daytona/workspace/oxygenation-card/SpO2_OxygenDevices_ReferenceCard.pdf"
# ββ Colours ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
NAVY = colors.HexColor("#1A3A5C")
TEAL = colors.HexColor("#0E7C7B")
LIGHT_BG = colors.HexColor("#F0F6FA")
GREEN_BG = colors.HexColor("#D4EDDA")
GREEN_TXT = colors.HexColor("#155724")
YELLOW_BG = colors.HexColor("#FFF3CD")
YELLOW_TXT= colors.HexColor("#856404")
ORANGE_BG = colors.HexColor("#FFE0B2")
ORANGE_TXT= colors.HexColor("#7B3F00")
RED_BG = colors.HexColor("#F8D7DA")
RED_TXT = colors.HexColor("#721C24")
WARN_BG = colors.HexColor("#FFF8E1")
WARN_BDR = colors.HexColor("#F9A825")
WHITE = colors.white
GREY_HDR = colors.HexColor("#2C5F8A")
GREY_ALT = colors.HexColor("#EAF2F8")
# ββ Styles ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def sty(name, **kw):
base = dict(fontName="Helvetica", fontSize=9, leading=12, textColor=colors.black)
base.update(kw)
return ParagraphStyle(name, **base)
title_sty = sty("title", fontName="Helvetica-Bold", fontSize=17, textColor=WHITE,
alignment=TA_CENTER, leading=22)
sub_sty = sty("sub", fontName="Helvetica", fontSize=9, textColor=colors.HexColor("#CCE5FF"),
alignment=TA_CENTER, leading=13)
sec_sty = sty("sec", fontName="Helvetica-Bold", fontSize=11, textColor=WHITE,
alignment=TA_CENTER, leading=15)
body_sty = sty("body", fontSize=8.5, leading=12)
body_bold = sty("bold", fontName="Helvetica-Bold", fontSize=8.5, leading=12)
body_cen = sty("cen", fontSize=8.5, leading=12, alignment=TA_CENTER)
small_sty = sty("small", fontSize=7.5, leading=11)
foot_sty = sty("foot", fontSize=7.5, textColor=colors.HexColor("#555555"),
alignment=TA_CENTER, leading=11)
warn_sty = sty("warn", fontName="Helvetica-Bold", fontSize=9, textColor=colors.HexColor("#7B3F00"),
alignment=TA_CENTER, leading=13)
mnem_sty = sty("mnem", fontName="Helvetica-Bold", fontSize=8.5, textColor=NAVY, leading=13)
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=14*mm, rightMargin=14*mm,
topMargin=12*mm, bottomMargin=12*mm,
)
W = A4[0] - 28*mm # usable width
story = []
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# HEADER BANNER
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
header_data = [[
Paragraph("π« OXYGENATION QUICK REFERENCE CARD", title_sty),
]]
header_data += [[
Paragraph("SpOβ Interpretation β’ Oxygen Delivery Devices β’ Pulse Oximetry Pitfalls β’ Clinical Tips", sub_sty),
]]
header_tbl = Table(header_data, colWidths=[W])
header_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("ROUNDEDCORNERS", [6]),
]))
story.append(header_tbl)
story.append(Spacer(1, 6))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 1 β SpOβ Interpretation
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def section_header(title):
t = Table([[Paragraph(title, sec_sty)]], colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), TEAL),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
return t
story.append(section_header("1. SpOβ INTERPRETATION"))
story.append(Spacer(1, 3))
spo2_data = [
[
Paragraph("<b>SpOβ Range</b>", body_bold),
Paragraph("<b>Status</b>", body_bold),
Paragraph("<b>Clinical Meaning</b>", body_bold),
Paragraph("<b>Nurse Action</b>", body_bold),
],
[
Paragraph("<b>95 β 100%</b>", sty("g1", fontName="Helvetica-Bold", fontSize=9, textColor=GREEN_TXT, leading=12)),
Paragraph("β
NORMAL", sty("g2", fontName="Helvetica-Bold", fontSize=9, textColor=GREEN_TXT, alignment=TA_CENTER, leading=12)),
Paragraph("Adequate oxygenation; tissues well-perfused", body_sty),
Paragraph("Continue monitoring; document baseline", body_sty),
],
[
Paragraph("<b>91 β 94%</b>", sty("y1", fontName="Helvetica-Bold", fontSize=9, textColor=YELLOW_TXT, leading=12)),
Paragraph("β οΈ MILD HYPOXIA", sty("y2", fontName="Helvetica-Bold", fontSize=9, textColor=YELLOW_TXT, alignment=TA_CENTER, leading=12)),
Paragraph("Early hypoxia; compensatory tachycardia may begin", body_sty),
Paragraph("Reposition (Fowler's), consider nasal cannula 2-4 L/min, notify if no improvement", body_sty),
],
[
Paragraph("<b>86 β 90%</b>", sty("o1", fontName="Helvetica-Bold", fontSize=9, textColor=ORANGE_TXT, leading=12)),
Paragraph("πΆ MODERATE HYPOXIA", sty("o2", fontName="Helvetica-Bold", fontSize=9, textColor=ORANGE_TXT, alignment=TA_CENTER, leading=12)),
Paragraph("Significant hypoxia; increased work of breathing", body_sty),
Paragraph("Start Oβ therapy NOW, notify MD, reassess q15 min", body_sty),
],
[
Paragraph("<b>β€ 85%</b>", sty("r1", fontName="Helvetica-Bold", fontSize=9, textColor=RED_TXT, leading=12)),
Paragraph("π¨ SEVERE / CRITICAL", sty("r2", fontName="Helvetica-Bold", fontSize=9, textColor=RED_TXT, alignment=TA_CENTER, leading=12)),
Paragraph("Life-threatening; multi-organ failure risk", body_sty),
Paragraph("HIGH-FLOW Oβ immediately, call rapid response / code, prepare for intubation", body_sty),
],
]
col_w = [W*0.13, W*0.18, W*0.34, W*0.35]
spo2_tbl = Table(spo2_data, colWidths=col_w, repeatRows=1)
spo2_tbl.setStyle(TableStyle([
# Header row
("BACKGROUND", (0,0), (-1,0), GREY_HDR),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
# Row backgrounds
("BACKGROUND", (0,1), (-1,1), GREEN_BG),
("BACKGROUND", (0,2), (-1,2), YELLOW_BG),
("BACKGROUND", (0,3), (-1,3), ORANGE_BG),
("BACKGROUND", (0,4), (-1,4), RED_BG),
# Grid
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
]))
story.append(spo2_tbl)
story.append(Spacer(1, 7))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 2 β Oxygen Delivery Devices
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("2. OXYGEN DELIVERY DEVICES"))
story.append(Spacer(1, 3))
dev_data = [
[
Paragraph("<b>Device</b>", body_bold),
Paragraph("<b>Flow Rate</b>", body_bold),
Paragraph("<b>FiOβ Delivered</b>", body_bold),
Paragraph("<b>Best Used For</b>", body_bold),
Paragraph("<b>Key Nursing Points</b>", body_bold),
],
[
Paragraph("<b>Nasal Cannula</b>", body_bold),
Paragraph("1 β 6 L/min", body_cen),
Paragraph("24 β 44%", sty("nc", fontName="Helvetica-Bold", fontSize=8.5, textColor=GREEN_TXT, alignment=TA_CENTER, leading=12)),
Paragraph("Mild hypoxia; long-term use; eating/talking OK", body_sty),
Paragraph("Check prongs in nostrils; skin behind ears for breakdown; add humidifier >4 L/min", small_sty),
],
[
Paragraph("<b>Simple Face Mask</b>", body_bold),
Paragraph("6 β 10 L/min", body_cen),
Paragraph("35 β 50%", sty("sm", fontName="Helvetica-Bold", fontSize=8.5, textColor=YELLOW_TXT, alignment=TA_CENTER, leading=12)),
Paragraph("Moderate hypoxia; short-term use", body_sty),
Paragraph("Min 6 L/min to flush COβ from mask; patient cannot eat with mask on", small_sty),
],
[
Paragraph("<b>Non-Rebreather Mask (NRM)</b>", body_bold),
Paragraph("10 β 15 L/min", body_cen),
Paragraph("60 β 90%", sty("nr", fontName="Helvetica-Bold", fontSize=8.5, textColor=ORANGE_TXT, alignment=TA_CENTER, leading=12)),
Paragraph("Severe/emergency hypoxia", body_sty),
Paragraph("Reservoir bag MUST stay inflated; one-way valves must be intact; monitor closely", small_sty),
],
[
Paragraph("<b>Venturi Mask</b>", body_bold),
Paragraph("Variable\n(per adaptor)", body_cen),
Paragraph("24 β 60%\n(Precise)", sty("vm", fontName="Helvetica-Bold", fontSize=8.5, textColor=TEAL, alignment=TA_CENTER, leading=12)),
Paragraph("COPD; precise Oβ control needed", body_sty),
Paragraph("Colour-coded adaptors (blue=24%, white=28%, yellow=35%, red=40%, green=60%); document adaptor colour used", small_sty),
],
[
Paragraph("<b>Bag-Valve Mask (BVM)</b>", body_bold),
Paragraph("15 L/min", body_cen),
Paragraph("~100%", sty("bv", fontName="Helvetica-Bold", fontSize=8.5, textColor=RED_TXT, alignment=TA_CENTER, leading=12)),
Paragraph("Respiratory arrest; apnoea", body_sty),
Paragraph("Requires 2-person technique for best seal; 1 breath every 5-6 sec; watch for chest rise", small_sty),
],
]
col_w2 = [W*0.17, W*0.11, W*0.12, W*0.25, W*0.35]
dev_tbl = Table(dev_data, colWidths=col_w2, repeatRows=1)
dev_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), GREY_HDR),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("BACKGROUND", (0,2), (-1,2), GREY_ALT),
("BACKGROUND", (0,4), (-1,4), GREY_ALT),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
]))
story.append(dev_tbl)
story.append(Spacer(1, 7))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 3 β False SpOβ Readings (2-col layout)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("3. CAUSES OF FALSE / INACCURATE SpOβ READINGS"))
story.append(Spacer(1, 3))
false_data = [
[
Paragraph("<b>Cause</b>", body_bold),
Paragraph("<b>Effect on Reading</b>", body_bold),
Paragraph("<b>What To Do</b>", body_bold),
Paragraph("<b>Cause</b>", body_bold),
Paragraph("<b>Effect on Reading</b>", body_bold),
Paragraph("<b>What To Do</b>", body_bold),
],
[
Paragraph("CO Poisoning", body_bold),
Paragraph("Falsely HIGH (85β100%)", sty("fh", fontSize=8, textColor=RED_TXT, leading=11)),
Paragraph("Order carboxyhemoglobin level; give 100% Oβ", small_sty),
Paragraph("Dark Nail Polish", body_bold),
Paragraph("Falsely LOW or erratic", sty("fl", fontSize=8, textColor=ORANGE_TXT, leading=11)),
Paragraph("Remove polish or use earlobe/forehead probe", small_sty),
],
[
Paragraph("Methemoglobinemia", body_bold),
Paragraph("Locks at ~85%", sty("mh", fontSize=8, textColor=RED_TXT, leading=11)),
Paragraph("Check methemoglobin level by co-oximetry", small_sty),
Paragraph("Patient Movement / Shivering", body_bold),
Paragraph("Erratic / unreliable", sty("er", fontSize=8, textColor=ORANGE_TXT, leading=11)),
Paragraph("Stabilise limb; use a different probe site", small_sty),
],
[
Paragraph("Poor Perfusion / Cold Hands", body_bold),
Paragraph("Falsely LOW or no reading", sty("fl2", fontSize=8, textColor=ORANGE_TXT, leading=11)),
Paragraph("Warm the hand; use earlobe probe; assess clinically", small_sty),
Paragraph("Severe Anaemia", body_bold),
Paragraph("Normal SpOβ but low Oβ content", sty("an", fontSize=8, textColor=ORANGE_TXT, leading=11)),
Paragraph("Check Hgb/Hct; SpOβ alone is misleading", small_sty),
],
]
col_w3 = [W*0.13, W*0.15, W*0.22, W*0.16, W*0.15, W*0.19]
false_tbl = Table(false_data, colWidths=col_w3, repeatRows=1)
false_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), GREY_HDR),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("BACKGROUND", (0,2), (-1,2), GREY_ALT),
("BACKGROUND", (3,0), (5,0), GREY_HDR),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("LINEAFTER", (2,0), (2,-1), 1.5, TEAL),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0),(-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING",(0,0), (-1,-1), 5),
]))
story.append(false_tbl)
story.append(Spacer(1, 7))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 4 β Golden Rules / Mnemonics (2-col)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("4. CLINICAL TIPS & GOLDEN RULES"))
story.append(Spacer(1, 3))
tips_left = [
"π <b>SpOβ does NOT measure COβ.</b> A patient on supplemental Oβ can have normal SpOβ while retaining dangerous COβ (e.g. COPD). Always assess clinically.",
"π <b>SpOβ < 90% = Emergency threshold.</b> Below 90%, the Oβ-Hgb dissociation curve is steep β small Oβ drops cause large saturation falls. Act fast.",
"π <b>COPD patients:</b> Use Venturi mask for precise FiOβ. Giving too much Oβ can remove their hypoxic drive and cause hypoventilation.",
"π <b>Pre-oxygenate before suctioning</b> with 100% Oβ for 30-60 sec. Limit each suction pass to β€15 seconds. Stop if SpOβ drops.",
]
tips_right = [
"π <b>Assess the PATIENT, not just the monitor.</b> Restlessness, confusion, and tachycardia are early hypoxia signs β often before SpOβ drops.",
"π <b>Fowler's position (30β90Β°)</b> maximises lung expansion by allowing the diaphragm to descend freely. Always position first.",
"π <b>NRM reservoir bag</b> must stay at least Β½ inflated. If it collapses completely with each breath, increase the flow rate immediately.",
"π <b>Humidify Oβ</b> at flows >4 L/min or for intubated patients. Dry Oβ damages the airway mucosa and thickens secretions.",
]
def tip_cell(tips):
items = []
for t in tips:
items.append(Paragraph(t, sty("tip", fontSize=8, leading=12, textColor=NAVY)))
items.append(Spacer(1, 3))
return items
from reportlab.platypus import KeepInFrame
left_frame = KeepInFrame(W*0.49, 200, tip_cell(tips_left), mode='shrink')
right_frame = KeepInFrame(W*0.49, 200, tip_cell(tips_right), mode='shrink')
tips_tbl = Table([[left_frame, right_frame]], colWidths=[W*0.49, W*0.51])
tips_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_BG),
("VALIGN", (0,0), (-1,-1), "TOP"),
("LINEAFTER", (0,0), (0,-1), 1, TEAL),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 7),
("RIGHTPADDING", (0,0), (-1,-1), 7),
("BOX", (0,0), (-1,-1), 0.5, TEAL),
]))
story.append(tips_tbl)
story.append(Spacer(1, 7))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 5 β ABC Mnemonic
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
abc_data = [
[Paragraph("NURSING OXYGENATION ABCs", sty("mnhdr", fontName="Helvetica-Bold", fontSize=9.5, textColor=WHITE, alignment=TA_CENTER, leading=14))],
[Paragraph(
"<b>A</b> = Airway patent? Position upright "
"<b>B</b> = Breathing β rate, rhythm, effort, SpOβ "
"<b>C</b> = Circulation β pulse, skin colour "
"<b>D</b> = Device β correct Oβ device & flow rate? "
"<b>E</b> = Educate β breathing exercises, coughing, hydration",
sty("abc", fontSize=8.5, textColor=NAVY, alignment=TA_CENTER, leading=14)
)],
]
abc_tbl = Table(abc_data, colWidths=[W])
abc_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("BACKGROUND", (0,1), (-1,1), colors.HexColor("#E8F4FD")),
("BOX", (0,0), (-1,-1), 1, NAVY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
story.append(abc_tbl)
story.append(Spacer(1, 6))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# FOOTER
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(HRFlowable(width=W, thickness=0.5, color=TEAL))
story.append(Spacer(1, 3))
story.append(Paragraph(
"π Nursing Quick Reference Card β’ Oxygenation Needs β’ For educational use only β always follow local clinical guidelines and protocols",
foot_sty
))
# ββ Build βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.build(story)
print(f"PDF written to: {OUTPUT}")
python3 /home/daytona/workspace/oxygenation-card/build_card.py
ls -lh /home/daytona/workspace/oxygenation-card/
SpO2 OxygenDevices ReferenceCard
PDF Document Β· PDF
Print tip: Print at 100% scale on A4 paper (not "fit to page"). Laminate it for durability on the ward!