# Часы сердца: АВ-блокада II степени (Мобитц I и Мобитц II)

Дата: 13.10.2026
Статус: принята автономно (владелец 12.10.2026: «Все автономно»). Issue: #251.
Связано: полная АВ-блокада `2026-10-13-heart-clock-av-block.md` (#235), паузы СССУ `2026-10-12-more-ecg-presets.md` (`pauseEvery`), инструкция `docs/adding-a-disease-preset.md`. Источники: `/mnt/project-files/evidence/av-block-advanced-ecg.md` (дальше [E], номера строк таблицы).

## Зачем

В часах есть АВ-блокада I степени (длинный PR) и полная (III степени). Нет II степени, где часть зубцов P не проводится к желудочкам: на ЭКГ после зубца P нет комплекса QRS. Это самый узнаваемый признак АВ-блокады на ЭКГ, и статья об АВ-блокаде его описывает.

## Что видит читатель

Два пресета.

«АВ-блокада II степени, Мобитц I»:

- зубцы P идут ровно;
- PR от удара к удару удлиняется, пока очередной зубец P не останется без QRS; следующий PR снова самый короткий, и цикл повторяется;
- в цикле 4 зубца P и 3 комплекса QRS (4:3);
- QRS узкий.

«АВ-блокада II степени, Мобитц II»:

- зубцы P идут ровно, PR одинаковый до и после выпавшего QRS;
- без QRS остаётся каждый третий зубец P;
- интервал RR, в который попал непроведённый зубец P, ровно вдвое длиннее остальных;
- QRS узкий (в описании сказано, что при Мобитц II он часто широкий).

Ползунок меняет частоту зубцов P. Варианта «после лечения» у этих пресетов нет: при Мобитц II стимулятор рисовал бы то же, что пресет после лечения полной блокады, а Мобитц I часто не требует лечения.

При `blockedP` ползунок задаёт частоту зубцов P, а желудочков меньше: 3/4 этой частоты при Мобитц I и 2/3 при Мобитц II. Описание ЭКГ пресета называет частоту зубцов P, а не «ударов». Нижний предел ползунка у обоих пресетов 40 зубцов P в минуту (`presetRateFloors`, `assumption:`), чтобы желудочковая частота не опускалась ниже примерно 27 в минуту.

## Факты и источники

| Что рисуем | Источник | Статус |
|---|---|---|
| Мобитц I: PR удлиняется с каждым ударом, пока импульс не будет заблокирован и QRS не выпадет; следующий удар с самым коротким PR; цикл повторяется | MSD «Atrioventricular Block» [E 1a] | источник |
| Соотношение 4:3 (группы по три QRS на четыре P) | MSD, подпись к рисунку [E 1b] | источник |
| Прирост PR: первый PR 180 мс, затем +80 мс на удар (180, 260, 340 мс при 60 в минуту) | не найдено | `assumption:`; прирост одинаковый, хотя в типичном цикле он убывает — источники этого не дают |
| QRS при Мобитц I узкий | MSD: при узком QRS блок почти всегда в АВ-узле [E 1d] | `assumption:` для модели |
| Мобитц I часто не требует лечения; стимулятор — при выраженных симптомах | StatPearls «Second-Degree AV Block» (NBK482359); MSD; Минздрав 160_2 [E 1e] | источник |
| Мобитц II: PR одинаковый до и после непроведённого зубца P | StatPearls NBK482359; MSD [E 2a] | источник |
| Выпадает каждый третий (или четвёртый) зубец P; RR через блок вдвое длиннее остальных | MSD [E 2c] | источник; модель: каждый третий |
| Мобитц II часто с широким QRS (блокада ножки) | StatPearls NBK482359; MSD [E 2b] | источник; модель рисует узкий, описание это говорит |
| При Мобитц II без обратимой или физиологической причины стимулятор показан независимо от симптомов | Минздрав 160_2 §3.3.2; ESC 2021 §5.2.1.3; MSD [E 2d] | источник |
| Частота P по умолчанию 75 (Мобитц II) и 60 (Мобитц I) | не найдено | `assumption:` |

Чего модель не рисует (в `summary`): укорочение RR внутри цикла Мобитц I (прирост PR одинаковый, поэтому RR в группе равны: P–P + `prStep`), блокаду 2:1 и блокаду высокой степени, широкий QRS при Мобитц II, переход в полную блокаду, сокращение предсердий без сокращения желудочков в 3D-модели.

## Механика

### Непроведённый зубец P (`blockedP`)

- Новый параметр `blockedP` (0 или 1). При 1 пауза после каждого `pauseEvery`-го удара — это один интервал P–P (RR ритма), в начале которого рисуется зубец P без QRS. `pauseDuration` при этом 0: длину паузы задаёт ритм, поэтому она следует за ползунком.
- `clock.ts`: `pauseFor` при `blockedP` возвращает RR ритма удара. `ecgFrom` добавляет зубец P удара в момент `start + timing.rr`, если у удара есть пауза и `blockedP` Для этого P выносится из `beatWaves` в функцию `pWave` в `ecg.ts`, чтобы у обычного и непроведённого P была одна форма.
- Гемодинамика и звуки в паузе не меняются: желудочки наполняются, как в синусовой паузе СССУ. `assumption:` модель не рисует волну a левого предсердия в паузе.
- Фаза: в паузе с `blockedP` монитор показывает «наполнение», а не «синусовую паузу» (`HeartClockDemo`), потому что синусовый узел работает.
- 3D: `cycleState` получает ветку `blockedP && beat.pause > 0 && 0 <= tInBeat − rr < pDuration` и подсвечивает синусовый узел во время непроведённого зубца P. `assumption:` АВ-узел не подсвечивается, хотя при Мобитц I блок именно в нём [E 1d]: модель не показывает, где импульс останавливается.
- Диаграмма Виггерса показывает один сердечный цикл (`timing.rr`), как при паузе СССУ: в паузе курсор стоит у правого края, непроведённый P виден на ленте ЭКГ, а не на диаграмме. Так задумано, ось не меняется.
- Комментарии к `Beat.pause`, `sample.pause` и `pauseFor` обновляются: пауза бывает и при работающем синусовом узле.
- Ограничения в `resolveParams`: `blockedP` — 0 или 1; при 1 нужны `pauseEvery` от 2, `pauseDuration` 0, `pAmplitude > 0` и нулевые `fWaveAmplitude`, `flutterConduction`, `rrIrregularity`, `atrialRate`, `atrialPacing`, `ventricularPacing`. Правило «`pauseEvery` и `pauseDuration` оба 0 или оба больше 0» при `blockedP` не действует.

### Удлинение PR (`prStep`)

- Новый параметр `prStep`, мс, целое 0–100 (в `paramRanges`): в группе из `pauseEvery` ударов PR каждого следующего удара длиннее на `prStep`; первый удар группы — `prInterval`. Нужен `blockedP = 1`.
- `beatTiming(rr, params, prExtra = 0)`: `qOnset` и всё после него сдвигаются на `prExtra`, длительность P не меняется. `makeBeat` передаёт `prExtra = (index mod pauseEvery) · prStep`.
- `prExtra` не масштабируется с √RR: к PR, который дал `prAt` (масштабированному и ограниченному при RR больше 1500 мс), прибавляется ровно `prStep` на каждый шаг. Ряд 180/260/340 мс верен при 60 в минуту; при 40 в минуту база длиннее, и PR растёт от неё.
- Индекс считается от глобального номера удара. После смены пресета первая группа может начаться с середины (например, сразу с длинного PR и выпадения). Это известное поведение: со следующей группы цикл правильный.
- `checkParams` проверяет и самый длинный PR группы, поэтому `heartRateLimits` не даст частоту, при которой последний удар группы не помещается. По расчёту ревью Мобитц I с этими значениями помещается примерно в 30–76 в минуту; тест фиксирует пределы, которые даёт модель.

### Пресеты

- `av-block-second-degree-mobitz-1` и `av-block-second-degree-mobitz-2` в `presetIds` сразу после `av-block-first-degree`.
- Мобитц I: `blockedP: 1`, `pauseEvery: 3`, `prInterval: 180`, `prStep: 80`, `heartRate: 60`.
- Мобитц II: `blockedP: 1`, `pauseEvery: 2`, `heartRate: 75`.
- Пределы ползунка: снизу 40 (`presetRateFloors`, `assumption:`). Сверху у Мобитц I 70 (`presetRateCeilings`, `assumption:`): модель допускает 76, но там у последнего удара группы остаётся около 12 мс наполнения, при 70 — около 57 мс. У Мобитц II сверху предел модели (180 зубцов P в минуту), это тоже выбор модели, источники верхнего предела не дают.
- `presetShape`: оба `null`. Строки en, ru и тестовая локаль: «АВ-блокада II степени, Мобитц I» / "Second-degree AV block, Mobitz I", то же для II; `.summary` и `.ecg`. Источник в `presetSources`: StatPearls NBK482359.

## Тесты

- Модель: `blockedP: 0`, `prStep: 0` не меняют снимок; `resolveParams` отклоняет недопустимые сочетания; при `blockedP` после каждого `pauseEvery`-го удара пауза равна RR ритма и в ней есть зубец P (максимум `ecgAt`), а QRS нет; RR через блок вдвое длиннее (Мобитц II); PR растёт на `prStep` внутри группы и возвращается к `prInterval` (Мобитц I); `checkParams` учитывает самый длинный PR; `cycleState` подсвечивает синусовый узел на непроведённом P; в паузе нет S1/S2 (`soundEvents`) и объём ровный (`hemodynamicsAt`); после непроведённого P PR снова `prInterval`; `setParams` посреди группы не ломает расчёт; `resolveParams` отклоняет `prStep` без `blockedP` и `blockedP` с `pauseDuration > 0`; `prExtra` не масштабируется.
- Пресеты: общие проверки, пределы ползунка (у Мобитц I верхний предел из модели).
- e2e: на странице часов оба пресета, описание ЭКГ, фаза в паузе не «синусовая пауза».

## План PR

1. Эта спека.
2. Механика `blockedP` и `prStep`, тесты.
3. Пресеты, строки, источник, e2e, строки в `docs/adding-a-disease-preset.md`.
