ppazos / cabolabs-ehrserver

Open platform to manage and share standardized clinical data, designed by @ppazos at CaboLabs Health Informatics.
https://cabolabs.com
Apache License 2.0
179 stars 110 forks source link

[API] Make the structure of compo and dv queries the same when querying for one or multiple EHRs #916

Closed ppazos closed 6 years ago

ppazos commented 6 years ago

Now when queries are executed for an EHR, just on result is returned, but when queries are executed for all the EHRs, results are grouped by EHR UID.

Making the EHR query result the same as the multiple EHR query result will simplify the schema definition for the API and client apps don't need to manage both cases.

ppazos commented 6 years ago

For compo queries we'll have

{
    "results": {
        "11111111-1111-1111-1111-111111111111": [
            {
                "uid": "c18f5154-5ec5-4657-bb81-311b8ca031f2",
                "category": "event",
                "startTime": "2018-04-27 05:28:27",
                "subjectId": "11111111-1111-1111-1111-111111111111",
                "ehrUid": "11111111-1111-1111-1111-111111111111",
                "templateId": "test_all_datatypes.es.v1",
                "archetypeId": "openEHR-EHR-COMPOSITION.test_all_datatypes.v1",
                "lastVersion": true,
                "organizationUid": "e9d13294-bce7-44e7-9635-8e906da0c914",
                "parent": "687f09ca-85ab-4dc4-9721-22c67bccbd85::my.emr::1"
            },
            {
                "uid": "3ed2b0c5-75b8-4894-96b4-d6337bb58b97",
                "category": "event",
                "startTime": "2018-04-27 05:28:28",
                "subjectId": "11111111-1111-1111-1111-111111111111",
                "ehrUid": "11111111-1111-1111-1111-111111111111",
                "templateId": "test_all_datatypes.es.v1",
                "archetypeId": "openEHR-EHR-COMPOSITION.test_all_datatypes.v1",
                "lastVersion": true,
                "organizationUid": "e9d13294-bce7-44e7-9635-8e906da0c914",
                "parent": "9e33acd9-c7d0-4972-94ad-116cfa11490d::my.emr::1"
            }
        ]
    },
    "pagination": {
        "max": 20,
        "offset": 0,
        "nextOffset": 20,
        "prevOffset": 0
    },
    "timing": "4 ms"
}

and

<paginatedResults>
    <results>
        <entry key="11111111-1111-1111-1111-111111111111">
            <compositionIndex>
                <uid>c18f5154-5ec5-4657-bb81-311b8ca031f2</uid>
                <category>event</category>
                <startTime>2018-04-27 05:28:27</startTime>
                <subjectId>11111111-1111-1111-1111-111111111111</subjectId>
                <ehrUid>11111111-1111-1111-1111-111111111111</ehrUid>
                <templateId>test_all_datatypes.es.v1</templateId>
                <archetypeId>openEHR-EHR-COMPOSITION.test_all_datatypes.v1</archetypeId>
                <lastVersion>true</lastVersion>
                <organizationUid>e9d13294-bce7-44e7-9635-8e906da0c914</organizationUid>
                <parent>687f09ca-85ab-4dc4-9721-22c67bccbd85::my.emr::1</parent>
            </compositionIndex>
            <compositionIndex>
                <uid>3ed2b0c5-75b8-4894-96b4-d6337bb58b97</uid>
                <category>event</category>
                <startTime>2018-04-27 05:28:28</startTime>
                <subjectId>11111111-1111-1111-1111-111111111111</subjectId>
                <ehrUid>11111111-1111-1111-1111-111111111111</ehrUid>
                <templateId>test_all_datatypes.es.v1</templateId>
                <archetypeId>openEHR-EHR-COMPOSITION.test_all_datatypes.v1</archetypeId>
                <lastVersion>true</lastVersion>
                <organizationUid>e9d13294-bce7-44e7-9635-8e906da0c914</organizationUid>
                <parent>9e33acd9-c7d0-4972-94ad-116cfa11490d::my.emr::1</parent>
            </compositionIndex>
        </entry>
    </results>
    <pagination>
        <max>20</max>
        <offset>0</offset>
        <nextOffset>20</nextOffset>
        <prevOffset>0</prevOffset>
    </pagination>
</paginatedResults>

For data queries we'll have (group=path, JSON)

{
  "11111111-1111-1111-1111-111111111111": {
    "openEHR-EHR-OBSERVATION.test_all_datatypes.v1/data[at0001]/events[at0002]/data[at0003]/items[at0011]/value<DV_COUNT>": {
      "type": "DV_COUNT",
      "name": {
        "es": "Count"
      },
      "serie": [
        {
          "magnitude": 3,
          "date": "2018-04-27 05:28:27"
        },
        {
          "magnitude": 3,
          "date": "2018-04-27 05:28:28"
        }
      ]
    }
  }
}

group=compo, JSON

[
  {
    "openEHR-EHR-OBSERVATION.test_all_datatypes.v1/data[at0001]/events[at0002]/data[at0003]/items[at0011]/value<DV_COUNT>": {
      "type": "DV_COUNT",
      "name": {
        "es": "Count"
      },
      "attrs": [
        "magnitude"
      ]
    }
  },
  {
    "11111111-1111-1111-1111-111111111111": {
      "c18f5154-5ec5-4657-bb81-311b8ca031f2": {
        "date": "2018-04-27 05:28:27",
        "cols": [
          {
            "type": "DV_COUNT",
            "path": "openEHR-EHR-COMPOSITION.test_all_datatypes.v1/data[at0001]/events[at0002]/data[at0003]/items[at0011]/value<DV_COUNT>",
            "values": [
              {
                "magnitude": 3
              }
            ]
          }
        ]
      },
      "3ed2b0c5-75b8-4894-96b4-d6337bb58b97": {
        "date": "2018-04-27 05:28:28",
        "cols": [
          {
            "type": "DV_COUNT",
            "path": "openEHR-EHR-COMPOSITION.test_all_datatypes.v1/data[at0001]/events[at0002]/data[at0003]/items[at0011]/value<DV_COUNT>",
            "values": [
              {
                "magnitude": 3
              }
            ]
          }
        ]
      }
    }
  }
]

group=compo, XML

<list>
<map>
  <entry key="openEHR-EHR-OBSERVATION.test_all_datatypes.v1/data[at0001]/events[at0002]/data[at0003]/items[at0011]/value&lt;DV_COUNT&gt;">
    <entry key="type">DV_COUNT</entry>
    <entry key="name">
      <entry key="es">Count</entry>
    </entry>
    <entry key="attrs">
      <string>magnitude</string>
    </entry>
  </entry>
</map>
<map>
  <entry key="11111111-1111-1111-1111-111111111111">
    <entry key="c18f5154-5ec5-4657-bb81-311b8ca031f2">
      <entry key="date">2018-04-27 05:28:27</entry>
      <entry key="cols">
        <map>
          <entry key="type">DV_COUNT</entry>
          <entry key="path">openEHR-EHR-COMPOSITION.test_all_datatypes.v1/data[at0001]/events[at0002]/data[at0003]/items[at0011]/value&lt;DV_COUNT&gt;</entry>
          <entry key="values">
            <map>
              <entry key="magnitude">3</entry>
            </map>
          </entry>
        </map>
      </entry>
    </entry>
    <entry key="3ed2b0c5-75b8-4894-96b4-d6337bb58b97">
      <entry key="date">2018-04-27 05:28:28</entry>
      <entry key="cols">
        <map>
          <entry key="type">DV_COUNT</entry>
          <entry key="path">openEHR-EHR-COMPOSITION.test_all_datatypes.v1/data[at0001]/events[at0002]/data[at0003]/items[at0011]/value&lt;DV_COUNT&gt;</entry>
          <entry key="values">
            <map>
              <entry key="magnitude">3</entry>
            </map>
          </entry>
        </map>
      </entry>
    </entry>
  </entry>
</map>
</list>

group=path, XML

<map>
<entry key="11111111-1111-1111-1111-111111111111">
  <entry key="openEHR-EHR-OBSERVATION.test_all_datatypes.v1/data[at0001]/events[at0002]/data[at0003]/items[at0011]/value&lt;DV_COUNT&gt;">
    <entry key="type">DV_COUNT</entry>
    <entry key="name">
      <entry key="es">Count</entry>
    </entry>
    <entry key="serie">
      <map>
        <entry key="magnitude">3</entry>
        <entry key="date">2018-04-27 05:28:27</entry>
      </map>
      <map>
        <entry key="magnitude">3</entry>
        <entry key="date">2018-04-27 05:28:28</entry>
      </map>
    </entry>
  </entry>
</entry>
</map>