Description

The openIMIS Insuree object (from the openimis-be-insuree_py module) was mapped to the FHIR Patient resource.

Notes / Assumptions

Mapping

FHIR Resource - Patient

FHIR field

openIMIS field

Notes

Mapping status

Identifier

InsureeID / CHFID / passport / TypeOfId

there is a 0..* relation on identifier

InsureeID / CHFID / passport is mapped

RelatedPerson

FamilyID

not mapped

name

LastName / OtherNames

name field contains values that are being mapped for both LastName and OtherNames fields

mapped

birthDate

DOB

mapped

gender

Gender

mapped

maritalStatus

Marital

mapped

RelatedPerson.Relationship

IsHead

not mapped

telecom

Phone / Email

telecom field contains values that are being mapped for both Phone and Email fields

mapped

photo

PhotoID

not mapped

photo.creation

PhotoDate

not mapped

managingOrganization

HFID

not mapped

address

CurrentAddress / GeoLocation

The patient can contain multiple addresses

mapped

Endpoint specification

Example of endpoint URL

http://127.0.0.1:8000/api_fhir/Patient/

Supported HTTP operation

CREATE - POST HTTP method

Used to create new FHIR Patient (Insuree). List of supported fields can be found in the table which shows the mapping between openIMIS and FHIR. Should be used the POST HTTP method and the body as JSON representation (example can be found below).

note
  • The `head` model attribute isn't currently covered by the current API (related to the not supported familyId). By the default value is False (can be modified by the module configuration).

  • The `card_issued` model attribute isn't currently covered by the current API. By the default value is False (can be modified by the module configuration).

  • The `validity_from` attribute is set as the current value of date when the object is created

  • The `audit_user_id` - the user which interact with the FHIR API is the `TechnicalUser` (Backend security - Models and Concepts) which hasn't representation in tblUsers. That's why the value of the `audit_user_id` attribute is set based on the following algorithm:

    1. Try to get that value from the 'auditUserId' query parameter

    1. If missing get that value then use the value from the module configuration (by default 1)

  • The `head` model attribute isn't currently covered by the current API (related to the not supported familyId). By the default value is False (can be modified by the module configuration).

  • The `card_issued` model attribute isn't currently covered by the current API. By the default value is False (can be modified by the module configuration).

  • The `validity_from` attribute is set as the current value of date when the object is created

  • The `audit_user_id` - the user which interact with the FHIR API is the `TechnicalUser` (Backend security - Models and Concepts) which hasn't representation in tblUsers. That's why the value of the `audit_user_id` attribute is set based on the following algorithm:

    1. Try to get that value from the 'auditUserId' query parameter

    1. If missing get that value then use the value from the module configuration (by default 1)

READ - GET HTTP method

By default, returns the list of all available Patient resources. To fetch information about a specific object, you should add the UUID (e.g. 01DB0819-69F6-44F9-BF3D-0BCC5D4803E2) key to URL :

http://127.0.0.1:8000/api_fhir/Patient/01DB0819-69F6-44F9-BF3D-0BCC5D4803E2

Should be used the GET HTTP method.

UPDATE - PUT HTTP method

Updates the value of the specific object. List of supported fields can be found in the mapping table. Should be used the PUT HTTP method and the body as JSON representation (example can be found below). The requested URL needs to point to a specific object to do that you should add the UUID (e.g. 01DB0819-69F6-44F9-BF3D-0BCC5D4803E2) key to URL for instance:

http://127.0.0.1:8000/api_fhir/Patient/01DB0819-69F6-44F9-BF3D-0BCC5D4803E2
note
  • The `head` model attribute isn't updated

  • The `head` model attribute isn't updated

  • The UPDATE operation will update the specific row of the database and doesn't create the history of changes (like in the legacy openIMIS)

  • The `head` model attribute isn't updated

  • The `head` model attribute isn't updated

  • The UPDATE operation will update the specific row of the database and doesn't create the history of changes (like in the legacy openIMIS)

DELETE - DELETE HTTP method

The operation can be used to remove the specific object from the database. Should be used the DELETE HTTP method. The requested URL needs to point to a specific object to do that you should add the UUID (e.g. 01DB0819-69F6-44F9-BF3D-0BCC5D4803E2) key to URL for instance:

http://127.0.0.1:8000/api_fhir/Patient/01DB0819-69F6-44F9-BF3D-0BCC5D4803E2

The DELETE operation will permanently remove the row from the database.

Module configuration used by the endpoint:

Configuration key

Description

Default value

default_audit_user_id

default value which will be used for 'audit_user_id' field

"default_audit_user_id": 1

gender_codes

configuration of codes used by the openIMIS to represent gender (male, female, other)

"gender_codes": {
"male": "M",
"female": "F",
"other": "O"
}

stu3_fhir_identifier_type_config

configuration of system and codes used to represent the specific types of identifiers

"stu3_fhir_identifier_type_config":{
"system":"https://hl7.org/fhir/valueset-identifier-type.html",
"fhir_code_for_imis_db_id_type":"ACSN",
"fhir_code_for_imis_chfid_type":"SB",
"fhir_code_for_imis_passport_type":"PPN",
"fhir_code_for_imis_facility_id_type":"FI",
"fhir_code_for_imis_claim_admin_code_type":"FILL",
"fhir_code_for_imis_claim_code_type":"MR"
}

stu3_fhir_marital_status_config

configuration of system and codes used to represent the specific types of marital status

"stu3_fhir_marital_status_config":{
"system":"https://www.hl7.org/fhir/STU3/valueset-marital-status.html",
"fhir_code_for_married":"M",
"fhir_code_for_never_married":"S",
"fhir_code_for_divorced":"D",
"fhir_code_for_widowed":"W",
"fhir_code_for_unknown":"U"
},

default_value_of_patient_head_attribute

default value for 'head' attribute used for creating new Insuree object

"default_value_of_patient_head_attribute": False,

default_value_of_patient_card_issued_attribute

default value for 'card_issued' attribute used for creating new Insuree object

"default_value_of_patient_card_issued_attribute": False,

Example JSON representation of content:

{
    "resourceType": "Patient",
    "address": [
        {
            "text": "address",
            "type": "physical",
            "use": "home"
        },
        {
            "text": "geolocation",
            "type": "both",
            "use": "home"
        }
    ],
    "birthDate": "2000-01-02",
    "gender": "female",
    "id": "01DB0819-69F6-44F9-BF3D-0BCC5D4803E2",
    "identifier": [
        {
            "type": {
                "coding": [
                    {
                        "code": "ACSN",
                        "system": "https://hl7.org/fhir/valueset-identifier-type.html"
                    }
                ]
            },
            "use": "usual",
            "value": "01DB0819-69F6-44F9-BF3D-0BCC5D4803E2"
        },
        {
            "type": {
                "coding": [
                    {
                        "code": "SB",
                        "system": "https://hl7.org/fhir/valueset-identifier-type.html"
                    }
                ]
            },
            "use": "usual",
            "value": "chfid"
        },
        {
            "type": {
                "coding": [
                    {
                        "code": "PPN",
                        "system": "https://hl7.org/fhir/valueset-identifier-type.html"
                    }
                ]
            },
            "use": "usual",
            "value": "passport"
        }
    ],
    "maritalStatus": {
        "coding": [
            {
                "code": "U",
                "system": "https://www.hl7.org/fhir/STU3/valueset-marital-status.html"
            }
        ]
    },
    "name": [
        {
            "family": "test patient",
            "given": [
                "test patient"
            ],
            "use": "usual"
        }
    ],
    "telecom": [
        {
            "system": "phone",
            "use": "home",
            "value": "phoneNum"
        },
        {
            "system": "email",
            "use": "home",
            "value": "email@email.com"
        }
    ]
}