FHIR R4 ресурс — формальное юридическое или функциональное объединение людей. В нашем контексте используется в двух ролях: AI-author для генерируемого контента и tenant-brand для портала.
Использование в BloodGPT
Organization/bloodgpt — AI-author
Один ресурс на всё хранилище, ставится автором для всех AI-сгенерированных FHIR-объектов:
Composition.author(interpretation, patterns, considerations, recommendations)CarePlan.author(follow-up план)Observation.note[].authorReference(parameterDetails, AI-комментарий по биомаркеру; panel overview)
Pivot с Device на Organization произошёл в session c9560637 (Feb 17 2026): Google Healthcare API не принимает Device-references в author[x]. См. authorship-organization-not-device.
{
"resourceType": "Organization",
"id": "bloodgpt",
"name": "BloodGPT",
"type": [{ "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/organization-type", "code": "other" }] }]
}Provisioning: создаётся при создании tenant dataset (healthcare-dataset.function.ts). Известный gap — provisioning function не покрывает existing orgs (см. ниже).
Organization/{tenantId} — tenant brand (потенциальное расширение)
В будущем — для whitelabel / multi-tenant brand: имя клиники, логотип, контактные данные. Отдельный ресурс от Organization/bloodgpt. Сейчас брендинг хранится в Organization таблице PostgreSQL, не в FHIR.
DiagnosticReport.resultsInterpreter — стандартное FHIR-поле для “кто отвечает за интерпретацию результатов” (Reference(Practitioner | PractitionerRole | Organization | CareTeam)). Verified в c9560637. Promotion с Composition.author на это поле — отдельная задача, не сделана.
Ключевые поля (для нашего use case)
name— отображаемое имя ("BloodGPT")type— codeable concept; для AI-системы используетсяothertelecom— контакты, для brand-orgaddress— для brand-org
Gotchas
- Existing prod datasets без
Organization/bloodgpt. На момент pivot’а (Feb 17 2026) provisioning создавал ресурс только для новых orgs. Existing — без него. Runtime ошибкаreference target(s) not found: Organization/bloodgptпри попытке записать AI-content. Manual fix черезgcloud+ curl был сделан только для двух prod datasets:org-cmlpaxq2g0001nv1511l4t6v9org-cmlpbcp5l0000pl14apu115cw- Backfill для остальных prod datasets не сделан. Каждый existing tenant с
healthcareDatasetName, у которого ресурса нет, словит runtime error при следующем enrichment-шаге. См. multi-tenant-fhir-storage [О5].
- Idempotent provisioning не реализован. Claude в c9560637 предлагал включить
Organization/bloodgptPUT-entry в начало transaction bundle при каждом fhir-resource-creation (idempotent — создастся если нет, обновится если есть). Решение не закоммичено в этой сессии — текущий workaround manual.
Связано
- authorship-organization-not-device — actual decision
- fhir-device — superseded prior choice
- fhir-composition, fhir-careplan, fhir-observation — все имеют
authorполе - fhir-annotation —
author[x]choice type - google-healthcare-api — vendor-specific ограничение, породившее pivot
- multi-tenant-fhir-storage — provisioning + backfill open question
Источники
Сноски
-
FHIR R4 Organization, accessed 2026-05-17, https://hl7.org/fhir/R4/organization.html. ↩
-
FHIR R4 Annotation.author choice, accessed 2026-05-17, https://hl7.org/fhir/R4/datatypes.html#Annotation. ↩