dstu2-fhirhl7-fhirhapi-fhir

FHIR : adding a custom extension


I would like to add to add a custom extension to my Schedule resource. In my app, Schedule have visit motives (reasons). I know there's a list of classified appointments / encounter reasons but I would like to use mine.

I have something like this :

{
  "resourceType":"Schedule",
  "identifier":"logical_id",
  "type":"schedule_speciality",
  "actor":{
    "practioner_id":"identifier",
    "practioner_name":"practioner name"
  },
  "external_id":{
    "extension":[
      {
        "url":"http://api.test.com/fhir/schedule/external_id",
        "valueIdentifier":"external_id"
      }
    ]
  },
  "visit_motives":{
    "extension":[
      {
        "url":"https://api.test.com/fhir/ValueSet/schedule#visit_motives",
        "valueString":"vist_motive1"
      },
      {
        "url":"https://api.test.com/fhir/ValueSet/schedule#visit_motives",
        "valueString":"vist_motive2"
      },
      {
        "url":"https://api.test.com/fhir/ValueSet/schedule#visit_motives",
        "valueString":"vist_motive3"
      }
    ]
  },
  "practice_id":{
    "extension":[
      {
        "url":"https://api.test.com/fhir/schedule/practice_id",
        "valueIdentifier":"practice_id"
      }
    ]
  }
}

I'm not sure about this part :

"visit_motives":{
    "extension":[
      {
        "url":"https://api.test.com/fhir/ValueSet/schedule#visit_motives",
        "valueString":"vist_motive1"
      },
      {
        "url":"https://api.test.com/fhir/ValueSet/schedule#visit_motives",
        "valueString":"vist_motive2"
      },
      {
        "url":"https://api.test.com/fhir/ValueSet/schedule#visit_motives",
        "valueString":"vist_motive3"
      }
    ]
  }

Is it correct to add an extension this way ? There are always multiple visit motives for a specific schedule so I have to list them.

I also have seen this kind of things :

"visit_motives": {
          "coding": [
            {
              "system": "https://api.test.com/fhir/ValueSet/schedule#visit_motives",
              "code": "visit_motive1"
            }
          ]
        }

Which one is the correct one or am I wrong ?


Solution

  • There are several issues here:

    1. It seems odd to capture a "reason" on a schedule. A schedule says when a particular clinician or clinic or other resource is available. E.g. "Dr. Smith takes appointments Mon/Wed/Fri from 1pm-4pm". So if you were to capture a reason on the resource, it would reflect "Why does Dr. Smith have a schedule?" Typically reasons are captured for an individual Appointment. That's the resource that reserves a particular slot for a planned visit. And Appointment already has an element for reason where you're free to use your own codes or just send text.

    2. You have extensions to convey identifiers, but Schedule already has an element for identifiers. Why would you use extensions instead of the standard element? Note that you can use the "system" and/or "type" components to differentiate different kinds of identifiers.

    3. You're sending "identifier", "type", "name", etc. as simple strings - but they're complex data types, so you need to communicate the child elements

    4. actor is of type Reference - that means you need to point to the Practitioner resource. You can't send the properties in-line. (If the Practitioner only exists in the context of the Schedule, you could use the "contained" approach which would use an internal reference, but containment doesn't seem to make sense in this use-case.

    5. The URL for your extension contains ValueSet, which isn't correct - extensions are all structure definitions. Also, there shouldn't be a # symbol in the URL.

    6. Your syntax for extensions is incorrect. You can't introduce new properties in FHIR. The property name for all extensions is just "extension". You differentiate by the URL. So your syntax should be:

    {
      "resourceType":"Schedule",
      "id":"logical_id",
      "extension": [
        {
          "url":"https://api.test.com/fhir/StructureDefinition/schedule-visit_motive",
          "valueString":"vist_motive1"
        },
        {
          "url":"https://api.test.com/fhir/StructureDefinition/schedule-visit_motive",
          "valueString":"vist_motive2"
        },
        {
          "url":"https://api.test.com/fhir/StructureDefinition/schedule-visit_motives",
          "valueString":"vist_motive3"
        }
      ],
      "identifier": [
        {
          "system": http://api.test.com/fhir/NamingSystem/external_id",
          "value": "external_id"
        }
        {
          "system": http://api.test.com/fhir/NamingSystem/practice_id",
          "value": "practice_id"
        }
      ]
      "type": {
        "coding": {
          "system": "http://somewhere.org/fhir/CodeSystem/specialties",
          "code": "schedule_speciality"
        },
        "text": "Some text description of specialty"
      },
      "actor":{
        "reference": "http://myserver.org/fhir/Practitioner/12345"
        "display": "Dr. smith"
      }
    }