# Модели врождённых пороков из Heart Library

Статус: согласовано · 12.10.2026 · issue #99. Третий шаг [спеки признаков болезней](2026-10-12-disease-signs-3d.md). Первым берём тетраду Фалло: Никита отдал выбор на усмотрение Claude («Все автономно», 12.10.2026).

## Цель

Показать сердце с врождённым пороком на настоящей модели пациента, а не схемой на нормальном сердце. Модели берём из [NIH 3D Heart Library](https://3d.nih.gov/collections/heart-library): это сердца пациентов с врождёнными пороками, собранные по данным МРТ или КТ.

## Что нашли

Лицензия задаётся у каждой модели отдельно. FAQ NIH 3D: «Licensing varies, so please review the terms of the assigned license». Контент Heart Atlas под CC BY-SA 4.0, поэтому подходят только CC0 и CC BY; модели NC и ND не берём.

| Порок | Модель | Лицензия | Что внутри | Решение |
|---|---|---|---|---|
| ДМПП | [3DPX-000576](https://3d.nih.gov/entries/3DPX-000576) «14 mo Female with Moderate ASD…» | CC BY-NC-ND | Вторичный ДМПП, коарктация, кардиомегалия | Не берём: NC-ND |
| ДМПП | [3DPX-007813](https://3d.nih.gov/entries/3DPX-007813) «Case Model #42 l-TGA, PAPVR, Dextro, ASD» | CC0 | Один меш; кроме ДМПП декстрокардия, l-TGA, аномальный дренаж лёгочных вен | Не берём: запутает читателя статьи о ДМПП |
| Тетрада Фалло | [3DPX-016151](https://3d.nih.gov/entries/3DPX-016151) «Case Model #70 Tetralogy of Fallot» | CC0 | Миокард, кровь в полостях и лёгкие отдельными мешами; есть общий GLB | **Берём первой**: слои разделены. Запасной вариант [#80](https://3d.nih.gov/entries/3DPX-016079/2), тоже CC0 |
| ДМЖП | [3DPX-007809](https://3d.nih.gov/entries/3DPX-007809) «Case Model #59 VSD» | CC0 | Четыре части, что из них миокард, не указано | Кандидат после осмотра; запасной вариант [3DPX-016241](https://3d.nih.gov/entries/3DPX-016241) |

Данные взяты со страниц моделей. Модели скачаны 12.10.2026 (общая папка проекта `models/heart-library/`, у каждой `entry.md` с лицензией и sha256). Исходный GLB тетрады Фалло весит 195 МБ: три меша (кровь в полостях 355 тыс. треугольников, лёгкие 1,36 млн, миокард 616 тыс.), вершины не сварены, есть только позиции и нормали, размер около 0,2 м. Пробная сборка (сварка, сглаживание Таубина, упрощение) даёт около 140 тыс. треугольников и 0,5 МБ с meshopt. Снаружи признаки тетрады на ней не читаются, поэтому читателю нужен разрез. DOI у этих моделей нет. Условия NIH 3D запрещают использовать названия и логотипы NIH без разрешения, поэтому коллекцию называем только как источник, текстом и без логотипа, и в подписи пишем, что NIH не одобрял Heart Atlas.

Изолированного ДМПП с открытой лицензией в Heart Library нет. ДМПП остаётся значком на нашей модели (PR 1 спеки признаков).

## Что входит

1. **Подготовка модели.** Исходный GLB автора (195 МБ) в репозиторий не кладём. Скрипт `packages/models/src/congenital.ts <id> <исходный GLB>` проверяет его sha256 по `assets/models/congenital/sources.yaml` (URL записи, версия, sha256), сваривает вершины, сглаживает поверхность фильтром Таубина (свой код: в gltf-transform его нет), упрощает меши через meshoptimizer, центрирует модель по миокарду, переименовывает узлы `Myo` и `BP` в `myocardium` и `blood-pool` и пишет `assets/models/congenital/tetralogy-of-fallot.glb` (около 170 тыс. треугольников, без сжатия, как `heart/heart.glb`). Оси исходника совпадают с нашими (Y вверх, +X к левому боку пациента, +Z вперёд: сердце прилегает к передней границе лёгких и смещено к +X), поэтому поворот не нужен. Параметры сглаживания и упрощения записаны в скрипте и в поле `changes` записи о лицензии. Скрипт запускают руками, когда меняется исходник или параметры; CI проверяет только результат.
2. **Структуры и лицензия.** `assets/models/congenital/structures.yaml` с мешами новой группы `layer` (добавляем её в `GROUPS`). Запись в `assets/models/LICENSES.yaml` в формате, который проверяет `parseLicenses`: файл под `CC-BY-SA-4.0`, в `derived_from` запись Heart Library с https-URL, `CC0-1.0`, атрибуцией «Kopan, CT», датой и sha256 исходника. Постер получает свою запись, когда появится.
3. **Сборка.** `build.ts` получает список моделей вместо зашитого `heart/heart.glb` и пишет `tetralogy-of-fallot-lod0.glb` и `-lod1.glb` с теми же бюджетами, что у нормального сердца: lod0 до 3 МБ и 300 тыс. треугольников, lod1 до 1,5 МБ и 100 тыс. Тесты бюджета и узлов проходят по всем моделям из списка. Атрибуция в вебе (`heart-model.ts`) читается по файлу модели, а не только для `heart/heart.glb`.
4. **Вьюер.** Тот же `HeartViewer` с другим набором структур: два слоя группы `layer` (миокард и кровь в полостях), которые можно выделять, прятать и делать прозрачными. Деформаций сердцебиения у этой модели нет: её меши не совпадают с нашими камерами, поэтому кнопки сердцебиения и проп `disease` для неё не работают. Разрез, вращение и клавиатура остаются; снаружи признаки тетрады не видны, поэтому разрез открыт по умолчанию. Камера та же, что у нормального сердца: модель тетрады в неё помещается. Лёгкие в модель не берём: в их сегментации много сосудистых шипов, и на разрезе они закрывают сердце. Названия слоёв (`structure.myocardium` и др.) и группы `layer` добавляем в en, ru и тестовую RTL-локаль. Постер рендерится той же сборкой.
5. **Статья.** Модели нужна статья о тетраде Фалло (ru и en), иначе читатель не поймёт, на что смотрит. Статью пишет тред «Новые статьи» по правилам контента: не меньше двух источников, один из них клиническая рекомендация из `content/trusted-sources.yaml`, конвейер «автор → независимая проверка источников → ревью». Если подходящей рекомендации нет в списке доверенных источников, статью не пишем, а модель не публикуем, пока её не будет.
6. **Подписи.** Под моделью: «Сердце пациента с тетрадой Фалло, модель по данным МРТ из NIH 3D Heart Library (автор записи Kopan, CT; NIH не одобрял этот сайт)» и ссылка на запись модели. На записи указаны модальность МРТ и ключевое слово Pediatric; возраст и было ли сердце оперировано, не указано, поэтому об этом не пишем. Четыре признака тетрады подписываем только теми словами, которые есть в источниках статьи; значки на модели ставим, только если место признака видно на модели и проверено.

## Ограничения

- Модель одного пациента: размеры и форма у других пациентов другие. Подпись говорит об этом.
- Исходник лежит вне репозитория (общая папка проекта или скачанный по `sources.yaml` файл), поэтому пересобрать модель без него нельзя; в репозитории лежит подготовленная модель, и сборка сайта работает только с ней.

## PR

1. Скрипт подготовки, модель, `structures.yaml`, записи о лицензии, сборка LOD по списку моделей, тесты бюджета и узлов. Постер появится в PR 3 вместе с камерой вьюера.
2. Статья о тетраде Фалло (ru и en) по конвейеру проверки источников.
3. Вьюер с набором слоёв (`CongenitalModel.astro`, разрез открыт), постер, строки en/ru и тестовой RTL-локали, e2e на тестовой статье.
4. Модель в статье о тетраде Фалло, когда статья смерджена, и e2e на настоящей статье.
