Web Service 1.0 User Stories

These were the user stories designed to drive the priorities for the initial release for the Webservices.rest Module while it was being created. See that page for up-to-date documentation

On this page...

Show a patient summary

Fetch a patient, their encounters, and their observations.

  1. Find a patient by identifier
    • GET /ws/rest/patient?q=123MT2
    • Representation: default
    • JSON Return Value
      {
      uuid: "1AA43D-324-AFE8349AC",
      uri: "https://foo.com/ws/rest/patient/1AA43D-324-AFE8349AC",
      display: "John A. Doe (93498309234)",
      name: "John A. Doe",
      identifier: 9349,
      identifierType: { display: "Hospital X Identifier Number", uuid: "342834239234",
      identifiers:
      [
      {display: "9349 (Hospital X Identification Number)", uuid: "00AF-55-111", uri: "https://foo.com/openmrs/ws/rest/patient/1AA43D-324-AFE8349AC/identifier/00AF-55-111"},{display: "AA-4 (Hospital Y Id Number", uuid: "123", uri: "https://foo.com/openmrs/ws/rest/patient/1AA43D-324-AFE8349AC/identifier/123"}
      ]
      gender: "M",
      birthdate: "1955-05-25",
      voided: false,
      dead: false
      }
      
  2. Get last 10 encounters for patient
    • GET /ws/rest/encounter?patient=1AA43D-324-AFE8349AC&limit=10
      • or GET /ws/rest/patient/1AA43D-324-AFE8349AC/encounters?limit=10
    • Representation: default
    • JSON Return Value
      [
      {
      uuid: "029434-AA-32EE",
      uri: "https://foo.com/ws/rest/encounter/029434-AA-32EE",
      display: "Adult Return Hospital X
      encounterDatetime: "2000-05-25 14:05:03",
      patient: { display: "John A. Doe (123-0)", uuid: "1AA43D-324-AFE8349AC", uri: "https://foo.com/openmrs/ws/rest/patient/1AA43D-324-AFE8349AC" },
      location: { display: "Hospital X", uuid: "39209-324-999", uri: "https://foo.com/openmrs/ws/rest/location/39209-324-999" },
      form: { display: "Outpatient Form", uuid: "F23BCA-324-22", uri: "https://foo.com/openmrs/ws/rest/form/F23BCA-324-22" },
      encounterType: { display: "Adult Return", uuid: "123CA-324-22", uri: "https://foo.com/openmrs/ws/rest/encountertype/123CA-324-22" },
      provider: { display: "Susan B Anthony (6400-6)", uuid: "392A-324-111", uri: "https://foo.com/openmrs/ws/rest/provider/392A-324-111" },
      obs:
      [
      { display: "WEIGHT (KG) = 70", uuid: "BBB-324-111", uri: "https://foo.com/openmrs/ws/rest/obs/BBB-324-111" },{ display: "TRANSPORTATION METHOD = VELOCIRAPTOR", uuid: "0019-324-111", uri: "https://foo.com/openmrs/ws/rest/obs/0019-324-111" }
      ]
      },
      orders:
      [{ ... },
      { ... }
      ]
      },
      {
      encounterDatetime: ...
      ...
      }
      ]
      
    • Representation: partial
    • JSON Return Value
      [
      {
      uuid: "029434-AA-32EE",
      uri: "https://foo.com/ws/rest/encounter/029434-AA-32EE",
      display: "Adult Return Hospital X
      encounterDatetime: "2000-05-25 14:05:03",
      patient: {
        display: "John A. Doe (123-0)",
        uuid: "1AA43D-324-AFE8349AC",
        uri: "https://foo.com/openmrs/ws/rest/patient/1AA43D-324-AFE8349AC" },
      name: "John A Doe",
      identifier: "123-0",
      identifierType: "asdf",
      identifiers { (list of identifier refs) },
      },
      location: { display: "Hospital X", uuid: "39209-324-999", uri: "https://foo.com/openmrs/ws/rest/location/39209-324-999" },
      form: { display: "Outpatient Form", uuid: "F23BCA-324-22", uri: "https://foo.com/openmrs/ws/rest/form/F23BCA-324-22" },
      encounterType: { display: "Adult Return", uuid: "123CA-324-22", uri: "https://foo.com/openmrs/ws/rest/encountertype/123CA-324-22" },
      provider: { display: "Susan B Anthony (6400-6)", uuid: "392A-324-111", uri: "https://foo.com/openmrs/ws/rest/provider/392A-324-111" },
      obs:
      [
      { display: "WEIGHT (KG) = 70", uuid: "BBB-324-111", uri: "https://foo.com/openmrs/ws/rest/obs/BBB-324-111" },{ display: "TRANSPORTATION METHOD = VELOCIRAPTOR", uuid: "0019-324-111", uri: "https://foo.com/openmrs/ws/rest/obs/0019-324-111" }
      ]
      },
      orders:
      [{ ... },
      { ... }
      ]
      },
      {
      uuid: ,
      display: ,
      uuid: ,
      encounterDatetime: ...
      ...
      }
      ]
      

Create a new encounter, or edit an existing encounter

In this story, the client could be a form entry tool.

  1. Create an encounter and observations in one swoop
    • POST /ws/rest/encounter
    • POST Request post content
      {
      encounterDatetime: "2000-05-25 14:05:03",
      patient: "1AA43D-324-AFE8349AC",
      location: "Hospital X",
      form: "F23BCA-324-22",
      encounterType: "123CA-324-22",
      provider: "392A-324-111",
      obs:
      [
      { question="034892-AA-3248", answer="70" },{ question="034892-AA-3248", answer="222-EE-222" }
      ]
      }
      
    • Returns back a default representation of the encounter (as shown in previous use case)
  2. Edit an encounter metadata
    • PUT /ws/rest/encounter/029434-AA-32EE
    • POST Request post content
      {
      encounterDatetime: "2000-05-26 14:05:03",
      location: "Hospital Y"
      }
      
    • Returns back a default representation of the encounter (as shown in previous previous use case)

See what patients are in a named cohort

A counselor in the field using a mobile device needs to review a list of patients to be interviewed.

  1. Search for cohorts by name
    • GET /ws/rest/cohort?name=partialname
  2. Get cohort by uuid
    • GET /ws/rest/cohort/cohortsuuid

Data entry from a mobile device

  1. Search a patient
    • GET /ws/rest/patient?q=123MT-2
    • GET /ws/rest/patient?q=Joe+Bob
  2. Fetch past encounters for patient
    • GET /ws/rest/encounter?patient=uuid-of-patient
  3. Add a new encounter
    • POST /ws/rest/encounter
      • content is json key/value pairs

External lab system needs to submit lab results to OpenMRS

  1. Search locations
    • GET /ws/rest/location?name=MTRH
  2. Search patients by name and/or identifier
    • (see above)

New OpenMRS admin wants to import some old encounter data into OpenMRS

  1. Add patient
    • POST to /ws/rest/patient
      • content is json key/value pairs
  2. Add a new encounter
    • See above

Submitting HL7 messages to the HL7 inbound queue

  1. Insert hl7 into hl7_in_queue
    • POST to /ws/rest/hl7
    • POST Request post content
      {
      message: "KLJSDF||||SDF|S|DF|||||S|DF|S|F"
      }
      

Authentication

In all cases, the client will need to authenticate before it can access the resources.

  1. Request token
    • POST to /ws/rest/login
    • Use HTTP Digest of username and password
    • Response from POST
      {
      token: "af3je3jkLm7"
      }
  2. Pass the token in the header for all subsequent requests
  3. Logout
    • POST to /ws/rest/logout
    • Invalidates token.