/// <summary> /// Create a codified value /// </summary> /// <param name="cV"></param> /// <returns></returns> protected CodeValue CreateCodeValue <T>(CV <T> cv, List <IResultDetail> dtls) { // Get terminology service from the host context ITerminologyService termSvc = Context.GetService(typeof(ITerminologyService)) as ITerminologyService; // Code is null then return if (cv == null || cv.Code == null || cv.IsNull) { dtls.Add(new ResultDetail(ResultDetailType.Error, ERR_NO_CODE, (string)null)); return(null); } // Return value CodeValue retVal = new CodeValue(Util.ToWireFormat(cv.Code)); if (cv.Code.IsAlternateCodeSpecified || !String.IsNullOrEmpty(cv.CodeSystem)) { retVal.CodeSystem = cv.CodeSystem; if (retVal.CodeSystem == null) { dtls.Add(new MandatoryElementMissingResultDetail(ResultDetailType.Error, String.Format(this.m_localeService.GetString("MSGE04A"), cv.Code, typeof(T).Name), null)); } } else if (String.IsNullOrEmpty(cv.CodeSystem)) { object[] attList = typeof(T).GetCustomAttributes(typeof(StructureAttribute), false); if (attList.Length > 0) { retVal.CodeSystem = (attList[0] as StructureAttribute).CodeSystem; } } else { retVal.CodeSystem = cv.CodeSystem; } // Code system data retVal.CodeSystemVersion = cv.CodeSystemVersion; retVal.DisplayName = cv.DisplayName; // Validate with termservice if (termSvc != null && cv.Code.IsAlternateCodeSpecified) { var tval = termSvc.Validate(retVal); foreach (var dtl in tval.Details) { dtls.Add(new VocabularyIssueResultDetail(dtl.IsError ? ResultDetailType.Error : ResultDetailType.Warning, dtl.Message, null)); } } if (cv.OriginalText != null && !cv.IsNull) { retVal.OriginalText = cv.OriginalText.ToString(); } return(retVal); }
/// <summary> /// Convert a code from FHIR to internal /// </summary> internal CodeValue ConvertCode(CodeableConcept codeableConcept, List <IResultDetail> dtls) { var coding = codeableConcept.GetPrimaryCode(); // Get the oid CodeValue retVal = new CodeValue(coding.Code, MessageUtil.TranslateFhirDomain(coding.System.ToString())); retVal.DisplayName = coding.Display; ITerminologyService termSvc = ApplicationContext.CurrentContext.GetService(typeof(ITerminologyService)) as ITerminologyService; if (termSvc != null) { var validationDtls = termSvc.Validate(retVal); if (validationDtls.Outcome != SVC.Core.Terminology.ValidationOutcome.Valid) { foreach (var dtl in validationDtls.Details) { dtls.Add(new VocabularyIssueResultDetail(dtl.IsError ? ResultDetailType.Error : ResultDetailType.Warning, dtl.Message, null)); } } } return(retVal); }