Пример Bundle¶
Полный пример входящего transport_notification — извещения о направлении пациента. Показывает все ресурсы, которые система обязана разобрать.
Идентификаторы в исходном примере — российские
Исходный образец сообщения использует OID-ы из ветки 1.2.643 — это арка Российской Федерации. Республике Беларусь соответствует арка 1.2.112.
Конкретные системы идентификации (личный номер, номер бригады СМП, идентификатор медработника) обязаны браться из профиля HL7 FHIR Минздрава РБ, утверждённого приказом МЗ РБ № 1001 от 08.10.2018, а не подставляться по аналогии. В примере ниже они помечены как urn:oid:1.2.112.<...> с явной пометкой — уточнить по профилю МЗ РБ. Это R-3 и вопрос № 7 к разработчикам МРМ СМП.
Аналогично: идентификатор физического лица в РБ — личный номер из документа, удостоверяющего личность, а не СНИЛС.
Полный Bundle¶
{
"resourceType": "Bundle",
"type": "transaction",
"identifier": {
"system": "urn:ietf:rfc:3986",
"value": "urn:uuid:9f1c2e40-3b7a-4d51-8f2c-0a7b5e6d4c31"
},
"timestamp": "2026-07-14T09:22:00+03:00",
"entry": [
{
"fullUrl": "urn:uuid:patient-001",
"resource": {
"resourceType": "Patient",
"id": "patient-001",
"identifier": [
{
"system": "urn:oid:1.2.112.ЛИЧНЫЙ-НОМЕР",
"value": "3150685A014PB1"
}
],
"name": [
{
"use": "official",
"family": "Иванов",
"given": ["Пётр", "Сергеевич"]
}
],
"gender": "male",
"birthDate": "1985-06-15",
"address": [
{
"use": "home",
"line": ["ул. Ленина, д. 10, кв. 5"],
"city": "Брест",
"postalCode": "224005",
"country": "BY"
}
],
"telecom": [
{
"system": "phone",
"value": "+375 (29) 123-45-67",
"use": "mobile"
}
]
}
},
{
"fullUrl": "urn:uuid:encounter-001",
"resource": {
"resourceType": "Encounter",
"id": "encounter-001",
"status": "in-progress",
"class": {
"system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
"code": "EMER",
"display": "emergency"
},
"type": [
{
"coding": [
{
"system": "http://snomed.info/sct",
"code": "3457005",
"display": "Patient transport by ambulance"
}
]
}
],
"subject": { "reference": "urn:uuid:patient-001" },
"priority": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActPriority",
"code": "A",
"display": "ASAP"
}
]
},
"period": { "start": "2026-07-14T09:15:00+03:00" },
"location": [
{
"location": { "display": "Место вызова: ул. Ленина, д. 10" },
"status": "active"
}
],
"hospitalization": {
"origin": { "display": "Домашний адрес пациента" },
"destination": {
"reference": {
"display": "УЗ «Брестская центральная городская больница», приёмное отделение"
}
},
"admitSource": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/admit-source",
"code": "emd",
"display": "From accident/emergency department"
}
]
}
},
"reasonCode": [
{
"coding": [
{
"system": "http://snomed.info/sct",
"code": "22298006",
"display": "Myocardial infarction (disorder)"
}
],
"text": "Острый инфаркт миокарда, подозрение"
}
],
"serviceProvider": {
"display": "Станция скорой медицинской помощи г. Бреста"
}
}
},
{
"fullUrl": "urn:uuid:observation-gcs-001",
"resource": {
"resourceType": "Observation",
"id": "obs-gcs-001",
"status": "final",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "exam",
"display": "Exam"
}
]
}
],
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "9269-2",
"display": "Glasgow coma score total"
}
]
},
"subject": { "reference": "urn:uuid:patient-001" },
"encounter": { "reference": "urn:uuid:encounter-001" },
"effectiveDateTime": "2026-07-14T09:20:00+03:00",
"valueInteger": 13,
"interpretation": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation",
"code": "N",
"display": "Normal"
}
]
}
]
}
},
{
"fullUrl": "urn:uuid:observation-bp-001",
"resource": {
"resourceType": "Observation",
"id": "obs-bp-001",
"status": "final",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "vital-signs",
"display": "Vital Signs"
}
]
}
],
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "85354-9",
"display": "Blood pressure panel"
}
]
},
"subject": { "reference": "urn:uuid:patient-001" },
"encounter": { "reference": "urn:uuid:encounter-001" },
"effectiveDateTime": "2026-07-14T09:18:00+03:00",
"component": [
{
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "8480-6",
"display": "Systolic blood pressure"
}
]
},
"valueQuantity": {
"value": 140,
"unit": "mmHg",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
},
{
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "8462-4",
"display": "Diastolic blood pressure"
}
]
},
"valueQuantity": {
"value": 90,
"unit": "mmHg",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
}
]
}
},
{
"fullUrl": "urn:uuid:observation-hr-001",
"resource": {
"resourceType": "Observation",
"id": "obs-hr-001",
"status": "final",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "vital-signs",
"display": "Vital Signs"
}
]
}
],
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "8867-4",
"display": "Heart rate"
}
]
},
"subject": { "reference": "urn:uuid:patient-001" },
"encounter": { "reference": "urn:uuid:encounter-001" },
"effectiveDateTime": "2026-07-14T09:18:00+03:00",
"valueQuantity": {
"value": 95,
"unit": "beats/minute",
"system": "http://unitsofmeasure.org",
"code": "/min"
}
}
},
{
"fullUrl": "urn:uuid:observation-pain-001",
"resource": {
"resourceType": "Observation",
"id": "obs-pain-001",
"status": "final",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "survey",
"display": "Survey"
}
]
}
],
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "72514-3",
"display": "Pain severity - 0-10 verbal numeric rating"
}
]
},
"subject": { "reference": "urn:uuid:patient-001" },
"encounter": { "reference": "urn:uuid:encounter-001" },
"effectiveDateTime": "2026-07-14T09:20:00+03:00",
"valueInteger": 7,
"interpretation": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation",
"code": "H",
"display": "High"
}
]
}
]
}
},
{
"fullUrl": "urn:uuid:ambulance-device-001",
"resource": {
"resourceType": "Device",
"id": "ambulance-001",
"identifier": [
{
"system": "urn:oid:1.2.112.НОМЕР-БРИГАДЫ",
"value": "АМ-777-99"
}
],
"type": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "4712002",
"display": "Ambulance"
}
]
},
"manufacturer": "ГАЗ",
"model": "ГАЗель Next",
"serialNumber": "VIN1234567890",
"owner": { "display": "Станция скорой медицинской помощи г. Бреста" },
"contact": [
{
"system": "phone",
"value": "+375 (162) 70-11-22",
"use": "work"
}
]
}
},
{
"fullUrl": "urn:uuid:practitioner-001",
"resource": {
"resourceType": "Practitioner",
"id": "practitioner-001",
"identifier": [
{
"system": "urn:oid:1.2.112.МЕДРАБОТНИК",
"value": "789456123"
}
],
"name": [
{
"family": "Смирнов",
"given": ["Алексей", "Иванович"]
}
],
"qualification": [
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0360",
"code": "EMT-P",
"display": "Paramedic"
}
]
}
}
]
}
}
]
}
Разбор: что система делает с каждым ресурсом¶
| Ресурс | Куда попадает | Что происходит |
|---|---|---|
Bundle.identifier |
inbound_messages.message_uid |
Ключ идемпотентности (ADR-3) |
Patient |
patients |
Поиск существующего по identifier; при отсутствии — создание. ПДн шифруются |
Encounter |
transport_notifications |
Направление: повод, приоритет, целевое УЗ, время начала |
Observation (GCS, АД, ЧСС, боль) |
vital_observations |
Исходное состояние; вход движка правил |
Device (машина) |
ambulances |
Номер машины → ключ для опроса координат |
Practitioner |
practitioners |
Кто оказывал помощь; п. 40 набора данных |
Замечания к образцу¶
Расхождения между образцом и требованиями, которые нужно закрыть при согласовании с вендором:
| # | Замечание |
|---|---|
| 1 | admitSource в исходном образце — hosp-trans («переведён из другой больницы»). Для вызова на дом это неверно; в примере выше исправлено на emd. Значение обязано соответствовать реальному источнику поступления, иначе исказится статистика |
| 2 | Отсутствует MessageHeader. Образец имеет type: "transaction", тогда как для $process-message требуется type: "message" с MessageHeader.event. Тип определяет маршрут обработки — вопрос к вендору, какой вариант используется фактически |
| 3 | Отсутствует AllergyIntolerance — п. 20 обязательного набора данных (набор СМП). Критично для приёмного отделения |
| 4 | Отсутствует шкала боли в перечне паспорта, но присутствует в образце. Расхождение безвредно: система принимает больше, чем требует минимум |
| 5 | Нет Condition с предварительным диагнозом как отдельным ресурсом — диагноз передан только текстом в Encounter.reasonCode.text. Для маршрутизации в профильное отделение нужен код |
| 6 | Practitioner.id = driver-001 при квалификации EMT-P (фельдшер). Водитель и фельдшер — разные лица; в примере выше идентификатор исправлен |
Эти замечания — вход в контрактные тесты
Каждая строка таблицы превращается в тест-кейс ACL: что система делает, если поле отсутствует, если код неожиданный, если тип Bundle иной. Такие тесты пишутся против симулятора вендора и не требуют доступности МРМ СМП.