コード例 #1
0
        public static string GetFhirId(this ValueSet valueSet)
        {
            ValueSetIdentifier identifier = valueSet.Identifiers.FirstOrDefault(y => y.Type == ValueSetIdentifierTypes.HTTP);

            if (identifier == null && valueSet.Identifiers.Count > 0)
            {
                identifier = valueSet.Identifiers.First();
            }

            if (identifier != null)
            {
                if (identifier.Type == ValueSetIdentifierTypes.Oid)
                {
                    return(identifier.Identifier.Substring(8));
                }
                else if (identifier.Type == ValueSetIdentifierTypes.HL7II)
                {
                    return(identifier.Identifier.Substring(10));
                }
                else if (identifier.Type == ValueSetIdentifierTypes.HTTP)
                {
                    return(identifier.Identifier.Substring(identifier.Identifier.LastIndexOf("/") + 1));
                }
            }

            return(valueSet.Id.ToString());
        }
コード例 #2
0
ファイル: ValueSetModel.cs プロジェクト: yasir2000/trifolia
 public ValueSetIdentifierModel(ValueSetIdentifier valueSetIdentifier)
 {
     this.Id         = valueSetIdentifier.Id;
     this.Identifier = valueSetIdentifier.Identifier;
     this.Type       = valueSetIdentifier.Type;
     this.IsDefault  = valueSetIdentifier.IsDefault;
 }
コード例 #3
0
ファイル: ExcelImporter.cs プロジェクト: yasir2000/trifolia
        public void Import(ImportCheckResponse checkResponse)
        {
            foreach (var checkValueSet in checkResponse.ValueSets)
            {
                Log.For(this).Info("Importing excel value set {0} ({1})", checkValueSet.Name, checkValueSet.Oid);

                ValueSet valueSet = null;

                if (checkValueSet.ChangeType == ImportValueSetChange.ChangeTypes.None || checkValueSet.ChangeType == ImportValueSetChange.ChangeTypes.Update)
                {
                    valueSet = this.tdb.ValueSets.Single(y => y.Id == checkValueSet.Id);

                    if (checkValueSet.ChangeType == ImportValueSetChange.ChangeTypes.Update)
                    {
                        valueSet.Name       = checkValueSet.Name;
                        valueSet.LastUpdate = DateTime.Now;
                    }
                }
                else if (checkValueSet.ChangeType == ImportValueSetChange.ChangeTypes.Add)
                {
                    valueSet = new ValueSet()
                    {
                        Name       = checkValueSet.Name,
                        LastUpdate = DateTime.Now
                    };

                    ValueSetIdentifier vsIdentifier = new ValueSetIdentifier();
                    vsIdentifier.Identifier = checkValueSet.Oid;

                    if (checkValueSet.Oid.StartsWith("http://") || checkValueSet.Oid.StartsWith("https://"))
                    {
                        vsIdentifier.Type = ValueSetIdentifierTypes.HTTP;
                    }
                    else if (checkValueSet.Oid.StartsWith("urn:hl7ii:"))
                    {
                        vsIdentifier.Type = ValueSetIdentifierTypes.HL7II;
                    }
                    else
                    {
                        vsIdentifier.Type = ValueSetIdentifierTypes.Oid;
                    }

                    valueSet.Identifiers.Add(vsIdentifier);
                    this.tdb.ValueSets.Add(valueSet);
                }

                // Import concepts
                foreach (var checkConcept in checkValueSet.Concepts)
                {
                    this.ExcelImportConcept(valueSet, checkConcept);
                }
            }

            this.tdb.SaveChanges();
        }
コード例 #4
0
        private void SaveValueSetIdentifiers(IObjectRepository tdb, ValueSet valueSet, List <ValueSetIdentifierModel> valueSetIdentifierModels)
        {
            // Remove identifiers
            foreach (var vsIdentifierModel in valueSetIdentifierModels.Where(y => y.ShouldRemove))
            {
                ValueSetIdentifier vsIdentifier = valueSet.Identifiers.Single(y => y.Id == vsIdentifierModel.Id);
                tdb.ValueSetIdentifiers.Remove(vsIdentifier);
            }

            // Add/Update identifiers
            foreach (var vsIdentifierModel in valueSetIdentifierModels.Where(y => !y.ShouldRemove))
            {
                ValueSetIdentifier vsIdentifier = valueSet.Identifiers.SingleOrDefault(y => y.Id == vsIdentifierModel.Id);

                if (vsIdentifier == null)
                {
                    vsIdentifier = new ValueSetIdentifier();
                    valueSet.Identifiers.Add(vsIdentifier);
                }

                if (vsIdentifier.Identifier != vsIdentifierModel.Identifier)
                {
                    vsIdentifier.Identifier = vsIdentifierModel.Identifier;
                }

                if (vsIdentifier.Type != vsIdentifierModel.Type)
                {
                    vsIdentifier.Type = vsIdentifierModel.Type;
                }

                // Only allow changing the default identifier if the value set is NOT imported
                if (valueSet.ImportSource == null)
                {
                    if (vsIdentifier.IsDefault != vsIdentifierModel.IsDefault)
                    {
                        vsIdentifier.IsDefault = vsIdentifierModel.IsDefault;
                    }
                }
            }
        }
コード例 #5
0
        private void PopulateIdentifier(ValueSet valueSet, string fhirIdentifier)
        {
            ValueSetIdentifier vsIdentifier = valueSet.Identifiers.FirstOrDefault(y => y.Type == ValueSetIdentifierTypes.HTTP);

            if (vsIdentifier == null)
            {
                vsIdentifier = new ValueSetIdentifier()
                {
                    Type       = ValueSetIdentifierTypes.HTTP,
                    Identifier = fhirIdentifier
                };

                valueSet.Identifiers.Add(vsIdentifier);
            }
            else
            {
                vsIdentifier.Identifier = fhirIdentifier;
            }

            if (!valueSet.Identifiers.Any(y => y.IsDefault))
            {
                vsIdentifier.IsDefault = true;
            }
        }
コード例 #6
0
        private bool PopulateIdentifier(ValueSet valueSet, string identifier)
        {
            bool changed = false;
            ValueSetIdentifierTypes type = ValueSetIdentifierTypes.Oid;

            if (identifier.StartsWith("http://") || identifier.StartsWith("https://"))
            {
                type = ValueSetIdentifierTypes.HTTP;
            }
            else if (identifier.StartsWith("urn:hl7ii:"))
            {
                type = ValueSetIdentifierTypes.HL7II;
            }

            ValueSetIdentifier vsIdentifier = valueSet.Identifiers.FirstOrDefault(y => y.Type == type);

            if (vsIdentifier == null)
            {
                vsIdentifier = new ValueSetIdentifier()
                {
                    Type       = type,
                    Identifier = identifier
                };

                valueSet.Identifiers.Add(vsIdentifier);
                changed = true;
            }

            if (!valueSet.Identifiers.Any(y => y.IsDefault))
            {
                vsIdentifier.IsDefault = true;
                changed = true;
            }

            return(changed);
        }
コード例 #7
0
        private void UpdateConstraintBinding(TemplateConstraint constraint, ImportConstraint importConstraint)
        {
            if (importConstraint.Item is ImportSingleValueCode)
            {
                ImportSingleValueCode importSvc = importConstraint.Item as ImportSingleValueCode;

                if (constraint.Value != importSvc.code)
                {
                    constraint.Value = importSvc.code;
                }

                if (constraint.DisplayName != importSvc.displayName)
                {
                    constraint.DisplayName = importSvc.displayName;
                }
            }
            else if (importConstraint.Item is ImportValueSet)
            {
                ImportValueSet importVs   = importConstraint.Item as ImportValueSet;
                bool           vsHasError = false;

                if (AreBooleansDifferent(constraint.IsStatic, importVs.isStatic, importVs.isStaticSpecified))
                {
                    constraint.IsStatic = importVs.isStatic;
                }

                if (importVs.dateSpecified)
                {
                    constraint.ValueSetDate = importVs.date;
                }

                // Old bug in Trifolia allowing the same value set identifier to be used more than once
                var foundValueSets = (from vsi in this.valueSets.SelectMany(y => y.Identifiers)
                                      where vsi.Identifier.ToLower().Trim() == importVs.identifier.ToLower().Trim()
                                      select vsi.ValueSet).Distinct().ToList();

                if (foundValueSets.Count() == 0)
                {
                    var newValueSet = new ValueSet()
                    {
                        Name         = string.IsNullOrEmpty(importVs.name) ? importVs.identifier + " incomplete" : importVs.name,
                        IsIncomplete = true,
                        Description  = !string.IsNullOrEmpty(importVs.Description) ? importVs.Description : "Automatically generated by template import",
                        LastUpdate   = DateTime.Now
                    };

                    var newValueSetIdentifier = new ValueSetIdentifier();
                    newValueSetIdentifier.Identifier = importVs.identifier;

                    if (importVs.identifier.StartsWith("http://") || importVs.identifier.StartsWith("https://"))
                    {
                        newValueSetIdentifier.Type = ValueSetIdentifierTypes.HTTP;
                    }
                    else if (importVs.identifier.StartsWith("urn:oid:"))
                    {
                        newValueSetIdentifier.Type = ValueSetIdentifierTypes.Oid;
                    }
                    else if (importVs.identifier.StartsWith("urn:hl7ii:"))
                    {
                        newValueSetIdentifier.Type = ValueSetIdentifierTypes.HL7II;
                    }
                    else
                    {
                        this.Errors.Add("Value set referenced by constraint has incorrect identifier (" + importVs.identifier + ")");
                        vsHasError = true;
                    }

                    if (!vsHasError)
                    {
                        newValueSet.Identifiers.Add(newValueSetIdentifier);
                        this.tdb.ValueSets.Add(newValueSet);
                        foundValueSets.Add(newValueSet);
                    }
                }

                if (vsHasError)
                {
                    return;
                }

                if (constraint.ValueSet != null && foundValueSets.Contains(constraint.ValueSet))
                {
                    return;
                }

                if (constraint.ValueSet != foundValueSets.First())
                {
                    constraint.ValueSet = foundValueSets.First();
                }
            }
        }
コード例 #8
0
        public void ImportValueSets(List <TrifoliaValueSet> models)
        {
            var codeSystems            = this.tdb.CodeSystems.ToList().Union(this.addedCodeSystems);
            var allValueSetIdentifiers = (from vs in this.tdb.ValueSets
                                          join vsi in this.tdb.ValueSetIdentifiers on vs.Id equals vsi.ValueSetId
                                          select vsi.Identifier).ToList();

            foreach (var model in models)
            {
                // Skip value sets that don't have an identifier
                if (model.Identifier.Count == 0)
                {
                    continue;
                }

                var foundIdentifiers = (from modelIdentifier in model.Identifier
                                        join valueSetIdentifier in allValueSetIdentifiers on modelIdentifier.value.Trim().ToLower() equals valueSetIdentifier.Trim().ToLower()
                                        select modelIdentifier.value);

                // Skip value sets that already exist
                if (foundIdentifiers.Count() > 0)
                {
                    continue;
                }

                ValueSet newValueSet = new ValueSet()
                {
                    Name                  = model.name,
                    Description           = model.Description,
                    IsIncomplete          = model.isIncomplete,
                    Source                = model.source,
                    Intensional           = model.intensional,
                    IntensionalDefinition = model.IntensionalDefinition,
                    LastUpdate            = DateTime.Now
                };

                // Add identifiers to the value set
                foreach (var modelIdentifier in model.Identifier)
                {
                    ValueSetIdentifier newValueSetIdentifier = new ValueSetIdentifier()
                    {
                        Identifier = modelIdentifier.value,
                        Type       = (ValueSetIdentifierTypes)Enum.Parse(typeof(ValueSetIdentifierTypes), modelIdentifier.type),
                        IsDefault  = modelIdentifier.value == model.defaultIdentifier || model.Identifier.Count == 1
                    };

                    newValueSet.Identifiers.Add(newValueSetIdentifier);
                }

                // Add members to the value set
                foreach (var modelMember in model.Member)
                {
                    DateTime statusDate = DateTime.Now;
                    DateTime.TryParse(modelMember.statusDate, out statusDate);

                    string     modelIdentifier = modelMember.codeSystemIdentifier;
                    CodeSystem codeSystem      = codeSystems.SingleOrDefault(y => y.Oid == modelIdentifier);

                    if (codeSystem == null)
                    {
                        continue;
                    }

                    ValueSetMember newMember = new ValueSetMember()
                    {
                        Code        = modelMember.code,
                        DisplayName = modelMember.displayName,
                        Status      = modelMember.status.ToString(),
                        StatusDate  = !string.IsNullOrEmpty(modelMember.statusDate) && modelMember.statusSpecified ? statusDate : (DateTime?)null,
                        CodeSystem  = codeSystem
                    };

                    newValueSet.Members.Add(newMember);
                }

                this.tdb.ValueSets.Add(newValueSet);
                this.addedValueSets.Add(newValueSet);
            }
        }