Mapping OpenMRS concepts to CDA value sets

Apologies, this is a question that I just posted on the OMRS Dev forum, but wanted to share amongst you here…

Hi everyone,

I want to raise a very abstruse question : What’s the best (or at least 80% use case) for supporting the translation of OpenMRS domain objects into the form of CDA sections ?

For example, lets consider the ‘family history’ section.

Now, as per IHE PCC spec (see ftp://ftp.ihe.net/DocumentPublication/CurrentPublished/PatientCareCoordination/IHE_PCC_TF_Vol2.pdf) this can contain data for a large value set (see http://wiki.ihe.net/index.php?title=1.3.6.1.4.1.19376.1.5.3.1.1.16.5.4)

Now, lets say that my section’s value set had a question such as ‘birth weight’. In that case, it’d be easy to fill in, because we can basically accept the observation value, and use that in our section.

But on the other hand, what if a value set contains a concept of data type N/A, meaning that it was meant to be used as an answer ? for example, the family history section value set has ‘neural tube defect’ , which is defined in the MVP CIEL Dictionary with concept type N/A, meaning it was intended as an answer.

In such a case, would it be appropriate to identify wether the patient had an ‘answer’ of that type, and merely include it in the section ?

Best regards,

Suranga

Hi Suranga,

I’ve done some of this work for the prototype “import” module. Basically I create (or use) the SNOMED and LOINC ref sets mapping the codes in the ref set back to an oMRS concept. Sometimes you’ll need to massage the data a little bit because the family history section codes in CIEL are structured different than the sections in the CDA. This means your export won’t always exactly match obs in OpenMRS and may have a different structure.

For example, for family history I can share what I’ve done with the Import, maybe it will help you with the export …

On the import prototype, whenever I encounter a Family History Organizer I do the following:

  1. Create an Obs (group) of concept 160593 (Family History List)

  2. Create an Obs of concept 1560 (Family Member)

2a: Set the value of this as mappings from HL7 Family Member (Provided below in a table) from subject/relatedSubject/code

  1. Create an obs of concept 160752 (Identification of Family Member)

3a: Set the value to an HL7 CX formatted string (x^^^&y&ISO) form subject/relatedSubject/sdtc:id

  1. Create an obs of concept 160750 (Family member name) and set value from subject/relatedSubject/subject/name

  2. Process each observation provided in the CDA adding to the group (creating concept if not mapped, this is a placeholder for now)

I’m thinking about changing step 5 to link the observation concept to 160592 (Family History Diagnosis) which would fit some of the scenarios (see discussion below the reference tables I’ve provided)

HL7 Family Member → MVP/CIEL mapping:

Mnemonic

Display
CIEL ID
CIEL Display
MTH
Mother
970
Mother
FTH
Father
971
Father
GRMTH
Grandmother
159772
Grandmother
GRFTH
Grandfather
160273
Grandfather
SIB
Sibling
972
Sibling
CHILD
Child
1528
Child
AUNT
Aunt
975
Aunt
UNCLE
Uncle
974
Uncle
PGRMTH
Paternal
Grandmother
160726
Paternal
grandmother
MGRMTH
Maternal
Grandmother
160723
Maternal
grandmother
PGRFTH
Paternal
Grandfather
160725
Paternal
grandfather
MGRFTH
Maternal
Grandfather
160724
Maternal
grandfather
SON
Son
160727
Son
DAU
Daughter
160728
Daughter
BRO
Brother
160729
Brother
SIS
Sister
160730
Sister
DOMPART
Domestic Partner
5617
PARTNER OR
SPOUSE
FAMMEMB
Family Member
5620
Other family
member

For observations values they can be classified as a SNOMED codes:

64572001
Condition (Class)
418799008
Symptom (Class)
404684003
Finding (Class)
409586006
Complaint (Class)
248536006
Functional limitation
(Class)
55607006
Problem (Class)
282291009
Diagnosis (Class)

Here is where it gets tricky, as you’ve mentioned some of the CIEL codes are marked N/A … What I do on import is try to find a concept that the indicated value “answers” and create an obs like that, for example:

33065-4
ECTOPIC PREGNANCY (REPORTED)
46
Ectopic Pregnancy

Here the observation would be reported as :

However I can’t create an OBS of type : “ECTOPIC PREGNANCY” (CIEL - 46 I think) and a coded value as specified. What I need to do is find the question that is answered by the presence of that LOINC code and represent it as such provided that is what the CDA is semantically representing. In this case, I would create an Obs having concept 1430 (PAST PREGNANCY COMPLICATIONS) and concept 46 (Ectopic Pregnancy) as the answer because the presence of this observation indicates “it did occur”.

Here is what I typically interpret that seems to work:

/negationInd is false, /value is CD and is fixed value, /code is a concept of type N/A => Answer the question that /code points to (iff only one question is answered)

/negationInd is false, /value is BL and value is true, /code is a concept of type N/A => Same as above

You could do the same in reverse:

If obs concept is a question that is not mapped to CDA vocab, is the value mapped to CDA vocab?

If yes, Create /negationInd = false, /value as CD (or BL if specified), and /code as whatever value maps to in CDA

Hope that helps and wasn’t too rambly… I have several mappings for CIEL and CDA value sets that I’m loading into the import prototype below (nb: there are lots more terms which have no CIEL mapping or cannot be mapped because of certain limitations I’ve encountered. In such cases I create a concept on the fly)

code
displayName
concept type
classification
codeSystemName
units
cielId
ciel name
mapType
11636-8
BIRTHS LIVE (REPORTED)
Numeric
Misc
LOINC
160601
Number of live deliveries
SAME-AS
11637-6
BIRTHS PRETERM (REPORTED)
Numeric
Misc
LOINC
160078
Number of preterm births
SAME-AS
11639-2
BIRTHS TERM (REPORTED)
Numeric
Misc
LOINC
160080
number of full term pregnancies
SAME-AS
11612-9
ABORTIONS (REPORTED)
Numeric
Misc
LOINC
1823
Number of
abortions/miscarriages
BROADER-THAN
11613-7
ABORTIONS INDUCED (REPORTED)
Numeric
Misc
LOINC
1823
Number of abortions/miscarriages
BROADER-THAN
11614-5
ABORTIONS SPONTANEOUS
(REPORTED)
Numeric
Misc
LOINC
1823
Number of
abortions/miscarriages
BROADER-THAN
33065-4
ECTOPIC PREGNANCY (REPORTED)
N/A
Diagnosis
LOINC
46
Ectopic Pregnancy
SAME-AS
57062-2
Births.stillborn
Coded
Finding
LOINC
125872
STILLBIRTH
SAME-AS
11996-6
Pregnancies
Numeric
Finding
LOINC
5624
Gravida
SAME-AS
11639-2
Births.Term
Numeric
Finding
LOINC
160080
number of full term
pregnancies
SAME-AS
11637-6
Births.Preterm
Numeric
Finding
LOINC
160078
Number of preterm births
SAME-AS
45371-2
Multiple pregnancy
Boolean
Finding
LOINC
115491
multiple pregnancy
SAME-AS
49051-6
Gestational age
Numeric
Finding
LOINC
wk
1438
WEEKS OF CURRENT GESTATION
NARROWER-THAN
8339-4
Body weight at birth
Numeric
Finding
LOINC
kg
5916
BIRTH WEIGHT (kg)
NARROWER-THAN
11449-6
PREGNANCY STATUS
Coded
Finding
LOINC
5272
PREGNANCY STATUS
SAME-AS
8678-5
MENSTRUAL STATUS
Coded
Finding
LOINC
160596
Menstrual status
SAME-AS
8665-2
DATE LAST MENSTRUAL PERIOD
Date
Finding
LOINC
1427
LAST MENSRUAL PERIOD
SAME-AS
11779-6
DELIVERY DATE (ESTIMATED
FROM LAST MENSTRUAL PERIOD)
Date
Finding
LOINC
5596
ESTIMATED DATE OF
CONFINEMENT
SAME-AS
11884-4
FETUS, GESTATIONAL AGE (CLINICAL ESTIMATE)
Numeric
Finding
LOINC
wk
1438
WEEKS OF CURRENT GESTATION
NARROWER-THAN
46680005
Vital Signs
N/A
ConvSet
SNOMED CT
1114
VITAL SIGNS
SAME-AS
8867-4
HEART BEAT
Numeric
Finding
LOINC
/min
5087
Pulse
SAME-AS
2710-2
OXYGEN SATURATION
Numeric
Finding
LOINC
%
5092
Blood oxygen saturation
SAME-AS
8480-6
INTRAVASCULAR SYSTOLIC
Numeric
Finding
LOINC
mm[Hg]
5085
SYSTOLIC BLOOD PRESSURE
SAME-AS
8462-4
INTRAVASCULAR DIASTOLIC
Numeric
Finding
LOINC
mm[Hg]
5086
DIASTOLIC BLOOD PRESSURE
SAME-AS
8310-5
BODY TEMPERATURE
Numeric
Finding
LOINC
cel
5088
Temperature (C)
SAME-AS
8302-2
BODY HEIGHT (MEASURED)
Numeric
Finding
LOINC
cm
5090
Height (cm)
SAME-AS
3141-9
BODY WEIGHT (MEASURED)
Numeric
Finding
LOINC
kg
5089
Weight (kg)
SAME-AS
409137002
No Known Drug Allergies
N/A
Diagnosis
SNOMED CT
160556
160244002
No Known Allergies
N/A
Diagnosis
SNOMED CT
160557
A
Abnormal
N/A
Misc
ObservationInterpretation
1116
ABNORMAL
SAME-AS
NEG
Negative
N/A
Misc
ObservationInterpretation
664
NEGATIVE
SAME-AS
N
Normal
N/A
Misc
ObservationInterpretation
1115
NORMAL
SAME-AS
POS
Positive
N/A
Misc
ObservationInterpretation
703
POSITIVE
SAME-AS
MTH
Mother
N/A
Misc
RoleCode
970
Mother
SAME-AS
FTH
Father
N/A
Misc
RoleCode
971
Father
SAME-AS
GRMTH
Grandmother
N/A
Misc
RoleCode
159772
Grandmother
SAME-AS
GRFTH
Grandfather
N/A
Misc
RoleCode
160273
Grandfather
SAME-AS
SIB
Sibling
N/A
Misc
RoleCode
972
Sibling
SAME-AS
CHILD
Child
N/A
Misc
RoleCode
1528
Child
SAME-AS
AUNT
Aunt
N/A
Misc
RoleCode
975
Aunt
SAME-AS
UNCLE
Uncle
N/A
Misc
RoleCode
974
Uncle
SAME-AS
PGRMTH
Paternal Grandmother
N/A
Misc
RoleCode
160726
Paternal grandmother
SAME-AS
MGRMTH
Maternal
Grandmother
N/A
Misc
RoleCode
160723
Maternal
grandmother
SAME-AS
PGRFTH
Paternal Grandfather
N/A
Misc
RoleCode
160725
Paternal grandfather
SAME-AS
MGRFTH
Maternal
Grandfather
N/A
Misc
RoleCode
160724
Maternal
grandfather
SAME-AS
SON
Son
N/A
Misc
RoleCode
160727
Son
SAME-AS
DAU
Daughter
N/A
Misc
RoleCode
160728
Daughter
SAME-AS
BRO
Brother
N/A
Misc
RoleCode
160729
Brother
SAME-AS
SIS
Sister
N/A
Misc
RoleCode
160730
Sister
SAME-AS
DOMPART
Domestic Partner
N/A
Misc
RoleCode
5617
PARTNER OR SPOUSE
SAME-AS
FAMMEMB
Family Member
N/A
Misc
RoleCode
5620
Other family
member
SAME-AS

Cheers

-Justin

···

On Wednesday, July 16, 2014 11:48:02 PM UTC-4, Suranga Kasthurirathne wrote:

Apologies, this is a question that I just posted on the OMRS Dev forum, but wanted to share amongst you here…

Hi everyone,

I want to raise a very abstruse question : What’s the best (or at least 80% use case) for supporting the translation of OpenMRS domain objects into the form of CDA sections ?

For example, lets consider the ‘family history’ section.

Now, as per IHE PCC spec (see ftp://ftp.ihe.net/DocumentPublication/CurrentPublished/PatientCareCoordination/IHE_PCC_TF_Vol2.pdf) this can contain data for a large value set (see http://wiki.ihe.net/index.php?title=1.3.6.1.4.1.19376.1.5.3.1.1.16.5.4)

Now, lets say that my section’s value set had a question such as ‘birth weight’. In that case, it’d be easy to fill in, because we can basically accept the observation value, and use that in our section.

But on the other hand, what if a value set contains a concept of data type N/A, meaning that it was meant to be used as an answer ? for example, the family history section value set has ‘neural tube defect’ , which is defined in the MVP CIEL Dictionary with concept type N/A, meaning it was intended as an answer.

In such a case, would it be appropriate to identify wether the patient had an ‘answer’ of that type, and merely include it in the section ?

Best regards,

Suranga