Ресурс для аллергий и непереносимостей. От Condition отличается тем, что связан с конкретным веществом (substance) которое триггерит реакцию, а не с состоянием пациента. У нас — каждая аллергия / непереносимость из narrative-разбора документа = одна AllergyIntolerance.
Использование в BloodGPT
- Источник — narrative-to-FHIR pipeline. LLM (промпт
narrative_to_entities) extracted entities →ExtractedAllergySchema→buildAllergyIntolerance()вnarrative-to-fhir/fhir-builders/allergy-intolerance.ts. - Critical safety field —
verificationStatus— patient-reported allergies MUST default кunconfirmed. См. ниже. - Closed-enum category —
food/medication/environment/biologic. Все 4 значения R4 поддерживаются LLM-extracted enum.
Ключевые поля для нас
patient—Patient/{id}(внимание: поле называетсяpatient, неsubjectкак у Observation/Condition)code— substance что триггерит реакцию (CodeableConcept). SNOMED CT когда coder его нашёл, иначе толькоtext.category—food/medication/environment/biologic. Closed enum — нельзя custom-coding (поле примитивного типаcode, не CodeableConcept). Из LLM enumAllergyCategoryEnum(все 4 значения R4).clinicalStatus— текущий статус. Enum["active", "inactive", "resolved"](AllergyClinicalStatusEnum). Default"active","resolved"только когда narrative explicit («outgrew penicillin allergy», «allergy resolved per challenge test»).verificationStatus— уверенность что аллергия реальная. Enum["unconfirmed", "confirmed", "refuted", "entered-in-error"](AllergyVerificationStatusEnum). Default —unconfirmed. См. ниже.type—allergy(IgE-mediated) илиintolerance(non-immune, например лактоза, сульфиты). LLM extracted, может быть null когда narrative не disambiguates.criticality—low/high/unable-to-assess. У нас mapping изseverity(mild → low, severe/moderate → high).reaction[]— список реакций. У насmanifestation: [{ text }]+severity(mild / moderate / severe).recordedDate— наш ingest time
Default verificationStatus: "unconfirmed" — clinical safety
(Файл narrative-to-fhir/fhir-builders/allergy-intolerance.ts:33-47 + schema 67-77 с явным rationale.)
Patient-reported «у меня в детстве была сыпь от пенициллина» не должно promoted в confirmed без explicit verification language. False-positive confirmed allergy в EHR — documented driver suboptimal prescribing (Macy E, Contreras R, 2014, JACI 133(3):790).
confirmed reserved для explicit clinical verification:
- «skin-prick positive»
- «IgE-confirmed»
- «allergist diagnosed»
- «documented anaphylaxis»
- «RAST positive»
refuted — для narrative что explicitly негирует ранее сообщённую аллергию: «previously reported penicillin allergy ruled out via challenge test».
Это паттерн который нам стоит распространить на другие resource’ы (Condition, MedicationStatement) — particularly при self-reported данных от пациента.
clinicalStatus vs verificationStatus — ортогональность
Можно быть:
active+unconfirmed— пациент сейчас реагирует на что-то, но мы не уверены что это эта substanceactive+confirmed— врач подтвердил, аллергия активнаinactive+confirmed— аллергия была подтверждена, сейчас нет реакции (например выходит сезонная)resolved+confirmed— пациент перерос- (любой) +
entered-in-error— запись по ошибке, удалить нельзя но можно flag’нуть
Failure modes
- Closed enum не покрывает все случаи — например, lifestyle-related sensitivities (caffeine, gluten без celiac diagnosis) не попадают чисто ни в
food(это технически тоже food) ни как allergy. LLM в таких случаях скорее всего выберетfoodсtype: intolerance. Open вопрос — extension с более тонкой классификацией. - Severity → criticality mapping не идеален —
mild→lowэто безопасно, ноmoderate→highдискуссионно. Anaphylaxis всегдаhighнезависимо от severity narrative.
Открытые вопросы
- Расширять ли через extension для drug-class категоризации (NSAIDs / beta-lactams / opioids)? FHIR R4 не даёт стандартного способа на этом resource.
- Auto-promote в
confirmedесли документ — discharge summary с подписью врача? Или всё-таки требовать explicit verification language?
Связанные решения
[[../domain/category-coverage]](TBD) — overall category strategy[[../domain/fhir-resource-origin-and-lifecycle]]— origin tag (user-uploaded vs document-extracted)
Связано
[[fhir-resource-categories]]— общая концепция category на ресурсах + closed-enum особенность[[fhir-condition]]— соседний resource с похожей моделью двух статусов- snomed — substance coding (через
narrative-to-fhir/snomed-coder.ts)
Источники
Сноски
-
HL7 R4 spec, accessed 2026-05-17, https://hl7.org/fhir/R4/allergyintolerance.html. ↩
-
ValueSet
allergy-intolerance-category(closed), accessed 2026-05-17, https://hl7.org/fhir/R4/valueset-allergy-intolerance-category.html. ↩ -
ValueSet
allergyintolerance-clinical, accessed 2026-05-17, https://hl7.org/fhir/R4/valueset-allergyintolerance-clinical.html. ↩ -
ValueSet
allergyintolerance-verification, accessed 2026-05-17, https://hl7.org/fhir/R4/valueset-allergyintolerance-verification.html. ↩