Руководство к использованию стандарта FHIR в ЦИСЗ
0.2.6803 - ci-build
Поскольку вся структурированная медицинская информация, передаваемая из других информационных систем (ресурсов) в здравоохранении, должна соответствовать содержимому регистров, справочников и классификаторов подсистемы нормативно-справочной информации, происходит валидация пакета медицинских данных (Bundle) на соответствие регистру организаций.
Регистр медицинских организаций содержит актуальные сведения об организациях здравоохранения Республики Беларусь, их филиалах и структурных подразделениях.
МИС обращается в модуль «Регистр организаций» (модуль является составной частью подсистемы НСИ) для получения актуальной информации:
Для взаимодействия с регистром организаций клиентам доступны следующие методы:
Все методы по взаимодействию с регистром организаций доступны клиентам без аутентификации
Медицинский работник вносит в МИС набор медицинских данных о пациенте, включая сведения о медицинском наблюдении за пациентом и оказанных услугах. На основе данной информации МИС формирует пакет медицинских данных в виде ресурса Bundle.
После формирования пакета медицинских данных о пациенте выполняется его передача в ЦИСЗ с помощью метода импорта пакета медицинской информации о пациенте. Пакет медицинских данных о пациенте передается в подсистему интегрированной электронной медицинской карты пациента (ИЭМК), где выполняется валидация на соответствие профилям ЦИСЗ, включая проверку на соответствие переданных из МИС значений справочников подсистеме нормативно-справочной информации (НСИ).
При успешной валидации информация сохраняется в подсистеме ИЭМК и используется другими подсистемами ЦИСЗ.
Если в процессе валидации были обнаружены ошибки при проверке соответствия переданных из МИС значений справочников подсистеме НСИ, то пакет медицинской информации о пациенте отклоняется и передача информации из МИС в ЦИСЗ считается неуспешной.
Метод получения обеспечивает доступ к текущему содержимому ресурса c информацией о медицинской организации и оперирует
ресурсом Organization. Взаимодействие выполняется с помощью HTTP
GET команды:
GET [FHIR_BASE]/Organization/[id]
Метод возвращает один экземпляр ресурса.
Возможные значения логического идентификатора («id») описаны в типе Id
При попытке доступа к несуществующему ресурсу будет возвращен HTTP статус код - 404 Not Found
Во всех поисковых взаимодействиях в этом руководстве используется HTTP GET команда со следующим
синтаксисом:
GET [FHIR_BASE]/Organization?[parameter1]{:m1|m2|...}={c1|c2|...}[value1{,value2,...}]{&[parameter2]{:m1|m2|...}={c1|c2|...}[value1{,value2,...}]&...}
GET — это HTTP метод, используемый для получения ресурса.
Переменные указанные в «[]», обязательны для предоставления клиентом и будут заменены указанным строковым литералом.
Переменные указанные в «{}», не являются обязательными для предоставления клиентом и будут заменены указанным строковым литералом.
Resource-type: имя типа ресурса (например, “Organization”).
parameter: параметры поиска, определенные для конкретного взаимодействия (например, «?Organization=Organization/01»).
value: значение параметра поиска
{:m1 m2 …}: модификатор параметра поиска
{c1 c2 …}: компаратор параметра поиска
{,value2,…}: логическое ИЛИ
{¶meter2={:m1 m2 …}={c1 c2 …}[value1{,value2,…}]&…}: логическое И
Простой пример запроса поиска в RESTful с использованием HTTP GET команды:
GET [FHIR_BASE]/Organization?identifier=value&...
| Параметр поиска | Тип | Описание | Выражение | Пример |
|---|---|---|---|---|
| _count | count | Число элементов на странице | GET [FHIR_BASE]/Organization?_count=5 |
|
| _format | string | Формат результата. json/xml (Обязательный) | GET [FHIR_BASE]/Organization?_format=json |
|
| _page | number | Номер страницы. | GET [FHIR_BASE]/Organization?_page=10 |
|
| act_in_registr | date | Актуализация | Organization.extension(‘https://fhir.by/StructureDefinition/OrganizationRegistration’) .extension(‘https://fhir.by/StructureDefinition/OrganizationActInRegistr’) |
GET [FHIR_BASE]/Organization?act-in-registr=2025-03-21 |
| active | token | Активна ли медорганизация | Organization.active | GET [FHIR_BASE]/Organization?active=true |
| address | string | Адрес | Organization.contact.address | GET [FHIR_BASE]/Organization?address=Московский пр-т, 43а |
| address_geography | WKT | Организации, соответствующие координатам | Organization.extension(‘https://fhir.by/StructureDefinition/OrganizationRegistration’) .extension(‘https://fhir.by/StructureDefinition/OrganizationAddressGeography’) | GET [FHIR_BASE]/Organization?address-geography=POINT(23.8895787715608 52.09669689034364) GET [FHIR_BASE]/Organization?address-geography=LINESTRING (28.56343440505112 55.55231845942615,28.56359228722506 55.55316693571787) GET [FHIR_BASE]/Organization?address-geography=POLYGON ((24.992016 52.191400, 24.991452 52.191876, 24.990540 52.191694, 24.992016 52.191400)) |
| alias | string | Краткое наименование | Organization.alias | GET [FHIR_BASE]/Organization?alias=Брестская ДОБ |
| token | Organization.contact.telecom.where(system=’email’) | GET [FHIR_BASE]/Organization?email=clinic@bokb.by |
||
| fax | token | Факс | Organization.contact.telecom.where(system=’fax’) | GET [FHIR_BASE]/Organization?fax=80172224627 |
| form_ownership | token | Форма собственности | Organization.extension(‘https://fhir.by/StructureDefinition/FormOfOwnership’) | GET [FHIR_BASE]/Organization?form-ownership=12 |
| healthcare_level | token | Уровень оказания медицинской помощи | Organization.extension(‘https://fhir.by/StructureDefinition/HealthCareLevel’) | GET [FHIR_BASE]/Organization?healthcare-level=3 |
| higher_organization | token | Вышестоящая (управляющая) организация | Organization.extension(‘https://fhir.by/StructureDefinition/HigherLevelOrganization’) | GET [FHIR_BASE]/Organization?higher-organization=5 |
| identifier | token | Публичный код ресурса | Organization.identifier | GET [FHIR_BASE]/Organization?identifier=055615711000 |
| name | string | Наименование ресурса | Organization.name | GET [FHIR_BASE]/Organization?name=Минская ордена Трудового Красного Знамени областная клиническая больница |
| org_structure | token | Подчиненность | Organization.extension(‘https://fhir.by/StructureDefinition/OrganizationStructure’) | GET [FHIR_BASE]/Organization?org-structure=1 |
| partOf | reference | Код родительского ЮЛ | Organization.partOf(Organization) | GET [FHIR_BASE]/Organization?partOf=8c9aed4b-2c76-4fae-b2aa-0d21aacd4a25 |
| phone | token | Телефон | Organization.contact.telecom.where(system=’phone’) | GET [FHIR_BASE]/Organization?phone=80222326677 |
| postalCode | string | Почтовый код | Organization.contact.address.postalCode | GET [FHIR_BASE]/Organization?postalCode=220030 |
| reason_close | string | Основание изменения статуса. Использование аргумента добавляет неявное условие status = 2 | Organization.extension(‘https://fhir.by/StructureDefinition/OrganizationRegistration’) .extension(‘https://fhir.by/StructureDefinition/OrganizationReasonClose’) |
GET [FHIR_BASE]/Organization?reason-close=2 |
| reg_in_registr | date | Дата регистрации в регистре | Organization.extension(‘https://fhir.by/StructureDefinition/OrganizationRegistration’) .extension(‘https://fhir.by/StructureDefinition/OrganizationRegInRegistr’) |
GET [FHIR_BASE]/Organization?reg-in-registr=2025-02-07 |
| registration_start | date | Дата регистрации медицинской организации | Organization.extension(‘https://fhir.by/StructureDefinition/OrganizationRegistration’) .extension(‘https://fhir.by/StructureDefinition/OrganizationRegistrationStart’) |
GET [FHIR_BASE]/Organization?registration-start=2004-10-08 |
| registration_end | date | Дата изменения статуса. Использование аргумента добавляет неявное условие status = 2 | Organization.extension(‘https://fhir.by/StructureDefinition/OrganizationRegistration’) .extension(‘https://fhir.by/StructureDefinition/OrganizationRegistrationEnd’) |
GET [FHIR_BASE]/Organization?registration-end=2025-03-05 |
| soato | string | СОАТО | - | GET [FHIR_BASE]/Organization?soato=3401383000 |
| subordinated | token | Подчиненность | Organization.extension(‘https://fhir.by/StructureDefinition/IsSubordinated’) | GET [FHIR_BASE]/Organization?subordinated=3 |
| terms_of_service | token | Условия оказания медицинской помощи | Organization.extension(‘https://fhir.by/StructureDefinition/TermsOfService’) | GET [FHIR_BASE]/Organization?terms-of-service=1 |
| type | token | Тип ОЗ | Organization.type | GET [FHIR_BASE]/Organization?type=34 |
| type_of_healthcare | token | Вид медицинской помощи | Organization.extension(‘https://fhir.by/StructureDefinition/TypeOfHealthCare’) | GET [FHIR_BASE]/Organization?type-of-healthcare=5 |
| unp | string | УНП | Organization.extension(‘https://fhir.by/StructureDefinition/CodeUNP’) | GET [FHIR_BASE]/Organization?unp=700008090 |
| url | token | Интернет-адрес | Organization.contact.telecom.where(system=’url’) | GET [FHIR_BASE]/Organization?url=mogilev-region.gov.by |
Параметр поиска identifier определяется как параметр типа token.
Примеры поиска по идентификатору:
GET [FHIR_BASE]/Organization?identifier=292884302000&_format=json
возвращает организацию, у которой идентификатор любого типа равен 292884302000.
Параметр поиска name определяется как параметр типа string.
Примеры поиска по названию:
GET [FHIR_BASE]/Organization?name=Брестская областная клиническая больница&_format=json
возвращает организацию с названием “Брестская областная клиническая больница”.
GET [FHIR_BASE]/Organization?name=Брестская областная клиническая больница,Могилевская областная детская больница&_format=json
возвращает организации с названием “Брестская областная клиническая больница” ИЛИ “Могилевская областная детская больница”.
Параметр поиска address определяется как параметр типа string.
Примеры поиска по адресу:
GET [FHIR_BASE]/Organization?address=Московский пр-т, 43а&_format=json
возвращает организации с адресом Московский пр-т, 43а.
Параметр поиска unp определяется как
параметр типа string.
Примеры поиска по УНП:
GET [FHIR_BASE]/Organization?unp=390380994&_format=json возвращает организации здравоохранения и их филиалы с УНП 390380994.
Параметр поиска address_geography определяется как параметр типа WKT.
Примеры поиска по точке:
GET [FHIR_BASE]/Organization?address-geography=POINT (23.8895787715608 52.09669689034364).
Примеры поиска по точке с буфером (буфер указывается в метрах), максимальный/минимальный размер буфера от 1 до 5892000 метров. Буфер указывается через запятую после координат:
GET [FHIR_BASE]/Organization?address-geography=POINT (23.8895787715608 52.09669689034364),34615.
Примеры поиска по линии:
GET [FHIR_BASE]/Organization?address-geography=LINESTRING (28.56343440505112 55.55231845942615,28.56359228722506 55.55316693571787).
Примеры поиска по линии с буфером:
GET [FHIR_BASE]/Organization?address-geography=LINESTRING (28.56343440505112 55.55231845942615,28.56359228722506 55.55316693571787),100.
Примеры поиска по полигону (полигон может содержать любое количество точек, но координаты первой и последней точек должны совпадать):
GET [FHIR_BASE]/Organization?address-geography=POLYGON ((24.992016 52.191400, 24.991452 52.191876, 24.990540 52.191694, 24.992016 52.191400)).
Примеры поиска по полигону с буфером:
GET [FHIR_BASE]/Organization?address-geography=POLYGON ((23.178 56.353, 23.484 53.912, 23.981 53.974, 24.451 53.906, 25.536 54.282, 25.768 54.847, 25.609 55.284, 24.315 55.369, 24.004 55.859, 23.484 56.006, 23.178 56.353)),100.
Пример мультипоиска по двум точкам:
GET [FHIR_BASE]/Organization?address-geography=MULTIPOINT ((28.56343440505112 55.55231845942615), (28.56359228722506 55.55316693571787)).
Пример мультипоиска по двум линиям:
GET [FHIR_BASE]/Organization?address-geography=MULTILINESTRING ((28.56343440505112 55.55231845942615,28.56359228722506 55.55316693571787), (23.484 56.006, 24.450 56.100)).
Пример мультипоиска по двум полигонам:
GET [FHIR_BASE]/ /Organization?address-geography=MULTIPOLYGON (((23.8892567715608 52.09649869034364,23.8899007715608 52.09649869034364,23.8899007715608 52.09689509034364,23.8892567715608 52.09689509034364,23.8892567715608 52.09649869034364)),((28.56324228722506 55.55296873571787,28.56394228722506 55.55296873571787,28.56394228722506 55.55336513571787,28.56324228722506 55.55336513571787,28.56324228722506 55.55296873571787))).
Пример мультипоиска по полигону и точке:
GET [FHIR_BASE]/Organization?address-geography=GEOMETRYCOLLECTION(POLYGON((23.889256771560820 52.09649869034364,23.8899007715608 52.09649869034364,23.8899007715608 52.09689509034364,23.8892567715608 52.09689509034364,23.8892567715608 52.09649869034364)),POINT(28.56359228722506 55.55316693571787)).
Пример мультипоиска по полигону и линии:
GET [FHIR_BASE]/Organization?address-geography=GEOMETRYCOLLECTION(POLYGON((23.8892567715608 52.09649869034364,23.8899007715608 52.09649869034364,23.8899007715608 52.09689509034364,23.8892567715608 52.09689509034364,23.8892567715608 52.09649869034364)),LINESTRING(28.56351334613809%2055.55274269757201,28.57000000000000 55.56000000000000)).
Негативные сценарии:
При отсутствии организаций, соответствующих координатам, возвращается пустой массив и HTTP статус код 200 ОК.
Если нарушен формат передачи данных (невалидный запрос), например, GET [FHIR_BASE]/Organization?address-geography=POINT(23.889578771560852.09669689034364), то возвращается HTTP статус код 400 Bad Request с текстом ошибки: «Неверный формат координат. Убедитесь, что введенные координаты соответствуют формату (X Y)».
Если для полигона указывается недостаточное количество точек, то возвращается HTTP статус код 400 Bad Request с текстом ошибки: «Полигон не замкнут. Убедитесь, что первая и последняя точки совпадают».
Валидный и невалидный форматы указания координат
Координата X - долгота, координата Y - широта.
| Валидный формат координат | Невалидный формат координат | Описание |
|---|---|---|
| (X Y) | (Y X) | Валидная очередность указания координат – X, Y |
| (23.8895787715608 52.09669689034364) | (23.889578771560852.09669689034364) (23.8895787715608,52.09669689034364) |
Координаты должны указываться через пробел |
| (23.8895787715608 52.09669689034364) | (23,8895787715608 52,09669689034364) | Для указания десятичных чисел используется точка |
| (23.8895787715608 52.09669689034364) | [23.8895787715608 52.09669689034364] {23.8895787715608 52.09669689034364} |
Координаты должны указываться в скобках следующего формата: «(» «)» |