private (Entities.ValueSet ValueSetFromRepo, Entities.ValueSetVersion ValueSetVersionFromRepo) GetValueSetEntities(string id, string vid) { Entities.ValueSet valueSetFromRepo = new Entities.ValueSet(); Entities.ValueSetVersion valueSetVersionFromRepo = new Entities.ValueSetVersion(); bool isIdValidGuid = Guid.TryParse(id, out Guid valueSetGuid); if (isIdValidGuid) { valueSetFromRepo = _valueSetRepository.GetValueSet(valueSetGuid); } else { valueSetFromRepo = _valueSetRepository.GetValueSet(id); } bool isVidValidGuid = Guid.TryParse(vid, out Guid valueSetVersionGuid); if (isVidValidGuid) { valueSetVersionFromRepo = _valueSetVersionRepository.GetValueSetVersion(valueSetVersionGuid); } else { ValueSetVersionPaginationParameters parameters = new ValueSetVersionPaginationParameters() { ValueSetCode = valueSetFromRepo.ValueSetCode, ValueSetOid = valueSetFromRepo.ValueSetOID, }; var valueSetVersionsFromRepo = _valueSetVersionRepository.GetValueSetVersions(parameters); if (vid.Equals("latest", StringComparison.OrdinalIgnoreCase)) { valueSetVersionFromRepo = valueSetVersionsFromRepo.OrderBy(v => v.ValueSetVersionNumber).LastOrDefault(); } else { bool success = int.TryParse(vid, out int vidInt); if (success) { valueSetVersionFromRepo = valueSetVersionsFromRepo.FirstOrDefault(v => v.ValueSetVersionNumber == vidInt); } else { throw new InvalidOperationException("vid must be a valid UUID, integer, or the string literal 'latest'"); } } } return(valueSetFromRepo, valueSetVersionFromRepo); }
private ValueSet BuildValueSet(Entities.ValueSetVersion valueSetVersionFromRepo, Entities.ValueSet valueSetFromRepo, bool includeConcepts = true) { var valueSet = new Hl7.Fhir.Model.ValueSet(); valueSet.Url = Url.Link( nameof(GetVersionedValueSetById), new { type = "ValueSet", id = valueSetFromRepo.ValueSetCode, vid = valueSetVersionFromRepo.ValueSetVersionNumber.ToString() }); valueSet.Identifier = new List <Identifier>() { new Identifier() { Use = Identifier.IdentifierUse.Official, Value = valueSetVersionFromRepo.ValueSetVersionID.ToString(), System = "urn:ietf:rfc:3986" }, new Identifier() { Use = Identifier.IdentifierUse.Secondary, Value = valueSetVersionFromRepo.ValueSetOID }, new Identifier() { Use = Identifier.IdentifierUse.Secondary, Value = valueSetVersionFromRepo.ValueSetCode } }; valueSet.Name = valueSetFromRepo.ValueSetCode; valueSet.Title = valueSetFromRepo.ValueSetName; valueSet.Description = new Markdown(valueSetFromRepo.DefinitionText); valueSet.Publisher = "PHIN_VADS"; valueSet.DateElement = new FhirDateTime(valueSetVersionFromRepo.StatusDate); valueSet.Version = valueSetVersionFromRepo.ValueSetVersionNumber.ToString(); valueSet.VersionId = valueSetVersionFromRepo.ValueSetVersionID.ToString(); valueSet.Status = PublicationStatus.Active; if (includeConcepts) { valueSet.Expansion = new ValueSet.ExpansionComponent() { Identifier = Guid.NewGuid().ToString(), TimestampElement = new FhirDateTime(DateTimeOffset.Now), Contains = new List <ValueSet.ContainsComponent>() }; var paginationParameters = new ValueSetConceptPaginationParameters() { ValueSetVersionId = valueSetVersionFromRepo.ValueSetVersionID, ValueSetVersionNumber = valueSetVersionFromRepo.ValueSetVersionNumber.ToString(), PageSize = 1000 }; var valueSetConceptEntities = _valueSetConceptRepository.GetValueSetConcepts(paginationParameters); foreach (var conceptFromRepo in valueSetConceptEntities) { var component = new ValueSet.ContainsComponent() { Code = conceptFromRepo.ConceptCode, Display = conceptFromRepo.CDCPreferredDesignation, System = $"urn:oid:{conceptFromRepo.CodeSystemOID}", Extension = new List <Extension>() { new Extension() { Value = new FhirString(conceptFromRepo.HL70396Identifier) } } }; valueSet.Expansion.Contains.Add(component); } valueSet.Expansion.Total = valueSet.Expansion.Contains.Count; valueSet.Expansion.Offset = (paginationParameters.PageNumber - 1) * paginationParameters.PageSize; } return(valueSet); }