Provide me t

It looks like your message got cut off! Could you finish your thought? What would you like me to provide?

Can you provide me the normal values which aree used in day to day clinical practice...also provide the mnenmonics to learn it easily ....provide the printable pdf

Asking for Preferences

Which category of normal values would you like covered? · Who is this for?

Reading File
Reading File
Finding Sources
Finding Sources
Reading File
Finding Sources
Reading File
Finding Sources
Good — I have the Guyton reference values table. Now I have enough from authoritative sources to build the comprehensive PDF. Let me generate it now.
Running Command

mkdir -p /home/daytona/workspace/normal-values && cat > /home/daytona/workspace/normal-values/generate_pdf.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm, mm from reportlab.platypus import (SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, HRFlowable, KeepTogether, PageBreak) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate OUTPUT = "/home/daytona/workspace/normal-values/Clinical_Normal_Values_Mnemonics.pdf" # ── Colour palette ────────────────────────────────────────────────────────── NAVY = colors.HexColor("#0D2B55") TEAL = colors.HexColor("#1A7A8A") BLUE_L = colors.HexColor("#D6EAF8") GREEN = colors.HexColor("#1A6B3A") GREEN_L= colors.HexColor("#D5F5E3") ORANGE = colors.HexColor("#C0550A") ORANGE_L=colors.HexColor("#FDEBD0") PURPLE = colors.HexColor("#6C3483") PURPLE_L=colors.HexColor("#E8DAEF") RED = colors.HexColor("#922B21") RED_L = colors.HexColor("#FADBD8") GRAY = colors.HexColor("#ECF0F1") WHITE = colors.white BLACK = colors.black YELLOW_L = colors.HexColor("#FEF9E7") # ── Document ──────────────────────────────────────────────────────────────── doc = SimpleDocTemplate( OUTPUT, pagesize=A4, leftMargin=1.5*cm, rightMargin=1.5*cm, topMargin=1.8*cm, bottomMargin=1.8*cm, title="Clinical Normal Values & Mnemonics", author="Orris Medical Reference" ) W = A4[0] - 3*cm # usable width styles = getSampleStyleSheet() def S(name, **kw): s = ParagraphStyle(name, **kw) return s # Custom styles sTitle = S("sTitle", fontSize=22, textColor=WHITE, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=28, spaceBefore=0, spaceAfter=0) sSub = S("sSub", fontSize=11, textColor=WHITE, alignment=TA_CENTER, fontName="Helvetica", leading=15, spaceBefore=0, spaceAfter=0) sH1 = S("sH1", fontSize=13, textColor=WHITE, fontName="Helvetica-Bold", leading=17, spaceBefore=6, spaceAfter=4, leftIndent=4) sH2 = S("sH2", fontSize=10, textColor=NAVY, fontName="Helvetica-Bold", leading=14, spaceBefore=4, spaceAfter=2, leftIndent=2) sBody = S("sBody", fontSize=8.5, textColor=BLACK, fontName="Helvetica", leading=12, spaceBefore=1, spaceAfter=1) sMnem = S("sMnem", fontSize=8.5, textColor=NAVY, fontName="Helvetica-Bold", leading=12, spaceBefore=1, spaceAfter=1, leftIndent=6) sMnemBody=S("sMnemBody",fontSize=8,textColor=BLACK,fontName="Helvetica", leading=11, spaceBefore=0, spaceAfter=0, leftIndent=10) sCell = S("sCell", fontSize=8, textColor=BLACK, fontName="Helvetica", leading=10, spaceBefore=0, spaceAfter=0) sCellB = S("sCellB", fontSize=8, textColor=BLACK, fontName="Helvetica-Bold", leading=10, spaceBefore=0, spaceAfter=0) sCellW = S("sCellW", fontSize=8, textColor=WHITE, fontName="Helvetica-Bold", leading=10, spaceBefore=0, spaceAfter=0, alignment=TA_CENTER) sFooter = S("sFooter",fontSize=7, textColor=colors.HexColor("#888888"), fontName="Helvetica", alignment=TA_CENTER, leading=9) sNote = S("sNote", fontSize=7.5,textColor=colors.HexColor("#555555"), fontName="Helvetica-Oblique", leading=10, spaceBefore=1,spaceAfter=1,leftIndent=4) # ── Helper: coloured section header ───────────────────────────────────────── def section_header(title, color=NAVY): t = Table([[Paragraph(title, sH1)]], colWidths=[W]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), color), ("ROWPADDING", (0,0), (-1,-1), 5), ("ROUNDEDCORNERS", [4]), ])) return t # ── Helper: mnemonic box ───────────────────────────────────────────────────── def mnem_box(acronym, meaning, bg=YELLOW_L, border=ORANGE): rows = [] rows.append([Paragraph(f"🔑 <b>{acronym}</b>", sMnem)]) rows.append([Paragraph(meaning, sMnemBody)]) t = Table(rows, colWidths=[W]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("BOX", (0,0), (-1,-1), 0.8, border), ("ROWPADDING", (0,0), (-1,-1), 3), ("LEFTPADDING",(0,0),(-1,-1), 6), ])) return t # ── Helper: value table ────────────────────────────────────────────────────── def val_table(headers, rows, col_widths, hdr_color=NAVY): data = [[Paragraph(h, sCellW) for h in headers]] for row in rows: data.append([Paragraph(str(c), sCell) for c in row]) t = Table(data, colWidths=col_widths, repeatRows=1) n = len(rows) style = [ ("BACKGROUND", (0,0), (-1,0), hdr_color), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("ROWPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 4), ("GRID", (0,0), (-1,-1), 0.35, colors.HexColor("#CCCCCC")), ("FONTNAME", (0,1), (-1,-1), "Helvetica"), ("FONTSIZE", (0,1), (-1,-1), 8), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ] for i in range(1, n+1): style.append(("BACKGROUND", (0,i), (-1,i), GRAY if i%2==0 else WHITE)) t.setStyle(TableStyle(style)) return t story = [] # ═══════════════════════════════════════════════════════════════════════════ # COVER / TITLE # ═══════════════════════════════════════════════════════════════════════════ cover = Table([ [Paragraph("CLINICAL NORMAL VALUES", sTitle)], [Paragraph("Quick Reference + Mnemonics for Resident Doctors", sSub)], [Paragraph("Comprehensive | Printable | Exam-Ready", sSub)], ], colWidths=[W]) cover.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), NAVY), ("ROWPADDING", (0,0), (-1,-1), 8), ("ROUNDEDCORNERS", [6]), ])) story += [Spacer(1, 0.3*cm), cover, Spacer(1, 0.5*cm)] story.append(Paragraph("Source: Guyton & Hall Textbook of Medical Physiology 14e | Harrison's 22e | Henry's Clinical Diagnosis | Morgan & Mikhail 7e", sNote)) story.append(HRFlowable(width="100%", thickness=1, color=TEAL)) story.append(Spacer(1, 0.3*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 1. VITAL SIGNS # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("1 ▸ VITAL SIGNS", NAVY)) story.append(Spacer(1,3)) story.append(val_table( ["Parameter", "Normal Value", "Critical / Alarm"], [ ["Heart Rate (HR)", "60–100 bpm", "<40 or >150 bpm"], ["Respiratory Rate (RR)", "12–20 breaths/min", "<8 or >30/min"], ["Blood Pressure (BP)", "Systolic 90–120 mmHg\nDiastolic 60–80 mmHg", "SBP <90 or >180 mmHg"], ["Temperature (Oral)", "36.1–37.2 °C (97–99 °F)", ">38.3 °C = fever; >40 = hyperpyrexia"], ["O₂ Saturation (SpO₂)", "95–100 %", "<90% = hypoxia"], ["Mean Arterial Pressure", "70–100 mmHg", "<65 mmHg = shock threshold"], ["Pulse Pressure", "40 mmHg (SBP−DBP)", "Wide: AI/sepsis; Narrow: tamponade"], ], [4.5*cm, 5.5*cm, 6.5*cm], NAVY )) story.append(Spacer(1,4)) story.append(mnem_box( "TROCAR — Vital Signs Normal Ranges", "T = Temperature 36–37.2 °C | R = Respiration 12–20 | O = O₂ Sat ≥95%\n" "C = Cardiac Rate 60–100 | A = Arterial BP 90–120/60–80 | R = sMAPrRange 70–100", bg=BLUE_L, border=NAVY )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 2. HAEMATOLOGY (CBC) # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("2 ▸ HAEMATOLOGY — Complete Blood Count (CBC)", TEAL)) story.append(Spacer(1,3)) story.append(val_table( ["Parameter", "Male", "Female", "Unit"], [ ["Haemoglobin (Hb)", "13.5–17.5", "11.5–15.5", "g/dL"], ["Haematocrit (PCV/Hct)", "41–53", "36–46", "%"], ["RBC Count", "4.5–6.5", "3.9–5.6", "×10⁶/µL"], ["MCV (Mean Cell Volume)", "80–100", "80–100", "fL"], ["MCH", "27–33", "27–33", "pg"], ["MCHC", "31–35", "31–35", "g/dL"], ["RDW", "11.5–14.5", "11.5–14.5", "%"], ["WBC (Total Leukocytes)", "4,000–11,000", "4,000–11,000", "/µL"], ["Platelets", "1,50,000–4,00,000", "1,50,000–4,00,000", "/µL"], ["Reticulocyte Count", "0.5–2.0% (25–75×10⁹/L)", "—", ""], ["ESR (Westergren)", "0–15 mm/hr", "0–20 mm/hr", "mm/hr"], ], [4.5*cm, 3.5*cm, 3.5*cm, 3*cm], TEAL )) story.append(Spacer(1,4)) story.append(Paragraph("<b>WBC Differential — Normal %</b>", sH2)) story.append(val_table( ["Cell Type", "Normal %", "Absolute Count (/µL)"], [ ["Neutrophils (Segs + Bands)", "50–70%", "1800–7700"], ["Lymphocytes", "20–40%", "1000–4800"], ["Monocytes", "2–8%", "200–1000"], ["Eosinophils", "1–4%", "40–400"], ["Basophils", "0–1%", "0–100"], ["Bands (Immature Neutro)", "<5%", "<700"], ], [5*cm, 4*cm, 5.5*cm], TEAL )) story.append(Spacer(1,4)) story.append(mnem_box( "Never Let Monkeys Eat Bananas (Differential % Descending Order)", "N = Neutrophils 50–70% | L = Lymphocytes 20–40% | M = Monocytes 2–8%\n" "E = Eosinophils 1–4% | B = Basophils 0–1%", bg=GREEN_L, border=GREEN )) story.append(mnem_box( "7/12 Rule for Haemoglobin (Quick Gender Check)", "Male Hb minimum = 13.5 ('Three + extra') | Female Hb minimum = 11.5 ('Eleven + half')\n" "Or simply: Men ≥13, Women ≥11 (memorise as the 'unlock codes')", bg=GREEN_L, border=GREEN )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 3. ELECTROLYTES # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("3 ▸ ELECTROLYTES & MINERALS", GREEN)) story.append(Spacer(1,3)) story.append(val_table( ["Electrolyte", "Normal Range", "Unit", "Key Point"], [ ["Sodium (Na⁺)", "135–145", "mmol/L", "<135 = Hyponatraemia; >145 = Hypernatraemia"], ["Potassium (K⁺)", "3.5–5.0", "mmol/L", "<3.5 = ↑U wave ECG; >5.5 = Peaked T-wave"], ["Chloride (Cl⁻)", "98–108", "mmol/L", "Low: alkalosis, vomiting"], ["Bicarbonate (HCO₃⁻)", "22–29", "mmol/L", "Low: acidosis; High: alkalosis"], ["Calcium (total)", "8.5–10.5", "mg/dL", "Ca²⁺ drops in alkalosis; rises in acidosis"], ["Calcium (ionised)", "4.65–5.28", "mg/dL (1.1–1.4 mmol/L)", "Physiologically active form"], ["Magnesium", "1.7–2.3", "mg/dL", "Low: arrhythmia, seizures"], ["Phosphate", "2.5–4.5", "mg/dL", "Inversely related to Ca²⁺"], ["Anion Gap", "8–12", "mEq/L", "Na − (Cl + HCO₃)"], ], [3.5*cm, 3*cm, 4.5*cm, 5*cm], GREEN )) story.append(Spacer(1,4)) story.append(mnem_box( "SICK = Electrolyte Danger Values (ICU Alert)", "S = Sodium <120 or >155 | I = Ion K⁺ <2.5 or >6.5\n" "C = Calcium <7 or >13 mg/dL | K = remember K is critical even with 'small' shifts", bg=GREEN_L, border=GREEN )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 4. ABG — ARTERIAL BLOOD GAS # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("4 ▸ ARTERIAL BLOOD GAS (ABG)", ORANGE)) story.append(Spacer(1,3)) story.append(val_table( ["Parameter", "Normal Value", "Unit", "Acidosis", "Alkalosis"], [ ["pH", "7.35–7.45", "—", "<7.35", ">7.45"], ["PaO₂", "80–100", "mmHg", "—", "—"], ["PaCO₂", "35–45", "mmHg", ">45 (resp. acid)", "<35 (resp. alk)"], ["HCO₃⁻", "22–26", "mEq/L", "<22 (met. acid)", ">26 (met. alk)"], ["Base Excess (BE)", "-2 to +2", "mEq/L", "<-2", ">+2"], ["O₂ Saturation (SaO₂)", "95–100", "%", "—", "—"], ["A-a gradient", "<10–15 (young)", "mmHg", "Elevated = V/Q mismatch", "—"], ["FiO₂ (room air)", "0.21 (21%)", "—", "—", "—"], ], [3.5*cm, 3*cm, 3cm, 4*cm, 3*cm], ORANGE )) story.append(Spacer(1,4)) story.append(mnem_box( "ROME — Primary ABG Disorders", "R = Respiratory → Opposite (pH↑ & CO₂↓ = Resp Alkalosis; pH↓ & CO₂↑ = Resp Acidosis)\n" "O = Opposite\n" "M = Metabolic → Equal (pH↑ & HCO₃↑ = Met Alkalosis; pH↓ & HCO₃↓ = Met Acidosis)\n" "E = Equal", bg=ORANGE_L, border=ORANGE )) story.append(mnem_box( "MUD PILES CAT — High Anion Gap Metabolic Acidosis Causes", "M=Methanol | U=Uraemia | D=DKA | P=Propylene glycol | I=Isoniazid/Iron\n" "L=Lactic acidosis | E=Ethanol/Ethylene glycol | S=Salicylates\n" "C=Carbon monoxide | A=Acetaminophen | T=Toluene", bg=ORANGE_L, border=ORANGE )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 5. RENAL FUNCTION # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("5 ▸ RENAL FUNCTION TESTS (RFT/KFT)", RED)) story.append(Spacer(1,3)) story.append(val_table( ["Test", "Normal Range", "Unit", "Clinical Note"], [ ["Serum Creatinine (Male)", "0.7–1.2", "mg/dL", "Rises late in AKI"], ["Serum Creatinine (Female)", "0.5–1.0", "mg/dL", "Lower due to less muscle mass"], ["Blood Urea Nitrogen (BUN)", "7–20", "mg/dL", "BUN:Cr ratio >20:1 = pre-renal"], ["Serum Urea", "15–40", "mg/dL", "BUN × 2.14 = Urea"], ["Uric Acid (Male)", "3.5–7.0", "mg/dL", ">7 = hyperuricaemia / gout risk"], ["Uric Acid (Female)", "2.5–6.0", "mg/dL", "Lower oestrogen effect"], ["eGFR", ">60", "mL/min/1.73m²", "<15 = kidney failure stage"], ["Urine Specific Gravity", "1.005–1.030", "—", "<1.005 = dilute; >1.030 = concentrated"], ["Urine pH", "4.5–8.0", "—", "Avg ~6"], ["24h Urine Protein", "<150", "mg/day", ">300 mg = pathological proteinuria"], ["Urinary Creatinine Clearance", "85–130 (M); 75–115 (F)", "mL/min", "GFR surrogate"], ], [4.5*cm, 3.5*cm, 3*cm, 5.5*cm], RED )) story.append(Spacer(1,4)) story.append(mnem_box( "CUB — Renal Tests to Know", "C = Creatinine 0.7–1.2 (M), 0.5–1.0 (F) | U = Urea/BUN 7–20 mg/dL | B = Bicarbonate 22–26\n" "Ratio BUN:Cr >20 = Pre-renal | Ratio <10 = ATN (intrinsic)", bg=RED_L, border=RED )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 6. LIVER FUNCTION TESTS # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("6 ▸ LIVER FUNCTION TESTS (LFT)", PURPLE)) story.append(Spacer(1,3)) story.append(val_table( ["Test", "Normal Range", "Unit", "Raised in"], [ ["Total Bilirubin", "0.2–1.0", "mg/dL", ">1.0 = Jaundice visible at >2–2.5"], ["Direct (Conjugated) Bilirubin", "0–0.2", "mg/dL", "Hepatic/post-hepatic jaundice"], ["Indirect (Unconjugated) Bilirubin", "0.1–0.8", "mg/dL", "Pre-hepatic (haemolysis)"], ["AST (SGOT)", "10–40", "U/L", "Liver, heart, muscle"], ["ALT (SGPT)", "7–40", "U/L", "Liver-specific; hepatitis"], ["ALT:AST ratio", ">2:1 = alcoholic", "—", "AST>ALT in alcoholic hepatitis"], ["Alkaline Phosphatase (ALP)", "44–147", "U/L", "Cholestasis, bone disease"], ["GGT", "9–48 (M); 9–35 (F)", "U/L", "Alcohol, enzyme inducer"], ["Total Protein", "6.4–8.3", "g/dL", ""], ["Albumin", "3.5–5.0", "g/dL", "<3.5 = hypoalbuminaemia"], ["Prothrombin Time (PT)", "11–14", "seconds", "Liver synthetic function"], ["INR", "0.8–1.2", "—", ">1.5 = coagulopathy"], ], [4.8*cm, 3*cm, 3.2*cm, 5.5*cm], PURPLE )) story.append(Spacer(1,4)) story.append(mnem_box( "BATGAP — LFT Markers", "B = Bilirubin (T<1.0, D<0.2) | A = AST/ALT 10–40 U/L | T = Total Protein 6.4–8.3\n" "G = GGT 9–48 | A = Albumin 3.5–5.0 | P = PT/INR (0.8–1.2)\n" "ALT > AST = viral hepatitis | AST > ALT = alcoholic hepatitis", bg=PURPLE_L, border=PURPLE )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 7. COAGULATION # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("7 ▸ COAGULATION STUDIES", colors.HexColor("#7D6608"))) story.append(Spacer(1,3)) story.append(val_table( ["Test", "Normal", "Unit", "Clinical Note"], [ ["Prothrombin Time (PT)", "11–14", "seconds", "Extrinsic path (II,V,VII,X); warfarin monitor"], ["INR", "0.8–1.2", "ratio", "Therapeutic: 2–3 (AF); 2.5–3.5 (mech. valve)"], ["APTT / aPTT", "25–38", "seconds", "Intrinsic path; heparin monitor"], ["Thrombin Time (TT)", "12–20", "seconds", "Fibrinogen function"], ["Fibrinogen", "200–400", "mg/dL", "<100 = DIC risk"], ["D-dimer", "<0.5", "mg/L FEU", "↑ in PE, DVT, DIC, sepsis"], ["Bleeding Time (BT)", "2–7", "minutes", "Platelet & vessel function"], ["Clotting Time (CT)", "4–10", "minutes", "Lee-White method"], ], [4.5*cm, 2.5*cm, 3*cm, 6.5*cm], colors.HexColor("#7D6608") )) story.append(Spacer(1,4)) story.append(mnem_box( "PT-AFIB vs aPTT-HAH — Which Test Monitors Which Drug?", "PT/INR → monitors Warfarin (extrinsic pathway VII: 'Warfarin = W-arfarin = sEVEN starts it)\n" "aPTT → monitors Heparin (intrinsic pathway: 'Heparin = Hah = intrinsic)\n" "LMWH (enoxaparin) → neither PT nor aPTT; use anti-Xa level", bg=YELLOW_L, border=colors.HexColor("#7D6608") )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 8. CARDIAC MARKERS & LIPIDS # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("8 ▸ CARDIAC MARKERS & LIPID PROFILE", colors.HexColor("#1A5276"))) story.append(Spacer(1,3)) story.append(val_table( ["Test", "Normal / Target", "Unit", "Note"], [ ["Troponin I (cTnI)", "<0.04", "ng/mL", "Rises at 3–6 h; peaks 24 h; lasts 10–14 days"], ["Troponin T (hsTnT)", "<14–19", "ng/L", "High-sensitivity; rule-in/out ACS at 0 & 1h"], ["CK-MB", "<5% of total CK", "U/L", "Peaks at 12–24 h; back to normal 48–72 h"], ["Myoglobin", "<90", "ng/mL", "Earliest marker (1–3 h); non-specific"], ["BNP", "<100", "pg/mL", ">400 = likely HF; 100–400 = borderline"], ["NT-proBNP", "<125 (age<75)\n<450 (age≥75)", "pg/mL", "Heart failure diagnosis/prognosis"], ["Total Cholesterol", "<200 (desirable)", "mg/dL", "200–239 = borderline; >240 = high"], ["LDL-Cholesterol", "<100 (optimal)", "mg/dL", "<70 in high CV risk; <55 in very high"], ["HDL-Cholesterol", ">60 (protective)", "mg/dL", "<40 (M) or <50 (F) = risk"], ["Triglycerides", "<150", "mg/dL", ">500 = pancreatitis risk"], ["Non-HDL Cholesterol", "<130", "mg/dL", "Total Chol − HDL"], ], [4.2*cm, 3.5*cm, 3.3*cm, 5.5*cm], colors.HexColor("#1A5276") )) story.append(Spacer(1,4)) story.append(mnem_box( "HEART ATTACK Timing — Cardiac Enzyme Rise", "Myoglobin : rises 1–3 h | peaks 6–12 h | normalises 24 h (first to rise)\n" "Troponin I/T: rises 3–6 h | peaks 12–24 h | normalises 10–14 d (GOLD standard)\n" "CK-MB : rises 4–6 h | peaks 12–24 h | normalises 48–72 h\n" "Mnemonic → 'My Troponin Can Rise' (Myoglobin, Troponin, CK)", bg=BLUE_L, border=colors.HexColor("#1A5276") )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 9. THYROID FUNCTION # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("9 ▸ THYROID FUNCTION TESTS (TFT)", colors.HexColor("#1A6B3A"))) story.append(Spacer(1,3)) story.append(val_table( ["Test", "Normal Range", "Unit", "Interpretation"], [ ["TSH (sensitive)", "0.4–4.0", "mIU/L", "Best screening test; HIGH = hypothyroid"], ["Free T4 (fT4)", "0.8–1.8", "ng/dL", "Low + High TSH = primary hypothyroid"], ["Free T3 (fT3)", "2.3–4.2", "pg/mL", "Active form; T3 toxicosis: ↑T3, normal T4"], ["Total T4", "4.5–12", "µg/dL", "Affected by TBG (OCP, pregnancy ↑)"], ["Total T3", "80–200", "ng/dL", ""], ["Anti-TPO Antibodies", "<35", "IU/mL", "↑ in Hashimoto's & Graves'"], ["Anti-TSH Receptor (TRAb)", "Negative", "U/L", "Graves' disease specific"], ], [4.5*cm, 3*cm, 3*cm, 6*cm], colors.HexColor("#1A6B3A") )) story.append(Spacer(1,4)) story.append(mnem_box( "TSH First, T4 Second — Stepwise Thyroid Logic", "TSH HIGH + fT4 LOW = Primary Hypothyroidism (Hashimoto's most common)\n" "TSH LOW + fT4 HIGH = Primary Hyperthyroidism (Graves' most common)\n" "TSH LOW + fT4 NORMAL = Subclinical Hyperthyroid or T3-toxicosis\n" "TSH HIGH + fT4 NORMAL = Subclinical Hypothyroid\n" "TSH LOW + fT4 LOW = Secondary/Tertiary (Pituitary failure)", bg=GREEN_L, border=colors.HexColor("#1A6B3A") )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 10. GLUCOSE / DIABETES # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("10 ▸ GLUCOSE & DIABETES MARKERS", colors.HexColor("#784212"))) story.append(Spacer(1,3)) story.append(val_table( ["Test", "Normal", "Pre-Diabetes", "Diabetes", "Unit"], [ ["Fasting Plasma Glucose (FPG)", "<100", "100–125", "≥126", "mg/dL"], ["2-hr Post-Load Glucose (OGTT)", "<140", "140–199", "≥200", "mg/dL"], ["Random Plasma Glucose", "<200", "—", "≥200 + symptoms", "mg/dL"], ["HbA1c", "<5.7%", "5.7–6.4%", "≥6.5%", "%"], ["Fasting Insulin", "2–20", "—", ">20 = IR likely", "µIU/mL"], ["C-Peptide", "0.5–2.0", "—", "Low in T1DM", "ng/mL"], ["Serum Ketones (normal)", "<0.6", "—", ">3 mmol/L = DKA", "mmol/L"], ], [5*cm, 2.5*cm, 3*cm, 3.5*cm, 2.5*cm], colors.HexColor("#784212") )) story.append(Spacer(1,4)) story.append(mnem_box( "126-140-200-6.5 — Diabetes Diagnostic Thresholds", "FPG ≥126 mg/dL (on 2 occasions) | 2-hr OGTT ≥200 mg/dL\n" "Random glucose ≥200 + symptoms | HbA1c ≥6.5%\n" "Any ONE criterion on two occasions (or two criteria on same day) = Diagnosis", bg=ORANGE_L, border=colors.HexColor("#784212") )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 11. CSF / CEREBROSPINAL FLUID # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("11 ▸ CSF — CEREBROSPINAL FLUID", colors.HexColor("#4A235A"))) story.append(Spacer(1,3)) story.append(val_table( ["Parameter", "Normal", "Bacterial Meningitis", "Viral Meningitis", "TB Meningitis"], [ ["Opening Pressure", "70–200 mmH₂O", "↑↑", "Normal/↑", "↑"], ["Appearance", "Crystal clear", "Turbid/purulent", "Clear/slightly turbid", "Cobweb clot"], ["WBC (cells/µL)", "<5 (all lympho)", "100–60,000 (PMN)", "10–1000 (lymph)", "50–500 (lymph)"], ["Glucose (CSF)", "50–80 mg/dL\n(>60% serum)", "Very low (<40)", "Normal", "Low (<45)"], ["Protein", "15–45 mg/dL", "High (>100)", "Normal/mild ↑", "High (100–500)"], ["Chloride", "120–130 mEq/L", "Decreased", "Normal", "Decreased"], ["Gram stain/Culture", "Negative", "Positive ~80%", "—", "AFB/ZN stain"], ], [3.5*cm, 3*cm, 3.5*cm, 3*cm, 3.5*cm], colors.HexColor("#4A235A") )) story.append(Spacer(1,4)) story.append(mnem_box( "CSF Findings = CAPS (protein, cells, glucose, stain)", "Bacterial: ↑Protein + ↑↑PMNs + ↓↓Glucose + Positive Gram stain\n" "Viral : Normal/↑Protein + Lymphocytes + Normal Glucose\n" "TB : ↑↑Protein + Lymphocytes + ↓Glucose + AFB (low yield) + ADA↑", bg=PURPLE_L, border=colors.HexColor("#4A235A") )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 12. URINE ANALYSIS # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("12 ▸ URINE ANALYSIS (UA)", colors.HexColor("#0E6655"))) story.append(Spacer(1,3)) story.append(val_table( ["Parameter", "Normal Value", "Clinical Significance"], [ ["Colour", "Pale yellow–amber", "Red = blood/Hb/myoglobin; dark = bilirubin"], ["Clarity", "Clear", "Turbid = infection, crystals"], ["pH", "4.5–8.0 (avg 6)", "Acid in starvation; alkaline in UTI/RTA"], ["Specific Gravity", "1.005–1.030", ">1.025 dehydration; <1.005 DI"], ["Protein (dipstick)", "Negative", "Trace–1+ with concentrated urine; >2+ = pathological"], ["Glucose", "Negative", "Positive: DM (>180 mg/dL), Fanconi"], ["Ketones", "Negative", "DKA, starvation, alcoholism"], ["Bilirubin", "Negative", "Hepatic/obstructive jaundice"], ["Urobilinogen", "0.2–1.0 EU/dL", ">1 = haemolysis/liver disease; 0 = bile obstruction"], ["RBC (microscopy)", "<2–3/HPF", ">3 = haematuria (micro)"], ["WBC (pus cells)", "<5/HPF", ">5 = pyuria; UTI"], ["Casts", "0–1 hyaline/LPF", "RBC casts = GN; WBC casts = pyelonephritis"], ], [4*cm, 3.5*cm, 9*cm], colors.HexColor("#0E6655") )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 13. HORMONES (Key) # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("13 ▸ KEY HORMONE LEVELS", colors.HexColor("#6E2F0A"))) story.append(Spacer(1,3)) story.append(val_table( ["Hormone", "Normal Range", "Unit"], [ ["Cortisol (morning 8 AM)", "138–690", "nmol/L (5–25 µg/dL)"], ["ACTH (morning)", "10–60", "pg/mL"], ["PTH (intact)", "15–65", "pg/mL"], ["Insulin (fasting)", "2–20", "µIU/mL"], ["Prolactin (male)", "<15", "ng/mL"], ["Prolactin (female, non-preg)", "<25", "ng/mL"], ["LH (follicular phase)", "2–15", "IU/L"], ["FSH (follicular phase)", "3–10", "IU/L"], ["Oestradiol (follicular)", "20–150", "pg/mL"], ["Testosterone (male total)", "300–1000", "ng/dL"], ["Testosterone (female)", "15–70", "ng/dL"], ["Progesterone (luteal)", "5–20", "ng/mL"], ["Growth Hormone (fasting)", "<1", "ng/mL"], ["IGF-1 (adult 20–40 yr)", "115–307", "ng/mL"], ["DHEA-S (male, 20–49 yr)", "280–640", "µg/dL"], ["Renin (upright)", "0.5–3.5", "ng/mL/hr"], ["Aldosterone (upright)", "4–31", "ng/dL"], ], [5*cm, 4.5*cm, 7*cm], colors.HexColor("#6E2F0A") )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 14. COMMON DRUG THERAPEUTIC LEVELS # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("14 ▸ COMMON THERAPEUTIC DRUG LEVELS", colors.HexColor("#1A3A5C"))) story.append(Spacer(1,3)) story.append(val_table( ["Drug", "Therapeutic Range", "Toxic Level", "Unit"], [ ["Digoxin", "0.5–2.0", ">2.0", "ng/mL"], ["Phenytoin", "10–20", ">20", "µg/mL"], ["Carbamazepine", "4–12", ">15", "µg/mL"], ["Valproic Acid", "50–100", ">100–150", "µg/mL"], ["Lithium", "0.6–1.2 (maintenance)\n0.8–1.2 (acute)", ">1.5–2.0", "mEq/L"], ["Theophylline", "10–20", ">20", "µg/mL"], ["Vancomycin (trough)", "15–20 (serious infx)", ">20–40", "µg/mL"], ["Gentamicin (trough)", "<2", ">2", "µg/mL"], ["Cyclosporin (trough)", "100–400 (organ-specific)", "Variable", "ng/mL"], ["Tacrolimus (trough)", "5–20 (organ-specific)", "Variable", "ng/mL"], ["Methotrexate (24-hr)", "<10 µmol/L", ">10 µmol/L", "µmol/L"], ["Aspirin (anti-inflam)", "150–300", ">300 = toxicity", "µg/mL"], ], [4.5*cm, 4.5*cm, 3.5*cm, 4*cm], colors.HexColor("#1A3A5C") )) story.append(Spacer(1,4)) story.append(mnem_box( "DPCVT — Narrow Therapeutic Index Drugs (Monitor Levels)", "D = Digoxin | P = Phenytoin | C = Carbamazepine | V = Valproate | T = Theophylline\n" "Also: Lithium, Cyclosporin, Tacrolimus, Aminoglycosides, Vancomycin\n" "Mnemonic: 'Doctors Prescribe Certain Vitamins Thoughtfully'", bg=BLUE_L, border=colors.HexColor("#1A3A5C") )) story.append(Spacer(1, 0.4*cm)) # ═══════════════════════════════════════════════════════════════════════════ # 15. MASTER MNEMONIC QUICK-REVIEW PAGE # ═══════════════════════════════════════════════════════════════════════════ story.append(PageBreak()) story.append(section_header("15 ▸ MASTER MNEMONICS — QUICK REVIEW CARD", NAVY)) story.append(Spacer(1,5)) mnemonics_table = [ ["Mnemonic", "Expansion", "What It Covers"], ["TROCAR", "Temp · Resp · O₂ · Cardiac · Arterial BP · Range", "Vital Signs"], ["Never Let\nMonkeys Eat\nBananas", "Neutrophils · Lymphocytes · Monocytes · Eosinophils · Basophils", "WBC Differential"], ["ROME", "Respiratory=Opposite; Metabolic=Equal", "ABG primary disorders"], ["MUD PILES CAT", "Methanol·Uraemia·DKA·Propylene·Isoniazid·Lactic·Ethanol·Salicylates·CO·Acetaminophen·Toluene", "High AG Metabolic Acidosis"], ["SICK", "Na, K, Ca danger thresholds for ICU", "Critical Electrolytes"], ["BATGAP", "Bili·AST/ALT·Total Protein·GGT·Albumin·PT", "LFT panel"], ["CUB", "Creatinine·Urea·Bicarb ratios", "RFT / AKI assessment"], ["PT=Warfarin\naPTT=Heparin", "Extrinsic vs Intrinsic pathway", "Anticoagulant monitoring"], ["My Troponin\nCan Rise", "Myoglobin→Troponin→CK-MB (rise order)", "Cardiac biomarker timing"], ["126-140-200-6.5", "FPG≥126, OGTT≥200, RBG≥200, HbA1c≥6.5%", "Diabetes diagnosis"], ["TSH First,\nT4 Second", "Pattern interpretation stepwise", "Thyroid disorders"], ["CAPS", "Cells·Appearance·Protein·Sugar (glucose)", "CSF analysis"], ["DPCVT", "Digoxin·Phenytoin·Carbamazepine·Valproate·Theophylline", "Narrow TI drugs"], ] mt = Table( [[Paragraph(r[0], sCellB), Paragraph(r[1], sCell), Paragraph(r[2], sCell)] for r in mnemonics_table], colWidths=[4*cm, 9*cm, 3.5*cm], repeatRows=1 ) mt.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), NAVY), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 8), ("ROWPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 4), ("GRID", (0,0), (-1,-1), 0.35, colors.HexColor("#CCCCCC")), ("VALIGN", (0,0), (-1,-1), "TOP"), ])) for i in range(1, len(mnemonics_table)): mt.setStyle(TableStyle([ ("BACKGROUND", (0,i), (-1,i), GRAY if i%2==0 else WHITE) ])) story.append(mt) story.append(Spacer(1, 0.5*cm)) # ── Footer note ────────────────────────────────────────────────────────────── story.append(HRFlowable(width="100%", thickness=1, color=TEAL)) story.append(Spacer(1,3)) story.append(Paragraph( "Reference: Guyton & Hall Medical Physiology 14e | Harrison's Principles of Internal Medicine 22e | " "Henry's Clinical Diagnosis by Laboratory Methods | Morgan & Mikhail Clinical Anesthesiology 7e | " "ADA Standards of Care 2024. Values may vary slightly between laboratories — always use your local reference range for clinical decisions.", sFooter)) story.append(Paragraph("Generated by Orris AI Medical Reference | May 2026 | For educational/clinical quick-reference use", sFooter)) # ── Build ──────────────────────────────────────────────────────────────────── doc.build(story) print("PDF generated:", OUTPUT) PYEOF echo "Script written."

Running Command

cd /home/daytona/workspace/normal-values && python generate_pdf.py

Editing File

~/normal-values/generate_pdf.py

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/normal-values/generate_pdf.py'
Running Command

cd /home/daytona/workspace/normal-values && python generate_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/normal-values/Clinical_Normal_Values_Mnemonics.pdf

Your PDF is ready! Download it here:
📄

Clinical Normal Values Mnemonics

PDF Document · PDF


What's inside (15 sections, colour-coded):

#SectionMnemonics Included
1Vital SignsTROCAR
2CBC / HaematologyNever Let Monkeys Eat Bananas (differential); 7/12 Hb rule
3Electrolytes & MineralsSICK (ICU danger values)
4ABGROME; MUD PILES CAT (high AG acidosis)
5Renal Function (RFT/KFT)CUB; BUN:Cr ratio rules
6Liver Function (LFT)BATGAP; ALT>AST vs AST>ALT
7CoagulationPT=Warfarin / aPTT=Heparin
8Cardiac Markers & LipidsMy Troponin Can Rise (enzyme timing)
9Thyroid FunctionTSH-First stepwise logic
10Glucose / Diabetes126-140-200-6.5 rule
11CSF AnalysisCAPS (Cells, Appearance, Protein, Sugar)
12Urine Analysis
13Key Hormones
14Therapeutic Drug LevelsDPCVT (narrow TI drugs)
15Master Mnemonic Quick-Review CardAll mnemonics in one table
Sources: Guyton & Hall 14e · Harrison's 22e · Henry's Clinical Diagnosis · Morgan & Mikhail 7e

Make a presentation explaining abnormalities in each category

Reading File
Reading File
Reading File
Your credits are exhausted. Your daily credits reset tomorrow, or you can purchase a top-up for more.
This is a shared conversation. Sign in to Orris to start your own chat.