Поиск результатов по ФИО и дате рождения

Система medlinx.online опирается на стандарт FHIR. Стандарт включает в себя более 90 ресурсов, описывающих медицинскую предметную область. Стандарт рассматривает возможности работы с этими ресурсами. Практически любая задача по поиску и извлечению информации может быть сделана несколькими способами, но не все они поддерживаются сервером medlinx.online. Этот документ показывает, как можно забрать результаты исследования, имея только ФИО пациента и дату рождения.

Описание взаимодействия с сервисом medlinx.online

Для любого взаимодействия заказчика и исполнителя заводится отдельная учетная запись, все взаимодействие с сервисом, в т.ч. поиск ресурсов, будет учитывать права доступа выданной учетной записи. Поиск не сможет найти пациентов, созданных в рамках других учетных записей.

На каждый отдельный заказ из системы Хеликс создается отдельный пациент, т.к. не существует единого сквозного идентификатора пациента. Это означает, что если для одного и того же пациента было создано два заказа, то в системе они будут отображаться как два различных пациента. Для решения проблемы множества пациентов, запрашивающая система может либо сама выбирать нужного ей пациента по полю LastModified, либо опираться на сущность Order, которую создает система выгрузки заказов из Helix.

Поиск результатов по пациенту

Поиск по пациенту осуществляется командой:

GET fhir/Patient?_lastUpdated=ge2017-06-12T12:20:30given=Иван&given=Иванович&family=Иванов&birthDate=1980-08-20

По умолчанию поля с типом dateTime интерпретируются как дата в UTC. Пользователь может указать таймзону явно, при этом нужно использовать экранирование символа +. Например, _lastUpdated=2018-08-10T11:41%2b07:00.

В ответ придет ресурс Bundle с телом:

{
    "resourceType": "Bundle",
    "type": "searchset",
    "entry": [{
            "resource": {
                "resourceType": "Patient",
                "id": "59123f05-b8b0-4aa9-a2b4-cd1c12b58834",
                //...
            }
        }, {
            "resource": {
                "resourceType": "Patient",
                "id": "7f978246-83c9-4be9-ab69-d3a46e2ecb1d",
                //...
            }
        }
    ]
}

Результаты на каждого пациента можно получить командой:

GET fhir/DiagnosticReport?subject.reference=Patient/<id>

Id берется из первого запроса. У каждого пациента есть поле id, в примере выше это два возможных значения "59123f05-b8b0-4aa9-a2b4-cd1c12b58834" и "7f978246-83c9-4be9-ab69-d3a46e2ecb1d".

Например, запрос будет иметь вид:

GET fhir/DiagnosticReport?subject.reference=Patient/59123f05-b8b0-4aa9-a2b4-cd1c12b58834

Каждый DiagnosticReport содержит ссылки на конкретные элементы исследования.

{
    "code": {
        "coding": [
            {
                "code": "АНАЛИЗ_МОЧИ_ПО_НЕЧИПОРЕНКО",
                "system": "http://api.medlinx.online/terminology/test-codes",
                "display": "Анализ мочи по Нечипоренко"
            }
        ]
    },
    "issued": "2018-06-07T19:32:19.868+03:00",
    "result": [
        {
            "reference": "observation/c792d21b-7f6e-4f6e-a177-45885e0a9eb9"
        },
        {
            "reference": "observation/c090f36c-7603-434a-9633-583ad3eff462"
        },
        {
            "reference": "observation/6805e998-3fce-4bc8-ae72-c008f500f7ce"
        },
        {
            "reference": "observation/8c1eeebb-93bd-4a5a-a0bf-75b44fa6bd65"
        },
        {
            "reference": "observation/502da8b5-5987-4f07-b6d9-a5ffe12cc2e8"
        },
        {
            "reference": "observation/459fe3ed-97d2-4be5-a3a0-61ca7bf24b48"
        }
    ],
    "status": "final",
    "basedOn": [
        {
            "reference": "procedurerequest/25bf8248-ff4e-4c57-8808-8a3c75a9cba0"
        }
    ],
    "subject": {
        "reference": "patient/6ecc7a7a-90ce-41fa-935d-c1291cb80ce1"
    },
    "id": "ddd33bea-66cd-4463-b441-8cbde40bec0b",
    "resourceType": "diagnosticreport",
}

Каждое конкретное наблюдение может быть получено запросом:

GET fhir/observation/bae40bcc-43b0-4f26-9ca9-ea0e8dd7bbf1

Ресурс Observation может выглядеть так:

{
    "code": {
        "text": "Лейкоциты (WBC)",
        "coding": [{
                "code": "6690-2",
                "system": "http://api.medlinx.online/terminology/observation-codes"
            }
        ]
    },
    "status": "final",
    "identifier": [{
            "value": "00a3fc6d-c639-4eab-866d-98cfe0f795bb",
            "system": "http://api.medlinx.online/terminology/observation-guid"
        }
    ],
    "valueQuantity": {
        "code": "E9-L",
        "unit": "E9-L",
        "value": 5.77,
        "system": "http://unitsofmeasure.org"
    },
    "referenceRange": [{
            "low": {
                "value": 4.0
            },
            "high": {
                "value": 10.0
            }
        }
    ]
}