diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 00000000000..fdc88b60fe4
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Getting Help / Community
+ url: https://github.com/jamesagnew/hapi-fhir/wiki/Getting-Help
+ about: Please click here to learn about where to ask questions about HAPI FHIR
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/context/ModelScanner.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/context/ModelScanner.java
index 31e54b50006..11e66968879 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/context/ModelScanner.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/context/ModelScanner.java
@@ -184,9 +184,7 @@ class ModelScanner {
}
}
- if (blockDefinition == null
-//Redundant checking && datatypeDefinition == null && resourceDefinition == null
- ) {
+ if (blockDefinition == null) {
throw new ConfigurationException("Resource class[" + theClass.getName() + "] does not contain any valid HAPI-FHIR annotations");
}
}
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/near-chain.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1-near-chain.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/near-chain.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1-near-chain.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1499-dont-touch-timezones-on-date-search.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1499-dont-touch-timezones-on-date-search.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1499-dont-touch-timezones-on-date-search.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1499-dont-touch-timezones-on-date-search.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1693-forcedid-circular-dependency.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1693-forcedid-circular-dependency.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1693-forcedid-circular-dependency.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1693-forcedid-circular-dependency.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1698-remove-search-last-used-column.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1698-remove-search-last-used-column.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1698-remove-search-last-used-column.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1698-remove-search-last-used-column.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1702-includes-perf-fix.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1702-includes-perf-fix.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1702-includes-perf-fix.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1702-includes-perf-fix.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1710-baseorlistparam-visibility.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1710-baseorlistparam-visibility.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1710-baseorlistparam-visibility.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1710-baseorlistparam-visibility.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1715-update-converters.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1715-update-converters.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1715-update-converters.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1715-update-converters.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1717-avoid-multiterm-in-es.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1717-avoid-multiterm-in-es.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1717-avoid-multiterm-in-es.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1717-avoid-multiterm-in-es.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1721-dont-thrash-delta-links.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1721-dont-thrash-delta-links.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1721-dont-thrash-delta-links.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1721-dont-thrash-delta-links.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1726-collapse-date-joins.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1726-collapse-date-joins.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1726-collapse-date-joins.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1726-collapse-date-joins.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1728-index-canonical.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1728-index-canonical.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1728-index-canonical.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1728-index-canonical.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1732-remove-deleted-from-results.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1732-remove-deleted-from-results.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1732-remove-deleted-from-results.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1732-remove-deleted-from-results.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1734-fix-pointcut.javadoc.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1734-fix-pointcut.javadoc.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1734-fix-pointcut.javadoc.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1734-fix-pointcut.javadoc.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1736-defer-large-terminology-delta-adds.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1736-defer-large-terminology-delta-adds.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1736-defer-large-terminology-delta-adds.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1736-defer-large-terminology-delta-adds.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1742-error-on-missing-profile-validation.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1742-error-on-missing-profile-validation.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1742-error-on-missing-profile-validation.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1742-error-on-missing-profile-validation.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1742-limit-type-on-has.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1742-limit-type-on-has.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1742-limit-type-on-has.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1742-limit-type-on-has.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1742-terminology-delta-defer.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1742-terminology-delta-defer.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1742-terminology-delta-defer.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1742-terminology-delta-defer.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1749-add-constructor-to-restfulserver.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1749-add-constructor-to-restfulserver.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1749-add-constructor-to-restfulserver.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1749-add-constructor-to-restfulserver.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1759-efficiency-in-search-deleting.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1759-efficiency-in-search-deleting.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1759-efficiency-in-search-deleting.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1759-efficiency-in-search-deleting.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1760-support-chained-parameters-in-has.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1760-support-chained-parameters-in-has.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1760-support-chained-parameters-in-has.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1760-support-chained-parameters-in-has.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1761-avoid-duplicate_restype.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1761-avoid-duplicate_restype.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1761-avoid-duplicate_restype.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1761-avoid-duplicate_restype.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1763-include_bundletype-in-count.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1763-include_bundletype-in-count.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1763-include_bundletype-in-count.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1763-include_bundletype-in-count.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1769-add-fhirpath-interceptor.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1769-add-fhirpath-interceptor.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1769-add-fhirpath-interceptor.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1769-add-fhirpath-interceptor.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1770-fix-contained_resource_mixup.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1770-fix-contained_resource_mixup.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1770-fix-contained_resource_mixup.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1770-fix-contained_resource_mixup.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1772-allow-chain-on-type.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1772-allow-chain-on-type.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1772-allow-chain-on-type.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1772-allow-chain-on-type.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1774-reject-invalid-params-on-read.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1774-reject-invalid-params-on-read.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1774-reject-invalid-params-on-read.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1774-reject-invalid-params-on-read.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1776-response-size-capturing-interceptor.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1776-response-size-capturing-interceptor.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1776-response-size-capturing-interceptor.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1776-response-size-capturing-interceptor.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1778-avoid-crash-encoding-contained-bundle.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1778-avoid-crash-encoding-contained-bundle.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1778-avoid-crash-encoding-contained-bundle.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1778-avoid-crash-encoding-contained-bundle.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1783-add-client-to-client-pointcuts.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1783-add-client-to-client-pointcuts.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1783-add-client-to-client-pointcuts.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1783-add-client-to-client-pointcuts.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1783-add-client-urltenantselectioninterceptor.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1783-add-client-urltenantselectioninterceptor.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1783-add-client-urltenantselectioninterceptor.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1783-add-client-urltenantselectioninterceptor.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1783-error-on-overriding-default-searchparams.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1783-error-on-overriding-default-searchparams.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1783-error-on-overriding-default-searchparams.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1783-error-on-overriding-default-searchparams.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1783-fail-if-overriding-sps-is-disabled.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1783-fail-if-overriding-sps-is-disabled.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1783-fail-if-overriding-sps-is-disabled.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1783-fail-if-overriding-sps-is-disabled.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1788-improve-apacheproxyaddressstrategy.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1788-improve-apacheproxyaddressstrategy.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1788-improve-apacheproxyaddressstrategy.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1788-improve-apacheproxyaddressstrategy.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1791-fix-graphql-argument-error.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1791-fix-graphql-argument-error.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1791-fix-graphql-argument-error.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1791-fix-graphql-argument-error.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1793-report-attr-name-in-json-parse-errors.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1793-report-attr-name-in-json-parse-errors.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1793-report-attr-name-in-json-parse-errors.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1793-report-attr-name-in-json-parse-errors.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1794-allow-client-id-none-server-id-uuid.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1794-allow-client-id-none-server-id-uuid.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1794-allow-client-id-none-server-id-uuid.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1794-allow-client-id-none-server-id-uuid.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1797-add-currency-validation.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1797-add-currency-validation.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1797-add-currency-validation.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1797-add-currency-validation.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1798-add-millis-methods-to-client.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1798-add-millis-methods-to-client.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1798-add-millis-methods-to-client.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1798-add-millis-methods-to-client.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1801-allow-parsing-contained-in-jpa.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1801-allow-parsing-contained-in-jpa.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1801-allow-parsing-contained-in-jpa.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1801-allow-parsing-contained-in-jpa.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1801-handle-persisted-leading-decimals.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1801-handle-persisted-leading-decimals.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1801-handle-persisted-leading-decimals.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1801-handle-persisted-leading-decimals.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1802-improve-search-binding-method-priority.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1802-improve-search-binding-method-priority.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1802-improve-search-binding-method-priority.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1802-improve-search-binding-method-priority.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1804-add-cascading-delete-to-client.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1804-add-cascading-delete-to-client.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1804-add-cascading-delete-to-client.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1804-add-cascading-delete-to-client.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1806-fix-aws-managed-elasticsearch.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1806-fix-aws-managed-elasticsearch.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1806-fix-aws-managed-elasticsearch.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1806-fix-aws-managed-elasticsearch.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1810-improve-tespage-warning-text.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1810-improve-tespage-warning-text.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1810-improve-tespage-warning-text.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1810-improve-tespage-warning-text.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1812-account-for-jaxrs-super-methodss.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1812-account-for-jaxrs-super-methodss.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1812-account-for-jaxrs-super-methodss.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1812-account-for-jaxrs-super-methodss.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1813-reduce-history-sql-operations.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1813-reduce-history-sql-operations.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1813-reduce-history-sql-operations.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1813-reduce-history-sql-operations.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1824-add-ucum-support.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1824-add-ucum-support.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1824-add-ucum-support.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1824-add-ucum-support.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1829-scope-tag-search-to-correct-resource-type.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1829-scope-tag-search-to-correct-resource-type.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1829-scope-tag-search-to-correct-resource-type.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1829-scope-tag-search-to-correct-resource-type.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1831-allow-disabling-text-modifier.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1831-allow-disabling-text-modifier.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1831-allow-disabling-text-modifier.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1831-allow-disabling-text-modifier.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1836-binary-storage-for-bulk-export.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1836-binary-storage-for-bulk-export.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1836-binary-storage-for-bulk-export.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1836-binary-storage-for-bulk-export.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1837-bump-r4-defs-to-401.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1837-bump-r4-defs-to-401.yaml
similarity index 100%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/1837-bump-r4-defs-to-401.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/1837-bump-r4-defs-to-401.yaml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/changes.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/changes.yaml
similarity index 94%
rename from hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/changes.yaml
rename to hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/changes.yaml
index 3312c252d35..0f8a09c5ead 100644
--- a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/4_3_0/changes.yaml
+++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_0_0/changes.yaml
@@ -64,3 +64,9 @@
feature allows data to be segregated using a user defined partitioning strategy. This can be leveraged to take
advantags of native RDBMS partition strategies, and also to implement **multitenant servers**.
"
+- item:
+ issue: "1841"
+ type: "change"
+ title: "**Breaking Change**:
+ The FHIR R5 draft definitions have been updated to the current 'Preview 2' definitions (FHIR 4.4.0).
+ "
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/introduction/versions.md b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/introduction/versions.md
index 1f063820f7b..7abd4ea5e26 100644
--- a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/introduction/versions.md
+++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/introduction/versions.md
@@ -25,6 +25,16 @@ Note also that after the release of the FHIR DSTU2 specification, the FHIR
+
+ HAPI FHIR 5.0.0 |
+ JDK8 |
+ |
+ 1.0.2 |
+ 1.4.0 |
+ 3.0.2 |
+ 4.0.1 |
+ 4.4.0 56b0acf73f |
+
HAPI FHIR 4.2.0 |
JDK8 |
diff --git a/hapi-fhir-jaxrsserver-base/src/test/java/ca/uhn/fhir/jaxrs/server/AbstractJaxRsConformanceProviderR4Test.java b/hapi-fhir-jaxrsserver-base/src/test/java/ca/uhn/fhir/jaxrs/server/AbstractJaxRsConformanceProviderR4Test.java
index 8e4fda5ec47..f7acd0f6daa 100644
--- a/hapi-fhir-jaxrsserver-base/src/test/java/ca/uhn/fhir/jaxrs/server/AbstractJaxRsConformanceProviderR4Test.java
+++ b/hapi-fhir-jaxrsserver-base/src/test/java/ca/uhn/fhir/jaxrs/server/AbstractJaxRsConformanceProviderR4Test.java
@@ -39,7 +39,7 @@ public class AbstractJaxRsConformanceProviderR4Test {
headers = new ResteasyHttpHeaders(queryParameters);
- providers = new ConcurrentHashMap, IResourceProvider>();
+ providers = new ConcurrentHashMap<>();
provider = createConformanceProvider(providers);
}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ValidateTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ValidateTest.java
index 43dc7be6559..571c8b9c206 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ValidateTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ValidateTest.java
@@ -109,25 +109,25 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test {
obs.getText().setStatus(Narrative.NarrativeStatus.GENERATED);
obs.getCode().getCodingFirstRep().setSystem("http://loinc.org").setCode("non-existing-code").setDisplay("Display 3");
oo = validateAndReturnOutcome(obs);
- assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult, and a code from this value set is required) (codes = http://loinc.org#non-existing-code)", oo.getIssueFirstRep().getDiagnostics());
+ assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult), and a code from this value set is required) (codes = http://loinc.org#non-existing-code)", oo.getIssueFirstRep().getDiagnostics());
// Valid code with no system
obs.getText().setStatus(Narrative.NarrativeStatus.GENERATED);
obs.getCode().getCodingFirstRep().setSystem(null).setCode("CODE3").setDisplay("Display 3");
oo = validateAndReturnOutcome(obs);
- assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult, and a code from this value set is required) (codes = null#CODE3)", oo.getIssueFirstRep().getDiagnostics());
+ assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult), and a code from this value set is required) (codes = null#CODE3)", oo.getIssueFirstRep().getDiagnostics());
// Valid code with wrong system
obs.getText().setStatus(Narrative.NarrativeStatus.GENERATED);
obs.getCode().getCodingFirstRep().setSystem("http://foo").setCode("CODE3").setDisplay("Display 3");
oo = validateAndReturnOutcome(obs);
- assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult, and a code from this value set is required) (codes = http://foo#CODE3)", oo.getIssueFirstRep().getDiagnostics());
+ assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult), and a code from this value set is required) (codes = http://foo#CODE3)", oo.getIssueFirstRep().getDiagnostics());
// Code that exists but isn't in the valueset
obs.getText().setStatus(Narrative.NarrativeStatus.GENERATED);
obs.getCode().getCodingFirstRep().setSystem("http://terminology.hl7.org/CodeSystem/observation-category").setCode("vital-signs").setDisplay("Display 3");
oo = validateAndReturnOutcome(obs);
- assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult, and a code from this value set is required) (codes = http://terminology.hl7.org/CodeSystem/observation-category#vital-signs)", oo.getIssueFirstRep().getDiagnostics());
+ assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult), and a code from this value set is required) (codes = http://terminology.hl7.org/CodeSystem/observation-category#vital-signs)", oo.getIssueFirstRep().getDiagnostics());
// Invalid code in built-in VS/CS
obs.getText().setStatus(Narrative.NarrativeStatus.GENERATED);
@@ -192,25 +192,25 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test {
obs.getText().setStatus(Narrative.NarrativeStatus.GENERATED);
obs.getCode().getCodingFirstRep().setSystem("http://loinc.org").setCode("non-existing-code").setDisplay("Display 3");
oo = validateAndReturnOutcome(obs);
- assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult, and a code from this value set is required) (codes = http://loinc.org#non-existing-code)", oo.getIssueFirstRep().getDiagnostics());
+ assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult), and a code from this value set is required) (codes = http://loinc.org#non-existing-code)", oo.getIssueFirstRep().getDiagnostics());
// Valid code with no system
obs.getText().setStatus(Narrative.NarrativeStatus.GENERATED);
obs.getCode().getCodingFirstRep().setSystem(null).setCode("CODE3").setDisplay("Display 3");
oo = validateAndReturnOutcome(obs);
- assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult, and a code from this value set is required) (codes = null#CODE3)", oo.getIssueFirstRep().getDiagnostics());
+ assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult), and a code from this value set is required) (codes = null#CODE3)", oo.getIssueFirstRep().getDiagnostics());
// Valid code with wrong system
obs.getText().setStatus(Narrative.NarrativeStatus.GENERATED);
obs.getCode().getCodingFirstRep().setSystem("http://foo").setCode("CODE3").setDisplay("Display 3");
oo = validateAndReturnOutcome(obs);
- assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult, and a code from this value set is required) (codes = http://foo#CODE3)", oo.getIssueFirstRep().getDiagnostics());
+ assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult), and a code from this value set is required) (codes = http://foo#CODE3)", oo.getIssueFirstRep().getDiagnostics());
// Code that exists but isn't in the valueset
obs.getText().setStatus(Narrative.NarrativeStatus.GENERATED);
obs.getCode().getCodingFirstRep().setSystem("http://terminology.hl7.org/CodeSystem/observation-category").setCode("vital-signs").setDisplay("Display 3");
oo = validateAndReturnOutcome(obs);
- assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult, and a code from this value set is required) (codes = http://terminology.hl7.org/CodeSystem/observation-category#vital-signs)", oo.getIssueFirstRep().getDiagnostics());
+ assertEquals(encode(oo), "None of the codes provided are in the value set http://example.com/fhir/ValueSet/observation-vitalsignresult (http://example.com/fhir/ValueSet/observation-vitalsignresult), and a code from this value set is required) (codes = http://terminology.hl7.org/CodeSystem/observation-category#vital-signs)", oo.getIssueFirstRep().getDiagnostics());
// Invalid code in built-in VS/CS
obs.getText().setStatus(Narrative.NarrativeStatus.GENERATED);
@@ -346,7 +346,7 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test {
// It would be ok for this to produce 0 issues, or just an information message too
assertEquals(1, OperationOutcomeUtil.getIssueCount(myFhirCtx, oo));
- assertEquals("None of the codes provided are in the value set http://hl7.org/fhir/ValueSet/identifier-type (http://hl7.org/fhir/ValueSet/identifier-type, and a code should come from this value set unless it has no suitable code) (codes = http://foo#bar)", OperationOutcomeUtil.getFirstIssueDetails(myFhirCtx, oo));
+ assertEquals("None of the codes provided are in the value set http://hl7.org/fhir/ValueSet/identifier-type (http://hl7.org/fhir/ValueSet/identifier-type), and a code should come from this value set unless it has no suitable code) (codes = http://foo#bar)", OperationOutcomeUtil.getFirstIssueDetails(myFhirCtx, oo));
}
@@ -744,7 +744,7 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test {
fail("Didn't fail- response was " + encode);
} catch (PreconditionFailedException e) {
OperationOutcome oo = (OperationOutcome) e.getOperationOutcome();
- assertEquals("No response found for required item with id = 'link0'", oo.getIssueFirstRep().getDiagnostics());
+ assertEquals("No response answer found for required item \"link0\"", oo.getIssueFirstRep().getDiagnostics());
}
}
@@ -762,7 +762,7 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test {
QuestionnaireResponse qa = new QuestionnaireResponse();
qa.getText().setStatus(Narrative.NarrativeStatus.GENERATED).setDivAsString("aaa
");
qa.setStatus(QuestionnaireResponse.QuestionnaireResponseStatus.COMPLETED);
- qa.getQuestionnaireElement().setValue("Questionnaire/q");
+ qa.getQuestionnaireElement().setValue("http://foo/q");
qa.addItem().setLinkId("link1").addAnswer().setValue(new StringType("FOO"));
try {
@@ -773,7 +773,7 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test {
fail("Didn't fail- response was " + encode);
} catch (PreconditionFailedException e) {
OperationOutcome oo = (OperationOutcome) e.getOperationOutcome();
- assertEquals("No response found for required item with id = 'link0'", oo.getIssueFirstRep().getDiagnostics());
+ assertEquals("No response answer found for required item \"link0\"", oo.getIssueFirstRep().getDiagnostics());
}
}
@@ -791,12 +791,16 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test {
QuestionnaireResponse qa = new QuestionnaireResponse();
qa.getText().setStatus(Narrative.NarrativeStatus.GENERATED).setDivAsString("aaa
");
qa.setStatus(QuestionnaireResponse.QuestionnaireResponseStatus.COMPLETED);
- qa.getQuestionnaireElement().setValue("Questionnaire/DOES_NOT_EXIST");
+ qa.getQuestionnaireElement().setValue("http://foo/Questionnaire/DOES_NOT_EXIST");
qa.addItem().setLinkId("link1").addAnswer().setValue(new StringType("FOO"));
- MethodOutcome validationOutcome = myQuestionnaireResponseDao.validate(qa, null, null, null, null, null, null);
- OperationOutcome oo = (OperationOutcome) validationOutcome.getOperationOutcome();
- assertEquals("The questionnaire \"Questionnaire/DOES_NOT_EXIST\" could not be resolved, so no validation can be performed against the base questionnaire", oo.getIssueFirstRep().getDiagnostics());
+ try {
+ MethodOutcome validationOutcome = myQuestionnaireResponseDao.validate(qa, null, null, null, null, null, null);
+ OperationOutcome oo = (OperationOutcome) validationOutcome.getOperationOutcome();
+ assertEquals("The questionnaire \"http://foo/Questionnaire/DOES_NOT_EXIST\" could not be resolved, so no validation can be performed against the base questionnaire", oo.getIssueFirstRep().getDiagnostics());
+ } catch (PreconditionFailedException e) {
+ fail(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome()));
+ }
}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r5/BaseJpaR5Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r5/BaseJpaR5Test.java
index b141527cd6d..40d3bf82f7c 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r5/BaseJpaR5Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r5/BaseJpaR5Test.java
@@ -505,13 +505,13 @@ public abstract class BaseJpaR5Test extends BaseJpaTest {
target = element.addTarget();
target.setCode("45678");
target.setDisplay("Target Code 45678");
- target.setRelationship(Enumerations.ConceptMapRelationship.BROADER);
+ target.setRelationship(Enumerations.ConceptMapRelationship.SOURCEISBROADERTHANTARGET);
// Add a duplicate
target = element.addTarget();
target.setCode("45678");
target.setDisplay("Target Code 45678");
- target.setRelationship(Enumerations.ConceptMapRelationship.BROADER);
+ target.setRelationship(Enumerations.ConceptMapRelationship.SOURCEISBROADERTHANTARGET);
group = conceptMap.addGroup();
group.setSource(CS_URL);
@@ -531,7 +531,7 @@ public abstract class BaseJpaR5Test extends BaseJpaTest {
target = element.addTarget();
target.setCode("67890");
target.setDisplay("Target Code 67890");
- target.setRelationship(Enumerations.ConceptMapRelationship.BROADER);
+ target.setRelationship(Enumerations.ConceptMapRelationship.SOURCEISBROADERTHANTARGET);
group = conceptMap.addGroup();
group.setSource(CS_URL_4);
@@ -546,7 +546,7 @@ public abstract class BaseJpaR5Test extends BaseJpaTest {
target = element.addTarget();
target.setCode("34567");
target.setDisplay("Target Code 34567");
- target.setRelationship(Enumerations.ConceptMapRelationship.NARROWER);
+ target.setRelationship(Enumerations.ConceptMapRelationship.SOURCEISNARROWERTHANTARGET);
return conceptMap;
}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionsR5Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionsR5Test.java
index f6c838ff9c1..ae6e52d386e 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionsR5Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionsR5Test.java
@@ -30,7 +30,7 @@ import org.hl7.fhir.r5.model.Enumerations;
import org.hl7.fhir.r5.model.IdType;
import org.hl7.fhir.r5.model.Observation;
import org.hl7.fhir.r5.model.Subscription;
-import org.hl7.fhir.r5.model.Topic;
+import org.hl7.fhir.r5.model.SubscriptionTopic;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@@ -133,20 +133,19 @@ public abstract class BaseSubscriptionsR5Test extends BaseResourceProviderR5Test
}
protected Subscription newSubscription(String theCriteria, String thePayload) {
- Topic topic = new Topic();
+ SubscriptionTopic topic = new SubscriptionTopic();
topic.getResourceTrigger().getQueryCriteria().setCurrent(theCriteria);
Subscription subscription = new Subscription();
subscription.getTopic().setResource(topic);
subscription.setReason("Monitor new neonatal function (note, age will be determined by the monitor)");
- subscription.setStatus(Subscription.SubscriptionStatus.REQUESTED);
+ subscription.setStatus(Enumerations.SubscriptionState.REQUESTED);
- Subscription.SubscriptionChannelComponent channel = subscription.getChannel();
- channel.getType().addCoding()
+ subscription.getChannelType()
.setSystem(CanonicalSubscriptionChannelType.RESTHOOK.getSystem())
.setCode(CanonicalSubscriptionChannelType.RESTHOOK.toCode());
- channel.getPayload().setContentType(thePayload);
- channel.setEndpoint(ourListenerServerBase);
+ subscription.setContentType(thePayload);
+ subscription.setEndpoint(ourListenerServerBase);
return subscription;
}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/resthook/RestHookTestR5Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/resthook/RestHookTestR5Test.java
index 8e6d2ac20d7..5ea4fa1271f 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/resthook/RestHookTestR5Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/resthook/RestHookTestR5Test.java
@@ -299,7 +299,6 @@ public class RestHookTestR5Test extends BaseSubscriptionsR5Test {
assertEquals(observation1.getIdElement().getVersionIdPart(), idElement.getVersionIdPart());
subscription1
- .getChannel()
.addExtension(JpaConstants.EXT_SUBSCRIPTION_RESTHOOK_STRIP_VERSION_IDS, new BooleanType("true"));
ourLog.info("** About to update subscription");
@@ -376,7 +375,6 @@ public class RestHookTestR5Test extends BaseSubscriptionsR5Test {
Subscription subscription = newSubscription(criteria1, payload);
subscription
- .getChannel()
.addExtension(JpaConstants.EXT_SUBSCRIPTION_RESTHOOK_DELIVER_LATEST_VERSION, new BooleanType("true"));
ourClient.create().resource(subscription).execute();
@@ -439,7 +437,7 @@ public class RestHookTestR5Test extends BaseSubscriptionsR5Test {
Subscription subscriptionTemp = ourClient.read(Subscription.class, subscription2.getId());
Assert.assertNotNull(subscriptionTemp);
- Topic topic = (Topic) subscriptionTemp.getTopic().getResource();
+ SubscriptionTopic topic = (SubscriptionTopic) subscriptionTemp.getTopic().getResource();
topic.getResourceTrigger().getQueryCriteria().setCurrent(criteria1);
ourClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
@@ -521,7 +519,7 @@ public class RestHookTestR5Test extends BaseSubscriptionsR5Test {
Subscription subscriptionTemp = ourClient.read(Subscription.class, subscription2.getId());
Assert.assertNotNull(subscriptionTemp);
- Topic topic = (Topic) subscriptionTemp.getTopic().getResource();
+ SubscriptionTopic topic = (SubscriptionTopic) subscriptionTemp.getTopic().getResource();
topic.getResourceTrigger().getQueryCriteria().setCurrent(criteria1);
ourClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
@@ -599,7 +597,7 @@ public class RestHookTestR5Test extends BaseSubscriptionsR5Test {
Subscription subscriptionTemp = ourClient.read(Subscription.class, subscription2.getId());
Assert.assertNotNull(subscriptionTemp);
- Topic topic = (Topic) subscriptionTemp.getTopic().getResource();
+ SubscriptionTopic topic = (SubscriptionTopic) subscriptionTemp.getTopic().getResource();
topic.getResourceTrigger().getQueryCriteria().setCurrent(criteria1);
ourClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
waitForQueueToDrain();
@@ -727,7 +725,7 @@ public class RestHookTestR5Test extends BaseSubscriptionsR5Test {
Assert.assertNotNull(subscriptionTemp);
String criteriaGood = "Observation?code=SNOMED-CT|" + code + "&_format=xml";
- Topic topic = (Topic) subscriptionTemp.getTopic().getResource();
+ SubscriptionTopic topic = (SubscriptionTopic) subscriptionTemp.getTopic().getResource();
topic.getResourceTrigger().getQueryCriteria().setCurrent(criteriaGood);
ourLog.info("** About to update subscription");
@@ -797,9 +795,9 @@ public class RestHookTestR5Test extends BaseSubscriptionsR5Test {
Subscription subscription = createSubscription(criteria1, payload);
waitForActivatedSubscriptionCount(1);
- subscription.getChannel().addHeader("X-Foo: FOO");
- subscription.getChannel().addHeader("X-Bar: BAR");
- subscription.setStatus(Subscription.SubscriptionStatus.REQUESTED);
+ subscription.addHeader("X-Foo: FOO");
+ subscription.addHeader("X-Bar: BAR");
+ subscription.setStatus(Enumerations.SubscriptionState.REQUESTED);
ourClient.update().resource(subscription).execute();
waitForQueueToDrain();
@@ -832,7 +830,7 @@ public class RestHookTestR5Test extends BaseSubscriptionsR5Test {
waitForSize(1, ourUpdatedObservations);
// Disable
- subscription.setStatus(Subscription.SubscriptionStatus.OFF);
+ subscription.setStatus(Enumerations.SubscriptionState.OFF);
ourClient.update().resource(subscription).execute();
waitForQueueToDrain();
diff --git a/hapi-fhir-jpaserver-base/src/test/resources/dstu3/fmc03-questionnaireresponse.json b/hapi-fhir-jpaserver-base/src/test/resources/dstu3/fmc03-questionnaireresponse.json
index 1477dcbd2d2..5d4fb58dd90 100644
--- a/hapi-fhir-jpaserver-base/src/test/resources/dstu3/fmc03-questionnaireresponse.json
+++ b/hapi-fhir-jpaserver-base/src/test/resources/dstu3/fmc03-questionnaireresponse.json
@@ -18,129 +18,126 @@
"author": {
"reference": "Practitioner/PRLoginID"
},
- "item": [{
- "linkId": "Binder Optimization Assessment Test",
- "text": "Binder Optimization Assessment Test",
- "item": [{
- "linkId": "BINDER OPTIMIZATION ASSESSMENT TEST",
- "text": "BINDER OPTIMIZATION ASSESSMENT TEST",
- "item": [{
- "linkId": "Home Medications",
- "text": "Home Medications",
- "item": [{
- "linkId": "BO_ConsPharm",
- "text": "Pharmacist consult",
- "answer": [{
- "valueCoding": {
- "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
- "code": "Yes",
- "display": "Yes"
- }
- }]
- },
- {
- "linkId": "BO_ConsTxt",
- "text": "Pharmacy consult notes",
- "answer": [{
- "valueString": "Pharmacy consult notes comes here"
- }]
- },
- {
- "linkId": "BO_RecNotCons",
- "text": "Recommendation not consistent with binder optimization guidelines",
- "answer": [{
- "valueCoding": {
- "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
- "code": "Yes",
- "display": "Yes"
- }
- }],
- "item": [{
- "linkId": "BO_NotConsDrop",
- "text": "Recommendation not consistent with binder optimization guidelines",
- "answer": [{
- "valueString": "Chewing difficulty,Other"
- }],
- "item": [{
- "linkId": "BO_OtherTxt",
- "text": "Other",
- "answer": [{
- "valueString": "Other difficulty"
- }]
- }]
- },
- {
- "linkId": "BO_Recommend",
- "text": "What is your recommendation",
- "answer": [{
- "valueCoding": {
- "system": "http://fkcfhir.org/fhir/cs/FMCBinderRecommendation",
- "code": "Renvela",
- "display": "Renvela"
- }
- }]
- }
- ]
- }
- ]
- },
+ "item": [
+ {
+ "linkId": "Binder Optimization Assessment Test",
+ "text": "Binder Optimization Assessment Test",
+ "item": [
{
- "linkId": "Plan",
- "text": "Plan",
- "item": [{
- "linkId": "BO_CommPres",
- "text": "Binder recommendation communicated to prescriber",
- "answer": [{
- "valueCoding": {
- "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
- "code": "No",
- "display": "No"
- }
- }]
- },
+ "linkId": "BINDER OPTIMIZATION ASSESSMENT TEST",
+ "text": "BINDER OPTIMIZATION ASSESSMENT TEST",
+ "item": [
{
- "linkId": "BO_ComAssmt",
- "text": "Referred to MSW for expressed co-pay concerns",
- "answer": [{
- "valueCoding": {
- "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
- "code": "No",
- "display": "No"
+ "linkId": "Home Medications",
+ "text": "Home Medications",
+ "item": [
+ {
+ "linkId": "BO_ConsPharm",
+ "text": "Pharmacist consult",
+ "answer": [
+ {
+ "valueCoding": {
+ "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
+ "code": "Yes",
+ "display": "Yes"
+ }
+ }
+ ]
+ },
+ {
+ "linkId": "BO_ConsTxt",
+ "text": "Pharmacy consult notes",
+ "answer": [
+ {
+ "valueString": "Pharmacy consult notes comes here"
+ }
+ ]
+ },
+ {
+ "linkId": "BO_RecNotCons",
+ "text": "Recommendation not consistent with binder optimization guidelines",
+ "answer": [
+ {
+ "valueCoding": {
+ "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
+ "code": "Yes",
+ "display": "Yes"
+ }
+ }
+ ]
}
- }]
+ ]
},
{
- "linkId": "BO_RefMSW",
- "text": "Referred to MSW for potential medication adherence issues",
- "answer": [{
- "valueCoding": {
- "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
- "code": "No",
- "display": "No"
+ "linkId": "Plan",
+ "text": "Plan",
+ "item": [
+ {
+ "linkId": "BO_CommPres",
+ "text": "Binder recommendation communicated to prescriber",
+ "answer": [
+ {
+ "valueCoding": {
+ "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
+ "code": "No",
+ "display": "No"
+ }
+ }
+ ]
+ },
+ {
+ "linkId": "BO_ComAssmt",
+ "text": "Referred to MSW for expressed co-pay concerns",
+ "answer": [
+ {
+ "valueCoding": {
+ "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
+ "code": "No",
+ "display": "No"
+ }
+ }
+ ]
+ },
+ {
+ "linkId": "BO_RefMSW",
+ "text": "Referred to MSW for potential medication adherence issues",
+ "answer": [
+ {
+ "valueCoding": {
+ "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
+ "code": "No",
+ "display": "No"
+ }
+ }
+ ]
+ },
+ {
+ "linkId": "BO_AdjHyp",
+ "text": "Continue adjustments per CMAB Hyperphosphatemia Algorithm",
+ "answer": [
+ {
+ "valueCoding": {
+ "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
+ "code": "No",
+ "display": "No"
+ }
+ }
+ ]
+ },
+ {
+ "linkId": "BO_AdjTxt",
+ "text": "Adjustment Text",
+ "answer": [
+ {
+ "valueString": "Adjustment Text comes here"
+ }
+ ]
}
- }]
- },
- {
- "linkId": "BO_AdjHyp",
- "text": "Continue adjustments per CMAB Hyperphosphatemia Algorithm",
- "answer": [{
- "valueCoding": {
- "system": "http://fkcfhir.org/fhir/cs/FMCYesNoUnk",
- "code": "No",
- "display": "No"
- }
- }]
- },
- {
- "linkId": "BO_AdjTxt",
- "text": "Adjustment Text",
- "answer": [{
- "valueString": "Adjustment Text comes here"
- }]
+ ]
}
]
}
]
- }]
- }]
+ }
+ ]
}
diff --git a/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/match/registry/SubscriptionCanonicalizer.java b/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/match/registry/SubscriptionCanonicalizer.java
index 2d482011869..ea6b9b3ff52 100644
--- a/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/match/registry/SubscriptionCanonicalizer.java
+++ b/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/match/registry/SubscriptionCanonicalizer.java
@@ -23,20 +23,20 @@ package ca.uhn.fhir.jpa.subscription.match.registry;
import ca.uhn.fhir.context.ConfigurationException;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.jpa.model.util.JpaConstants;
+import ca.uhn.fhir.jpa.subscription.match.matcher.matching.SubscriptionMatchingStrategy;
import ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription;
import ca.uhn.fhir.jpa.subscription.model.CanonicalSubscriptionChannelType;
-import ca.uhn.fhir.jpa.subscription.match.matcher.matching.SubscriptionMatchingStrategy;
import ca.uhn.fhir.model.dstu2.resource.Subscription;
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException;
import org.apache.commons.lang3.Validate;
import org.hl7.fhir.exceptions.FHIRException;
+import org.hl7.fhir.instance.model.api.IBaseHasExtensions;
import org.hl7.fhir.instance.model.api.IBaseMetaType;
import org.hl7.fhir.instance.model.api.IBaseReference;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IPrimitiveType;
import org.hl7.fhir.r4.model.Extension;
-import org.hl7.fhir.r5.model.Coding;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -179,7 +179,6 @@ public class SubscriptionCanonicalizer {
case R5: {
org.hl7.fhir.r5.model.Subscription subscription = (org.hl7.fhir.r5.model.Subscription) theSubscription;
return subscription
- .getChannel()
.getExtension()
.stream()
.collect(Collectors.groupingBy(t -> t.getUrl(), mapping(t -> t.getValueAsPrimitive().getValueAsString(), toList())));
@@ -251,24 +250,24 @@ public class SubscriptionCanonicalizer {
org.hl7.fhir.r5.model.Subscription subscription = (org.hl7.fhir.r5.model.Subscription) theSubscription;
CanonicalSubscription retVal = new CanonicalSubscription();
- org.hl7.fhir.r5.model.Subscription.SubscriptionStatus status = subscription.getStatus();
+ org.hl7.fhir.r5.model.Enumerations.SubscriptionState status = subscription.getStatus();
if (status != null) {
retVal.setStatus(org.hl7.fhir.r4.model.Subscription.SubscriptionStatus.fromCode(status.toCode()));
}
retVal.setChannelType(getChannelType(subscription));
retVal.setCriteriaString(getCriteria(theSubscription));
- retVal.setEndpointUrl(subscription.getChannel().getEndpoint());
- retVal.setHeaders(subscription.getChannel().getHeader());
+ retVal.setEndpointUrl(subscription.getEndpoint());
+ retVal.setHeaders(subscription.getHeader());
retVal.setChannelExtensions(extractExtension(subscription));
retVal.setIdElement(subscription.getIdElement());
- retVal.setPayloadString(subscription.getChannel().getPayload().getContentType());
+ retVal.setPayloadString(subscription.getContentType());
if (retVal.getChannelType() == CanonicalSubscriptionChannelType.EMAIL) {
String from;
String subjectTemplate;
try {
- from = subscription.getChannel().getExtensionString(JpaConstants.EXT_SUBSCRIPTION_EMAIL_FROM);
- subjectTemplate = subscription.getChannel().getExtensionString(JpaConstants.EXT_SUBSCRIPTION_SUBJECT_TEMPLATE);
+ from = getExtensionString(subscription, JpaConstants.EXT_SUBSCRIPTION_EMAIL_FROM);
+ subjectTemplate = getExtensionString(subscription, JpaConstants.EXT_SUBSCRIPTION_SUBJECT_TEMPLATE);
} catch (FHIRException theE) {
throw new ConfigurationException("Failed to extract subscription extension(s): " + theE.getMessage(), theE);
}
@@ -280,8 +279,8 @@ public class SubscriptionCanonicalizer {
String stripVersionIds;
String deliverLatestVersion;
try {
- stripVersionIds = subscription.getChannel().getExtensionString(JpaConstants.EXT_SUBSCRIPTION_RESTHOOK_STRIP_VERSION_IDS);
- deliverLatestVersion = subscription.getChannel().getExtensionString(JpaConstants.EXT_SUBSCRIPTION_RESTHOOK_DELIVER_LATEST_VERSION);
+ stripVersionIds = getExtensionString(subscription, JpaConstants.EXT_SUBSCRIPTION_RESTHOOK_STRIP_VERSION_IDS);
+ deliverLatestVersion = getExtensionString(subscription, JpaConstants.EXT_SUBSCRIPTION_RESTHOOK_DELIVER_LATEST_VERSION);
} catch (FHIRException theE) {
throw new ConfigurationException("Failed to extract subscription extension(s): " + theE.getMessage(), theE);
}
@@ -300,6 +299,18 @@ public class SubscriptionCanonicalizer {
return retVal;
}
+ private String getExtensionString(IBaseHasExtensions theBase, String theUrl) {
+ return theBase
+ .getExtension()
+ .stream()
+ .filter(t -> theUrl.equals(t.getUrl()))
+ .filter(t -> t.getValue() instanceof IPrimitiveType)
+ .map(t -> (IPrimitiveType>) t.getValue())
+ .map(t -> t.getValueAsString())
+ .findFirst()
+ .orElse(null);
+ }
+
@SuppressWarnings("EnumSwitchStatementWhichMissesCases")
public CanonicalSubscriptionChannelType getChannelType(IBaseResource theSubscription) {
CanonicalSubscriptionChannelType retVal = null;
@@ -327,11 +338,10 @@ public class SubscriptionCanonicalizer {
break;
}
case R5: {
- for (Coding nextTypeCode : ((org.hl7.fhir.r5.model.Subscription) theSubscription).getChannel().getType().getCoding()) {
- CanonicalSubscriptionChannelType code = CanonicalSubscriptionChannelType.fromCode(nextTypeCode.getSystem(), nextTypeCode.getCode());
- if (code != null) {
- retVal = code;
- }
+ org.hl7.fhir.r5.model.Coding nextTypeCode = ((org.hl7.fhir.r5.model.Subscription) theSubscription).getChannelType();
+ CanonicalSubscriptionChannelType code = CanonicalSubscriptionChannelType.fromCode(nextTypeCode.getSystem(), nextTypeCode.getCode());
+ if (code != null) {
+ retVal = code;
}
break;
}
@@ -355,7 +365,7 @@ public class SubscriptionCanonicalizer {
retVal = ((org.hl7.fhir.r4.model.Subscription) theSubscription).getCriteria();
break;
case R5:
- org.hl7.fhir.r5.model.Topic topic = (org.hl7.fhir.r5.model.Topic) ((org.hl7.fhir.r5.model.Subscription) theSubscription).getTopic().getResource();
+ org.hl7.fhir.r5.model.SubscriptionTopic topic = (org.hl7.fhir.r5.model.SubscriptionTopic) ((org.hl7.fhir.r5.model.Subscription) theSubscription).getTopic().getResource();
Validate.notNull(topic);
retVal = topic.getResourceTrigger().getQueryCriteria().getCurrent();
break;
@@ -372,8 +382,8 @@ public class SubscriptionCanonicalizer {
meta
.getTag()
.stream()
- .filter(t->JpaConstants.EXT_SUBSCRIPTION_MATCHING_STRATEGY.equals(t.getSystem()))
- .forEach(t->{
+ .filter(t -> JpaConstants.EXT_SUBSCRIPTION_MATCHING_STRATEGY.equals(t.getSystem()))
+ .forEach(t -> {
t.setCode(null);
t.setSystem(null);
t.setDisplay(null);
diff --git a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/ServerCapabilityStatementProvider.java b/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/ServerCapabilityStatementProvider.java
index d78ec0a3424..b4af946771e 100644
--- a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/ServerCapabilityStatementProvider.java
+++ b/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/ServerCapabilityStatementProvider.java
@@ -256,7 +256,7 @@ public class ServerCapabilityStatementProvider extends BaseServerCapabilityState
if (methodBinding.getQueryName() != null) {
String queryName = bindings.getNamedSearchMethodBindingToName().get(methodBinding);
if (operationNames.add(queryName)) {
- rest.addOperation().setName(methodBinding.getQueryName()).setDefinition(("OperationDefinition/" + queryName));
+ rest.addOperation().setName(methodBinding.getQueryName()).setDefinition((getOperationDefinitionPrefix(theRequestDetails) + "OperationDefinition/" + queryName));
}
} else {
handleNamelessSearchMethodBinding(resource, def, includes, (SearchMethodBinding) nextMethodBinding, theRequestDetails);
@@ -266,7 +266,7 @@ public class ServerCapabilityStatementProvider extends BaseServerCapabilityState
String opName = bindings.getOperationBindingToName().get(methodBinding);
if (operationNames.add(opName)) {
// Only add each operation (by name) once
- rest.addOperation().setName(methodBinding.getName().substring(1)).setDefinition(("OperationDefinition/" + opName));
+ rest.addOperation().setName(methodBinding.getName().substring(1)).setDefinition((getOperationDefinitionPrefix(theRequestDetails) + "OperationDefinition/" + opName));
}
}
@@ -301,7 +301,7 @@ public class ServerCapabilityStatementProvider extends BaseServerCapabilityState
String opName = bindings.getOperationBindingToName().get(methodBinding);
if (operationNames.add(opName)) {
ourLog.debug("Found bound operation: {}", opName);
- rest.addOperation().setName(methodBinding.getName().substring(1)).setDefinition(("OperationDefinition/" + opName));
+ rest.addOperation().setName(methodBinding.getName().substring(1)).setDefinition((getOperationDefinitionPrefix(theRequestDetails) + "OperationDefinition/" + opName));
}
}
}
@@ -311,6 +311,13 @@ public class ServerCapabilityStatementProvider extends BaseServerCapabilityState
return retVal;
}
+ protected String getOperationDefinitionPrefix(RequestDetails theRequestDetails) {
+ if (theRequestDetails == null) {
+ return "";
+ }
+ return theRequestDetails.getServerBaseForRequest() + "/";
+ }
+
private void handleNamelessSearchMethodBinding(CapabilityStatementRestResourceComponent resource, RuntimeResourceDefinition def, TreeSet includes,
SearchMethodBinding searchMethodBinding, RequestDetails theRequestDetails) {
includes.addAll(searchMethodBinding.getIncludes());
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/ServerCapabilityStatementProviderR4Test.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/ServerCapabilityStatementProviderR4Test.java
index 959d6f75e7f..4a3f59c3184 100644
--- a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/ServerCapabilityStatementProviderR4Test.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/ServerCapabilityStatementProviderR4Test.java
@@ -108,6 +108,7 @@ public class ServerCapabilityStatementProviderR4Test {
private RequestDetails createRequestDetails(RestfulServer theServer) {
ServletRequestDetails retVal = new ServletRequestDetails(null);
retVal.setServer(theServer);
+ retVal.setFhirServerBase("http://localhost/baseR4");
return retVal;
}
@@ -116,6 +117,7 @@ public class ServerCapabilityStatementProviderR4Test {
RestfulServer rs = new RestfulServer(ourCtx);
rs.setProviders(new ProviderWithExtendedOperationReturningBundle());
+ rs.setServerAddressStrategy(new HardcodedServerAddressStrategy("http://localhost/baseR4"));
ServerCapabilityStatementProvider sc = new ServerCapabilityStatementProvider();
rs.setServerConformanceProvider(sc);
@@ -240,6 +242,7 @@ public class ServerCapabilityStatementProviderR4Test {
public void testOperationAcrossMultipleTypes() throws Exception {
RestfulServer rs = new RestfulServer(ourCtx);
rs.setProviders(new MultiTypePatientProvider(), new MultiTypeEncounterProvider());
+ rs.setServerAddressStrategy(new HardcodedServerAddressStrategy("http://localhost/baseR4"));
ServerCapabilityStatementProvider sc = new ServerCapabilityStatementProvider();
rs.setServerConformanceProvider(sc);
@@ -624,6 +627,7 @@ public class ServerCapabilityStatementProviderR4Test {
public void testSystemLevelNamedQueryWithParameters() throws Exception {
RestfulServer rs = new RestfulServer(ourCtx);
rs.setProviders(new NamedQueryPlainProvider());
+ rs.setServerAddressStrategy(new HardcodedServerAddressStrategy("http://localhost/baseR4"));
ServerCapabilityStatementProvider sc = new ServerCapabilityStatementProvider();
rs.setServerConformanceProvider(sc);
@@ -668,6 +672,7 @@ public class ServerCapabilityStatementProviderR4Test {
public void testResourceLevelNamedQueryWithParameters() throws Exception {
RestfulServer rs = new RestfulServer(ourCtx);
rs.setProviders(new NamedQueryResourceProvider());
+ rs.setServerAddressStrategy(new HardcodedServerAddressStrategy("http://localhost/baseR4"));
ServerCapabilityStatementProvider sc = new ServerCapabilityStatementProvider();
rs.setServerConformanceProvider(sc);
@@ -711,6 +716,7 @@ public class ServerCapabilityStatementProviderR4Test {
public void testExtendedOperationAtTypeLevel() throws Exception {
RestfulServer rs = new RestfulServer(ourCtx);
rs.setProviders(new TypeLevelOperationProvider());
+ rs.setServerAddressStrategy(new HardcodedServerAddressStrategy("http://localhost/baseR4"));
ServerCapabilityStatementProvider sc = new ServerCapabilityStatementProvider();
rs.setServerConformanceProvider(sc);
diff --git a/hapi-fhir-structures-r5/src/main/java/org/hl7/fhir/r5/hapi/ctx/HapiWorkerContext.java b/hapi-fhir-structures-r5/src/main/java/org/hl7/fhir/r5/hapi/ctx/HapiWorkerContext.java
index 38a9e8a2560..5bf371b7116 100644
--- a/hapi-fhir-structures-r5/src/main/java/org/hl7/fhir/r5/hapi/ctx/HapiWorkerContext.java
+++ b/hapi-fhir-structures-r5/src/main/java/org/hl7/fhir/r5/hapi/ctx/HapiWorkerContext.java
@@ -15,17 +15,30 @@ import org.hl7.fhir.exceptions.TerminologyServiceException;
import org.hl7.fhir.r5.context.IWorkerContext;
import org.hl7.fhir.r5.formats.IParser;
import org.hl7.fhir.r5.formats.ParserType;
-import org.hl7.fhir.r5.model.*;
+import org.hl7.fhir.r5.model.CanonicalResource;
+import org.hl7.fhir.r5.model.CodeSystem;
import org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent;
+import org.hl7.fhir.r5.model.CodeableConcept;
+import org.hl7.fhir.r5.model.Coding;
+import org.hl7.fhir.r5.model.ConceptMap;
import org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent;
+import org.hl7.fhir.r5.model.Parameters;
+import org.hl7.fhir.r5.model.Resource;
+import org.hl7.fhir.r5.model.ResourceType;
+import org.hl7.fhir.r5.model.StructureDefinition;
+import org.hl7.fhir.r5.model.StructureMap;
+import org.hl7.fhir.r5.model.ValueSet;
import org.hl7.fhir.r5.model.ValueSet.ConceptSetComponent;
import org.hl7.fhir.r5.terminologies.ValueSetExpander;
import org.hl7.fhir.r5.utils.IResourceValidator;
import org.hl7.fhir.utilities.TranslationServices;
+import org.hl7.fhir.utilities.cache.NpmPackage;
import org.hl7.fhir.utilities.i18n.I18nBase;
import org.hl7.fhir.utilities.validation.ValidationMessage.IssueSeverity;
import org.hl7.fhir.utilities.validation.ValidationOptions;
+import java.io.FileNotFoundException;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -330,7 +343,7 @@ public final class HapiWorkerContext extends I18nBase implements IWorkerContext
@Override
public T fetchResource(Class theClass, String theUri) {
- if (myValidationSupport == null) {
+ if (myValidationSupport == null || theUri == null) {
return null;
} else {
@SuppressWarnings("unchecked")
@@ -348,6 +361,11 @@ public final class HapiWorkerContext extends I18nBase implements IWorkerContext
return retVal;
}
+ @Override
+ public T fetchResource(Class class_, String uri, CanonicalResource canonicalForSource) {
+ throw new UnsupportedOperationException();
+ }
+
@Override
public org.hl7.fhir.r5.model.Resource fetchResourceById(String theType, String theUri) {
throw new UnsupportedOperationException();
@@ -363,6 +381,16 @@ public final class HapiWorkerContext extends I18nBase implements IWorkerContext
throw new UnsupportedOperationException();
}
+ @Override
+ public void cacheResourceFromPackage(Resource res, PackageVersion packageDetails) throws FHIRException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void cachePackage(PackageVersion packageDetails, List dependencies) {
+ throw new UnsupportedOperationException();
+ }
+
@Override
public Set getResourceNamesAsSet() {
return myCtx.getResourceNames();
@@ -380,7 +408,17 @@ public final class HapiWorkerContext extends I18nBase implements IWorkerContext
@Override
public Map getBinaries() {
- return null;
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void loadFromPackage(NpmPackage pi, IContextResourceLoader loader, String[] types) throws FileNotFoundException, IOException, FHIRException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean hasPackage(String id, String ver) {
+ throw new UnsupportedOperationException();
}
public static ConceptValidationOptions convertConceptValidationOptions(ValidationOptions theOptions) {
diff --git a/hapi-fhir-structures-r5/src/main/java/org/hl7/fhir/r5/hapi/rest/server/ServerCapabilityStatementProvider.java b/hapi-fhir-structures-r5/src/main/java/org/hl7/fhir/r5/hapi/rest/server/ServerCapabilityStatementProvider.java
index d0c9a708924..2aef5be2882 100644
--- a/hapi-fhir-structures-r5/src/main/java/org/hl7/fhir/r5/hapi/rest/server/ServerCapabilityStatementProvider.java
+++ b/hapi-fhir-structures-r5/src/main/java/org/hl7/fhir/r5/hapi/rest/server/ServerCapabilityStatementProvider.java
@@ -90,293 +90,298 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
*/
public class ServerCapabilityStatementProvider extends BaseServerCapabilityStatementProvider implements IServerConformanceProvider {
- private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ServerCapabilityStatementProvider.class);
- private String myPublisher = "Not provided";
+ private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ServerCapabilityStatementProvider.class);
+ private String myPublisher = "Not provided";
- /**
- * No-arg constructor and setter so that the ServerConformanceProvider can be Spring-wired with the RestfulService avoiding the potential reference cycle that would happen.
- */
- public ServerCapabilityStatementProvider() {
- super();
- }
+ /**
+ * No-arg constructor and setter so that the ServerConformanceProvider can be Spring-wired with the RestfulService avoiding the potential reference cycle that would happen.
+ */
+ public ServerCapabilityStatementProvider() {
+ super();
+ }
- /**
- * Constructor - This is intended only for JAX-RS server
- */
- public ServerCapabilityStatementProvider(RestfulServerConfiguration theServerConfiguration) {
- super(theServerConfiguration);
- }
+ /**
+ * Constructor - This is intended only for JAX-RS server
+ */
+ public ServerCapabilityStatementProvider(RestfulServerConfiguration theServerConfiguration) {
+ super(theServerConfiguration);
+ }
- private void checkBindingForSystemOps(CapabilityStatementRestComponent rest, Set systemOps, BaseMethodBinding> nextMethodBinding) {
- if (nextMethodBinding.getRestOperationType() != null) {
- String sysOpCode = nextMethodBinding.getRestOperationType().getCode();
- if (sysOpCode != null) {
- SystemRestfulInteraction sysOp;
- try {
- sysOp = SystemRestfulInteraction.fromCode(sysOpCode);
- } catch (FHIRException e) {
- return;
- }
- if (sysOp == null) {
- return;
- }
- if (systemOps.contains(sysOp) == false) {
- systemOps.add(sysOp);
- rest.addInteraction().setCode(sysOp);
- }
- }
- }
- }
+ private void checkBindingForSystemOps(CapabilityStatementRestComponent rest, Set systemOps, BaseMethodBinding> nextMethodBinding) {
+ if (nextMethodBinding.getRestOperationType() != null) {
+ String sysOpCode = nextMethodBinding.getRestOperationType().getCode();
+ if (sysOpCode != null) {
+ SystemRestfulInteraction sysOp;
+ try {
+ sysOp = SystemRestfulInteraction.fromCode(sysOpCode);
+ } catch (FHIRException e) {
+ return;
+ }
+ if (sysOp == null) {
+ return;
+ }
+ if (systemOps.contains(sysOp) == false) {
+ systemOps.add(sysOp);
+ rest.addInteraction().setCode(sysOp);
+ }
+ }
+ }
+ }
-
- private DateTimeType conformanceDate(RequestDetails theRequestDetails) {
- IPrimitiveType buildDate = getServerConfiguration(theRequestDetails).getConformanceDate();
- if (buildDate != null && buildDate.getValue() != null) {
- try {
- return new DateTimeType(buildDate.getValueAsString());
- } catch (DataFormatException e) {
- // fall through
- }
- }
- return DateTimeType.now();
- }
+ private DateTimeType conformanceDate(RequestDetails theRequestDetails) {
+ IPrimitiveType buildDate = getServerConfiguration(theRequestDetails).getConformanceDate();
+ if (buildDate != null && buildDate.getValue() != null) {
+ try {
+ return new DateTimeType(buildDate.getValueAsString());
+ } catch (DataFormatException e) {
+ // fall through
+ }
+ }
+ return DateTimeType.now();
+ }
+ /**
+ * Gets the value of the "publisher" that will be placed in the generated conformance statement. As this is a mandatory element, the value should not be null (although this is not enforced). The
+ * value defaults to "Not provided" but may be set to null, which will cause this element to be omitted.
+ */
+ public String getPublisher() {
+ return myPublisher;
+ }
- /**
- * Gets the value of the "publisher" that will be placed in the generated conformance statement. As this is a mandatory element, the value should not be null (although this is not enforced). The
- * value defaults to "Not provided" but may be set to null, which will cause this element to be omitted.
- */
- public String getPublisher() {
- return myPublisher;
- }
+ /**
+ * Sets the value of the "publisher" that will be placed in the generated conformance statement. As this is a mandatory element, the value should not be null (although this is not enforced). The
+ * value defaults to "Not provided" but may be set to null, which will cause this element to be omitted.
+ */
+ public void setPublisher(String thePublisher) {
+ myPublisher = thePublisher;
+ }
- /**
- * Sets the value of the "publisher" that will be placed in the generated conformance statement. As this is a mandatory element, the value should not be null (although this is not enforced). The
- * value defaults to "Not provided" but may be set to null, which will cause this element to be omitted.
- */
- public void setPublisher(String thePublisher) {
- myPublisher = thePublisher;
- }
+ @SuppressWarnings("EnumSwitchStatementWhichMissesCases")
+ @Override
+ @Metadata
+ public CapabilityStatement getServerConformance(HttpServletRequest theRequest, RequestDetails theRequestDetails) {
- @SuppressWarnings("EnumSwitchStatementWhichMissesCases")
- @Override
- @Metadata
- public CapabilityStatement getServerConformance(HttpServletRequest theRequest, RequestDetails theRequestDetails) {
+ RestfulServerConfiguration configuration = getServerConfiguration(theRequestDetails);
+ Bindings bindings = configuration.provideBindings();
- RestfulServerConfiguration configuration = getServerConfiguration(theRequestDetails);
- Bindings bindings = configuration.provideBindings();
+ CapabilityStatement retVal = new CapabilityStatement();
- CapabilityStatement retVal = new CapabilityStatement();
+ retVal.setPublisher(myPublisher);
+ retVal.setDateElement(conformanceDate(theRequestDetails));
+ retVal.setFhirVersion(Enumerations.FHIRVersion.fromCode(FhirVersionEnum.R5.getFhirVersionString()));
- retVal.setPublisher(myPublisher);
- retVal.setDateElement(conformanceDate(theRequestDetails));
- retVal.setFhirVersion(Enumerations.FHIRVersion.fromCode(FhirVersionEnum.R5.getFhirVersionString()));
+ ServletContext servletContext = (ServletContext) (theRequest == null ? null : theRequest.getAttribute(RestfulServer.SERVLET_CONTEXT_ATTRIBUTE));
+ String serverBase = configuration.getServerAddressStrategy().determineServerBase(servletContext, theRequest);
+ retVal
+ .getImplementation()
+ .setUrl(serverBase)
+ .setDescription(configuration.getImplementationDescription());
- ServletContext servletContext = (ServletContext) (theRequest == null ? null : theRequest.getAttribute(RestfulServer.SERVLET_CONTEXT_ATTRIBUTE));
- String serverBase = configuration.getServerAddressStrategy().determineServerBase(servletContext, theRequest);
- retVal
- .getImplementation()
- .setUrl(serverBase)
- .setDescription(configuration.getImplementationDescription());
+ retVal.setKind(Enumerations.CapabilityStatementKind.INSTANCE);
+ retVal.getSoftware().setName(configuration.getServerName());
+ retVal.getSoftware().setVersion(configuration.getServerVersion());
+ retVal.addFormat(Constants.CT_FHIR_XML_NEW);
+ retVal.addFormat(Constants.CT_FHIR_JSON_NEW);
+ retVal.setStatus(PublicationStatus.ACTIVE);
- retVal.setKind(Enumerations.CapabilityStatementKind.INSTANCE);
- retVal.getSoftware().setName(configuration.getServerName());
- retVal.getSoftware().setVersion(configuration.getServerVersion());
- retVal.addFormat(Constants.CT_FHIR_XML_NEW);
- retVal.addFormat(Constants.CT_FHIR_JSON_NEW);
- retVal.setStatus(PublicationStatus.ACTIVE);
+ CapabilityStatementRestComponent rest = retVal.addRest();
+ rest.setMode(Enumerations.RestfulCapabilityMode.SERVER);
- CapabilityStatementRestComponent rest = retVal.addRest();
- rest.setMode(Enumerations.RestfulCapabilityMode.SERVER);
+ Set systemOps = new HashSet<>();
+ Set operationNames = new HashSet<>();
- Set systemOps = new HashSet<>();
- Set operationNames = new HashSet<>();
+ Map>> resourceToMethods = configuration.collectMethodBindings();
+ Map> resourceNameToSharedSupertype = configuration.getNameToSharedSupertype();
+ for (Entry>> nextEntry : resourceToMethods.entrySet()) {
- Map>> resourceToMethods = configuration.collectMethodBindings();
- Map> resourceNameToSharedSupertype = configuration.getNameToSharedSupertype();
- for (Entry>> nextEntry : resourceToMethods.entrySet()) {
+ if (nextEntry.getKey().isEmpty() == false) {
+ Set resourceOps = new HashSet<>();
+ CapabilityStatementRestResourceComponent resource = rest.addResource();
+ String resourceName = nextEntry.getKey();
+ RuntimeResourceDefinition def;
+ FhirContext context = configuration.getFhirContext();
+ if (resourceNameToSharedSupertype.containsKey(resourceName)) {
+ def = context.getResourceDefinition(resourceNameToSharedSupertype.get(resourceName));
+ } else {
+ def = context.getResourceDefinition(resourceName);
+ }
+ resource.getTypeElement().setValue(def.getName());
+ resource.getProfileElement().setValue((def.getResourceProfile(serverBase)));
- if (nextEntry.getKey().isEmpty() == false) {
- Set resourceOps = new HashSet<>();
- CapabilityStatementRestResourceComponent resource = rest.addResource();
- String resourceName = nextEntry.getKey();
- RuntimeResourceDefinition def;
- FhirContext context = configuration.getFhirContext();
- if (resourceNameToSharedSupertype.containsKey(resourceName)) {
- def = context.getResourceDefinition(resourceNameToSharedSupertype.get(resourceName));
- } else {
- def = context.getResourceDefinition(resourceName);
- }
- resource.getTypeElement().setValue(def.getName());
- resource.getProfileElement().setValue((def.getResourceProfile(serverBase)));
+ TreeSet includes = new TreeSet<>();
- TreeSet includes = new TreeSet<>();
+ // Map nameToSearchParam = new HashMap();
+ for (BaseMethodBinding> nextMethodBinding : nextEntry.getValue()) {
+ if (nextMethodBinding.getRestOperationType() != null) {
+ String resOpCode = nextMethodBinding.getRestOperationType().getCode();
+ if (resOpCode != null) {
+ TypeRestfulInteraction resOp;
+ try {
+ resOp = TypeRestfulInteraction.fromCode(resOpCode);
+ } catch (Exception e) {
+ resOp = null;
+ }
+ if (resOp != null) {
+ if (resourceOps.contains(resOp) == false) {
+ resourceOps.add(resOp);
+ resource.addInteraction().setCode(resOp);
+ }
+ if ("vread".equals(resOpCode)) {
+ // vread implies read
+ resOp = TypeRestfulInteraction.READ;
+ if (resourceOps.contains(resOp) == false) {
+ resourceOps.add(resOp);
+ resource.addInteraction().setCode(resOp);
+ }
+ }
- // Map nameToSearchParam = new HashMap();
- for (BaseMethodBinding> nextMethodBinding : nextEntry.getValue()) {
- if (nextMethodBinding.getRestOperationType() != null) {
- String resOpCode = nextMethodBinding.getRestOperationType().getCode();
- if (resOpCode != null) {
- TypeRestfulInteraction resOp;
- try {
- resOp = TypeRestfulInteraction.fromCode(resOpCode);
- } catch (Exception e) {
- resOp = null;
- }
- if (resOp != null) {
- if (resourceOps.contains(resOp) == false) {
- resourceOps.add(resOp);
- resource.addInteraction().setCode(resOp);
- }
- if ("vread".equals(resOpCode)) {
- // vread implies read
- resOp = TypeRestfulInteraction.READ;
- if (resourceOps.contains(resOp) == false) {
- resourceOps.add(resOp);
- resource.addInteraction().setCode(resOp);
- }
- }
+ if (nextMethodBinding.isSupportsConditional()) {
+ switch (resOp) {
+ case CREATE:
+ resource.setConditionalCreate(true);
+ break;
+ case DELETE:
+ if (nextMethodBinding.isSupportsConditionalMultiple()) {
+ resource.setConditionalDelete(ConditionalDeleteStatus.MULTIPLE);
+ } else {
+ resource.setConditionalDelete(ConditionalDeleteStatus.SINGLE);
+ }
+ break;
+ case UPDATE:
+ resource.setConditionalUpdate(true);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ }
- if (nextMethodBinding.isSupportsConditional()) {
- switch (resOp) {
- case CREATE:
- resource.setConditionalCreate(true);
- break;
- case DELETE:
- if (nextMethodBinding.isSupportsConditionalMultiple()) {
- resource.setConditionalDelete(ConditionalDeleteStatus.MULTIPLE);
- } else {
- resource.setConditionalDelete(ConditionalDeleteStatus.SINGLE);
- }
- break;
- case UPDATE:
- resource.setConditionalUpdate(true);
- break;
- default:
- break;
- }
- }
- }
- }
- }
+ checkBindingForSystemOps(rest, systemOps, nextMethodBinding);
- checkBindingForSystemOps(rest, systemOps, nextMethodBinding);
+ if (nextMethodBinding instanceof SearchMethodBinding) {
+ SearchMethodBinding methodBinding = (SearchMethodBinding) nextMethodBinding;
+ if (methodBinding.getQueryName() != null) {
+ String queryName = bindings.getNamedSearchMethodBindingToName().get(methodBinding);
+ if (operationNames.add(queryName)) {
+ rest.addOperation().setName(methodBinding.getQueryName()).setDefinition((getOperationDefinitionPrefix(theRequestDetails) + "OperationDefinition/" + queryName));
+ }
+ } else {
+ handleNamelessSearchMethodBinding(resource, def, includes, (SearchMethodBinding) nextMethodBinding, theRequestDetails);
+ }
+ } else if (nextMethodBinding instanceof OperationMethodBinding) {
+ OperationMethodBinding methodBinding = (OperationMethodBinding) nextMethodBinding;
+ String opName = bindings.getOperationBindingToName().get(methodBinding);
+ if (operationNames.add(opName)) {
+ // Only add each operation (by name) once
+ rest.addOperation().setName(methodBinding.getName().substring(1)).setDefinition((getOperationDefinitionPrefix(theRequestDetails) + "OperationDefinition/" + opName));
+ }
+ }
- if (nextMethodBinding instanceof SearchMethodBinding) {
- SearchMethodBinding methodBinding = (SearchMethodBinding) nextMethodBinding;
- if (methodBinding.getQueryName() != null) {
- String queryName = bindings.getNamedSearchMethodBindingToName().get(methodBinding);
- if (operationNames.add(queryName)) {
- rest.addOperation().setName(methodBinding.getQueryName()).setDefinition(("OperationDefinition/" + queryName));
- }
- } else {
- handleNamelessSearchMethodBinding(resource, def, includes, (SearchMethodBinding) nextMethodBinding, theRequestDetails);
- }
- } else if (nextMethodBinding instanceof OperationMethodBinding) {
- OperationMethodBinding methodBinding = (OperationMethodBinding) nextMethodBinding;
- String opName = bindings.getOperationBindingToName().get(methodBinding);
- if (operationNames.add(opName)) {
- // Only add each operation (by name) once
- rest.addOperation().setName(methodBinding.getName().substring(1)).setDefinition(("OperationDefinition/" + opName));
- }
- }
+ resource.getInteraction().sort(new Comparator() {
+ @Override
+ public int compare(ResourceInteractionComponent theO1, ResourceInteractionComponent theO2) {
+ TypeRestfulInteraction o1 = theO1.getCode();
+ TypeRestfulInteraction o2 = theO2.getCode();
+ if (o1 == null && o2 == null) {
+ return 0;
+ }
+ if (o1 == null) {
+ return 1;
+ }
+ if (o2 == null) {
+ return -1;
+ }
+ return o1.ordinal() - o2.ordinal();
+ }
+ });
- resource.getInteraction().sort(new Comparator() {
- @Override
- public int compare(ResourceInteractionComponent theO1, ResourceInteractionComponent theO2) {
- TypeRestfulInteraction o1 = theO1.getCode();
- TypeRestfulInteraction o2 = theO2.getCode();
- if (o1 == null && o2 == null) {
- return 0;
- }
- if (o1 == null) {
- return 1;
- }
- if (o2 == null) {
- return -1;
- }
- return o1.ordinal() - o2.ordinal();
- }
- });
+ }
- }
+ for (String nextInclude : includes) {
+ resource.addSearchInclude(nextInclude);
+ }
+ } else {
+ for (BaseMethodBinding> nextMethodBinding : nextEntry.getValue()) {
+ checkBindingForSystemOps(rest, systemOps, nextMethodBinding);
+ if (nextMethodBinding instanceof OperationMethodBinding) {
+ OperationMethodBinding methodBinding = (OperationMethodBinding) nextMethodBinding;
+ String opName = bindings.getOperationBindingToName().get(methodBinding);
+ if (operationNames.add(opName)) {
+ ourLog.debug("Found bound operation: {}", opName);
+ rest.addOperation().setName(methodBinding.getName().substring(1)).setDefinition((getOperationDefinitionPrefix(theRequestDetails) + "OperationDefinition/" + opName));
+ }
+ }
+ }
+ }
+ }
- for (String nextInclude : includes) {
- resource.addSearchInclude(nextInclude);
- }
- } else {
- for (BaseMethodBinding> nextMethodBinding : nextEntry.getValue()) {
- checkBindingForSystemOps(rest, systemOps, nextMethodBinding);
- if (nextMethodBinding instanceof OperationMethodBinding) {
- OperationMethodBinding methodBinding = (OperationMethodBinding) nextMethodBinding;
- String opName = bindings.getOperationBindingToName().get(methodBinding);
- if (operationNames.add(opName)) {
- ourLog.debug("Found bound operation: {}", opName);
- rest.addOperation().setName(methodBinding.getName().substring(1)).setDefinition(("OperationDefinition/" + opName));
- }
- }
- }
- }
- }
+ return retVal;
+ }
- return retVal;
- }
+ protected String getOperationDefinitionPrefix(RequestDetails theRequestDetails) {
+ if (theRequestDetails == null) {
+ return "";
+ }
+ return theRequestDetails.getServerBaseForRequest() + "/";
+ }
- private void handleNamelessSearchMethodBinding(CapabilityStatementRestResourceComponent resource, RuntimeResourceDefinition def, TreeSet includes,
- SearchMethodBinding searchMethodBinding, RequestDetails theRequestDetails) {
- includes.addAll(searchMethodBinding.getIncludes());
+ private void handleNamelessSearchMethodBinding(CapabilityStatementRestResourceComponent resource, RuntimeResourceDefinition def, TreeSet includes,
+ SearchMethodBinding searchMethodBinding, RequestDetails theRequestDetails) {
+ includes.addAll(searchMethodBinding.getIncludes());
- List params = searchMethodBinding.getParameters();
- List searchParameters = new ArrayList<>();
- for (IParameter nextParameter : params) {
- if ((nextParameter instanceof SearchParameter)) {
- searchParameters.add((SearchParameter) nextParameter);
- }
- }
- sortSearchParameters(searchParameters);
- if (!searchParameters.isEmpty()) {
- // boolean allOptional = searchParameters.get(0).isRequired() == false;
- //
- // OperationDefinition query = null;
- // if (!allOptional) {
- // RestOperation operation = rest.addOperation();
- // query = new OperationDefinition();
- // operation.setDefinition(new ResourceReferenceDt(query));
- // query.getDescriptionElement().setValue(searchMethodBinding.getDescription());
- // query.addUndeclaredExtension(false, ExtensionConstants.QUERY_RETURN_TYPE, new CodeDt(resourceName));
- // for (String nextInclude : searchMethodBinding.getIncludes()) {
- // query.addUndeclaredExtension(false, ExtensionConstants.QUERY_ALLOWED_INCLUDE, new StringDt(nextInclude));
- // }
- // }
+ List params = searchMethodBinding.getParameters();
+ List searchParameters = new ArrayList<>();
+ for (IParameter nextParameter : params) {
+ if ((nextParameter instanceof SearchParameter)) {
+ searchParameters.add((SearchParameter) nextParameter);
+ }
+ }
+ sortSearchParameters(searchParameters);
+ if (!searchParameters.isEmpty()) {
+ // boolean allOptional = searchParameters.get(0).isRequired() == false;
+ //
+ // OperationDefinition query = null;
+ // if (!allOptional) {
+ // RestOperation operation = rest.addOperation();
+ // query = new OperationDefinition();
+ // operation.setDefinition(new ResourceReferenceDt(query));
+ // query.getDescriptionElement().setValue(searchMethodBinding.getDescription());
+ // query.addUndeclaredExtension(false, ExtensionConstants.QUERY_RETURN_TYPE, new CodeDt(resourceName));
+ // for (String nextInclude : searchMethodBinding.getIncludes()) {
+ // query.addUndeclaredExtension(false, ExtensionConstants.QUERY_ALLOWED_INCLUDE, new StringDt(nextInclude));
+ // }
+ // }
- for (SearchParameter nextParameter : searchParameters) {
+ for (SearchParameter nextParameter : searchParameters) {
- String nextParamName = nextParameter.getName();
+ String nextParamName = nextParameter.getName();
- String chain = null;
- String nextParamUnchainedName = nextParamName;
- if (nextParamName.contains(".")) {
- chain = nextParamName.substring(nextParamName.indexOf('.') + 1);
- nextParamUnchainedName = nextParamName.substring(0, nextParamName.indexOf('.'));
- }
+ String chain = null;
+ String nextParamUnchainedName = nextParamName;
+ if (nextParamName.contains(".")) {
+ chain = nextParamName.substring(nextParamName.indexOf('.') + 1);
+ nextParamUnchainedName = nextParamName.substring(0, nextParamName.indexOf('.'));
+ }
- String nextParamDescription = nextParameter.getDescription();
+ String nextParamDescription = nextParameter.getDescription();
- /*
- * If the parameter has no description, default to the one from the resource
- */
- if (StringUtils.isBlank(nextParamDescription)) {
- RuntimeSearchParam paramDef = def.getSearchParam(nextParamUnchainedName);
- if (paramDef != null) {
- nextParamDescription = paramDef.getDescription();
- }
- }
+ /*
+ * If the parameter has no description, default to the one from the resource
+ */
+ if (StringUtils.isBlank(nextParamDescription)) {
+ RuntimeSearchParam paramDef = def.getSearchParam(nextParamUnchainedName);
+ if (paramDef != null) {
+ nextParamDescription = paramDef.getDescription();
+ }
+ }
- CapabilityStatementRestResourceSearchParamComponent param = resource.addSearchParam();
- param.setName(nextParamUnchainedName);
+ CapabilityStatementRestResourceSearchParamComponent param = resource.addSearchParam();
+ param.setName(nextParamUnchainedName);
// if (StringUtils.isNotBlank(chain)) {
// param.addChain(chain);
@@ -390,211 +395,210 @@ public class ServerCapabilityStatementProvider extends BaseServerCapabilityState
// }
// }
- param.setDocumentation(nextParamDescription);
- if (nextParameter.getParamType() != null) {
- param.getTypeElement().setValueAsString(nextParameter.getParamType().getCode());
- }
- for (Class extends IBaseResource> nextTarget : nextParameter.getDeclaredTypes()) {
- RuntimeResourceDefinition targetDef = getServerConfiguration(theRequestDetails).getFhirContext().getResourceDefinition(nextTarget);
- if (targetDef != null) {
- ResourceType code;
- try {
- code = ResourceType.fromCode(targetDef.getName());
- } catch (FHIRException e) {
- code = null;
- }
+ param.setDocumentation(nextParamDescription);
+ if (nextParameter.getParamType() != null) {
+ param.getTypeElement().setValueAsString(nextParameter.getParamType().getCode());
+ }
+ for (Class extends IBaseResource> nextTarget : nextParameter.getDeclaredTypes()) {
+ RuntimeResourceDefinition targetDef = getServerConfiguration(theRequestDetails).getFhirContext().getResourceDefinition(nextTarget);
+ if (targetDef != null) {
+ ResourceType code;
+ try {
+ code = ResourceType.fromCode(targetDef.getName());
+ } catch (FHIRException e) {
+ code = null;
+ }
// if (code != null) {
// param.addTarget(targetDef.getName());
// }
- }
- }
- }
- }
- }
+ }
+ }
+ }
+ }
+ }
+ @Read(type = OperationDefinition.class)
+ public OperationDefinition readOperationDefinition(@IdParam IdType theId, RequestDetails theRequestDetails) {
+ if (theId == null || theId.hasIdPart() == false) {
+ throw new ResourceNotFoundException(theId);
+ }
+ RestfulServerConfiguration configuration = getServerConfiguration(theRequestDetails);
+ Bindings bindings = configuration.provideBindings();
- @Read(type = OperationDefinition.class)
- public OperationDefinition readOperationDefinition(@IdParam IdType theId, RequestDetails theRequestDetails) {
- if (theId == null || theId.hasIdPart() == false) {
- throw new ResourceNotFoundException(theId);
- }
- RestfulServerConfiguration configuration = getServerConfiguration(theRequestDetails);
- Bindings bindings = configuration.provideBindings();
+ List operationBindings = bindings.getOperationNameToBindings().get(theId.getIdPart());
+ if (operationBindings != null && !operationBindings.isEmpty()) {
+ return readOperationDefinitionForOperation(operationBindings);
+ }
+ List searchBindings = bindings.getSearchNameToBindings().get(theId.getIdPart());
+ if (searchBindings != null && !searchBindings.isEmpty()) {
+ return readOperationDefinitionForNamedSearch(searchBindings);
+ }
+ throw new ResourceNotFoundException(theId);
+ }
- List operationBindings = bindings.getOperationNameToBindings().get(theId.getIdPart());
- if (operationBindings != null && !operationBindings.isEmpty()) {
- return readOperationDefinitionForOperation(operationBindings);
- }
- List searchBindings = bindings.getSearchNameToBindings().get(theId.getIdPart());
- if (searchBindings != null && !searchBindings.isEmpty()) {
- return readOperationDefinitionForNamedSearch(searchBindings);
- }
- throw new ResourceNotFoundException(theId);
- }
+ private OperationDefinition readOperationDefinitionForNamedSearch(List bindings) {
+ OperationDefinition op = new OperationDefinition();
+ op.setStatus(PublicationStatus.ACTIVE);
+ op.setKind(OperationKind.QUERY);
+ op.setAffectsState(false);
- private OperationDefinition readOperationDefinitionForNamedSearch(List bindings) {
- OperationDefinition op = new OperationDefinition();
- op.setStatus(PublicationStatus.ACTIVE);
- op.setKind(OperationKind.QUERY);
- op.setAffectsState(false);
+ op.setSystem(false);
+ op.setType(false);
+ op.setInstance(false);
- op.setSystem(false);
- op.setType(false);
- op.setInstance(false);
+ Set inParams = new HashSet<>();
- Set inParams = new HashSet<>();
+ for (SearchMethodBinding binding : bindings) {
+ if (isNotBlank(binding.getDescription())) {
+ op.setDescription(binding.getDescription());
+ }
+ if (isBlank(binding.getResourceProviderResourceName())) {
+ op.setSystem(true);
+ } else {
+ op.setType(true);
+ op.addResourceElement().setValue(binding.getResourceProviderResourceName());
+ }
+ op.setCode(binding.getQueryName());
+ for (IParameter nextParamUntyped : binding.getParameters()) {
+ if (nextParamUntyped instanceof SearchParameter) {
+ SearchParameter nextParam = (SearchParameter) nextParamUntyped;
+ if (!inParams.add(nextParam.getName())) {
+ continue;
+ }
+ OperationDefinitionParameterComponent param = op.addParameter();
+ param.setUse(Enumerations.OperationParameterUse.IN);
+ param.setType(Enumerations.FHIRAllTypes.STRING);
+ param.getSearchTypeElement().setValueAsString(nextParam.getParamType().getCode());
+ param.setMin(nextParam.isRequired() ? 1 : 0);
+ param.setMax("1");
+ param.setName(nextParam.getName());
+ }
+ }
- for (SearchMethodBinding binding : bindings) {
- if (isNotBlank(binding.getDescription())) {
- op.setDescription(binding.getDescription());
- }
- if (isBlank(binding.getResourceProviderResourceName())) {
- op.setSystem(true);
- } else {
- op.setType(true);
- op.addResourceElement().setValue(binding.getResourceProviderResourceName());
- }
- op.setCode(binding.getQueryName());
- for (IParameter nextParamUntyped : binding.getParameters()) {
- if (nextParamUntyped instanceof SearchParameter) {
- SearchParameter nextParam = (SearchParameter) nextParamUntyped;
- if (!inParams.add(nextParam.getName())) {
- continue;
- }
- OperationDefinitionParameterComponent param = op.addParameter();
- param.setUse(Enumerations.OperationParameterUse.IN);
- param.setType(Enumerations.FHIRAllTypes.STRING);
- param.getSearchTypeElement().setValueAsString(nextParam.getParamType().getCode());
- param.setMin(nextParam.isRequired() ? 1 : 0);
- param.setMax("1");
- param.setName(nextParam.getName());
- }
- }
+ if (isBlank(op.getName())) {
+ if (isNotBlank(op.getDescription())) {
+ op.setName(op.getDescription());
+ } else {
+ op.setName(op.getCode());
+ }
+ }
+ }
- if (isBlank(op.getName())) {
- if (isNotBlank(op.getDescription())) {
- op.setName(op.getDescription());
- } else {
- op.setName(op.getCode());
- }
- }
- }
+ return op;
+ }
- return op;
- }
+ private OperationDefinition readOperationDefinitionForOperation(List bindings) {
+ OperationDefinition op = new OperationDefinition();
+ op.setStatus(PublicationStatus.ACTIVE);
+ op.setKind(OperationKind.OPERATION);
+ op.setAffectsState(false);
- private OperationDefinition readOperationDefinitionForOperation(List bindings) {
- OperationDefinition op = new OperationDefinition();
- op.setStatus(PublicationStatus.ACTIVE);
- op.setKind(OperationKind.OPERATION);
- op.setAffectsState(false);
+ // We reset these to true below if we find a binding that can handle the level
+ op.setSystem(false);
+ op.setType(false);
+ op.setInstance(false);
- // We reset these to true below if we find a binding that can handle the level
- op.setSystem(false);
- op.setType(false);
- op.setInstance(false);
+ Set inParams = new HashSet<>();
+ Set outParams = new HashSet<>();
- Set inParams = new HashSet<>();
- Set outParams = new HashSet<>();
+ for (OperationMethodBinding sharedDescription : bindings) {
+ if (isNotBlank(sharedDescription.getDescription())) {
+ op.setDescription(sharedDescription.getDescription());
+ }
+ if (sharedDescription.isCanOperateAtInstanceLevel()) {
+ op.setInstance(true);
+ }
+ if (sharedDescription.isCanOperateAtServerLevel()) {
+ op.setSystem(true);
+ }
+ if (sharedDescription.isCanOperateAtTypeLevel()) {
+ op.setType(true);
+ }
+ if (!sharedDescription.isIdempotent()) {
+ op.setAffectsState(!sharedDescription.isIdempotent());
+ }
+ op.setCode(sharedDescription.getName().substring(1));
+ if (sharedDescription.isCanOperateAtInstanceLevel()) {
+ op.setInstance(sharedDescription.isCanOperateAtInstanceLevel());
+ }
+ if (sharedDescription.isCanOperateAtServerLevel()) {
+ op.setSystem(sharedDescription.isCanOperateAtServerLevel());
+ }
+ if (isNotBlank(sharedDescription.getResourceName())) {
+ op.addResourceElement().setValue(sharedDescription.getResourceName());
+ }
- for (OperationMethodBinding sharedDescription : bindings) {
- if (isNotBlank(sharedDescription.getDescription())) {
- op.setDescription(sharedDescription.getDescription());
- }
- if (sharedDescription.isCanOperateAtInstanceLevel()) {
- op.setInstance(true);
- }
- if (sharedDescription.isCanOperateAtServerLevel()) {
- op.setSystem(true);
- }
- if (sharedDescription.isCanOperateAtTypeLevel()) {
- op.setType(true);
- }
- if (!sharedDescription.isIdempotent()) {
- op.setAffectsState(!sharedDescription.isIdempotent());
- }
- op.setCode(sharedDescription.getName().substring(1));
- if (sharedDescription.isCanOperateAtInstanceLevel()) {
- op.setInstance(sharedDescription.isCanOperateAtInstanceLevel());
- }
- if (sharedDescription.isCanOperateAtServerLevel()) {
- op.setSystem(sharedDescription.isCanOperateAtServerLevel());
- }
- if (isNotBlank(sharedDescription.getResourceName())) {
- op.addResourceElement().setValue(sharedDescription.getResourceName());
- }
+ for (IParameter nextParamUntyped : sharedDescription.getParameters()) {
+ if (nextParamUntyped instanceof OperationParameter) {
+ OperationParameter nextParam = (OperationParameter) nextParamUntyped;
+ OperationDefinitionParameterComponent param = op.addParameter();
+ if (!inParams.add(nextParam.getName())) {
+ continue;
+ }
+ param.setUse(Enumerations.OperationParameterUse.IN);
+ if (nextParam.getParamType() != null) {
+ param.setType(Enumerations.FHIRAllTypes.fromCode(nextParam.getParamType()));
+ }
+ if (nextParam.getSearchParamType() != null) {
+ param.getSearchTypeElement().setValueAsString(nextParam.getSearchParamType());
+ }
+ param.setMin(nextParam.getMin());
+ param.setMax(nextParam.getMax() == -1 ? "*" : Integer.toString(nextParam.getMax()));
+ param.setName(nextParam.getName());
+ }
+ }
- for (IParameter nextParamUntyped : sharedDescription.getParameters()) {
- if (nextParamUntyped instanceof OperationParameter) {
- OperationParameter nextParam = (OperationParameter) nextParamUntyped;
- OperationDefinitionParameterComponent param = op.addParameter();
- if (!inParams.add(nextParam.getName())) {
- continue;
- }
- param.setUse(Enumerations.OperationParameterUse.IN);
- if (nextParam.getParamType() != null) {
- param.setType(Enumerations.FHIRAllTypes.fromCode(nextParam.getParamType()));
- }
- if (nextParam.getSearchParamType() != null) {
- param.getSearchTypeElement().setValueAsString(nextParam.getSearchParamType());
- }
- param.setMin(nextParam.getMin());
- param.setMax(nextParam.getMax() == -1 ? "*" : Integer.toString(nextParam.getMax()));
- param.setName(nextParam.getName());
- }
- }
+ for (ReturnType nextParam : sharedDescription.getReturnParams()) {
+ if (!outParams.add(nextParam.getName())) {
+ continue;
+ }
+ OperationDefinitionParameterComponent param = op.addParameter();
+ param.setUse(Enumerations.OperationParameterUse.OUT);
+ if (nextParam.getType() != null) {
+ param.setType(Enumerations.FHIRAllTypes.fromCode(nextParam.getType()));
+ }
+ param.setMin(nextParam.getMin());
+ param.setMax(nextParam.getMax() == -1 ? "*" : Integer.toString(nextParam.getMax()));
+ param.setName(nextParam.getName());
+ }
+ }
- for (ReturnType nextParam : sharedDescription.getReturnParams()) {
- if (!outParams.add(nextParam.getName())) {
- continue;
- }
- OperationDefinitionParameterComponent param = op.addParameter();
- param.setUse(Enumerations.OperationParameterUse.OUT);
- if (nextParam.getType() != null) {
- param.setType(Enumerations.FHIRAllTypes.fromCode(nextParam.getType()));
- }
- param.setMin(nextParam.getMin());
- param.setMax(nextParam.getMax() == -1 ? "*" : Integer.toString(nextParam.getMax()));
- param.setName(nextParam.getName());
- }
- }
+ if (isBlank(op.getName())) {
+ if (isNotBlank(op.getDescription())) {
+ op.setName(op.getDescription());
+ } else {
+ op.setName(op.getCode());
+ }
+ }
- if (isBlank(op.getName())) {
- if (isNotBlank(op.getDescription())) {
- op.setName(op.getDescription());
- } else {
- op.setName(op.getCode());
- }
- }
+ if (op.hasSystem() == false) {
+ op.setSystem(false);
+ }
+ if (op.hasInstance() == false) {
+ op.setInstance(false);
+ }
- if (op.hasSystem() == false) {
- op.setSystem(false);
- }
- if (op.hasInstance() == false) {
- op.setInstance(false);
- }
+ return op;
+ }
- return op;
- }
-
- @Override
- public void setRestfulServer(RestfulServer theRestfulServer) {
- // ignore
- }
+ @Override
+ public void setRestfulServer(RestfulServer theRestfulServer) {
+ // ignore
+ }
private void sortSearchParameters(List searchParameters) {
- Collections.sort(searchParameters, new Comparator() {
- @Override
- public int compare(SearchParameter theO1, SearchParameter theO2) {
- if (theO1.isRequired() == theO2.isRequired()) {
- return theO1.getName().compareTo(theO2.getName());
- }
- if (theO1.isRequired()) {
- return -1;
- }
- return 1;
- }
- });
- }
+ Collections.sort(searchParameters, new Comparator() {
+ @Override
+ public int compare(SearchParameter theO1, SearchParameter theO2) {
+ if (theO1.isRequired() == theO2.isRequired()) {
+ return theO1.getName().compareTo(theO2.getName());
+ }
+ if (theO1.isRequired()) {
+ return -1;
+ }
+ return 1;
+ }
+ });
+ }
}
diff --git a/hapi-fhir-structures-r5/src/main/resources/org/hl7/fhir/r5/model/fhirversion.properties b/hapi-fhir-structures-r5/src/main/resources/org/hl7/fhir/r5/model/fhirversion.properties
index 2248296c8ae..e6783f3a350 100644
--- a/hapi-fhir-structures-r5/src/main/resources/org/hl7/fhir/r5/model/fhirversion.properties
+++ b/hapi-fhir-structures-r5/src/main/resources/org/hl7/fhir/r5/model/fhirversion.properties
@@ -1,5 +1,5 @@
# This file contains version definitions
-# Generated: 2020-01-12T11:10:06.793+08:00
+# Generated: 2020-05-11T07:41:23.753-04:00
resource.Account=org.hl7.fhir.r5.model.Account
resource.ActivityDefinition=org.hl7.fhir.r5.model.ActivityDefinition
@@ -21,6 +21,7 @@ resource.CareTeam=org.hl7.fhir.r5.model.CareTeam
resource.CatalogEntry=org.hl7.fhir.r5.model.CatalogEntry
resource.ChargeItem=org.hl7.fhir.r5.model.ChargeItem
resource.ChargeItemDefinition=org.hl7.fhir.r5.model.ChargeItemDefinition
+resource.Citation=org.hl7.fhir.r5.model.Citation
resource.Claim=org.hl7.fhir.r5.model.Claim
resource.ClaimResponse=org.hl7.fhir.r5.model.ClaimResponse
resource.ClinicalImpression=org.hl7.fhir.r5.model.ClinicalImpression
@@ -54,6 +55,7 @@ resource.EnrollmentResponse=org.hl7.fhir.r5.model.EnrollmentResponse
resource.EpisodeOfCare=org.hl7.fhir.r5.model.EpisodeOfCare
resource.EventDefinition=org.hl7.fhir.r5.model.EventDefinition
resource.Evidence=org.hl7.fhir.r5.model.Evidence
+resource.EvidenceFocus=org.hl7.fhir.r5.model.EvidenceFocus
resource.EvidenceVariable=org.hl7.fhir.r5.model.EvidenceVariable
resource.ExampleScenario=org.hl7.fhir.r5.model.ExampleScenario
resource.ExplanationOfBenefit=org.hl7.fhir.r5.model.ExplanationOfBenefit
@@ -92,6 +94,7 @@ resource.MolecularSequence=org.hl7.fhir.r5.model.MolecularSequence
resource.NamingSystem=org.hl7.fhir.r5.model.NamingSystem
resource.NutritionIntake=org.hl7.fhir.r5.model.NutritionIntake
resource.NutritionOrder=org.hl7.fhir.r5.model.NutritionOrder
+resource.NutritionProduct=org.hl7.fhir.r5.model.NutritionProduct
resource.Observation=org.hl7.fhir.r5.model.Observation
resource.ObservationDefinition=org.hl7.fhir.r5.model.ObservationDefinition
resource.OperationDefinition=org.hl7.fhir.r5.model.OperationDefinition
@@ -103,6 +106,7 @@ resource.Parameters=org.hl7.fhir.r5.model.Parameters
resource.Patient=org.hl7.fhir.r5.model.Patient
resource.PaymentNotice=org.hl7.fhir.r5.model.PaymentNotice
resource.PaymentReconciliation=org.hl7.fhir.r5.model.PaymentReconciliation
+resource.Permission=org.hl7.fhir.r5.model.Permission
resource.Person=org.hl7.fhir.r5.model.Person
resource.PlanDefinition=org.hl7.fhir.r5.model.PlanDefinition
resource.Practitioner=org.hl7.fhir.r5.model.Practitioner
@@ -126,6 +130,8 @@ resource.SpecimenDefinition=org.hl7.fhir.r5.model.SpecimenDefinition
resource.StructureDefinition=org.hl7.fhir.r5.model.StructureDefinition
resource.StructureMap=org.hl7.fhir.r5.model.StructureMap
resource.Subscription=org.hl7.fhir.r5.model.Subscription
+resource.SubscriptionStatus=org.hl7.fhir.r5.model.SubscriptionStatus
+resource.SubscriptionTopic=org.hl7.fhir.r5.model.SubscriptionTopic
resource.Substance=org.hl7.fhir.r5.model.Substance
resource.SubstanceDefinition=org.hl7.fhir.r5.model.SubstanceDefinition
resource.SubstanceNucleicAcid=org.hl7.fhir.r5.model.SubstanceNucleicAcid
@@ -139,7 +145,6 @@ resource.Task=org.hl7.fhir.r5.model.Task
resource.TerminologyCapabilities=org.hl7.fhir.r5.model.TerminologyCapabilities
resource.TestReport=org.hl7.fhir.r5.model.TestReport
resource.TestScript=org.hl7.fhir.r5.model.TestScript
-resource.Topic=org.hl7.fhir.r5.model.Topic
resource.ValueSet=org.hl7.fhir.r5.model.ValueSet
resource.VerificationResult=org.hl7.fhir.r5.model.VerificationResult
resource.VisionPrescription=org.hl7.fhir.r5.model.VisionPrescription
@@ -200,8 +205,8 @@ datatype.dateTime=org.hl7.fhir.r5.model.DateTimeType
datatype.decimal=org.hl7.fhir.r5.model.DecimalType
datatype.id=org.hl7.fhir.r5.model.IdType
datatype.instant=org.hl7.fhir.r5.model.InstantType
-datatype.integer=org.hl7.fhir.r5.model.IntegerType
-datatype.integer64=org.hl7.fhir.r5.model.Integer64Type
+datatype.integer=org.hl7.fhir.r5.model.Integer64Type
+datatype.integer.2=org.hl7.fhir.r5.model.IntegerType
datatype.markdown=org.hl7.fhir.r5.model.MarkdownType
datatype.oid=org.hl7.fhir.r5.model.OidType
datatype.positiveInt=org.hl7.fhir.r5.model.PositiveIntType
diff --git a/hapi-fhir-structures-r5/src/test/java/ca/uhn/fhir/rest/server/ServerCapabilityStatementProviderR5Test.java b/hapi-fhir-structures-r5/src/test/java/ca/uhn/fhir/rest/server/ServerCapabilityStatementProviderR5Test.java
index 9a384e576c2..8f310908518 100644
--- a/hapi-fhir-structures-r5/src/test/java/ca/uhn/fhir/rest/server/ServerCapabilityStatementProviderR5Test.java
+++ b/hapi-fhir-structures-r5/src/test/java/ca/uhn/fhir/rest/server/ServerCapabilityStatementProviderR5Test.java
@@ -133,6 +133,7 @@ public class ServerCapabilityStatementProviderR5Test {
RestfulServer rs = new RestfulServer(ourCtx);
rs.setProviders(new ProviderWithExtendedOperationReturningBundle());
+ rs.setServerAddressStrategy(new HardcodedServerAddressStrategy("http://localhost/baseR4"));
ServerCapabilityStatementProvider sc = new ServerCapabilityStatementProvider();
rs.setServerConformanceProvider(sc);
@@ -257,6 +258,7 @@ public class ServerCapabilityStatementProviderR5Test {
public void testOperationAcrossMultipleTypes() throws Exception {
RestfulServer rs = new RestfulServer(ourCtx);
rs.setProviders(new MultiTypePatientProvider(), new MultiTypeEncounterProvider());
+ rs.setServerAddressStrategy(new HardcodedServerAddressStrategy("http://localhost/baseR4"));
ServerCapabilityStatementProvider sc = new ServerCapabilityStatementProvider();
rs.setServerConformanceProvider(sc);
@@ -660,6 +662,7 @@ public class ServerCapabilityStatementProviderR5Test {
public void testSystemLevelNamedQueryWithParameters() throws Exception {
RestfulServer rs = new RestfulServer(ourCtx);
rs.setProviders(new NamedQueryPlainProvider());
+ rs.setServerAddressStrategy(new HardcodedServerAddressStrategy("http://localhost/baseR4"));
ServerCapabilityStatementProvider sc = new ServerCapabilityStatementProvider();
rs.setServerConformanceProvider(sc);
@@ -704,6 +707,7 @@ public class ServerCapabilityStatementProviderR5Test {
public void testResourceLevelNamedQueryWithParameters() throws Exception {
RestfulServer rs = new RestfulServer(ourCtx);
rs.setProviders(new NamedQueryResourceProvider());
+ rs.setServerAddressStrategy(new HardcodedServerAddressStrategy("http://localhost/baseR4"));
ServerCapabilityStatementProvider sc = new ServerCapabilityStatementProvider();
rs.setServerConformanceProvider(sc);
@@ -747,6 +751,7 @@ public class ServerCapabilityStatementProviderR5Test {
public void testExtendedOperationAtTypeLevel() throws Exception {
RestfulServer rs = new RestfulServer(ourCtx);
rs.setProviders(new TypeLevelOperationProvider());
+ rs.setServerAddressStrategy(new HardcodedServerAddressStrategy("http://localhost/baseR4"));
ServerCapabilityStatementProvider sc = new ServerCapabilityStatementProvider();
rs.setServerConformanceProvider(sc);
diff --git a/hapi-fhir-validation-resources-r4/src/main/resources/org/hl7/fhir/r4/model/profile/profiles-others.xml b/hapi-fhir-validation-resources-r4/src/main/resources/org/hl7/fhir/r4/model/profile/profiles-others.xml
index 13923995c7c..3ae8cf7c17f 100644
--- a/hapi-fhir-validation-resources-r4/src/main/resources/org/hl7/fhir/r4/model/profile/profiles-others.xml
+++ b/hapi-fhir-validation-resources-r4/src/main/resources/org/hl7/fhir/r4/model/profile/profiles-others.xml
@@ -352,9 +352,7 @@
-
+
@@ -397,11 +395,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -1731,9 +1725,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -1916,9 +1908,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -2135,9 +2125,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -2346,9 +2334,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -2557,9 +2543,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -3199,9 +3183,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -4680,7 +4662,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -5069,9 +5051,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -5489,9 +5469,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -5773,9 +5751,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -6257,9 +6233,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -6677,9 +6651,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -6961,9 +6933,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -7596,9 +7566,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -8385,9 +8353,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -9110,9 +9076,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -9155,11 +9119,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -10545,9 +10505,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -11012,9 +10970,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -11534,9 +11490,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -12275,9 +12229,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -12611,9 +12563,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -12806,9 +12756,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -13706,9 +13654,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -14186,9 +14132,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -14518,9 +14462,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -14845,9 +14787,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -15543,9 +15483,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -16577,9 +16515,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -16653,15 +16589,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -16937,9 +16865,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -17187,11 +17113,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -17420,9 +17342,7 @@ The value may come from the ElementDefinition referred to by .definition.">
-
+
@@ -17648,9 +17568,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -18156,9 +18074,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -18201,11 +18117,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -18869,9 +18781,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -18945,9 +18855,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -19091,9 +18999,7 @@ The Value Set Definition specification defines an ActiveOnly element, which is t
-
+
@@ -19297,9 +19203,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -19493,9 +19397,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -19733,9 +19635,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -19937,9 +19837,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -20029,9 +19927,7 @@ Expansion.parameter is a simplified list of parameters - a subset of the featur
-
+
@@ -20270,9 +20166,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -20495,9 +20389,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -21169,9 +21061,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -21214,11 +21104,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -22144,9 +22030,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -22981,9 +22865,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -23026,11 +22908,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -23683,9 +23561,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -23887,9 +23763,7 @@ Most code systems occasionally refine the displays defined for concepts between
-
+
@@ -24133,9 +24007,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -24380,9 +24252,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -24592,9 +24462,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -24829,9 +24697,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -25445,9 +25311,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -26441,9 +26305,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -27179,9 +27041,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -27315,9 +27175,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -27608,9 +27466,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -27756,7 +27612,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -27803,7 +27659,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -28052,9 +27908,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -28134,7 +27988,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -28222,9 +28076,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -29305,9 +29157,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -29999,9 +29849,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -30132,9 +29980,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -30420,9 +30266,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -30568,7 +30412,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -30615,7 +30459,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -30869,9 +30713,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -30951,7 +30793,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -31039,9 +30881,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -31304,52 +31144,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -31735,9 +31530,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -32918,9 +32711,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -33053,9 +32844,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -33341,9 +33130,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -33489,7 +33276,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -33536,7 +33323,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -33798,9 +33585,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -33881,7 +33666,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -33979,9 +33764,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -34367,7 +34150,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -34754,9 +34537,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -36711,9 +36492,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -36846,9 +36625,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -37134,9 +36911,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -37282,7 +37057,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -37329,7 +37104,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -37591,9 +37366,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -37674,7 +37447,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -37772,9 +37545,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -38017,7 +37788,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -38404,9 +38175,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -40065,9 +39834,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -40200,9 +39967,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -40488,9 +40253,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -40636,7 +40399,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -40683,7 +40446,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -40946,9 +40709,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -41029,7 +40790,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -41127,9 +40888,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -41327,7 +41086,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -41714,9 +41473,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -43671,9 +43428,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -43806,9 +43561,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -44094,9 +43847,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -44242,7 +43993,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -44289,7 +44040,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -44551,9 +44302,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -44634,7 +44383,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -44732,9 +44481,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -44977,7 +44724,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -45364,9 +45111,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -47314,9 +47059,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -47449,9 +47192,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -47737,9 +47478,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -47885,7 +47624,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -47932,7 +47671,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -48194,9 +47933,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -48277,7 +48014,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -48375,9 +48112,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -48613,7 +48348,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -49000,9 +48735,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -50950,9 +50683,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -51085,9 +50816,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -51373,9 +51102,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -51521,7 +51248,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -51568,7 +51295,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -51830,9 +51557,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -51913,7 +51638,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -52011,9 +51736,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -52249,7 +51972,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -52636,9 +52359,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -54593,9 +54314,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -54728,9 +54447,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -55016,9 +54733,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -55164,7 +54879,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -55211,7 +54926,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -55473,9 +55188,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -55556,7 +55269,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -55654,9 +55367,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -55899,7 +55610,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -56286,9 +55997,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -58243,9 +57952,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -58378,9 +58085,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -58666,9 +58371,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -58814,7 +58517,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -58861,7 +58564,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -59123,9 +58826,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -59206,7 +58907,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -59304,9 +59005,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -59549,19 +59248,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -59948,9 +59635,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -61898,9 +61583,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -62033,9 +61716,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -62321,9 +62002,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -62469,7 +62148,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -62516,7 +62195,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -62778,9 +62457,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -62861,7 +62538,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -62959,9 +62636,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -63197,7 +62872,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -63584,9 +63259,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -65534,9 +65207,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -65669,9 +65340,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -65957,9 +65626,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -66105,7 +65772,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -66152,7 +65819,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -66414,9 +66081,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -66497,7 +66162,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -66595,9 +66260,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -66835,7 +66498,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -67222,9 +66885,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -68907,9 +68568,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -69042,9 +68701,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -69330,9 +68987,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -69478,7 +69133,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -69525,7 +69180,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -69800,9 +69455,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -69883,7 +69536,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -69981,9 +69634,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -70223,9 +69874,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -70308,7 +69957,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -71117,9 +70766,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -71359,9 +71006,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -71442,7 +71087,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -72251,9 +71896,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -73002,9 +72645,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -73047,11 +72688,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -74592,9 +74229,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -74637,11 +74272,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -76146,9 +75777,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -77140,9 +76769,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -77858,9 +77485,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -78851,9 +78476,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -78986,9 +78609,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -79276,9 +78897,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -79447,7 +79066,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -79494,7 +79113,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -79748,9 +79367,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -79830,7 +79447,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -79918,9 +79535,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -80597,9 +80212,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -81323,9 +80936,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -81458,9 +81069,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -81748,9 +81357,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -81898,7 +81505,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -81945,7 +81552,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -82199,9 +81806,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -82281,7 +81886,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -82369,9 +81974,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -82993,9 +82596,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -83719,9 +83320,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -83854,9 +83453,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -84144,9 +83741,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -84316,7 +83911,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -84363,7 +83958,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -84617,9 +84212,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -84699,7 +84292,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -84787,9 +84380,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -85418,9 +85009,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -86137,9 +85726,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -86272,9 +85859,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -86562,9 +86147,7 @@ If the use case requires BodySite to be handled as a separate resource (e.g. to
-
+
@@ -86733,7 +86316,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -86780,7 +86363,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -87034,9 +86617,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -87116,7 +86697,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -87204,9 +86785,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -87957,9 +87536,7 @@ The alternate way is to use the value element for actual observations and use th
-
+
@@ -88747,9 +88324,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -89487,8 +89062,8 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
-
+
+
@@ -89522,9 +89097,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -90312,9 +89885,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -90572,8 +90143,8 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
-
+
+
@@ -90936,9 +90507,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -90981,11 +90550,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -91885,11 +91450,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -92282,9 +91843,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -92650,9 +92209,7 @@ The base Composition is a general resource for compositions or documents about a
-
+
@@ -92741,9 +92298,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -93294,9 +92849,7 @@ Some reporting work flows require that the original narrative of a final documen
-
+
@@ -93601,9 +93154,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -93837,9 +93388,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -94114,9 +93663,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -94198,9 +93745,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -94977,9 +94522,7 @@ If the section has content (instead of sub-sections), the section.code does not
-
+
@@ -95068,9 +94611,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -95622,9 +95163,7 @@ Some reporting work flows require that the original narrative of a final documen
-
+
@@ -95929,9 +95468,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -96165,9 +95702,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -96444,9 +95979,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -96528,9 +96061,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -97317,9 +96848,7 @@ If the section has content (instead of sub-sections), the section.code does not
-
+
@@ -97362,11 +96891,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -98423,9 +97948,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -98749,9 +98272,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -98978,9 +98499,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -99270,9 +98789,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -99431,9 +98948,7 @@ In addition, because the subject needs to be resolved during realization, use of
-
+
@@ -99677,9 +99192,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -99938,9 +99451,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -100401,9 +99912,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -100955,9 +100464,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -101000,11 +100507,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -102049,9 +101552,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -102375,9 +101876,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -102604,9 +102103,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -102896,9 +102393,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -103057,9 +102552,7 @@ In addition, because the subject needs to be resolved during realization, use of
-
+
@@ -103303,9 +102796,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -103564,9 +103055,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -104027,9 +103516,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -104544,9 +104031,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -104589,11 +104074,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -105638,9 +105119,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -105964,9 +105443,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -106193,9 +105670,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -106488,9 +105963,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -106651,9 +106124,7 @@ In addition, because the subject needs to be resolved during realization, use of
-
+
@@ -106897,9 +106368,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -107160,9 +106629,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -107626,9 +107093,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -108439,9 +107904,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -110014,10 +109477,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -110198,8 +109658,7 @@ This element should only be used on child elements of complex data elements.">
-
+
@@ -110443,17 +109902,7 @@ This element should only be used on child elements of complex data elements.">
-
+
@@ -112550,9 +111999,7 @@ When pattern[x] is used to constrain a complex object, it means that each proper
-
+
@@ -112961,8 +112408,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -112981,9 +112427,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -113100,9 +112544,7 @@ For example, an activity may be initiated by one user for other users or involve
-
+
@@ -113474,10 +112916,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -113680,9 +113119,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -113853,9 +113290,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -113970,9 +113405,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -114269,9 +113702,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -114796,9 +114227,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -115380,9 +114809,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -115856,9 +115283,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -116177,9 +115602,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
diff --git a/hapi-fhir-validation-resources-r4/src/main/resources/org/hl7/fhir/r4/model/profile/profiles-resources.xml b/hapi-fhir-validation-resources-r4/src/main/resources/org/hl7/fhir/r4/model/profile/profiles-resources.xml
index 6aec96eb64f..28dd40efcad 100644
--- a/hapi-fhir-validation-resources-r4/src/main/resources/org/hl7/fhir/r4/model/profile/profiles-resources.xml
+++ b/hapi-fhir-validation-resources-r4/src/main/resources/org/hl7/fhir/r4/model/profile/profiles-resources.xml
@@ -8970,12 +8970,7 @@
-
+
@@ -21157,11 +21152,7 @@ Requires the near-distance parameter to be provided also">
-
+
@@ -21250,15 +21241,7 @@ If the capability statements can be successfully compared, then the return value
-
+
@@ -21572,22 +21555,7 @@ If the capability statements match by these rules, then the return value is a 20
-
+
@@ -21849,9 +21817,7 @@ The find-matches operation is still preliminary. The interface can be expected t
-
+
@@ -22110,9 +22076,7 @@ When invoking this operation, a client SHALL provide both a system and a code, e
-
+
@@ -22215,9 +22179,7 @@ When invoking this operation, a client SHALL provide both a and codes, either as
-
+
@@ -22292,9 +22254,7 @@ When invoking this operation, a client SHALL provide one (and only one) of the p
-
+
@@ -22375,13 +22335,7 @@ Note that. 'abstract' is a property defined by many HL7 code systems that indica
-
+
@@ -22506,11 +22460,7 @@ Notes:
-
+
@@ -22795,20 +22745,9 @@ The operation returns a set of parameters including a 'result' for whether there
-
+
-
+
@@ -22881,18 +22820,7 @@ The _since parameter is provided to support periodic queries to get additional i
-
+
@@ -23515,16 +23443,7 @@ The _since parameter is provided to support periodic queries to get additional i
-
+
@@ -23587,48 +23506,9 @@ The _since parameter is provided to support periodic queries to get additional i
-
+
-
+
@@ -23699,18 +23579,9 @@ The following rules apply when using the $process-message operation asynchronous
-
+
-
+
@@ -23776,44 +23647,9 @@ If the server wishes, it can also look through all code systems and value sets i
-
+
-
+
@@ -23868,30 +23704,9 @@ The set of returned observations should represent distinct real world observatio
-
+
-
+
@@ -23909,7 +23724,7 @@ The set of returned observations should represent distinct real world observatio
-
+
@@ -24018,22 +23833,9 @@ The set of returned observations should represent distinct real world observatio
-
+
-
+
@@ -24120,9 +23922,7 @@ The _since parameter is provided to support periodic queries to get additional i
-
+
@@ -24379,21 +24179,7 @@ To ask an MPI to match a patient, clients use the "$match" operation,
-
+
@@ -24504,9 +24290,7 @@ Implementers are encouraged to provide feedback to HL7 about their use of this o
-
+
@@ -24561,11 +24345,7 @@ For the purposes of graphQL compatibility, this operation can also be invoked us
-
+
@@ -24729,24 +24509,9 @@ For the purposes of graphQL compatibility, this operation can also be invoked us
-
+
-
+
@@ -24821,11 +24586,7 @@ Future versions of this specifcation may add additional validation parameters. A
-
+
@@ -24909,9 +24670,7 @@ This operation is intended to enable auto-generation of simple interfaces for ar
-
+
@@ -25044,21 +24803,9 @@ If the operation is not called at the instance level, either *definition* or *ur
-
+
-
+
@@ -25100,12 +24847,7 @@ When a server cannot correctly expand a value set because it does not fully unde
-
+
@@ -25113,14 +24855,7 @@ The purpose is to inform the server whether to use the value set associated with
-
+
@@ -25288,9 +25023,7 @@ Text Search engines such as Lucene or Solr, long with their considerable functio
-
+
@@ -25390,9 +25123,7 @@ If the operation is not called at the instance level, one of the in parameters u
-
+
@@ -26039,9 +25770,7 @@ Note that. 'abstract' is a property defined by many HL7 code systems that indica
-
+
@@ -26318,10 +26047,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -26416,9 +26142,7 @@ Where the order is important, a local/jurisdictional extension may be defined to
-
+
@@ -26461,9 +26185,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -26681,9 +26403,7 @@ A coverage may only be responsible for specific types of charges, and the sequen
-
+
@@ -27009,10 +26729,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -27027,9 +26744,7 @@ Where the order is important, a local/jurisdictional extension may be defined to
-
+
@@ -27535,9 +27250,7 @@ A coverage may only be responsible for specific types of charges, and the sequen
-
+
@@ -27580,11 +27293,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -28959,9 +28668,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -29427,9 +29134,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -29557,11 +29262,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -30897,9 +30598,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -31534,9 +31233,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -31703,9 +31400,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -32754,9 +32449,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -32838,8 +32531,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -33077,7 +32769,7 @@ The data type is CodeableConcept because clinicalStatus has some clinical judgme
-
+
@@ -33117,7 +32809,7 @@ The data type is CodeableConcept because clinicalStatus has some clinical judgme
-
+
@@ -33519,9 +33211,7 @@ The data type is CodeableConcept because clinicalStatus has some clinical judgme
-
+
@@ -33874,8 +33564,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -34045,7 +33734,7 @@ The data type is CodeableConcept because clinicalStatus has some clinical judgme
-
+
@@ -34071,7 +33760,7 @@ The data type is CodeableConcept because clinicalStatus has some clinical judgme
-
+
@@ -34810,9 +34499,7 @@ The data type is CodeableConcept because clinicalStatus has some clinical judgme
-
+
@@ -34900,9 +34587,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -35240,7 +34925,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -35560,7 +35245,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -35787,9 +35472,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -35833,7 +35516,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -36041,9 +35724,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -36155,9 +35836,7 @@ The duration (usually in minutes) could also be provided to indicate the length
-
+
@@ -36383,7 +36062,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -36585,7 +36264,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -36687,7 +36366,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -36824,9 +36503,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -37223,9 +36900,7 @@ The duration (usually in minutes) could also be provided to indicate the length
-
+
@@ -37418,7 +37093,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -37721,7 +37396,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -38220,9 +37895,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -38626,8 +38299,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -38646,9 +38318,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -38765,9 +38435,7 @@ For example, an activity may be initiated by one user for other users or involve
-
+
@@ -39135,10 +38803,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -39340,9 +39005,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -39510,9 +39173,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -39627,9 +39288,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -39922,9 +39581,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -40445,9 +40102,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -40840,8 +40495,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -40860,9 +40514,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -41120,10 +40772,7 @@ For example, an activity may be initiated by one user for other users or involve
-
+
@@ -41294,9 +40943,7 @@ For example, an activity may be initiated by one user for other users or involve
-
+
@@ -42132,9 +41779,7 @@ For example, an activity may be initiated by one user for other users or involve
-
+
@@ -42210,9 +41855,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -42404,9 +42047,7 @@ This element is labeled as a modifier because it defines the meaning of the reso
-
+
@@ -42570,11 +42211,7 @@ This element is labeled as a modifier because it defines the meaning of the reso
-
+
@@ -42814,11 +42451,7 @@ This element is labeled as a modifier because it defines the meaning of the reso
-
+
@@ -42930,8 +42563,7 @@ This element is labeled as a modifier because it defines the meaning of the reso
-
+
@@ -42957,8 +42589,7 @@ into another (possibly the same) biological entity.">
-
+
@@ -43240,9 +42871,7 @@ into another (possibly the same) biological entity.">
-
+
@@ -43588,9 +43217,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -43806,9 +43433,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -44054,9 +43679,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -44243,9 +43866,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -44398,8 +44019,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -45079,9 +44699,7 @@ into another (possibly the same) biological entity.">
-
+
@@ -46062,17 +45680,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -46133,11 +45741,7 @@ The timestamp value should be greater than the lastUpdated and other timestamps
-
+
@@ -46228,9 +45832,7 @@ This specification defines some specific uses of Bundle.link for [searching](sea
-
+
@@ -46429,9 +46031,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -46497,12 +46097,8 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
-
+
+
@@ -46636,9 +46232,7 @@ Note that the fullUrl is not the same as the canonical URL - it's an absolute ur
-
+
@@ -46716,9 +46310,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -46835,9 +46427,7 @@ See [Patient Match](patient-operation-match.html) for the EMPI search which rela
-
+
@@ -47131,9 +46721,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -47279,9 +46867,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -47457,17 +47043,7 @@ This outcome is not used for error responses in batch/transaction, only for hint
-
+
@@ -47500,11 +47076,7 @@ The timestamp value should be greater than the lastUpdated and other timestamps
-
+
@@ -47572,12 +47144,8 @@ This specification defines some specific uses of Bundle.link for [searching](sea
-
-
+
+
@@ -47632,9 +47200,7 @@ Note that the fullUrl is not the same as the canonical URL - it's an absolute ur
-
+
@@ -47791,9 +47357,7 @@ See [Patient Match](patient-operation-match.html) for the EMPI search which rela
-
+
@@ -48238,9 +47802,7 @@ This outcome is not used for error responses in batch/transaction, only for hint
-
+
@@ -48283,11 +47845,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -48810,9 +48368,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -48842,9 +48398,7 @@ Many [Implementation Guides](http://fhir.org/guides/registry) define additional
-
+
@@ -48962,9 +48516,7 @@ A capability statement that imports another CapabilityStatement automatically in
-
+
@@ -49176,9 +48728,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -49537,9 +49087,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -49734,9 +49282,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -49962,9 +49508,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -50220,9 +49764,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -50737,9 +50279,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -50898,9 +50438,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -50991,9 +50529,7 @@ If an operation that is listed in multiple CapabilityStatement.rest.resource.ope
-
+
@@ -51208,9 +50744,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -51482,9 +51016,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -51619,9 +51151,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -51865,9 +51395,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -52064,9 +51592,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -52265,11 +51791,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -52580,9 +52102,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -52598,9 +52118,7 @@ Many [Implementation Guides](http://fhir.org/guides/registry) define additional
-
+
@@ -53254,9 +52772,7 @@ A capability statement that imports another CapabilityStatement automatically in
-
+
@@ -53909,9 +53425,7 @@ If an operation that is listed in multiple CapabilityStatement.rest.resource.ope
-
+
@@ -54170,9 +53684,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -54782,8 +54294,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -54859,9 +54370,7 @@ NOTE: This is a list of contained Request-Event tuples!}">
-
+
@@ -55010,7 +54519,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -55151,9 +54660,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -55459,8 +54966,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -56039,9 +55545,7 @@ The unknown code is not to be used to convey other statuses. The unknown code s
-
+
@@ -56424,8 +55928,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -56496,7 +55999,7 @@ NOTE: This is a list of contained Request-Event tuples!}">
-
+
@@ -56699,8 +56202,7 @@ NOTE: This is a list of contained Request-Event tuples!}">
-
+
@@ -57310,9 +56812,7 @@ The unknown code is not to be used to convey other statuses. The unknown code s
-
+
@@ -57490,8 +56990,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -57695,9 +57194,7 @@ Allows for an organization to designate a team such as the PICC line team.">
-
+
@@ -57783,9 +57280,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -58115,8 +57610,7 @@ Member is optional because some participants may be known only by their role, pa
-
+
@@ -58226,9 +57720,7 @@ Allows for an organization to designate a team such as the PICC line team.">
-
+
@@ -58686,9 +58178,7 @@ Member is optional because some participants may be known only by their role, pa
-
+
@@ -59144,9 +58634,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -59804,9 +59292,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -59966,9 +59452,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -60354,9 +59838,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -61154,9 +60636,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -62150,9 +61630,7 @@ This element is labeled as a modifier because the status contains the code enter
-
+
@@ -62195,11 +61673,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -63082,9 +62556,7 @@ In some cases, the resource can no longer be found at the stated url, but the ur
-
+
@@ -63186,8 +62658,7 @@ Modifier extensions SHALL NOT change the meaning of any elements on Resource or
-
+
@@ -63311,9 +62782,7 @@ FHIRPath expressions can traverse into other resources linked from the ChargeIte