Каноническая формула Видмарка
Для одной порции алкоголя концентрация этанола в крови (BAC) рассчитывается как:
C(t) = A / (m · r) − β · (t − t₀)
где:
C(t) — концентрация, ‰ (г/кг)
A — масса принятого этанола, г = V · ABV/100 · ρ
V — объём напитка, мл
ABV — крепость, об. %
ρ — плотность этанола (0.789 г/мл, 20 °C)
m — масса тела, кг
r — коэффициент распределения Видмарка
(0.68 муж / 0.55 жен)
β — скорость элиминации (0.15 ‰/ч в среднем)
t — момент наблюдения
t₀ — момент приёма
Для нескольких порций результаты суммируются. Если порция ещё не принята (timeOffsetMin > elapsedMin), её вклад равен 0 — мы моделируем «алкоголь, который человек ещё не выпил».
Поправка Сейдля по антропометрии
Классический Видмарк использует фиксированные r = 0.68 / 0.55, но это грубо для нестандартных
пропорций. Сейдль (Seidl/Jensen/Alt, 2000) предложил уточнение через рост и вес:
r_male = 0.31608 − 0.004821 · m + 0.004632 · h
r_female = 0.31223 − 0.006446 · m + 0.004466 · h
где h — рост в см. В нашем калькуляторе результат клипуется к диапазону [0.40 .. 0.85] — физиологически разумные границы; экстраполяция за этими пределами теряет точность.
Модификаторы
Базовая формула не учитывает индивидуальные различия по возрасту, типу телосложения,
наполненности желудка, темпу приёма и толерантности. Мы добавляем пять мультипликативных
поправок (см. packages/calculator-core/src/modifiers.ts):
- Возраст: после 60 лет элиминация замедляется (×0.95), после 70 — ещё (×0.90). Источник: Jones AW. 2010.
- Тип телосложения (slim/average/muscular/overweight): разная доля воды в теле;
коэффициент применяется к
r. - Наполненность желудка (empty/light/full): сытый желудок снижает пиковый BAC на 10–25 %. Источник: Lin/Levine 1989.
- Темп приёма (slow/normal/fast): быстрый темп даёт более резкий пик.
- Толерантность (none/occasional/regular): регулярное употребление индуцирует ферменты CYP2E1 и АДГ, β увеличивается до 0.20 ‰/ч.
Норма и пороги
Российская норма для водителей — 0.3 ‰ в крови или 0.16 мг/л в выдыхаемом воздухе (КоАП ст. 12.8). Это ориентировочный порог для UI-цвета, не «разрешение». Дисклеймер на каждой расчётной странице: «Расчёт носит ориентировочный характер. Не является доказательством в суде».
Открытый код
Все формулы и коэффициенты живут в packages/calculator-core:
widmark.ts— базовая формула + константы.seidl.ts— поправка по антропометрии.modifiers.ts— все пять модификаторов с источниками в JSDoc.-
timeSeries.ts— генератор временного ряда + маппинг в зоны (sober / legal / warning / danger). reverse.ts— обратный сценарий (бинарный поиск максимального объёма).
Coverage по ядру — 99.4 %, 164 unit-теста сверены с открытыми судмедэкспертными таблицами. Список источников.