# Anpheros Symptom Engine: методология

> Как описания симптомов в свободной форме на любом языке превращаются в концепции ВОЗ ICD-10 и ICD-11: ИИ-нормализатор, обнаружение наличия и субъекта, проверенный ВОЗ словарь, результаты оценки, сопоставление похожих случаев и ограничения.

Source: https://developers.anpheros.com/ru/guides/symptom-engine

**Anpheros Symptom Engine преобразует то, что человек пишет о своих ощущениях, своими словами и на своем языке, в международные клинические концепции: стабильный идентификатор Anpheros, код ВОЗ ICD-10, код ВОЗ ICD-11 и системную локализацию, а также информацию о том, присутствует ли симптом, разрешен ли он, является ли гипотетическим или относится к другому человеку. Он работает в производственной среде за Anpheros Daily, публикует свои результаты в виде HL7 FHIR R4 Observations на Anpheros Platform и предоставляет ту же терминологию любому приложению через REST и FHIR API.** На этой странице описано, как он работает, как он был проверен, что он измеряет и каковы его ограничения.

## Обзор

| | |
|---|---|
| Концепции | 274 (197 симптомов, 77 результатов), идентификаторы `SYM-0001`…, никогда не повторяются |
| Классификации | WHO ICD-10 (версия 2019) и WHO ICD-11 MMS (2025-01) с эквивалентностью каждого сопоставления |
| Системы органов | 13, взяты из блоков главы 21 ICD-11 (нервная, пищеварительная, дыхательная, кожная и т. д.) |
| Языки | названия на 20 языках; свободный текст на родном языке человека |
| Предупреждающие знаки | 32, для 14 концепций, дословно цитируемые из CDC и NIDDK |
| Оценка нормализатора | 5 языков (румынский, английский, испанский, немецкий, французский): основной код 97,5–100 %, наличие и субъект 92,5–98 %, отрицательные симптомы, сообщаемые как присутствующие, 0 % на каждом языке |
| Клинический обзор | пока нет: `clinical_review: false` по каждому ответу |
| Стандарты | HL7 FHIR R4 (`CodeSystem`, `ValueSet`, `ConceptMap`, `Observation`), ICD-10, ICD-11, LOINC для результатов лабораторных исследований |

## 1. Конвейер обработки

Симптом проходит через четыре этапа. Текст пациента никогда не изменяется; каждый этап добавляет данные рядом с ним.

1.  **Захват.** Исходная запись сохраняется как есть, с указанием момента ее фиксации, часового пояса телефона, языка и, опционально, интенсивности (1–10), начала и окончания. Никакие последующие этапы не перезаписывают ее.
2.  **Нормализация (ИИ).** Большая языковая модель (Google Gemini на Vertex AI) читает текст и возвращает для каждого упомянутого симптома: основной код ICD-10, дополнительные коды (опционально), краткую метку и два атрибута: *утверждение* (присутствует, отсутствует, разрешен, гипотетический, неопределенный) и *субъект* (сам пациент или кто-то другой). Модель может выбирать коды только из словаря Anpheros; любой другой ответ, пропущенная запись или недействительный основной код считаются неудачной попыткой, но никогда "неизвестным симптомом".
3.  **Сопоставление концепций (детерминированное).** Код ICD-10 сопоставляется с концепцией Anpheros и, исходя из нее, с ICD-11 и системой органов. Этот этап использует фиксированные таблицы, а не ИИ, поэтому один и тот же код всегда дает одну и ту же концепцию.
4.  **Публикация.** Только симптомы, которые **присутствуют** и **относятся к пациенту**, становятся FHIR Observations в записи пациента, и только после успешной нормализации. Если последующее редактирование или повторная нормализация изменяют это, Observation отзывается; история версий сохраняется.

## 2. Присутствие, время и субъект

Клинический текст часто упоминает симптомы, которых у человека нет. Клиническая обработка естественного языка называет это обнаружением *отрицания*, *временной характеристики* и *субъекта* (семейство методов NegEx и ConText). Движок обрабатывает те же три вопроса с помощью атрибутов утверждения (assertion) и субъекта (subject) модели:

| Написано | Утверждение / субъект | Опубликовано как симптом человека? |
|---|---|---|
| "У меня головная боль с вторника" | present / self | yes |
| "у меня больше не болит голова" | resolved / self | no |
| "у меня может подняться температура завтра" | hypothetical / self | no |
| "у моей матери кашель" | present / other | no |

Жалоба родственника никогда автоматически не превращается в семейный анамнез.

## 3. Словарный запас и как он проверялся

Словарный запас охватывает главу XVIII МКБ-10 (R00–R94, а с версии 2026.10.3 — ее не остаточные подкатегории, такие как R06.0 одышка) и, где ВОЗ классифицирует симптом в другой главе, код ВОЗ: запор K59.0, шум в ушах H93.1, двоение в глазах H53.2, нечеткое зрение H53.8, зуд L29.9, боль в суставах M25.5, боль в спине M54, проблемы со сном G47.

- **МКБ-10.** Каждый код и английское название были проверены в браузере ВОЗ МКБ-10 Версии 2019 года, включая примечания о включении и исключении для каждого кода. Там, где примечания перемещали симптом в другое место (например, R19.4 исключает запор), словарный запас следовал за ВОЗ.
- **МКБ-11.** Каждое понятие сопоставляется с кодом МКБ-11 MMS 2025-01 из таблицы ВОЗ Simple Tabulation и сравнивается с официальной таблицей сопоставления ВОЗ МКБ-10 → МКБ-11. Движок использует код *симптома* из главы 21, а не код заболевания (головная боль → MB4D, а не 8A8Z "расстройства головной боли"); каждое из 21 отклонений от статистической таблицы ВОЗ перечислено с указанием причины в файле выпуска. 67 сопоставлений эквивалентны, остальные отмечены как более широкие, более узкие или неточные.
- **Документированные решения.** "Мигрень", написанная человеком, кодируется как головная боль (R51), а неуточненная диарея — как R19, поскольку альтернативные коды ВОЗ (G43, A09) являются диагнозами; движок записывает сообщаемые симптомы, а не диагнозы.
- **Переводы.** Английские названия — это заголовки ВОЗ. Названия на 18 других языках являются машинным переводом, проверенным пословным сравнением с заголовками ВОЗ с помощью ИИ (`review: ai_reviewed`); пять были переписаны на каждом языке, где значение не соответствовало коду. Профессиональные медицинские переводчики их еще не проверяли.
- **Предупреждающие знаки.** Цитаты дословно, никогда не перефразированные, с общедоступных страниц CDC (инсульт, сердечный приступ) и NIDDK (диарея, запор), каждая с указанием источника, лицензии и примечанием о том, что это не диагноз. Там, где в цитате указано 9-1-1, в примечании добавляется европейский номер 112.

## 4. Оценка

Нормализатор оценивается на фиксированном наборе из 100 синтетических случаев, написанных на румынском языке (язык большинства текущих пользователей), каждый с ожидаемым основным кодом, утверждением и субъектом. 32 случая намеренно отсутствуют: отрицательные, разрешенные, гипотетические, неопределенные или касающиеся другого человека. Результаты с текущим запросом (версия 3, 15 октября 2026 г.):

| Метрика | Результат | Цель |
|---|---|---|
| Основной код верен | 100 % | ≥ 85 % |
| Утверждение и субъект оба верны | 98 % | — |
| Отрицательные симптомы, сообщенные как присутствующие | 0 % | ≤ 3 % |

Две ошибки были связаны с административными записями ("прием у кардиолога во вторник", "я хочу похудеть на 5 кг"), классифицированными как гипотетические вместо присутствующих; ни одно из них не является симптомом. Тестовый набор не был рассмотрен клиницистом, поэтому оценки являются ориентировочными.

**Другие языки (16 октября 2026 г.).** 40 случаев, охватывающих каждую категорию, были переведены на английский, испанский, немецкий и французский языки с теми же ожидаемыми ответами; неформальные случаи были переписаны в неформальном стиле каждого языка. Инструкции для модели остались прежними.

| Язык | Случаи | Основной код | Присутствие и субъект | Отрицательные, сообщенные как присутствующие |
|---|---|---|---|---|
| Румынский | 100 | 100 % | 98 % | 0 % |
| Английский | 40 | 100 % | 97.5 % | 0 % |
| Испанский | 40 | 97.5 % | 92.5 % | 0 % |
| Немецкий | 40 | 100 % | 97.5 % | 0 % |
| Французский | 40 | 100 % | 95 % | 0 % |

Большинство оставшихся ошибок — это те же административные записи ("прием у кардиолога во вторник", "осмотр, все в порядке") или выбор между двумя отсутствующими состояниями ("сегодня нет температуры" как разрешенное, а не отсутствующее); ни одно из них не публикует симптом. Единственное кодовое различие было в испанском "escalofríos y malestar" (озноб и недомогание), закодированном как недомогание (R53) с ознобом (R68) в качестве вторичного кода, а не наоборот.

Имена, отображаемые людям, соответствуют их языку: приложение отображает название концепции на языке пользователя (сначала обычное название) и примечание о присутствии ("разрешено", "кто-то другой") на 20 языках приложения.

**В продакшене (16 октября 2026 г.)** после проверки словаря по данным ВОЗ каждый сохраненный симптом был повторно нормализован. В записях реальных пользователей: все симптомы нормализованы, 0 присутствующих симптомов оставлены как "неясные", и 0 симптомов, которые не присутствуют, опубликованы как собственные для человека (независимый аудит опубликованных наблюдений).

## 5. Похожие случаи (в разработке)

Следующий компонент сравнивает людей по их симптомам и аномальным результатам лабораторных исследований, чтобы предложить, только с явного согласия, людей, сообщающих об очень похожих случаях.

- **Профиль.** Представлены симптомы за последние 90 дней, сообщенные самим человеком, по концепции Anpheros, и результаты лабораторных исследований за последние 180 дней вне референсного диапазона, напечатанные лабораторией, по коду LOINC. Профили не зависят от языка и страны: лабораторный отчет на румынском и отчет на английском языке соответствуют одному и тому же коду LOINC.
- **Оценка.** Взвешенный индекс Жаккара: общие признаки, деленные на все признаки обоих людей. Очень распространенные симптомы (головная боль, боль в животе, усталость, лихорадка, кашель, головокружение…) имеют вес 0,25, специфические симптомы — 1, аномальный результат лабораторного исследования — 1,5. Из 50 участников веса также масштабируются в зависимости от редкости признака в популяции (обратная частота документов). Два разных признака в одной и той же системе организма приносят частичный зачет.
- **Правило.** Пара рассматривается только при наличии как минимум трех общих специфических симптомов или двух симптомов плюс общий аномальный результат лабораторного исследования: одни только распространенные жалобы никогда не делают двух людей «похожими». Приглашение предлагается при оценке 0,70; человек видит похожие случаи при оценке 0,80.
- **Конфиденциальность.** Только совершеннолетние владельцы учетных записей, явное согласие (GDPR Ст. 9), которое может быть отозвано в любое время с немедленным удалением. Человек видит количество и общие признаки, но никогда не видит, кто эти другие люди.

Это не предполагает постановку диагноза или заболевания.

## 6. Как приложения используют это

- **Anpheros Daily** (iOS, Android, Mac, web): каждый симптом, который отмечает человек, проходит через описанный выше конвейер; человек может видеть и корректировать результат.
- **Anpheros Platform**: симптомы хранятся как FHIR `Observation`s с категорией `urn:anpheros:observation-category|symptom`, включая как коды, так и собственный текст человека. Любое приложение с согласия человека может их читать.
- **Ваше приложение**: ищите концепции с помощью `GET /v1/terminology/symptoms`, расширяйте FHIR `ValueSet`, переводите коды с помощью `ConceptMap`s в ICD-10 и ICD-11, а также проверяйте Observations на соответствие профилю `anpheros-symptom`. См. [Symptom data API](https://developers.anpheros.com/ru/guides/symptom-data-api) для запросов и ответов.
- **AI-ассистенты и агенты** читают те же структурированные данные через [Context API](https://developers.anpheros.com/ru/guides/ai-agents-medical-data) вместо свободного текста, поэтому их ответы могут ссылаться на коды.

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

- Движок называет и кодирует симптомы; он не ставит диагнозы, не ранжирует причины и не связывает симптомы с заболеваниями.
- Ни один клиницист еще не просмотрел словарь, переводы или предупреждающие знаки.
- Наборы для оценки являются синтетическими; 15 из 20 языков пока не имеют набора для оценки.
- ICD-11 лицензирован ВОЗ по лицензии CC BY-ND 3.0 IGO; коды и названия воспроизведены без изменений.

## Связанные материалы

- [API данных о симптомах](https://developers.anpheros.com/ru/guides/symptom-data-api): концепции, терминология FHIR и симптомы, сообщенные пациентом
- [Anpheros Search](https://developers.anpheros.com/ru/guides/anpheros-search): те же симптомы вместе с состояниями и методами лечения в одном общедоступном каталоге, каждая запись с указанием источников
- [Системы кодов FHIR](https://developers.anpheros.com/ru/guides/fhir-code-systems)
- [API продольных данных пациента](https://developers.anpheros.com/ru/guides/longitudinal-patient-data-api)
