In several place in FHIR, we need to implement what FHIR calls a Coding. By itself, this is pretty straight-forward. A code has an associated “system” and its code within that system.
For example, SNOMED CT code 161891005 (backache) would be represented like this:
{
"system": "http://snomed.info/sct",
"code": "161891005"
}
Similarly, the LOINC code 6299-2 (BUN) would be represented as:
{
"system": "http://loinc.org".
"code": "6299-2"
}
These two are easy because the system is defined as part of the FHIR spec.
Obviously actual implementations of OpenMRS depend on more terminology systems than just these. For coding systems that are common across the OpenMRS ecosystem (CIEL, PIH, AMPATH), we can probably just come up with some dummy URLs (though it would be nice to have “official” URLs, especially for CIEL, in the FHIR community registry @akanter).
The question I have is how we should represent implementation-specific concepts. There are a few approaches we can take:
- Simply send the code across without the system. While this is possible according to the FHIR spec, it is active discouraged.
- What was previously implemented in the old FHIR module, that is, specifying the dummy URL
http://openmrs.org
as the coding system for these concepts. While this technically works, it is semantically providing the wrong information. For example, the concepts defined in, say, UgandaEMR and eSaude, are not, strictly speaking, using the same terminological system. - Come up with some kind of implementation-specific configurable URL to distinguish concepts.
I think we should pursue option 3, but I wanted some input on whether this is a good idea and if there is any existing information within OpenMRS we might be able to leverage to generate an appropriate URL. In particular, I’m wondering if anyone is doing anything similar with HL7 V2.