public void GivenStudyInstanceUid_WhenCreated_ThenCorrectIdentifierShouldBeCreated() { var identifier = ImagingStudyIdentifierUtility.CreateIdentifier("123"); Assert.NotNull(identifier); Assert.Equal("urn:dicom:uid", identifier.System); Assert.Equal("urn:oid:123", identifier.Value); }
/// <inheritdoc/> public async Task <FhirTransactionRequestEntry> BuildAsync(FhirTransactionContext context, CancellationToken cancellationToken) { EnsureArg.IsNotNull(context, nameof(context)); EnsureArg.IsNotNull(context.ChangeFeedEntry, nameof(context.ChangeFeedEntry)); EnsureArg.IsNotNull(context.Request, nameof(context.Request)); IResourceId patientId = context.Request.Patient.ResourceId; ChangeFeedEntry changeFeedEntry = context.ChangeFeedEntry; Identifier imagingStudyIdentifier = ImagingStudyIdentifierUtility.CreateIdentifier(changeFeedEntry.StudyInstanceUid); ImagingStudy existingImagingStudy = await _fhirService.RetrieveImagingStudyAsync(imagingStudyIdentifier, cancellationToken); ImagingStudy imagingStudy = (ImagingStudy)existingImagingStudy?.DeepCopy(); FhirTransactionRequestMode requestMode = FhirTransactionRequestMode.None; if (existingImagingStudy == null) { imagingStudy = new ImagingStudy() { Status = ImagingStudy.ImagingStudyStatus.Available, Subject = patientId.ToResourceReference(), }; imagingStudy.Identifier.Add(imagingStudyIdentifier); requestMode = FhirTransactionRequestMode.Create; } SynchronizeImagingStudyProperties(context, imagingStudy); if (requestMode != FhirTransactionRequestMode.Create && !existingImagingStudy.IsExactly(imagingStudy)) { requestMode = FhirTransactionRequestMode.Update; } Bundle.RequestComponent request = requestMode switch { FhirTransactionRequestMode.Create => ImagingStudyPipelineHelper.GenerateCreateRequest(imagingStudyIdentifier), FhirTransactionRequestMode.Update => ImagingStudyPipelineHelper.GenerateUpdateRequest(imagingStudy), _ => null, }; IResourceId resourceId = requestMode switch { FhirTransactionRequestMode.Create => new ClientResourceId(), _ => existingImagingStudy.ToServerResourceId(), }; return(new FhirTransactionRequestEntry( requestMode, request, resourceId, imagingStudy)); }
/// <inheritdoc/> public async Task <FhirTransactionRequestEntry> BuildAsync(FhirTransactionContext context, CancellationToken cancellationToken) { EnsureArg.IsNotNull(context, nameof(context)); EnsureArg.IsNotNull(context.ChangeFeedEntry, nameof(context.ChangeFeedEntry)); ChangeFeedEntry changeFeedEntry = context.ChangeFeedEntry; Identifier imagingStudyIdentifier = ImagingStudyIdentifierUtility.CreateIdentifier(changeFeedEntry.StudyInstanceUid); ImagingStudy imagingStudy = await _fhirService.RetrieveImagingStudyAsync(imagingStudyIdentifier, cancellationToken); // Returns null if imagingStudy does not exists for given studyInstanceUid if (imagingStudy == null) { return(null); } string imagingStudySource = imagingStudy.Meta.Source; ImagingStudy.SeriesComponent series = ImagingStudyPipelineHelper.GetSeriesWithinAStudy(changeFeedEntry.SeriesInstanceUid, imagingStudy.Series); ImagingStudy.InstanceComponent instance = ImagingStudyPipelineHelper.GetInstanceWithinASeries(changeFeedEntry.SopInstanceUid, series); // Return null if the given instance is not present in ImagingStudy if (instance == null) { return(null); } // Removes instance from series collection series.Instance.Remove(instance); // Removes series from ImagingStudy if its instance collection is empty if (series.Instance.Count == 0) { imagingStudy.Series.Remove(series); } if (imagingStudy.Series.Count == 0 && _dicomWebEndpoint.Equals(imagingStudySource, System.StringComparison.Ordinal)) { return(new FhirTransactionRequestEntry( FhirTransactionRequestMode.Delete, ImagingStudyPipelineHelper.GenerateDeleteRequest(imagingStudy), imagingStudy.ToServerResourceId(), imagingStudy)); } return(new FhirTransactionRequestEntry( FhirTransactionRequestMode.Update, ImagingStudyPipelineHelper.GenerateUpdateRequest(imagingStudy), imagingStudy.ToServerResourceId(), imagingStudy)); }
public static ImagingStudy ValidateImagingStudyUpdate(string studyInstanceUid, string patientResourceId, FhirTransactionRequestEntry entry) { Identifier expectedIdentifier = ImagingStudyIdentifierUtility.CreateIdentifier(studyInstanceUid); string expectedRequestUrl = $"ImagingStudy/{entry.Resource.Id}"; ValidateRequestEntryMinimumRequirementForWithChange(FhirTransactionRequestMode.Update, expectedRequestUrl, Bundle.HTTPVerb.PUT, actualEntry: entry); ImagingStudy updatedImagingStudy = Assert.IsType <ImagingStudy>(entry.Resource); Assert.Equal(ImagingStudy.ImagingStudyStatus.Available, updatedImagingStudy.Status); ValidateResourceReference(patientResourceId, updatedImagingStudy.Subject); Assert.Collection( updatedImagingStudy.Identifier, identifier => ValidateIdentifier("urn:dicom:uid", $"urn:oid:{studyInstanceUid}", identifier)); return(updatedImagingStudy); }
public static ImagingStudy CreateNewImagingStudy(string studyInstanceUid, List <string> seriesInstanceUidList, List <string> sopInstanceUidList, string patientResourceId, string source = "defaultSouce") { // Create a new ImagingStudy ImagingStudy study = new ImagingStudy { Id = "123", Status = ImagingStudy.ImagingStudyStatus.Available, Subject = new ResourceReference(patientResourceId), Meta = new Meta() { VersionId = "1", Source = source, }, }; foreach (string seriesInstanceUid in seriesInstanceUidList) { ImagingStudy.SeriesComponent series = new ImagingStudy.SeriesComponent() { Uid = seriesInstanceUid, }; foreach (string sopInstanceUid in sopInstanceUidList) { ImagingStudy.InstanceComponent instance = new ImagingStudy.InstanceComponent() { Uid = sopInstanceUid, }; series.Instance.Add(instance); } study.Series.Add(series); } study.Identifier.Add(ImagingStudyIdentifierUtility.CreateIdentifier(studyInstanceUid)); return(study); }
public static ImagingStudy ValidateImagingStudyUpdate(string studyInstanceUid, string patientResourceId, FhirTransactionRequestEntry entry, bool hasAccessionNumber = true) { Identifier expectedIdentifier = ImagingStudyIdentifierUtility.CreateIdentifier(studyInstanceUid); string expectedRequestUrl = $"ImagingStudy/{entry.Resource.Id}"; ValidateRequestEntryMinimumRequirementForWithChange(FhirTransactionRequestMode.Update, expectedRequestUrl, Bundle.HTTPVerb.PUT, actualEntry: entry); ImagingStudy updatedImagingStudy = Assert.IsType <ImagingStudy>(entry.Resource); Assert.Equal(ImagingStudy.ImagingStudyStatus.Available, updatedImagingStudy.Status); ValidateResourceReference(patientResourceId, updatedImagingStudy.Subject); Action <Identifier> studyIdValidaion = identifier => ValidateIdentifier("urn:dicom:uid", $"urn:oid:{studyInstanceUid}", identifier); Action <Identifier> accessionNumberValidation = identifier => ValidateAccessionNumber(null, FhirTransactionContextBuilder.DefaultAccessionNumber, identifier); Assert.Collection( updatedImagingStudy.Identifier, hasAccessionNumber ? new[] { studyIdValidaion, accessionNumberValidation } : new[] { studyIdValidaion }); return(updatedImagingStudy); }