OHDSI Home | Forums | Wiki | Github

Losing information when matching ICD10 codes with SNOMED (e.g. the procedure laterality)


I am trying to match ICD10 codes with SNOMED. Using the relationship id “Is a” and “Maps to” I was able to match both diagnosis and procedures ICD10 codes with SNOMED.

However, when I analised the matches, I noticed that I had lost some information (e.g. the procedure laterality) with the SNOMED codes. For example, the ICD10 code for Ultrasonography of Left Hand (BP4PZZZ) gives me two SNOMED codes 1 – 303924009 (US scan of hand) and 2 – 427462007 (Ultrasound of bone). With these two codes I lost the information about the laterality of the procedure and when I search in SNOMED list, I find that SNOMED also has this code 1121000087102 (Ultrasonography of left hand) and with this code I wouldn’t lose the information about the laterality. The problem is that in the concept relationship table I don’t have any line that connects the concept ids of the ICD10 code (BP4PZZZ) that has the concept id = 2789914 and the more detailed SNOMED code (1121000087102) that has the concept id = 42534939. There is any way that I can link these two codes and all the codes that have a more specific code in SNOMED?

Thanks in advance,

Since the concept_id for the ICD10PCS code, BP4PZZZ, is a standard concept_id, it does not have an equivalent relation/mapping (via the Concept Relationship table ‘Maps to’ relationship_id) to another concept_id. What is your use case for mapping this to SNOMED?

Note ‘is a’ is NOT an equivalency relationship. ‘is a’ is a hierarchical relationship.


Thank you for your help. I have a list with ICD10 codes and need to “transform” them to SNOMED. Most of the ICD10 codes are procedure codes, and that is why I used the “Is a” to have a match between ICD and SNOMED. When using the same method/query that I used for the diagnosis codes I don’t get any matches (the only thing I did was changing the variable vocabulary_id to ICD10PCS from ICD10CM). Is there a better way to do this matching between ICD10 PCS codes and SNOMED codes using “Maps to” without losing information (e.g. the laterality)?

Thank you very much,

This surfaces a bigger issue actually: standard procedure concepts are not well curated. We can’t say we ‘harmonised’ the vocabularies if there are two standard concepts with equal meaning. In my view, the example here is actually a very good one, only the capitalisation is different:

In ETL the choice will be quite arbitrary and at analysis we always have to include both (although practically the higher level SNOMED will be used with all descendants, solving the issue). Same goes for the measurement domain by the way (between LOINC and SNOMED).

Do we want to fix this, and if yes, what is required to fix this?


Why do you need to transform the ICD10PCS codes to SNOMED? In the OHDSI community, we don’t transform codes/concept_ids to other code systems unless the original code/concept_id is non-standard. In your example, and with most ICD10PCS codes/concept_ids, these are standard. So, you don’t need to transform them to SNOMED. Standard concept_ids are ready for use.

So what you are saying is that because ICD10 procedures are standard I cannot match then with SNOMED? What I have is a list of ICD10 codes and I want to have two columns, one with the IDC10 codes (that I already have) and another one with the equivalent code for SNOMED. For example, BP4PZZZ – 1121000087102. Is this impossible to do?

Thank you very much


ICD10PCS codes are standard. No need to match to SNOMED. No need to have two columns. ICD10CM codes are (mostly) conditions. They are not standard and get mapped mostly to SNOMED. The two columns are condition_concept_id and source_condition_concept_id. But the standard concept really counts. The other one is there for convenience, debugging, are rarely when the mapped concept is less detailed.