diff --git a/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs b/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs index 55112633a6..38ccd44711 100644 --- a/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs +++ b/src/Microsoft.Health.Fhir.Core/Features/Conformance/CapabilityStatementBuilder.cs @@ -404,6 +404,24 @@ 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. + if (_modelInfoProvider.Version == FhirSpecification.Stu3) + { + 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