Current Build

Переводит команда Health Samurai . Приглашаем поучаствовать в русификации стандарта FHIR: GitHub , Email.

Orders and Observations Work Group Maturity Level: 3Trial Use Compartments: N/A

запрос lastn создан для поиска самого свежего или n последних ресурсов observation для субъекта. Например получение 5 последних показателей температуры пациента, чтобы проследить тенденцию, или получение самых последних лабораторных результатов или показателей жизненноважных функций. Чтобы сказать серверу вернуть последние n ресурсов Observation, запрос lastn использует обычные параметры поиска, определенные для ресурса Observation. Однако вместо их обычного поведения, они интерпретируются как входные параметры - т.е. вместо запроса, что ресурсы буквально содержат эти параметры поиска, они передаются алгоритму сервера, который использует их неким образом для определения наиболее подходящих совпадений.

Запрос на lastn должен включать:

  • параметр операции $lastn
  • субъекта через указание параметра patient или subject
  • параметр category и/или другой параметр поиска, содержащий элемент code в своем FHIRpath-выражении (например code или code-value-concept)

Запрос на lastn может включать:

  • другие параметры поиска и модификаторы Observation

Ответом на запрос lastn будет набор ресурсов Observation:

  • отфильтрованных по дополнительным параметрам
    • если не отфильтрованным явным образом по статусу, тогда будут включать статусы 'entered-in-error'
  • 'GROUP BY' Observation.code
    • Коды следует считать эквивалентными, если coding.value и coding.system одинаковы.
    • Коды, состоящие из одного текстового элемента, группируются и обрабатываются по нему.
    • Для кодов с переводом (несколько кодингов), коды переводов считаются равными и группировка по коду должна придерживаться транзитивного свойства равности.

Например:

|Observation.code для ресурса a|Observation.code для ресурса b|Observation.code для ресурса c|количество групп [codes/text в каждой группе]|
|---|---|---|---|
|a|b|c | 3 [a],[b],[c]|
|a|b|a,c | 2 [a.c],[b]|
|a|b|a,b | 1 [a,b]|
|'textM'|'Text'|'t e x t'|3 ['text'],['Text'],['t e x t']|

  • Сортировка от наиболее свежих к более ранним
  • Ограничение количества запрашиваемых ответов на группу указывается в необязательном параметре запроса max
    • В случае, когда эффективное время двух и более ресурсов Observation совпадает, то оба будут возвращены. Поэтому в результате может быть возвращено больше ресурсов Observation, чем указано в max. К примеру, 4 ресурса Observation вместо 3, если треий и четвертый наиболее свежие ресурсы Observation имеют одинаковое эффективное время.
  • Если максимальное число не указано, тогда будет возвращен только самый свежий ресурс в каждой группе.

Набор возвращенных ресурсов должен представлять различные реальные наблюдения, а не один и тот же ресурс с изменениями в статусе или версиях. Если совпадений найдено не было, запрос lastn должен вернуть пустой бандл с типом searchset без ошибки, но может содержать ресурс operation outcome с дальнейшими рекомендациями.

The official URL for this operation definition is

 http://hl7.org/fhir/OperationDefinition/Observation-lastn

Formal Definition (as a OperationDefinition).

URL: [base]/Observation/$lastn

This is an idempotent operation

In Parameters:
ИмяCardinalityТипBindingProfileDocumentation
max0..1positiveInt

max - это необязательный входной параметр операции lastn. Он используется для указания максимального количества ресурсов Observation, которые необходимо вернуть из каждой группы. Например для запроса "Верни последние 3 результата для всех показателей жизненноважных функций пациента" max = 3.

Out Parameters:
ИмяCardinalityТипBindingProfileDocumentation
return1..1Bundle

Набор наиболее свежих N ресурсов Observation, которые соответствуют критериям поиска запроса lastn.

Note: as this is the only out parameter, it is a resource, and it has the name 'return', the result of this operation is returned directly as a resource

Ключевые различия между данной операцией запроса и простым поиском по ресурсам Observation с использованием комбинации параметров _count and _sort:

  • Запрос lastn возвращает только последние N ресурсов, сгруппированные по коду. Использование метода запроса _count не ограничивает общее число совпадений, поэтому вам может понадобиться пролистать несколько ресурсов "А" на странице прежде чем вы дойдет до ресурса "В".
  • Сервер ответственен за группировку ресурсов Observation по кодам. Это освобождает клиента от необходимости определять, какие коды ему необходимо запрашивать.

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

Request: 1): Fetch the last 3 results for all vitals for a patient 2): Fetch the last laboratory results for a patient 3): Fetch the last 3 blood pressures, respiratory rate and heart rates for a patient


1) GET [base]/Observation/$lastn?max=3&patient=Patient/123&category=vital-signs

--------------------------------------------

2) GET [base]/Observation/$lastn?patient=Patient/123&category=laboratory

--------------------------------------------

3) GET [base]/Observation/$lastn?max=3&patient=Patient/123&category=vital-signs&code=9279-1,8867-4,85354-9

Response: 1): A Server returns from an imaginary Last N algorithm the last 3 of 9 different vital signs observations on a patient. e.g. body temperature, body weight, body height... (truncated for readability) 2): A Server returns from an imaginary Last N algorithm the last laboratory observations for a patient. e.g. CBC Panel, UA, Chem Panel, Lipid Panel components and HbA1c, (truncated for readability) 3): A Server returns from an imaginary Last N algorithm the last 3 blood pressures, respiratory rate and heart rates for a patient as specified by code from the request. (truncated for readability)



=========================== Example 1 ============================

HTTP/1.1 200 OK
[other headers]

{
  "resourceType": "Bundle",
  "id": "26419249-18b3-45de-b10e-dca0b2e72b",
  "meta": {
    "lastUpdated": "2017-02-18T03:28:49Z"
  },
  "type": "searchset",
  "total": 27,
  // the patient temperature was being taken several times a day
  "entry": [{
    "fullUrl": "http://server/path/Observation/20170219-06temp",
    "resource": {
      "resourceType": "Observation",
      "id": "20170219temp",
      .. snip ...
  ,{
   "fullUrl": "http://server/path/Observation/20170219-05temp",
       "resource": {
         "resourceType": "Observation",
         "id": "20170218temp",
      .. snip ...
    }
      ,{
       "fullUrl": "http://server/path/Observation/20170219-04temp",
           "resource": {
             "resourceType": "Observation",
             "id": "20170217temp",
          .. snip ...
    },
    // the patient was being weighed daily
    {
    "fullUrl": "http://server/path/Observation/20170219weight",
    "resource": {
      "resourceType": "Observation",
      "id": "20170219weight",
      .. snip ...
  ,{
   "fullUrl": "http://server/path/Observation/20170218weight",
       "resource": {
         "resourceType": "Observation",
         "id": "20170218weight",
      .. snip ...
    }
      ,{
       "fullUrl": "http://server/path/Observation/20170217weight",
           "resource": {
             "resourceType": "Observation",
             "id": "20170217weight",
          .. snip ...
    },
    // height was recorded occasionally over the years
        {
        "fullUrl": "http://server/path/Observation/20170101height",
        "resource": {
          "resourceType": "Observation",
          "id": "20170219height",
          .. snip ...
      ,{
       "fullUrl": "http://server/path/Observation/20160101height",
           "resource": {
             "resourceType": "Observation",
             "id": "20160101height",
          .. snip ...
        }
          ,{
           "fullUrl": "http://server/path/Observation/20131001height",
               "resource": {
                 "resourceType": "Observation",
                 "id": "20131001height",
              .. snip ...
    }
  ]
}

----------------------------------

=========================== Example 2 ============================


HTTP/1.1 200 OK
[other headers]

{
  "resourceType": "Bundle",
  "id": "26419249-18b3-45de-b10e-dca0b2e72b",
  "meta": {
    "lastUpdated": "2017-02-18T03:28:49Z"
  },
  "type": "searchset",
  "total": 45,
  // the patient's last CBC Panel component observations
  "entry": [{
    "fullUrl": "http://server/path/Observation/20170219-CBCPanel-RBCs",
    "resource": {
      "resourceType": "Observation",
      "id": "0170219-CBCPanel-RBCs",
      ... snip ...
      "code" : {
    "coding" : [
      {
        "system" : "http://loinc.org",
        "code" : "789-8",
        "display" : "RBC # Bld Auto"
      }
    ],
    "text" : "RBC # Bld Auto"
  },
  ...snip....
  },
  // the rest of the patient CBC Panel components observations
  { ...snip...
  },
  // the patient's last UA Panel component observations
    {
    "fullUrl": "http://server/path/Observation/20160610-UA-Color",
    "resource": {
      "resourceType": "Observation",
      "id": "20160610-UA-Color",
      .. snip ...
      "code" : {
   "coding" : [
     {
       "system" : "http://loinc.org",
       "code" : "5778-6",
       "display" : "Color of Urine"
     }
   ],
   "text" : "COLOR"
 },
   ...snip....
   },
   // the rest of the patient UA Panel component observations
   { ...snip...
   },
   // the patient's last Metabolic Panel component observations
  {
   "fullUrl": "http://server/path/Observation/20170219MetPanel-Sodium",
       "resource": {
         "resourceType": "Observation",
         "id": "20170219MetPanel-Sodium",
      ... snip ...
        "code" : {
          "coding" : [
          {
            "system" : "http://loinc.org",
            "code" : "2951-2",
            "display" : "Sodium SerPl-sCnc"
            }
          ],
          "text" : "Sodium SerPl-sCnc"
          },
      ...snip....
      },
      // the rest of the patient Metabolic Panel component observations
      { ...snip...
      },
    // the patient Lipase Panel components observations
        {
        "fullUrl": "http://server/path/Observation/20170219LipidPanel-Chol",
        "resource": {
          "resourceType": "Observation",
          "id": "20170219LipidPanel-Chol",
          ... snip ...
          "code": {
                 "coding": [
                   {
                     "system": "http://loinc.org",
                     "code": "14647-2",
                     "display": "Cholesterol [Moles/​volume] in Serum or Plasma"
                   }
                 ],
                 "text": "Cholesterol"
          },
          ...snip....
          },
          // the patient HbA1c observation
          {
          "fullUrl": "http://server/path/Observation/20170219HbA1c",
          "resource": {
            "resourceType": "Observation",
            "id": "20170219HbA1c",
            ... snip ...
            "code": {
                   "coding": [
                     {
                       "system": "http://loinc.org",
                       "code": "4548-4",
                       "display": "Hemoglobin A1c/​Hemoglobin.total in Blood"
                     }
                   ],
                   "text": "HbA1c"
            },
            ...snip....
    }
  ]
}

----------------------------------


=========================== Example 3 ============================


HTTP/1.1 200 OK
[other headers]

{
  "resourceType": "Bundle",
  "id": "26419249-18b3-45de-b10e-dca0b2e72b",
  "meta": {
    "lastUpdated": "2017-02-18T03:28:49Z"
  },
  "type": "searchset",
  "total": 9,
  // Returns the patient's last 3 code = 9279-1 Respiratory Rate observations All from 20170219
  "entry": [{
    "fullUrl": "http://server/path/Observation/20170219-06RespRate",
    "resource": {
      "resourceType": "Observation",
      "id": "20170219-06RespRate",
      .. snip ...
     "code": {
       "coding": [
         {
           "system": "http://loinc.org",
           "code": "9279-1",
           "display": "Respiratory rate"
         }
       ],
       "text": "Respiratory rate"
 },
     .. snip ...
  ,{
   "fullUrl": "http://server/path/Observation/20170219-05RespRate",
       "resource": {
         "resourceType": "Observation",
         "id": "20170219-05RespRate",
      .. snip ...
    }
      ,{
       "fullUrl": "http://server/path/Observation/20170219-04RespRate",
           "resource": {
             "resourceType": "Observation",
             "id": "20170217-04RespRate",
          .. snip ...
    },
    // Returns the patient's last 3 code =  8867-4 Heart Rate observations All from 20170219
    // the patient was being weighed daily
    {
    "fullUrl": "http://server/path/Observation/20170219-06HeartRate",
    "resource": {
      "resourceType": "Observation",
      "id": "20170219-06HeartRate",
      .. snip ...
      ],
    "code": {
      "coding": [
        {
          "system": "http://loinc.org",
          "code": "8867-4",
          "display": "Heart rate"
        }
      ],
      "text": "Heart rate"
  ...snip...
  ,{
   "fullUrl": "http://server/path/Observation/20170219-05HeartRate",
       "resource": {
         "resourceType": "Observation",
         "id": "20170219-05HeartRate",
      .. snip ...
    }
      ,{
       "fullUrl": "http://server/path/Observation/20170219-04HeartRate",
           "resource": {
             "resourceType": "Observation",
             "id": "20170219-04HeartRate",
          .. snip ...
    },
    // Returns the patient's last 3 code =  85354-9 Blood pressure systolic and diastolic All from 20170219
        {
        "fullUrl": "http://server/path/Observation/20170219-06BloodPressure",
        "resource": {
          "resourceType": "Observation",
          "id": "20170219-06BloodPressure",
          .. snip ...
          "code": {
           "coding": [
             {
               "system": "http://loinc.org",
               "code": "85354-9",
               "display": "Bood pressure panel with all children optional"
             }
           ],
           "text": "Blood pressure systolic & diastolic"
         },
         ...snip...
                 "component": [
          {
            "code": {
              "coding": [
                {
                  "system": "http://loinc.org",
                  "code": "8480-6",
                  "display": "Systolic blood pressure"
                },
                {
            ...snip...
                        {
              "code": {
                "coding": [
                  {
                    "system": "http://loinc.org",
                    "code": "8462-4",
                    "display": "Diastolic blood pressure"
                  }
                ]
              },
              ...snip....
      ,{
       "fullUrl": "http://server/path/Observation/20170219-05BloodPressure",
           "resource": {
             "resourceType": "Observation",
             "id": "20170219-05BloodPressure",
          .. snip ...
        }
          ,{
           "fullUrl": "http://server/path/Observation/20170219-04BloodPressure",
               "resource": {
                 "resourceType": "Observation",
                 "id": "20170219-04BloodPressure",
              .. snip ...
    }
  ]
}

 

For more information about operations, including how they are invoked, see Operations.