
001package org.hl7.fhir.r5.terminologies.utilities; 002 003import org.hl7.fhir.r5.model.Parameters; 004import org.hl7.fhir.r5.model.Parameters.ParametersParameterComponent; 005import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage; 006import org.hl7.fhir.utilities.Utilities; 007 008 009@MarkedToMoveToAdjunctPackage 010public class SnomedUtilities { 011 012 public static String getVersionFromParameters(Parameters p, String version) { 013 for (ParametersParameterComponent pp : p.getParameter()) { 014 switch (pp.getName()) { 015 case "system-version" : 016 if (version == null) { 017 return pp.getValue().primitiveValue(); 018 } 019 case "force-system-version": 020 return pp.getValue().primitiveValue(); 021 } 022 } 023 return version; 024 } 025 026 public static String getEditionFromVersion(String version) { 027 if (version == null) { 028 return null; 029 } 030 if (version.startsWith("http://snomed.info/sct/")) { 031 version = version.substring(23); 032 } 033 if (version.contains("/")) { 034 version = version.substring(0, version.indexOf("/")); 035 } 036 if (Utilities.existsInList(version, 037 "900000000000207008", // International 038 "449081005", // International Spanish 039 "11000221109", // Argentinian 040 "32506021000036107", // Australian (with drug extension) 041 "11000234105", // Austrian 042 "11000172109", // Belgian 043 "20621000087109", // Canadian English 044 "20611000087101", // Canadian Canadian French 045 "21000325107", // Chilean 046 "11000279109", // Czech 047 "554471000005108", //: Danish 048 "11000181102", //: Estonian 049 "11000229106", //: Finnish 050 "11000274103", //: German 051 "1121000189102", //: Indian 052 "11000220105", //: Irish 053 "11000146104", //: Netherlands 054 "21000210109", //: New Zealand 055 "51000202101", //: Norwegian 056 "11000267109", //: Republic of Korea (South Korea) 057 "900000001000122104", //: Spanish National 058 "45991000052106", //: Swedish 059 "2011000195101", //: Swiss 060 "83821000000107", //: UK 061 "999000021000000109", //: UK Clinical 062 "5631000179106", //: Uruguay 063 "731000124108", //: US 064 "5991000124107", //: US (with ICD-10-CM maps) 065 "827022005" //: IPS Terminology 066 )) { 067 return version; 068 } else { 069 return null; 070 } 071 } 072 073 public static String getSctLink(String version, String code, Parameters p) { 074 if (!Utilities.noString(code) && !code.contains(":")) { 075 version = SnomedUtilities.getVersionFromParameters(p, version); 076 String edId = SnomedUtilities.getEditionFromVersion(version); 077 if (edId != null) { 078 // if there's a version that's an edition, then: 079 // http://snomed.info/sct/11000172109/id//371305003 080 return "http://snomed.info/sct/"+edId+"/id/"+code; 081 } else { 082 // no, version: 083 return "http://snomed.info/id/"+code; 084 } 085 } else { 086 return "https://browser.ihtsdotools.org/"; 087 } 088 } 089} 090 091