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

> Як текстові описи симптомів будь-якою мовою перетворюються на концепції ВООЗ ICD-10 та ICD-11: нормалізатор зі штучним інтелектом, виявлення присутності та досвіду, перевірений ВООЗ словник, результати оцінки, зіставлення подібних випадків та обмеження.

Source: https://developers.anpheros.com/uk/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.  **Нормалізація (AI).** Велика мовна модель (Google Gemini на Vertex AI) читає текст і повертає для кожного згаданого симптому: основний код ICD-10, необов'язкові вторинні коди, коротку мітку та два атрибути: *твердження* (присутній, відсутній, вирішений, гіпотетичний, невизначений) та *суб'єкт* (особа або хтось інший). Модель може вибирати коди лише зі словника Anpheros; будь-яка інша відповідь, пропущений запис або недійсний основний код вважається невдалою спробою, ніколи "невідомим симптомом".
3.  **Зіставлення концепцій (детерміноване).** Код ICD-10 зіставляється з концепцією Anpheros і, на її основі, з ICD-11 та системою тіла. Цей етап використовує фіксовані таблиці, а не AI, тому однаковий код завжди дає однакову концепцію.
4.  **Публікація.** Лише симптоми, які є **присутніми** та **стосуються особи**, стають FHIR Observations у записі особи, і лише після успішної нормалізації. Якщо пізніша правка або повторна нормалізація це змінить, Observation буде відкликано; історія версій залишається.

## 2. Присутність, час та суб'єкт

Клінічні тексти часто згадують симптоми, яких людина не має. Клінічна обробка природної мови називає це виявленням *заперечення*, *темпоральності* та *суб'єкта* (сімейство методів NegEx та ConText). Рушій обробляє ті самі три питання за допомогою атрибутів `assertion` та `subject` моделі:

| Написано | Assertion / subject | Опубліковано як симптом особи? |
|---|---|---|
| "I've had a headache since Tuesday" | present / self | yes |
| "my head doesn't hurt any more" | resolved / self | no |
| "I might get a fever tomorrow" | hypothetical / self | no |
| "my mother has a cough" | present / other | no |

Скарги родича ніколи автоматично не перетворюються на сімейний анамнез.

## 3. Словник та як його перевіряли

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

- **ICD-10.** Кожен код та англійська назва були перевірені за допомогою браузера WHO ICD-10 Version 2019, включаючи примітки щодо включення та виключення кожного коду. Там, де примітки переміщували симптом в інше місце (наприклад, R19.4 виключає запор), словник слідував за ВООЗ.
- **ICD-11.** Кожна концепція відображається на код ICD-11 MMS 2025-01, взятий з WHO Simple Tabulation, та порівнюється з офіційною таблицею відображення WHO ICD-10 → ICD-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/uk/guides/symptom-data-api) для запитів та відповідей.
- **AI-асистенти та агенти** читають ті самі структуровані дані через [Context API](https://developers.anpheros.com/uk/guides/ai-agents-medical-data) замість вільного тексту, тому їхні відповіді можуть посилатися на коди.

## 7. Обмеження

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

## Пов'язане

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