Pivot с Device на Organization подтверждён через session c9560637 (Feb 17–20 2026): Google Healthcare API не принимает Device-references в author[x] choice type. Это vendor-specific ограничение — FHIR R4 spec разрешает Device через author[x], но Google валидатор отвергает. Используется Organization/bloodgpt для всех AI-generated полей.
Контекст
Composition.author, CarePlan.author, Observation.note[].authorReference — все указывают на “кто написал/сгенерировал этот FHIR-кусок”. В нашем случае автор — система BloodGPT (AI). FHIR Annotation.author[x] (см. fhir-annotation) — choice type: либо authorString (просто строка), либо authorReference (ссылка на ресурс). Какой ресурс ставить в качестве AI-автора?
Рассматривали
authorString: "BloodGPT AI"— простейший вариант, никаких новых ресурсов. Но нет места для версии модели, prompt-version, audit trail. При смене prompts/моделей вся история сваливается в одну строку.authorReference → Device/bloodgpt-ai(initial выбор в871a7608, Feb 13–16) — Device-ресурс хранитversion,deviceName,note[]с описанием модели и prompt-версии. Один Device per tenant FHIR store, создаётся при provisioning datasets, conditional create в bundles.authorReference → Organization/bloodgpt(pivot вc9560637, Feb 17) — Organization вместо Device, потому что Google Healthcare API отверг Device.
Выбрали: Organization
authorReference: { reference: "Organization/bloodgpt" } — для всех AI-generated полей.
Почему (verified в c9560637)
Healthcare API принимает в author[x] только: Practitioner | Patient | RelatedPerson | Organization. Device — отвергается с validation failure. Это vendor-specific, не FHIR R4 ограничение.
Ильдар: «мы решили поменять на Организацию вместо Девайс. потому что вроде healthcare api не работает с девайсом»
Backward-compatible fallback (читать legacy Device/bloodgpt-ai) при reading рассматривался Claude как защита от старых записей и был отклонён:
Ильдар: «не надо бекверд-компактибл»
Чисто Organization, без legacy paths.
Следствия
- В коде 6 файлов перешли на
Organization/bloodgpt:enrich-fhir-observations.function.ts,fhir-careplan-builder.ts,fhir-composition-builder.ts,healthcare-dataset.function.ts,fhir-response-builder.ts,scripts/migrate-to-fhir.ts. - Provisioning function создаёт
Organization/bloodgptтолько для новых datasets. Existing prod orgs на момент pivot’а не имели этого ресурса → runtime errorreference target(s) not found: Organization/bloodgpt. Manual fix черезgcloud+ curl сделан только для двух prod datasets (org-cmlpaxq2g0001nv1511l4t6v9,org-cmlpbcp5l0000pl14apu115cw). Backfill для остальных не сделан системно — открытое (см. multi-tenant-fhir-storage [О5]). - Версия модели и prompt-версия теряют структурированное место в FHIR. Workarounds: хранить в
BloodTestметаданных (aiModel,promptVersionуже есть вCompositionInput), либо вObservation.note[].textпрефиксом. Не финализировано. - Regulatory framing: Organization-as-author — это “компания-автор”, проще для текущей “не ставим диагнозов” позиции, чем Device.
Open questions
- Один Organization на весь BloodGPT (
Organization/bloodgpt) или per-tenant вариант? Сейчас один. Если будут whitelabel-инсталляции с собственным брендингом — может потребоватьсяOrganization/{tenantId}для брендинга +Organization/bloodgptдля AI-author (отдельные ресурсы). - Promotion на
DiagnosticReport.resultsInterpreter— стандартное FHIR поле для “кто отвечает за интерпретацию результатов” (verified в c9560637). Сейчас используется толькоauthorна Composition/CarePlan/note. Promotion — отдельная задача.
Связано
- fhir-organization — entity для Organization-resource в FHIR
- fhir-device — initial choice, superseded
- fhir-annotation — choice type механика
- fhir-composition — где используется author
- fhir-careplan — где используется author
- fhir-observation — где используется note[].authorReference
- google-healthcare-api — vendor limit, породивший pivot
- multi-tenant-fhir-storage — [О5] про backfill
Organization/bloodgpt - zero-extensions-fhir — общий принцип чистого R4
Источники
Источники: 1.
Сноски
-
FHIR R4 Annotation.author, accessed 2026-05-17, https://hl7.org/fhir/R4/datatypes.html#Annotation. ↩