From 22b53d562854e12291a8409227f83739ba525b6c Mon Sep 17 00:00:00 2001 From: Rachit Shrivastava Date: Tue, 16 Jun 2026 17:36:56 -0700 Subject: [PATCH 1/3] Fixes #5394, and megred external PR --- .../Conformance/CapabilityStatementBuilder.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs b/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs index 55112633a6..e6c287f062 100644 --- a/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs +++ b/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs @@ -404,6 +404,21 @@ public async Task SyncProfilesAsync(CancellationTok public ITypedElement Build() { + // Remove resource entries with no interactions to ensure FHIR conformance. + // In STU3, CapabilityStatement.rest.resource.interaction has min cardinality 1, + // so resources without interactions (e.g. Parameters) must be excluded. + foreach (var restComponent in _statement.Rest) + { + var emptyResources = restComponent.Resource + .Where(r => r.Interaction == null || r.Interaction.Count == 0) + .ToList(); + + foreach (var resource in emptyResources) + { + restComponent.Resource.Remove(resource); + } + } + // To build a CapabilityStatement we use a custom JsonConverter that serializes // the ListedCapabilityStatement into a CapabilityStatement poco var json = JsonConvert.SerializeObject(_statement, new JsonSerializerSettings From 448d061769a71d28434a9d64637dfe0c41d389a9 Mon Sep 17 00:00:00 2001 From: Rachit Shrivastava Date: Wed, 17 Jun 2026 12:30:44 -0700 Subject: [PATCH 2/3] fixed the trailing spaces --- .../Features/Conformance/CapabilityStatementBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs b/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs index e6c287f062..6649b5169f 100644 --- a/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs +++ b/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs @@ -418,7 +418,7 @@ public ITypedElement Build() restComponent.Resource.Remove(resource); } } - + // To build a CapabilityStatement we use a custom JsonConverter that serializes // the ListedCapabilityStatement into a CapabilityStatement poco var json = JsonConvert.SerializeObject(_statement, new JsonSerializerSettings From 475f56ffa912babc94f5df3358240a394b0fcecf Mon Sep 17 00:00:00 2001 From: Rachit Shrivastava Date: Thu, 25 Jun 2026 14:18:35 -0700 Subject: [PATCH 3/3] added if statement to run only if it's Stu3 version --- .../Conformance/CapabilityStatementBuilder.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs b/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs index 6649b5169f..38ccd44711 100644 --- a/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs +++ b/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs @@ -407,15 +407,18 @@ public ITypedElement Build() // Remove resource entries with no interactions to ensure FHIR conformance. // In STU3, CapabilityStatement.rest.resource.interaction has min cardinality 1, // so resources without interactions (e.g. Parameters) must be excluded. - foreach (var restComponent in _statement.Rest) + if (_modelInfoProvider.Version == FhirSpecification.Stu3) { - var emptyResources = restComponent.Resource - .Where(r => r.Interaction == null || r.Interaction.Count == 0) - .ToList(); - - foreach (var resource in emptyResources) + foreach (var restComponent in _statement.Rest) { - restComponent.Resource.Remove(resource); + var emptyResources = restComponent.Resource + .Where(r => r.Interaction == null || r.Interaction.Count == 0) + .ToList(); + + foreach (var resource in emptyResources) + { + restComponent.Resource.Remove(resource); + } } }