From c9b576d979a01dfdc8a4ce40b79b64acca52a327 Mon Sep 17 00:00:00 2001 From: Brenin Rhodes Date: Thu, 2 Oct 2025 09:34:32 -0600 Subject: [PATCH] fix config --- .../fhir/jpa/starter/mcp/McpServerConfig.java | 2 +- src/main/resources/cds.application.yaml | 529 ++++++++++-------- 2 files changed, 307 insertions(+), 224 deletions(-) diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/mcp/McpServerConfig.java b/src/main/java/ca/uhn/fhir/jpa/starter/mcp/McpServerConfig.java index 2cb3350..fd6652c 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/mcp/McpServerConfig.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/mcp/McpServerConfig.java @@ -51,7 +51,7 @@ public class McpServerConfig { @Bean @ConditionalOnProperty( - prefix = "hapi.fhir.cr", + prefix = "hapi.fhir.cdshooks", name = {"enabled"}, havingValue = "true") public McpCdsBridge mcpCdsBridge(FhirContext fhirContext, ICdsServiceRegistry cdsServiceRegistry) { diff --git a/src/main/resources/cds.application.yaml b/src/main/resources/cds.application.yaml index c889fcd..82f2f8a 100644 --- a/src/main/resources/cds.application.yaml +++ b/src/main/resources/cds.application.yaml @@ -1,17 +1,22 @@ -#Uncomment the "servlet" and "context-path" lines below to make the fhir endpoint available at /example/path/fhir instead of the default value of /fhir +# ------------------------------------------------------------------------------------- +# Server & Spring Boot +# ------------------------------------------------------------------------------------- server: - # servlet: - # context-path: /example/path + # Uncomment to serve FHIR under a non-default context path (e.g., /example/path/fhir) + # servlet: + # context-path: /example/path port: 8080 -#Adds the option to go to e.g. http://localhost:8080/actuator/health for seeing the running configuration -#see https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints + tomcat: + # allow | as a separator in URLs + relaxed-query-chars: "|" + management: - #The following configuration will enable the actuator endpoints at /actuator/health, /actuator/info, /actuator/prometheus, /actuator/metrics. For security purposes, only /actuator/health is enabled by default. + # Actuator endpoints: only /actuator/health exposed by default endpoints: enabled-by-default: false web: exposure: - include: 'health' # or e.g. 'info,health,prometheus,metrics' or '*' for all + include: "health" # or "info,health,prometheus,metrics" or "*" for all endpoint: info: enabled: true @@ -23,74 +28,166 @@ management: enabled: true group: liveness: - include: - - livenessState - - readinessState + include: [ "livenessState", "readinessState" ] prometheus: enabled: true prometheus: metrics: export: enabled: true + spring: + # ------------------------------------------------------------------------------- + # A. Spring AI — Model Context Protocol (MCP) + # ------------------------------------------------------------------------------- + ai: + # Run e.g. `npx @modelcontextprotocol/inspector` and connect to http://localhost:8080/mcp/messages using Streamable HTTP + + # Add the following to the MCP server settings file in e.g. cursor or claude (Desktop applications) for local debugging: + # cursor: + # { + # "mcpServers": { + # "hapi": { + # "url": "http://localhost:8080/mcp/messages" + # } + # } + # } + # or claude: + # { + # "mcpServers": { + # "hapi": { + # "command": "npx", + # "args": [ + # "mcp-remote@latest", + # "http://localhost:8080/mcp/messages" + # ] + # } + # } + # } + + mcp: + server: + name: FHIR MCP Server + version: 1.0.0 + instructions: "This server provides access to a FHIR RESTful API. You can use it to query FHIR resources, perform operations, and retrieve data in a structured format." + enabled: true + streamable-http: + mcp-endpoint: /mcp/messages + + + # ------------------------------------------------------------------------------- + # B. Core Spring + # ------------------------------------------------------------------------------- main: + allow-bean-definition-overriding: false allow-circular-references: true - allow-bean-definition-overriding: true + + autoconfigure: + # This exclude is only needed for setups not using Elasticsearch where the elasticsearch sniff is not needed. + exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration + flyway: enabled: false - baselineOnMigrate: true + baseline-on-migrate: true fail-on-missing-locations: false + datasource: - #url: 'jdbc:h2:file:./target/database/h2' + # url: "jdbc:h2:file:./target/database/h2" url: jdbc:h2:mem:test_mem username: sa password: null - driverClassName: org.h2.Driver - max-active: 15 - - # database connection pool size + driver-class-name: org.h2.Driver + # max-active: 15 # (ignored with HikariCP; use hikari.maximum-pool-size) hikari: maximum-pool-size: 10 + jpa: properties: hibernate: format_sql: false show_sql: false - - #Hibernate dialect is automatically detected except Postgres and H2. - #If using H2, then supply the value of ca.uhn.fhir.jpa.model.dialect.HapiFhirH2Dialect - #If using postgres, then supply the value of ca.uhn.fhir.jpa.model.dialect.HapiFhirPostgres94Dialect + # Hibernate dialect is auto-detected except for H2/Postgres. + # If using H2: ca.uhn.fhir.jpa.model.dialect.HapiFhirH2Dialect + # If using Postgres: ca.uhn.fhir.jpa.model.dialect.HapiFhirPostgresDialect dialect: ca.uhn.fhir.jpa.model.dialect.HapiFhirH2Dialect - # hibernate.hbm2ddl.auto: update - # hibernate.jdbc.batch_size: 20 - # hibernate.cache.use_query_cache: false - # hibernate.cache.use_second_level_cache: false - # hibernate.cache.use_structured_entries: false - # hibernate.cache.use_minimal_puts: false - ### These settings will enable fulltext search with lucene or elastic + # --- Optional Hibernate DDL & tuning (commented out from source) --- + hbm2ddl: + auto: update + jdbc: + batch_size: 20 + cache: + use_query_cache: false + use_second_level_cache: false + use_structured_entries: false + use_minimal_puts: false + # --- Hibernate Search (Lucene/Elasticsearch) --- search: - enabled: true - ### lucene parameters - # hibernate.search.backend.type: lucene - # hibernate.search.backend.analysis.configurer: ca.uhn.fhir.jpa.search.HapiHSearchAnalysisConfigurers$HapiLuceneAnalysisConfigurer - # hibernate.search.backend.directory.type: local-filesystem - # hibernate.search.backend.directory.root: target/lucenefiles - # hibernate.search.backend.lucene_version: lucene_current - ### elastic parameters ===> see also elasticsearch section below <=== -# hibernate.search.backend.type: elasticsearch -# hibernate.search.backend.analysis.configurer: ca.uhn.fhir.jpa.search.HapiHSearchAnalysisConfigurers$HapiElasticAnalysisConfigurer - autoconfigure: - # This exclude is only needed for setups not using Elasticsearch where the elasticsearch sniff is not needed. - exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration + enabled: false + # Lucene backend (default example) + # backend: + # type: lucene + # analysis: + # configurer: ca.uhn.fhir.jpa.search.HapiHSearchAnalysisConfigurers$HapiLuceneAnalysisConfigurer + # directory: + # type: local-filesystem + # root: target/lucenefiles + # lucene_version: lucene_current + # Elasticsearch backend (alternative) — see also hapi.fhir.elasticsearch section in docs + # backend: + # type: elasticsearch + # analysis: + # configurer: ca.uhn.fhir.jpa.search.HapiHSearchAnalysisConfigurers$HapiElasticAnalysisConfigurer +# ------------------------------------------------------------------------------------- +# HAPI FHIR — grouped by domain +# ------------------------------------------------------------------------------------- hapi: fhir: - ### This flag when enabled to true, will avail evaluate measure operations from CR Module. - ### Flag is false by default, can be passed as command line argument to override. + + # ------------------------------------------------------------------------------- + # A. Core Server & API + # ------------------------------------------------------------------------------- + openapi_enabled: true # Swagger UI at /fhir/swagger-ui/index.html; API docs at /fhir/api-docs + fhir_version: R4 # DSTU2 | DSTU3 | R4 | R5 + # use_apache_address_strategy: false + # use_apache_address_strategy_https: false + # custom_content_path: ./custom # folder name must be 'custom' + # app_content_path: ./configs/app # served under /web/app + # server_address: http://hapi.fhir.org/baseR4 + # defer_indexing_for_codesystems_of_size: 101 + + # ------------------------------------------------------------------------------- + # B. Implementation Guides (IG) & Package Install + # ------------------------------------------------------------------------------- + ig_runtime_upload_enabled: false + # validate_resource_status_for_package_upload: false # default true + # install_transitive_ig_dependencies: true + # implementationguides: + # swiss: + # name: swiss.mednet.fhir + # version: 0.8.0 + # reloadExisting: false + # installMode: STORE_AND_INSTALL + # ips_1_0_0: + # packageUrl: https://costateixeira.github.io/smart-ips-pilgrimage-fulltest/package.tgz + # name: smart.who.int.ips-pilgrimage-test + # version: 0.1.0 + # installMode: STORE_AND_INSTALL + # additionalResourceFolders: + # - example + # - example2 + # supported_resource_types: + # - Patient + # - Observation + # allowed_bundle_types: COLLECTION,DOCUMENT,MESSAGE,TRANSACTION,TRANSACTIONRESPONSE,BATCH,BATCHRESPONSE,HISTORY,SEARCHSET + + # ------------------------------------------------------------------------------- + # C. Clinical Reasoning / CQL / Care Gaps / CDS Hooks + # ------------------------------------------------------------------------------- cr: - enabled: true + enabled: true # exposes Clinical Reasoning operation endpoints caregaps: reporter: "default" section_author: "default" @@ -102,8 +199,7 @@ hapi: cql: use_embedded_libraries: true compiler: - ### These are low-level compiler options. - ### They are not typically needed by most users. + # low-level compiler options (typically not needed) # validate_units: true # verify_only: false # compatibility_level: "1.5" @@ -128,113 +224,84 @@ hapi: debug_logging_enabled: false # enable_validation: false # enable_expression_caching: true - terminology: - valueset_preexpansion_mode: REQUIRE # USE_IF_PRESENT, REQUIRE, IGNORE - valueset_expansion_mode: PERFORM_NAIVE_EXPANSION # AUTO, USE_EXPANSION_OPERATION, PERFORM_NAIVE_EXPANSION - valueset_membership_mode: USE_EXPANSION # AUTO, USE_VALIDATE_CODE_OPERATION, USE_EXPANSION - code_lookup_mode: USE_CODESYSTEM_URL # AUTO, USE_VALIDATE_CODE_OPERATION, USE_CODESYSTEM_URL - data: - search_parameter_mode: USE_SEARCH_PARAMETERS # AUTO, USE_SEARCH_PARAMETERS, FILTER_IN_MEMORY - terminology_parameter_mode: FILTER_IN_MEMORY # AUTO, USE_VALUE_SET_URL, USE_INLINE_CODES, FILTER_IN_MEMORY - profile_mode: DECLARED # ENFORCED, DECLARED, OPTIONAL, TRUST, OFF - + terminology: + valueset_preexpansion_mode: REQUIRE # USE_IF_PRESENT | REQUIRE | IGNORE + valueset_expansion_mode: PERFORM_NAIVE_EXPANSION # AUTO | USE_EXPANSION_OPERATION | PERFORM_NAIVE_EXPANSION + valueset_membership_mode: USE_EXPANSION # AUTO | USE_VALIDATE_CODE_OPERATION | USE_EXPANSION + code_lookup_mode: USE_CODESYSTEM_URL # AUTO | USE_VALIDATE_CODE_OPERATION | USE_CODESYSTEM_URL + data: + search_parameter_mode: USE_SEARCH_PARAMETERS # AUTO | USE_SEARCH_PARAMETERS | FILTER_IN_MEMORY + terminology_parameter_mode: FILTER_IN_MEMORY # AUTO | USE_VALUE_SET_URL | USE_INLINE_CODES | FILTER_IN_MEMORY + profile_mode: DECLARED # ENFORCED | DECLARED | OPTIONAL | TRUST | OFF cdshooks: enabled: true clientIdHeaderName: client_id - ### This enables the swagger-ui at /fhir/swagger-ui/index.html as well as the /fhir/api-docs (see https://hapifhir.io/hapi-fhir/docs/server_plain/openapi.html) - openapi_enabled: true - ### This is the FHIR version. Choose between, DSTU2, DSTU3, R4 or R5 - fhir_version: R4 - ### Flag is false by default. This flag enables runtime installation of IG's. - ig_runtime_upload_enabled: false - ### This flag when enabled to true, will avail evaluate measure operations from CR Module. - - ### enable to use the ApacheProxyAddressStrategy which uses X-Forwarded-* headers - ### to determine the FHIR server address - # use_apache_address_strategy: false - ### forces the use of the https:// protocol for the returned server address. - ### alternatively, it may be set using the X-Forwarded-Proto header. - # use_apache_address_strategy_https: false - ### enables the server to overwrite defaults on HTML, css, etc. under the url pattern of e.g. /content/custom ** - ### Folder with custom content MUST be named custom. If omitted then default content applies - #custom_content_path: ./custom - ### enables the server host custom content. If e.g. the value ./configs/app is supplied then the content - ### will be served under /web/app - #app_content_path: ./configs/app - ### enable to set the Server URL - # server_address: http://hapi.fhir.org/baseR4 - # defer_indexing_for_codesystems_of_size: 101 - ### Flag is true by default. This flag filters resources during package installation, allowing only those resources with a valid status (e.g. active) to be installed. - # validate_resource_status_for_package_upload: false - # install_transitive_ig_dependencies: true - #implementationguides: - ### example from registry (packages.fhir.org) - # swiss: - # name: swiss.mednet.fhir - # version: 0.8.0 - # reloadExisting: false - # installMode: STORE_AND_INSTALL - # example not from registry - # ips_1_0_0: - # packageUrl: https://build.fhir.org/ig/HL7/fhir-ips/package.tgz - # name: hl7.fhir.uv.ips - # version: 1.0.0 - # supported_resource_types: - # - Patient - # - Observation - ################################################## - # Allowed Bundle Types for persistence (defaults are: COLLECTION,DOCUMENT,MESSAGE) - ################################################## - # allowed_bundle_types: COLLECTION,DOCUMENT,MESSAGE,TRANSACTION,TRANSACTIONRESPONSE,BATCH,BATCHRESPONSE,HISTORY,SEARCHSET - # allow_cascading_deletes: true - # allow_contains_searches: true - allow_external_references: true - # allow_multiple_delete: true - # allow_override_default_search_params: true - # auto_create_placeholder_reference_targets: false - ### tells the server to automatically append the current version of the target resource to references at these paths - # auto_version_reference_at_paths: Device.patient, Device.location, Device.parent, DeviceMetric.parent, DeviceMetric.source, Observation.device, Observation.subject - # ips_enabled: false - # default_encoding: JSON - # default_pretty_print: true - # default_page_size: 20 - # delete_expunge_enabled: true - # enable_repository_validating_interceptor: true - # enable_index_missing_fields: false - # enable_index_of_type: true - # enable_index_contained_resource: false - # resource_dbhistory_enabled: false - ### !!Extended Lucene/Elasticsearch Indexing is still an experimental feature, expect some features (e.g. _total=accurate) to not work as expected!! - ### more information here: https://hapifhir.io/hapi-fhir/docs/server_jpa/elastic.html + # ------------------------------------------------------------------------------- + # D. Search & Indexing + # ------------------------------------------------------------------------------- + # NOTE: Extended Lucene/Elasticsearch indexing is experimental. + # See https://hapifhir.io/hapi-fhir/docs/server_jpa/elastic.html advanced_lucene_indexing: false search_index_full_text_enabled: false + # language_search_parameter_enabled: true + # upliftedRefchains_enabled: true + # index_storage_optimized: false + # enable_index_missing_fields: false + # enable_index_of_type: true + # enable_index_contained_resource: false + # store_resource_in_lucene_index_enabled: true + + # ------------------------------------------------------------------------------- + # E. Bulk Operations + # ------------------------------------------------------------------------------- bulk_export_enabled: false bulk_import_enabled: false - # language_search_parameter_enabled: true - # enforce_referential_integrity_on_delete: false - # This is an experimental feature, and does not fully support _total and other FHIR features. - # enforce_referential_integrity_on_delete: false - # enforce_referential_integrity_on_write: false - # etag_support_enabled: true - # expunge_enabled: true - # client_id_strategy: ALPHANUMERIC - # server_id_strategy: SEQUENTIAL_NUMERIC - # fhirpath_interceptor_enabled: false - # filter_search_enabled: true - # graphql_enabled: true + + # ------------------------------------------------------------------------------- + # F. Write / Delete / Integrity + # ------------------------------------------------------------------------------- + # allow_cascading_deletes: true + # allow_contains_searches: true + # allow_external_references: true + # allow_multiple_delete: true + # allow_override_default_search_params: true + # auto_create_placeholder_reference_targets: false + # mass_ingestion_mode_enabled: false + # auto_version_reference_at_paths: Device.patient, Device.location, Device.parent, DeviceMetric.parent, DeviceMetric.source, Observation.device, Observation.subject + # client_id_strategy: ALPHANUMERIC + # server_id_strategy: SEQUENTIAL_NUMERIC + # enforce_referential_integrity_on_delete: false + # enforce_referential_integrity_on_write: false + # etag_support_enabled: true + # expunge_enabled: true + # fhirpath_interceptor_enabled: false + # filter_search_enabled: true + # graphql_enabled: true + + # ------------------------------------------------------------------------------- + # G. Narrative & Validation + # ------------------------------------------------------------------------------- narrative_enabled: false + # validation: + # requests_enabled: true + # responses_enabled: true + + # ------------------------------------------------------------------------------- + # H. MDM (Master Data Management) + # ------------------------------------------------------------------------------- mdm_enabled: false mdm_rules_json_location: "mdm-rules.json" - # local_base_urls: - # - https://hapi.fhir.org/baseR4 - - # pre_expand_value_sets: true - # enable_task_pre_expand_value_sets: true - # pre_expand_value_sets_default_count: 1000 - # pre_expand_value_sets_max_count: 1000 - # maximum_expansion_size: 1000 + # userRequestRetryVersionConflictsInterceptorEnabled: false + # ------------------------------------------------------------------------------- + # I. Terminology / ValueSet Expansion + # ------------------------------------------------------------------------------- + # pre_expand_value_sets: true + # enable_task_pre_expand_value_sets: true + # pre_expand_value_sets_default_count: 1000 + # pre_expand_value_sets_max_count: 1000 + # maximum_expansion_size: 1000 logical_urls: - http://terminology.hl7.org/* - https://terminology.hl7.org/* @@ -244,96 +311,112 @@ hapi: - https://unitsofmeasure.org/* - http://loinc.org/* - https://loinc.org/* - # partitioning: - # allow_references_across_partitions: false - # partitioning_include_in_search_hashes: false - # conditional_create_duplicate_identifiers_enabled: false + + # ------------------------------------------------------------------------------- + # J. Partitioning & Multitenancy + # ------------------------------------------------------------------------------- + # partitioning: + # allow_references_across_partitions: false + # partitioning_include_in_search_hashes: false + # default_partition_id: 0 + # database_partition_mode_enabled: true + # patient_id_partitioning_mode: true + # request_tenant_partitioning_mode: false + + # ------------------------------------------------------------------------------- + # K. CORS + # ------------------------------------------------------------------------------- cors: allow_Credentials: true - # These are allowed_origin patterns, see: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/cors/CorsConfiguration.html#setAllowedOriginPatterns-java.util.List- allowed_origin: - - '*' + - "*" - # Search coordinator thread pool sizes + # ------------------------------------------------------------------------------- + # L. Search Orchestration + # ------------------------------------------------------------------------------- search-coord-core-pool-size: 20 search-coord-max-pool-size: 100 search-coord-queue-capacity: 200 - + # Search Prefetch Thresholds. + # This setting sets the number of search results to prefetch. For example, if this list + # is set to [100, 1000, -1] then the server will initially load 100 results and not + # attempt to load more. If the user requests subsequent page(s) of results and goes + # past 100 results, the system will load the next 900 (up to the following threshold of 1000). + # The system will progressively work through these thresholds. + # A threshold of -1 means to load all results. Note that if the final threshold is a + # number other than -1, the system will never prefetch more than the given number. + # CSV list; -1 as final value means "all" + search_prefetch_thresholds: 13,503,2003,-1 + + # ------------------------------------------------------------------------------- + # M. Extensibility (custom beans / interceptors / providers) + # ------------------------------------------------------------------------------- # comma-separated package names, will be @ComponentScan'ed by Spring to allow for creating custom Spring beans - #custom-bean-packages: - - # comma-separated list of fully qualified interceptor classes. - # classes listed here will be fetched from the Spring context when combined with 'custom-bean-packages', - # or will be instantiated via reflection using a no-arg constructor; then registered with the server - #custom-interceptor-classes: - # comma-separated list of fully qualified provider classes. - # classes listed here will be fetched from the Spring context when combined with 'custom-bean-packages', - # or will be instantiated via reflection using a no-arg constructor; then registered with the server - #custom-provider-classes: - - # Threadpool size for BATCH'ed GETs in a bundle. - # bundle_batch_pool_size: 10 - # bundle_batch_pool_max_size: 50 + # custom-provider-classes: + # custom-interceptor-classes: + # custom-provider-classes: - # logger: - # error_format: 'ERROR - ${requestVerb} ${requestUrl}' - # format: >- - # Path[${servletPath}] Source[${requestHeader.x-forwarded-for}] - # Operation[${operationType} ${operationName} ${idOrResourceName}] - # UA[${requestHeader.user-agent}] Params[${requestParameters}] - # ResponseEncoding[${responseEncodingNoDefault}] - # log_exceptions: true - # name: fhirtest.access - # max_binary_size: 104857600 - # max_page_size: 200 - # retain_cached_searches_mins: 60 - # reuse_cached_search_results_millis: 60000 - tester: - home: - name: Local Tester - server_address: 'http://localhost:8080/fhir' - refuse_to_fetch_third_party_urls: false - fhir_version: R4 - global: - name: Global Tester - server_address: "http://hapi.fhir.org/baseR4" - refuse_to_fetch_third_party_urls: false - fhir_version: R4 - # validation: - # requests_enabled: true - # responses_enabled: true - # binary_storage_enabled: true + # store_meta_source_information: NONE + # bundle_batch_pool_size: 10 + # bundle_batch_pool_max_size: 50 + + # ------------------------------------------------------------------------------- + # N. Logging + # ------------------------------------------------------------------------------- + # logger: + # error_format: "ERROR - ${requestVerb} ${requestUrl}" + # format: >- + # Path[${servletPath}] Source[${requestHeader.x-forwarded-for}] + # Operation[${operationType} ${operationName} ${idOrResourceName}] + # UA[${requestHeader.user-agent}] Params[${requestParameters}] + # ResponseEncoding[${responseEncodingNoDefault}] + # log_exceptions: true + # name: fhirtest.access + + # ------------------------------------------------------------------------------- + # O. Storage / Pagination / Caching + # ------------------------------------------------------------------------------- + # max_binary_size: 104857600 + # max_page_size: 200 + # retain_cached_searches_mins: 60 + # reuse_cached_search_results_millis: 60000 inline_resource_storage_below_size: 4000 -# bulk_export_enabled: true -# subscription: -# resthook_enabled: true -# websocket_enabled: false -# email: -# from: some@test.com -# host: google.com -# port: -# username: -# password: -# auth: -# startTlsEnable: -# startTlsRequired: -# quitWait: -# lastn_enabled: true -# store_resource_in_lucene_index_enabled: true -### This is configuration for normalized quantity search level default is 0 -### 0: NORMALIZED_QUANTITY_SEARCH_NOT_SUPPORTED - default -### 1: NORMALIZED_QUANTITY_STORAGE_SUPPORTED -### 2: NORMALIZED_QUANTITY_SEARCH_SUPPORTED -# normalized_quantity_search_level: 2 -#elasticsearch: -# debug: -# pretty_print_json_log: false -# refresh_after_write: false -# enabled: false -# password: SomePassword -# required_index_status: YELLOW -# rest_url: 'localhost:9200' -# protocol: 'http' -# schema_management_strategy: CREATE -# username: SomeUsername + + # ------------------------------------------------------------------------------- + # P. Remote Terminology Service (disabled by default) + # ------------------------------------------------------------------------------- + # remote_terminology_service: + # all: + # system: "*" + # url: "https://tx.fhir.org/r4/" + # snomed: + # system: "http://snomed.info/sct" + # url: "https://tx.fhir.org/r4/" + # loinc: + # system: "http://loinc.org" + # url: "https://hapi.fhir.org/baseR4/" + + # ------------------------------------------------------------------------------- + # Q. Subscriptions (disabled by default) + # ------------------------------------------------------------------------------- + # subscription: + # resthook_enabled: true + # websocket_enabled: false + # polling_interval_ms: 5000 + # immediately_queued: false + # email: + # from: some@test.com + # host: google.com + # port: + # username: + # password: + # auth: + # startTlsEnable: + # startTlsRequired: + # quitWait: + + # ------------------------------------------------------------------------------- + # R. LastN (analytics) + # ------------------------------------------------------------------------------- + # lastn_enabled: true