/// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }