A physiologically-accurate blood gas value generator for medical education. Generate realistic ABG (Arterial Blood Gas) values driven by patient conditions with full clinical interpretation.
Try it now: https://wmioch.github.io/BloodGasCases/
The web interface runs entirely in your browser - no server required!
- Physiologically Accurate: Uses Henderson-Hasselbalch equation, compensation rules, alveolar gas equation, and established clinical formulas
- FiOβ-Responsive Oxygenation: POβ realistically changes with FiOβ based on underlying pathology (A-a gradient, shunt fraction)
- Multi-Condition Support: Generate complex scenarios with multiple simultaneous conditions (e.g., DKA + opioid overdose)
- Comprehensive Output: Core ABG, oxygenation, electrolytes, anion gap analysis, and clinical interpretation
- Step-by-Step Analysis: Shows the working out process for educational purposes
- Realistic Variability: Adds physiological noise for realistic, non-textbook values
- Educational: Includes teaching points and clinical implications
- Cross-Platform: Python library + TypeScript/JavaScript library + Web frontend
- Visit https://wmioch.github.io/BloodGasCases/
- Or open
bloodgas_generator/frontend/index.htmllocally in your browser
cd bloodgas_generator/python
pip install -e .from bloodgas import generate_blood_gas, ClinicalCondition, Severity
# Single condition
result = generate_blood_gas(
conditions=[ClinicalCondition.DKA],
condition_severities={ClinicalCondition.DKA: Severity.SEVERE}
)
print(result.summary())
print(result.interpretation.to_text())
# Multiple conditions (e.g., T1DM in DKA who took opioids)
result = generate_blood_gas(
conditions=[ClinicalCondition.DKA, ClinicalCondition.OPIOID_OVERDOSE],
condition_severities={
ClinicalCondition.DKA: Severity.MODERATE,
ClinicalCondition.OPIOID_OVERDOSE: Severity.SEVERE
}
)
# Result: Mixed metabolic + respiratory acidosiscd bloodgas_generator/typescript
npm install
npm run buildimport { generateBloodGas, ClinicalCondition, Severity } from 'bloodgas-generator';
const result = generateBloodGas({
conditions: [ClinicalCondition.DKA, ClinicalCondition.OPIOID_OVERDOSE],
severities: {
[ClinicalCondition.DKA]: Severity.MODERATE,
[ClinicalCondition.OPIOID_OVERDOSE]: Severity.SEVERE,
},
patientFactors: { age: 22 },
fio2: 0.21,
});
console.log(result);| Condition | Primary Disorder | Key Features |
|---|---|---|
| COPD Exacerbation | Respiratory Acidosis | β A-a gradient, chronic compensation |
| Asthma Attack | Respiratory Alkalosis | β A-a gradient, V/Q mismatch |
| Pulmonary Embolism | Respiratory Alkalosis | β A-a gradient, dead space |
| ARDS | Respiratory Acidosis | High shunt fraction, refractory hypoxemia |
| Pneumonia | Respiratory Alkalosis | V/Q mismatch, consolidation |
| Opioid Overdose | Respiratory Acidosis | Normal A-a gradient |
| Hyperventilation | Respiratory Alkalosis | Normal A-a gradient |
| Neuromuscular Weakness | Respiratory Acidosis | Normal A-a gradient (pump failure) |
| Condition | Typical AG | Key Features |
|---|---|---|
| DKA | 20-35 | β glucose, ketones, Kussmaul breathing |
| HHS | 12-20 | Extreme hyperglycemia, mild acidosis |
| Lactic Acidosis (Sepsis) | 18-30 | β lactate, may have lung injury |
| Lactic Acidosis (Shock) | 22-35 | Very high lactate, poor prognosis |
| Renal Failure | 14-22 | Hyperkalemia common |
| Toxic Ingestions | 25-40 | Methanol, ethylene glycol, salicylates |
| Alcoholic Ketoacidosis | 18-28 | Low/normal glucose |
- Diarrhea (GI HCOββ» loss)
- RTA Types 1, 2, 4
- Saline Infusion (dilutional)
- Vomiting / NG Suction (HCl loss)
- Diuretic Use
- Hypokalemia
- Hyperaldosteronism
- Healthy Adult
- Pregnancy (chronic respiratory alkalosis)
- High Altitude
{
// Core ABG
ph: 7.12,
pco2: 52, // mmHg
po2: 58, // mmHg - now responds to FiO2!
hco3: 16, // mEq/L
baseExcess: -12,
sao2: 86, // %
// Oxygenation
fio2: 0.21,
pao2Fio2Ratio: 276,
aaGradient: 35,
expectedAaGradient: 14,
// Electrolytes
sodium: 136,
potassium: 5.8,
chloride: 100,
glucose: 420,
// Calculated
anionGap: 20,
correctedAnionGap: 20,
deltaGap: 8,
lactate: 3.2,
// Interpretation
interpretation: {
primaryDisorder: "Mixed Metabolic and Respiratory Acidosis",
severity: "severe",
teachingPoints: [...],
// ...
}
}- Henderson-Hasselbalch:
pH = 6.1 + log([HCOββ»] / (0.03 Γ pCOβ)) - Winter's formula: Expected pCOβ = 1.5 Γ [HCOββ»] + 8 Β± 2
- Compensation rules for all primary disorders
- Alveolar Gas Equation: PAOβ = FiOβ(Patm - PHβO) - PaCOβ/RQ
- A-a Gradient: Based on underlying lung pathology
- Shunt Fraction: Models refractory hypoxemia (ARDS, severe PE)
- Oβ-Hb Dissociation: Hill equation with Bohr effect
- P/F Ratio: For ARDS classification
- Standard and albumin-corrected anion gap
- Delta-delta analysis for mixed disorders
BloodGasCases/
βββ bloodgas_generator/
β βββ frontend/ # Web interface
β β βββ index.html
β β βββ styles.css
β β βββ app.js
β β βββ bloodgas.bundle.js
β βββ python/ # Python library
β β βββ bloodgas/
β β β βββ models/ # Data models
β β β βββ physiology/ # Calculation engines
β β β βββ scenarios/ # Clinical conditions
β β β βββ generator.py # Main generator
β β β βββ interpretation.py
β β βββ pyproject.toml
β βββ typescript/ # TypeScript library
β β βββ src/
β β β βββ types.ts
β β β βββ physiology.ts
β β β βββ conditions.ts
β β β βββ generator.ts
β β βββ package.json
β βββ shared/
β βββ schemas/ # JSON schemas
βββ README.md
- Python 3.10+ (for Python library)
- Node.js 18+ (for TypeScript library)
Python:
cd bloodgas_generator/python
pip install -e ".[dev]"
pytestTypeScript:
cd bloodgas_generator/typescript
npm install
npm run build
npm run build:bundle # Creates browser bundleThe frontend is a static site that can be deployed to GitHub Pages:
- Enable GitHub Pages in repository settings
- Set source to
bloodgas_generator/frontendfolder - Or deploy using GitHub Actions
MIT License - For educational purposes only. Not for clinical use.
Contributions welcome! Please ensure physiological accuracy by citing sources for any new conditions or formulas.
This tool is intended for medical education only. The generated values are simulated and should never be used for clinical decision-making. Always interpret real patient ABGs in their full clinical context.